Расчет цикломатической сложности для Javascript

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

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
46
0
24 228
7

Ответы 7

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

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

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

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

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

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

Модуляризация кода замедляет его? Как это имеет смысл?

MDCore 17.10.2008 08:33

На самом деле в этом есть смысл, так как в javascript написание большего количества кода означает большее время загрузки (это компромисс, который, кстати, все знают), я написал код javascript, который работает в очень медленной архитектуре, поэтому для меня это важный фактор. Я не сказал "не модулировать", я просто сказал "будьте осторожны"

kentaromiura 17.10.2008 10:29

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

Mark Rogers 13.12.2009 22:41

Вы также должны установить заголовки «Expires» далеко в будущее для вашего javascript, чтобы клиентский браузер кэшировал его. Это снижает количество показов, с которыми приходится сталкиваться повторяющимся посетителям, когда они посещают ваш сайт.

Zee Spencer 21.05.2010 01:21

Вы можете использовать инструмент ccm из АРХИВ сайта blunck.info или репозиторий github jonasblunck / ccm

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

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

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

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

отчет о сложности

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

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

npm i -g complexity-report

Это отличный инструмент. Было бы еще полезнее, если бы его можно было использовать как ворчание. Тогда мы сможем видеть этот отчет при каждой сборке!

Shital Shah 07.11.2013 15:17

Только что нашел черновую задачу для этого инструмента: npmjs.org/package/grunt-complexity

Shital Shah 07.11.2013 15:22

JSComplexity.org: срок действия этого доменного имени истек

Tycho Pandelaar 14.11.2013 13:32

@ P5ycH0, домен вернулся с 3 января 2014 года.

sherb 04.01.2014 01:05

По состоянию на 2017 год это решение больше не поддерживается.

Remi 04.04.2017 12:52

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

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

Образцы отчетов для:

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

Я только что был на презентации @jsoverson на Fluent 2014 в Сан-Франциско и был очень впечатлен!

Wallace Sidhrée 13.03.2014 18:18

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

Другие вопросы по теме