2008-09-19 7 views
34

Gibt es Tools zur Berechnung der Cyclomatic Komplexität in Javascript?Berechnen Cyclomatic Komplexität für Javascript

Ich habe es eine sehr hilfreiche Metrik in der Vergangenheit während der Arbeit an Server-Seite Code gefunden, und möchte es für die Client-Seite verwenden können Javascript Ich schreibe.

+0

ich mein jsmeter Werkzeug an einen neuen Standort verschoben haben: http://jsmeter.info – Noah

Antwort

18

Ich habe an einem statischen JavaScript-Code-Analyse-Tool gearbeitet, das zyklomatische Komplexität für JavaScript enthält. Sie können hier eine Online-Version von jsmeter ausprobieren: http://jsmeter.info

+1

Ihr Werkzeug ist nicht ECMAScript5-kompatibel. Es kann kein reguläres Objekt wie: '{a: 2,}' – mgol

+1

@m_gol analysieren FYI-Nachkommastellen sind eine schlechte Übung und werden in einigen Browsern einen Fehler verursachen. –

+4

@RobEvans Nein, abschließende Kommas sind keine schlechte Übung, es ist Ihre subjektive Meinung. Im Gegensatz dazu können nachgestellte Kommas nützlich sein, da sie bei Git-Diffs helfen, da Sie keine Zeilen ändern müssen, die andere Elemente definieren, wenn Sie ein neues hinzufügen/entfernen. Wie für "einige Browser" - es ist im Grunde IE <9. Wenn Sie sich nicht um sie kümmern müssen, können Sie nachgestellte Kommas verwenden. In meinen eigenen Projekten erzwinge ich aus den genannten Gründen in der Regel Stilkommentare. – mgol

6

Da zyklomatische Komplexität ausgewertet wird, um die Anzahl der Keyword-Zählen „wenn, Schalter, während für Pause“ etc .. alle Tools, die mit C arbeitet, wird die Arbeit erledigen, wie Source: http://www.campwoodsw.com/sourcemonitor.html

Eigentlich Javascript versuchen, je mehr Sie Ihren Code modulize, desto mehr werden Sie es verlangsamen wird, so dass es mit einem Körnchen Salz;)

EDIT: ich Wirklich kann nicht verstehen, was diese Antwort ist los Ich bekomme noch einen runter, wenn ich in meiner Antwort sage ood Werkzeug zur Berechnung der zyklomatischen Komplexität in Javascript, und dies funktioniert besonders gut.

Für die zweite Behauptung, mein ist ein Kommentar, der kommt aus der Erfahrung, die ich nie sagen Sie modulize nicht Ihre js Code, sage ich nur zu Aufmerksamkeit machen in es zu tun, weil oft ein Kompromiss dort mit ist Geschwindigkeit, und wenn ich von Geschwindigkeit spreche ich meine, dass 2 verschiedene Verlangsamung passieren kann: um Download Zeit und Ausführungszeit (und in langsamen Gerät wie PDA/Smartphone ist dies wichtig).

Seit Tools wie dies oft fahren Entwickler in mehr Code zu schreiben versucht, den kleineren Index möglich zu jagen, aber in js leider mehr Code bedeutet, dass Verlangsamungen passieren kann, und die Übernutzung dieser Werkzeuge ist schlecht. Sicherlich können diese Tools Ihnen Hinweise geben wo Ihr Code verbessert werden kann, aber Sie müssen lernen, wie man das Tool verwendet und nicht blind darauf verlassen.

Also wenn du mich noch einmal runtermeldest, schreibe bitte einen Kommentar, in dem du erklärst, warum du das tust, die Diskussion kann nur davon profitieren, danke und Entschuldigung für die Entlüftung.

+0

Code Modularisierung es langsam ist unten? Wie macht das Sinn? – MDCore

+1

Eigentlich hat es Sinn, da in JavaScript schreiben mehr Code bedeutet mehr Download-Zeit (ist ein Kompromiss, der alle btw kennt), schrieb ich Javascript-Code, der in sehr langsamen Architektur so läuft, für mich ist dies ein wichtiger Faktor. Ich habe nicht gesagt "nicht modulisieren", ich sage nur "sei gewarnt" – kentaromiura

+0

Ich habe Sie nicht downvote, aber es scheint nicht wie modularisierte verlangsamt Ihren Code in Javascript ist genug, um das Schreiben Ihres Codes in einem zu rechtfertigen Verfahrensstil. Aber ich denke, das ist von Fall zu Fall. –

2

Sie können das ccm-Tool von http://www.blunck.info/ccm.html verwenden.

Es macht Java-Skript, C/C++ und C#. Es ist kostenlos, läuft unter Windows (kann auch unter Linux und Mac OS X laufen - mit Mono-Framework).

2

Es jetzt ist auch Maßstab: https://github.com/calmh/yardstick

Es wird versucht zyklomatische Komplexität für idiomatische Javascript zu berechnen, mehr Bearbeitung von Fällen als zum Beispiel jscheckstyle.

17

Ich half ein Tool schreiben, um die Komplexität von Software-Analyse auf JavaScript-Projekte durchführen:

complexity-report

Es berichtet über eine Reihe von verschiedenen Komplexitätsmetriken: Codezeilen, die Anzahl der Parameter, zyklomatische Komplexität, zyklomatischen Dichte, Halstead-Komplexitätsmaße, Wartbarkeitsindex, Dichte erster Ordnung, Änderungskosten und Kerngröße.

Es wird unter der MIT-Lizenz veröffentlicht und mit Node.js und dem Esprima JavaScript-Parser erstellt. Es kann über npm installiert werden, etwa so:

npm i -g complexity-report 
+0

Das ist ein großartiges Werkzeug. Es wäre noch nützlicher, wenn es als Grunt Task verwendet werden könnte. Dann können wir diesen Bericht bei jedem Build sehen! – ShitalShah

+0

Nur grunt Aufgabe für dieses Tool gefunden: https://npmjs.org/package/grunt-complexity – ShitalShah

+0

JSComplexity.org: Dieser Domänenname ist abgelaufen – P5ycH0

5

JSHint kürzlich added support für Code-Metriken zu berechnen. Sie können Maximalwerte für the number of formal parameters allowed (maxparams), how deeply nested code blocks should be (maxdepth) gesetzt, the number of statements allowed per function ('maxStatements') sowie the maximum cyclomatic complexity (maxcomplexity).

Maximale Anzahl formaler pro Funktion erlaubt Parameter

/*jshint maxparams:3 */ 

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

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

Maximale Anzahl der verschachtelten Codeblöcke pro Funktion erlaubt

/*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(); 
     } 
    } 
    } 
} 

Maximale Anzahl der pro Funktion erlaubt Aussagen

/*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) 
} 
10

Der Vollständigkeit halber in den Antworten, ich war auf der Suche für das gleiche Werkzeug vor einiger Zeit und haben nichts gefunden, die gut für die Visualisierung gearbeitet, damit ich plato

Beispielberichte für schrieb:

Es verwendet den Komplexitätsbericht von phil (oben erwähnt) und aggregiert auch Daten von jshint (und eventuell anderen).

+0

Ich war gerade bei @jsoverson's Präsentation auf der Fluent 2014 in San Francisco und war sehr positiv beeindruckt! –