Calculer la complexité cyclomatique pour Javascript [fermé]

Existe-t-il des outils pour calculer la complexité cyclomatique en Javascript?

Je l'ai trouvé une métrique très utile dans le passé tout en travaillant sur le code côté serveur, et je voudrais être en mesure de l'utiliser pour le Javascript côté client que j'écris.

36
demandé sur Karl 2008-09-19 13:08:00

8 réponses

j'ai travaillé sur un outil D'analyse de code statique JavaScript qui fait cacluler la complexité cyclomatique pour JavaScript. Vous pouvez essayer une version en ligne de jsmeter ici: http://jsmeter.info

19
répondu iandotkelly 2012-10-31 19:47:53

j'ai aidé à écrire un outil pour effectuer l'analyse de la complexité du logiciel sur les projets JavaScript:

complexité-rapport

il rapporte un tas de différents paramètres de complexité: les lignes de code, le nombre de paramètres, la complexité cyclomatique, la densité cyclomatique, les mesures de complexité de Halstead, l'indice de maintenabilité, la densité de premier ordre, le coût de changement et la taille du noyau.

il est libéré sous la licence MIT et construit en utilisant le noeud.js et le Esprima JavaScript parser. Il peut être installé via npm, comme suit:

npm i -g complexity-report
17
répondu Phil Booth 2017-02-21 15:48:33

pour que les réponses soient complètes, je cherchais le même outil il y a quelque temps et je n'ai rien trouvé qui fonctionnait bien pour la visualisation donc j'ai écrit platon

exemples de rapports pour :

il utilise le rapport de complexité de phil (mentionné ci-dessus) et regroupe également les données de jshint (et éventuellement, d'autres).

10
répondu jsoverson 2013-04-08 06:58:24

Depuis complexité cyclomatique est évaluée en comptant le nombre de mots-clés "si, switch, tandis que pour casser", etc.. chaque outil qui fonctionne avec C fera le travail, comme sourcemonitor: http://www.campwoodsw.com/sourcemonitor.html

en fait, sur javascript plus vous essayez de moduler votre code, plus vous le ralentirez, alors prenez - le avec un grain de sel ;)

modifier: J' Vraiment ne peut pas comprendre ce qui se passe sur cette réponse, je reçois un autre downvote, quand dans ma réponse je dis un bon outil pour calculer la complexité cyclomatique en javascript, et ceci en particulier fonctionne très bien.

pour la deuxième affirmation, la mienne est un commentaire qui vient de l'expérience, je ne le dis jamais ne modulez pas votre code js, je ne dis faire attention à le faire, parce que souvent il y a un compromis avec la vitesse, et quand je parle de vitesse je veux dire que 2 différents ralentissements peuvent se produire: à télécharger temps et temps d'exécution (et dans les appareils lents comme pda / smartphone c'est important).

depuis des outils comme celui-ci poussent souvent le développeur à écrire plus de code en essayant de chasser le plus petit index possible, mais dans js plus de code malheureusement signifie que les ralentissements peuvent se produire, et le une surutilisation de ces outils est mauvais. Ces outils peuvent certainement vous donner des indices de votre code peut être amélioré, mais vous aurez à apprendre à utiliser l'outil et pas blindy compter sur elle.

donc, si vous me rabaissez encore, s'il vous plaît écrivez un commentaire dans lequel vous expliquez pourquoi vous le faites, la discussion ne peut que bénéficier de cela, merci et désolé pour l'évent.

7
répondu kentaromiura 2009-06-22 06:32:54

JSHint récemment ajout de support pour le calcul des mesures de code. Vous pouvez définir des valeurs maximales pour le nombre de paramètres formels permis ( maxparams),combien de blocs de code imbriqués devraient être ( maxdepth),le nombre d'énoncés permis par fonction ( maxstatements), ainsi que la complexité cyclomatique maximale (maxcomplexity).

nombre Maximum de paramètres formels autorisé par la fonction

/*jshint maxparams:3 */

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

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

nombre Maximum de blocs de code imbriqués permis par fonction

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

nombre Maximum de déclarations autorisées par la fonction

/*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)
}
5
répondu daniellmb 2013-04-04 15:38:41

La nouvelle version de http://jshint.com est sorti et a une très bonne complexité cyclomatique calculatrice

4
répondu rizwaniqbal 2013-10-07 08:01:09

vous pouvez utiliser l'outil ccm à partir de http://www.blunck.info/ccm.html