Calcular métricas de código [cerrado]


87

¿Hay alguna herramienta disponible que calcule métricas de código (por ejemplo, número de líneas de código, complejidad ciclomática, acoplamiento, cohesión) para su proyecto y con el tiempo produzca un gráfico que muestre las tendencias?


Depende del idioma, ¿qué idioma estás usando?
Valentin Rocher

Respuestas:


67

En mi último proyecto utilicé SourceMonitor . Es una buena herramienta gratuita para el análisis de métricas de código.
Aquí hay un extracto del sitio oficial de SourceMonitor:

  • Recopila métricas en una sola pasada rápida a través de archivos de origen.
  • Mide métricas para el código fuente escrito en C ++, C, C #, VB.NET, Java, Delphi, Visual Basic (VB6) o HTML.
  • Incluye métricas de nivel de método y función para C ++, C, C #, VB.NET, Java y Delphi.
  • Guarda métricas en puntos de control para compararlas durante proyectos de desarrollo de software.
  • Muestra e imprime métricas en tablas y gráficos.
  • Opera dentro de una GUI estándar de Windows o dentro de sus scripts usando archivos de comando XML.
  • Exporta métricas a archivos XML o CSV (valores separados por comas) para su posterior procesamiento con otras herramientas.

Para .NET además de NDepend, que es simplemente la mejor herramienta, puedo recomendar vil .

Las siguientes herramientas pueden realizar análisis de tendencias:


SourceMonitor parece ser una herramienta exclusiva de Windows. ¿Existe algo similar para otros sistemas operativos (Linux, BSD, Mac)?
Mnementh

Mnementh, soy desarrollador de Windows, no conozco ninguna de estas herramientas para los chicos de FOSS. ¿Quizás puedas intentar ejecutar SourceMonitor en el emulador Wine?
aku

2
Ahora hay una herramienta de tipo NDepend para C ++, CppDepend
Goosey

SourceMonitor es solo para uso no comercial.
Scott 混合 理论

2
@Kevin 混合 理论 lea la licencia detenidamente; puede usarla en cualquier entorno en el que no pueda venderla. "Es decir, puede utilizar este ejecutable como parte de sus propios esfuerzos de desarrollo de software (comercial o de otro tipo), pero no puede venderlo ..."
Natalie Adams

12

Sonar es definitivamente una herramienta que debes considerar, especialmente para proyectos Java. Sin embargo, también manejará código PHP o C / C ++, Flex y Cobol.

Aquí hay una captura de pantalla que muestra algunas métricas de un proyecto:

texto alternativo http://sonar.codehaus.org/wp-content/uploads/2009/05/squid-metrics.png

Tenga en cuenta que puede probar la herramienta utilizando su sitio de demostración en http://nemo.sonarsource.org


Aparentemente SO no me deja arreglar el enlace - el enlace debería ser: nemo.sonarsource.org
Natalie Adams


8

También estaba buscando una herramienta / complemento de métricas de código para mi IDE, pero hasta donde sé, no hay ninguno (para el eclipse) que también muestre un gráfico de la complejidad durante un período de tiempo específico. Sin embargo, encontré el complemento de métricas de eclipse , puede manejar:

  • Complejidad ciclomática de McCabe
  • Acoplamientos eferentes
  • Falta de cohesión en los métodos
  • Líneas de código en el método
  • Numero de campos
  • Número de niveles
  • Número de locales en el alcance
  • Número de parámetros
  • Número de declaraciones
  • Métodos ponderados por clase

Y mientras lo usaba, no me perdí la opción de gráficos que está buscando.
Creo que, si no encuentra ningún complemento / herramienta que pueda manejar los gráficos a lo largo del tiempo, debería buscar la herramienta que más le convenga y le ofrezca toda la información que necesita; incluso si la información proporcionada es solo para la versión actual de su proyecto.

Como nota al margen, el complemento de métricas de eclipse le permite exportar los datos a un archivo externo (el enlace va a un ejemplo), por lo que si usa una herramienta de control de fuente, ¡y debería hacerlo !, siempre puede exportar los datos para el compile y almacene el archivo junto con el código fuente, de esa manera todavía tiene una forma (básica) de retroceder en el tiempo y verificar las diferencias.


