Подтвердить что ты не робот

Вычислить Cyclomatic Complexity для Javascript

Существуют ли какие-либо инструменты для вычисления Cyclomatic Complexity в Javascript?

Я нашел это очень полезным показателем в прошлом, работая над кодом на стороне сервера, и хотел бы иметь возможность использовать его для клиентской Javascript, который я пишу.

4b9b3361

Ответ 1

Я работаю над инструментом анализа статического кода JavaScript, который делает циклическую сложность JavaScript для JavaScript. Вы можете попробовать онлайн-версию jsmeter здесь: http://jsmeter.info

Ответ 2

Я помог написать инструмент для анализа сложности программного обеспечения в проектах JavaScript:

complexity-report

В нем сообщается множество различных показателей сложности: строки кода, количество параметров, циклическая сложность, цикломатическая плотность, меры сложности Halstead, индекс ремонтопригодности, плотность первого порядка, стоимость изменения и размер ядра.

Он выпущен под лицензией MIT и построен с использованием Node.js и Esprima парсера JavaScript. Он может быть установлен через npm, например:

npm i -g complexity-report

Ответ 3

Для полноты ответов я искал один и тот же инструмент некоторое время назад и не нашел ничего хорошего для визуализации, поэтому написал plato

Примеры отчетов для:

Он использует фил-сложность-отчет (упомянутый выше), а также агрегирует данные из jshint (и, в конечном итоге, другие).

Ответ 4

Поскольку циклическая сложность вычисляется с учетом количества ключевых слов "if, switch, while for break" и т.д. все инструменты, которые работают с C, будут выполнять работу, например SourceMonitor: http://www.campwoodsw.com/sourcemonitor.html

Собственно, на javascript, чем больше вы пытаетесь модулировать свой код, тем больше вы его замедляете, так что возьмите его с солью;)

EDIT: Я На самом деле не могу понять, что происходит в этом ответе, я получаю еще один downvote, когда в своем ответе я говорю хороший инструмент для вычисления циклической сложности в javascript, и это особенно хорошо работает.

Во втором утверждении мой комментарий, который исходит из опыта, я никогда не говорю, не модулирую ваш код js, я только говорю, чтобы обратить на это внимание, потому что часто есть компромисс со скоростью, и когда я говорить о скорости, я имею в виду, что может произойти 2 разных замедления: во время загрузки и во время выполнения (и в медленном устройстве, таком как pda/smartphone, это важно).

Поскольку такие инструменты часто приводят разработчиков к написанию большего количества кода, пытаясь преследовать меньший индекс, но в js больше кода, к сожалению, означает, что замедление может произойти, а overuse этих инструментов плохо. Разумеется, эти инструменты могут дать вам подсказки , где, ваш код может быть улучшен, но вы должны освоить, как использовать инструмент, а не слепо, полагаться на него.

Итак, если вы снова запустите меня, напишите комментарий, в котором вы объясните, почему вы это делаете, обсуждение может только выиграть от этого, спасибо и извините за выход.

Ответ 5

JSHint недавно добавлена ​​поддержка для расчета кода метрики. Вы можете установить максимальные значения количество допустимых формальных параметров (maxparams), как глубоко вложенные блоки кода должны быть ( maxdepth), количество утверждений, разрешенных за ( maxstatements), а также максимальная циклическая сложность ( maxcomplexity > ).

Максимальное количество формальных параметров, разрешенных для каждой функции

/*jshint maxparams:3 */

function login(request, onSuccess) {
  // ...
}

// JSHint: Too many parameters per function (4).
function logout(request, isManual, whereAmI, onSuccess) {
  // ...
}

Максимальное количество вложенных кодовых блоков, разрешенных для каждой функции

/*jshint maxdepth:2 */

function main(meaning) {
  var day = true;

  if (meaning === 42) {
    while (day) {
      shuffle();

      if (tired) { // JSHint: Blocks are nested too deeply (3).
          sleep();
      }
    }
  }
}

Максимальное количество разрешений для каждой функции

/*jshint maxstatements:4 */

function main() {
  var i = 0;
  var j = 0;

  // Function declarations count as one statement. Their bodies
  // don't get taken into account for the outer function.
  function inner() {
    var i2 = 1;
    var j2 = 1;

    return i2 + j2;
  }

  j = i + j;
  return j; // JSHint: Too many statements per function. (5)
}

Ответ 6

Новая версия http://jshint.com отсутствует и имеет очень хороший калькулятор циклической сложности

Ответ 7

Вы можете использовать инструмент ccm из http://www.blunck.info/ccm.html.

Это java- script, c/С++ и С#. Он бесплатный, работает в Windows (может работать и в Linux, и в Mac OS X - с использованием моно-рамки).

Ответ 8

Там теперь также Yardstick: https://github.com/calmh/yardstick

Он пытается вычислить циклическую сложность для идиоматического Javascript, обрабатывая больше случаев, чем, например, jscheckstyle.