Ответ 1
Я работаю над инструментом анализа статического кода JavaScript, который делает циклическую сложность JavaScript для JavaScript. Вы можете попробовать онлайн-версию jsmeter здесь: http://jsmeter.info
Существуют ли какие-либо инструменты для вычисления Cyclomatic Complexity в Javascript?
Я нашел это очень полезным показателем в прошлом, работая над кодом на стороне сервера, и хотел бы иметь возможность использовать его для клиентской Javascript, который я пишу.
Я работаю над инструментом анализа статического кода JavaScript, который делает циклическую сложность JavaScript для JavaScript. Вы можете попробовать онлайн-версию jsmeter здесь: http://jsmeter.info
Я помог написать инструмент для анализа сложности программного обеспечения в проектах JavaScript:
В нем сообщается множество различных показателей сложности: строки кода, количество параметров, циклическая сложность, цикломатическая плотность, меры сложности Halstead, индекс ремонтопригодности, плотность первого порядка, стоимость изменения и размер ядра.
Он выпущен под лицензией MIT и построен с использованием Node.js и Esprima парсера JavaScript. Он может быть установлен через npm, например:
npm i -g complexity-report
Для полноты ответов я искал один и тот же инструмент некоторое время назад и не нашел ничего хорошего для визуализации, поэтому написал plato
Примеры отчетов для:
Он использует фил-сложность-отчет (упомянутый выше), а также агрегирует данные из jshint (и, в конечном итоге, другие).
Поскольку циклическая сложность вычисляется с учетом количества ключевых слов "if, switch, while for break" и т.д. все инструменты, которые работают с C, будут выполнять работу, например SourceMonitor: http://www.campwoodsw.com/sourcemonitor.html
Собственно, на javascript, чем больше вы пытаетесь модулировать свой код, тем больше вы его замедляете, так что возьмите его с солью;)
EDIT: Я На самом деле не могу понять, что происходит в этом ответе, я получаю еще один downvote, когда в своем ответе я говорю хороший инструмент для вычисления циклической сложности в javascript, и это особенно хорошо работает.
Во втором утверждении мой комментарий, который исходит из опыта, я никогда не говорю, не модулирую ваш код js, я только говорю, чтобы обратить на это внимание, потому что часто есть компромисс со скоростью, и когда я говорить о скорости, я имею в виду, что может произойти 2 разных замедления: во время загрузки и во время выполнения (и в медленном устройстве, таком как pda/smartphone, это важно).
Поскольку такие инструменты часто приводят разработчиков к написанию большего количества кода, пытаясь преследовать меньший индекс, но в js больше кода, к сожалению, означает, что замедление может произойти, а overuse этих инструментов плохо. Разумеется, эти инструменты могут дать вам подсказки , где, ваш код может быть улучшен, но вы должны освоить, как использовать инструмент, а не слепо, полагаться на него.
Итак, если вы снова запустите меня, напишите комментарий, в котором вы объясните, почему вы это делаете, обсуждение может только выиграть от этого, спасибо и извините за выход.
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/С++ и С#. Он бесплатный, работает в Windows (может работать и в Linux, и в Mac OS X - с использованием моно-рамки).
Там теперь также Yardstick: https://github.com/calmh/yardstick
Он пытается вычислить циклическую сложность для идиоматического Javascript, обрабатывая больше случаев, чем, например, jscheckstyle.