Вычислить Цикломатическую сложность для Javascript [закрыто]

существуют ли какие-либо инструменты для вычисления цикломатической сложности в Javascript?

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

8 ответов


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


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

сложность-отчет

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

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

npm i -g complexity-report

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

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

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


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

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

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

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

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

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


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)
}

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


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

Он делает java-script, c / C++ и c#. Это бесплатно, работает на Windows (может быть запущен на Linux и Mac OS X, а также - с помощью Mono framework).


теперь есть также Мерило:https://github.com/calmh/yardstick

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