4

tenga en cuenta, lo que mide es lo que obtiene. loc no dice nada sobre productividad o eficiencia.

califique a un programador por líneas de código y obtendrá .. líneas de código. el mismo argumento se aplica a otras métricas.

otoh .. http://www.crap4j.org/ es una métrica muy conservadora y útil. establece complejidad en relación con la cobertura.


2
Califique a un programador por líneas de comentarios y obtendrá ... líneas de comentarios.
EML


3

Con respecto a la herramienta NDepend , viene con 82 métricas de código diferentes, desde Número de líneas de código, hasta Rango de método (popularidad), Complejidad ciclomática, Falta de cohesión de métodos, Porcentaje de cobertura (extraído de NCover o VSTS), Profundidad de herencia ... .

Con su sistema de reglas, NDepend también puede encontrar problemas y estimar la deuda técnica, que es una métrica de código interesante (cantidad de esfuerzo de desarrollo para solucionar problemas versus cantidad de tiempo de desarrollo desperdiciado por año para dejar que los problemas se solucionen).

Todas estas métricas se detallan aquí .


2

Si está en el espacio .NET, Developer Express ' CodeRush proporciona LOC, Cyclomatic Complexity y el (bastante excelente, en mi humilde opinión) análisis de complejidad de mantenimiento de código en tiempo real.

(Lo siento por el enlace de complejidad de mantenimiento; va a la caché de Google. El original parece ser un cajero automático sin conexión).


2

Atlassian FishEye es otra excelente herramienta para el trabajo. Se integra con su sistema de control de fuentes (actualmente es compatible con CVS, SVN y Perforce) y analiza todos sus archivos de esa manera. Sin embargo, el análisis es bastante básico y el producto en sí es comercial (pero a un precio muy razonable, en mi opinión).

También puede obtener un complemento llamado Crucible que facilita las revisiones de código entre pares.



2

Code Analyzer es una herramienta sencilla que genera este tipo de métricas.

texto alternativo
(fuente: teel.ws )


3
Si bien la GUI parece agradable, las métricas que se generan parecen bastante inútiles, por ejemplo, "¿Líneas de espacio en blanco por archivo"?
kizzx2




0

En el frente de PHP, creo que, por ejemplo, phpUnderControl incluye métricas a través de phpUnit (si no me equivoco).

Tenga en cuenta que las métricas a menudo tienen errores. Por ejemplo, un codificador que está trabajando en problemas triviales producirá más código y se verá mejor en sus gráficos que un codificador que resuelve los problemas complejos.


0

Si busca un análisis de tendencias, ¿realmente significa algo para medir más allá del SLOC?

Incluso si solo está haciendo un grep para arrastrar punto y coma y contar el número de líneas devueltas, lo que busca es coherencia en la técnica de medición SLOC. De esta manera, la medición de hoy se puede comparar con la medición del mes pasado de una manera significativa.

Realmente no puedo ver qué daría una tendencia de Complejidad Ciclométrica de McCabe. Creo que CC debería usarse más para una instantánea de calidad para proporcionar comentarios a los desarrolladores.

Editar: Ooh. Pensé en un par de otras medidas que podrían ser útiles. Comentarios como porcentaje de SLOC y cobertura de prueba. Ninguno de los cuales quiere dejar escapar. ¡Volver para adaptar cualquiera de estos nunca es tan bueno como hacerlo "en el calor del momento!"

HTH.

salud,

Robar


0

Scitools 'Understand tiene la capacidad de generar una gran cantidad de métricas de código para usted. No tengo mucha experiencia con las funciones de métricas de código, pero las funciones de análisis estático en general fueron agradables y el precio fue muy razonable. El apoyo fue excelente.



0

Para Java, puede probar nuestra herramienta, QualityGate , que calcula más de 60 métricas de código fuente, rastrea todos los cambios a lo largo del tiempo y también proporciona una calificación general para la capacidad de mantenimiento del código fuente.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.