2008-09-19 36 views
34

¿Hay alguna herramienta disponible para calcular la Complejidad Ciclomática en Javascript?Calcular Complejidad Ciclomática para Javascript

He encontrado una métrica muy útil en el pasado mientras trabajaba en el código del lado del servidor, y me gustaría poder utilizarla para el lado del cliente Javascript que escribo.

+0

he movido mi herramienta jsmeter a un nuevo sitio: http://jsmeter.info – Noah

Respuesta

18

He estado trabajando en una herramienta de análisis de código estático JavaScript que no incluye la complejidad ciclomática para JavaScript. Puede probar una versión en línea de jsmeter aquí: http://jsmeter.info

+1

Su herramienta no es compatible con ECMAScript5. No puede analizar un objeto normal como: '{a: 2,}' – mgol

+1

@m_gol Las comillas finales FYI son una mala práctica y generarán un error en algunos navegadores. –

+4

@RobEvans No, las comillas finales no son una mala práctica, es su opinión subjetiva. Por el contrario, las comillas finales pueden ser útiles ya que ayudan con las diferencias de git ya que no necesita cambiar las líneas que definen otros elementos si agrega/elimina uno nuevo. En cuanto a "algunos navegadores", es básicamente IE <9. Si no necesita preocuparse por ellos, puede usar comas finales. En mis propios proyectos, por lo general hago cumplir las comillas finales en la guía de estilo debido a las razones mencionadas. – mgol

6

Desde complejidad ciclomática se evalúa contando el número de palabras clave "if, switch, mientras que para las vacaciones", etc .. cada herramientas que trabajan con C hará el trabajo, como SourceMonitor: http://www.campwoodsw.com/sourcemonitor.html

En realidad, en Javascript cuanto más se intenta modulize su código, más se va a reducir la velocidad, por lo que tomar con un grano de sal;)

EDIT: I Realmente no puede entender lo que está pasando en esta respuesta , Recibo otro voto negativo, cuando en mi respuesta le digo a ag Una buena herramienta para calcular la complejidad ciclomática en javascript, y esto en particular funciona muy bien.

Para la segunda afirmación, el mío es un comentario que viene de la experiencia, yo nunca digo no modulize su código js, yo sólo digo que hacer que la atención en hacerlo, porque a menudo existe un compromiso con velocidad, y cuando hablo de velocidad quiero decir que pueden ocurrir 2 ralentizaciones diferentes: en tiempo de descarga y en tiempo de ejecución (y en dispositivos lentos como pda/smartphone esto es importante).

Desde herramientas de este tipo conducen a menudo desarrollador a escribir más código tratando de perseguir el índice más pequeño posible, pero en js más código lamentablemente significa que los retrasos pueden ocurrir, y el uso excesivo de estas herramientas es malo. Surelly estas herramientas pueden darle pistas de donde su código se puede mejorar, pero usted tiene que dominar cómo usar la herramienta y no confiar ciegamente en ella.

Así que si vuelves a votarme, por favor escribe un comentario en el que expliques por qué lo haces, la discusión solo puede beneficiarse de esto, gracias y disculpa por la ventilación.

+0

Modularizando su código es lento hacia abajo? ¿Cómo eso tiene sentido? – MDCore

+1

En realidad tiene sentido, ya que en JavaScript escribir más código significa más tiempo de descarga (es una solución que todos conocen por cierto), escribí un código de JavaScript que se ejecuta en una arquitectura muy lenta, así que, para mí, este es un factor importante. No dije "no modulé", solo digo "advirtámonos" – kentaromiura

+0

No te resté, pero parece que no modularizado ralentiza tu código en JavaScript, es suficiente para justificar la escritura de tu código en un estilo de procedimiento. Pero creo que eso es caso por caso. –

2

Puede usar la herramienta ccm desde http://www.blunck.info/ccm.html.

Hace java-script, c/C++ y C#. Es gratis, se ejecuta en Windows (también se puede ejecutar en Linux y Mac OS X, utilizando el framework mono).

2

Ahora hay también YardStick: https://github.com/calmh/yardstick

Se trata de calcular la complejidad idiomática ciclomática de Javascript, el manejo más casos que, por ejemplo, jscheckstyle.

17

me ayudó a escribir una herramienta para llevar a cabo el análisis de la complejidad del software en proyectos de JavaScript:

complexity-report

Se informa de un montón de diferentes métricas de complejidad: líneas de código, número de parámetros, la complejidad ciclomática, densidad ciclomática, Las medidas de complejidad de Halstead, el índice de mantenimiento, la densidad de primer orden, el costo de cambio y el tamaño del núcleo.

Se publica bajo la licencia de MIT y se compila utilizando Node.js y el analizador de JavaScript Esprima. Se puede instalar a través de la NGP, así:

npm i -g complexity-report 
+0

Esta es una gran herramienta. Sería aún más útil si se puede usar como tarea grupal. ¡Entonces podemos ver este informe en cada compilación! – ShitalShah

+0

Acaba de encontrar la tarea de grunt para esta herramienta: https://npmjs.org/package/grunt-complexity – ShitalShah

+0

JSComplexity.org: Este nombre de dominio ha caducado – P5ycH0

5

JSHint recientemente added support para el cálculo de métricas de código. Puede establecer valores máximos para the number of formal parameters allowed (maxparams), how deeply nested code blocks should be (MAXDEPTH), the number of statements allowed per function (maxStatements), así como the maximum cyclomatic complexity (maxcomplexity).

El número máximo de parámetros formales permitidos por la función

/*jshint maxparams:3 */ 

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

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

número máximo de bloques de código anidadas permitidas por la función

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

número máximo de declaraciones permitidas por la función

/*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

Para completar en las respuestas, que estaba buscando la misma herramienta hace algún tiempo y no encontraron nada de lo que ha funcionado bien para la visualización de modo que escribí plato

informes de muestra para:

Utiliza el informe de complejidad de phil (mencionado anteriormente) y también agrega datos de jshint (y eventualmente, otros).

+0

¡Acabo de estar en la presentación de @jsoverson en Fluent 2014 en San Francisco y quedé muy impresionado! –

Cuestiones relacionadas