2010-10-06 10 views
6

Una de las cosas en las que he estado pensando muchas veces es cómo podemos usar métricas de algún tipo para medir el cambio, ¿vamos hacia atrás o no? Esto es en el contexto de una gran base de código heredada que estamos mejorando. La mayor parte del código es C++ con un patrimonio de C. Algunas funciones nuevas y la GUI están escritas en C#.¿Cómo puedo visualizar los cambios en una gran base de código de calidad?

Para empezar, al menos podríamos estar comprobando si el nivel de complejidad simple estaba cambiando con el tiempo en el código. La dificultad está en tener una representación: podemos hacer una superficie 3D donde un mapa 2D representa el código y tenemos un mapa de calor de color que representa la complejidad con la superficie 3D abombada hacia dentro y hacia afuera para mostrar el cambio.

Una vez que puedes generar matrics de números, hay una tonelada de sistemas matemáticos para encargarse de cosas como esta.

Con el tiempo, me gustaría tener números más sofisticados pero las mismas técnicas de visualización utilizadas para representar el cambio.

Me gusta la idea en Crap4j de centrarme en la relación entre la complejidad y el número de pruebas unitarias que cubren ese código.

También me gustaría incluir Uncle Bob's SOLID metrics y algunas de las métricas OO de Chidamber y Kemerer. La parte difícil es encontrar herramientas para generar estos para C++. La única opción parece ser Krakatau Essential Metrics (no tengo inconveniente en pagar por las herramientas). Mi deseo de utilizar las métricas de CK proviene en parte de los libros Object-Oriented Metrics:Measures of Complexity de Henderson-Sellers y los anteriores Object-Oriented Software Metrics.

Si comenzamos a usar algunas de estas métricas, podríamos terminar con diez o más números que varían a lo largo del tiempo. Soy bastante ignorante de las estadísticas, pero parece que podría ser interesante rastrear un montón de tales métricas y luego prestar atención a las que tienden a variar.

Tenga en cuenta que una pregunta relacionada es acerca de measuring code quality across a large code base. Estoy más interesado en medir el cambio.

Respuesta

3

Consideraría usar un Kiviat Diagram para representar múltiples dimensiones de métricas de software que evolucionan con el tiempo. Estos diagramas representan puntos de datos múltiples en un casco cóncavo alrededor de un punto central. La inspección visual mostrará dónde una métrica particular está subiendo o bajando, y uno debería ser capaz de calcular una proporción total del área sesgada por valor métrico utilizando algún cálculo de área heurística.

+1

Gracias, que era el término mágico que tenía que ser capaz de reducir mis búsquedas. Encontré un documento de póster realmente interesante sobre el uso de diagramas 3D Kiviat http://w3.msi.vxu.se/~kerren/pubs/kerren-softvis10.pdf –

+0

Actualizando el enlace al documento: http: //homepage.lnu. se/staff/akemsi/pubs/kerren-softvis10.pdf –

1

También puede echar un vistazo a NDepend documentation about code metrics. Descargo de responsabilidad: soy uno de los desarrolladores de la herramienta NDepend.

Con la instalación Code Rule and Query over LINQ (CQLinq), es posible solicitar el código de evolución métrica/tendencia en dos instantáneas diferentes en el momento de la base de código. Por ejemplo hay una regla por defecto propuesto: Avoid making complex methods even more complex ilustrado por la pantalla de abajo: Se proponen

Avoid making complex methods even more complex

varias reglas de tendencias métrica como:

En cuanto a la visualización de métricas de código, NDepend permite visualizar los valores de métricas de código a través de un interactive treemap:

Code Metric viualized through Treemap

+0

Gracias por la sugerencia, pero como dije en la pregunta, la mayor parte del código que me interesa es C++. He visto demos de celos de NDepend. Aprecio el consejo para mirar su documentación de métricas. –

+0

Entonces, ¿por qué no usar CppDepend? http://www.cppdepend.com/ ¿La versión C++ de NDepend? –

+0

No me había dado cuenta de que existía. La única mención está abajo en la esquina inferior derecha de la página de inicio "debajo del pliegue" y NDepend se anuncia en gran medida como una herramienta .Net. Sin duda lo probaré. También sugiero que hable con la gente de marketing acerca de obtener una mención en el banner del sitio web para decir que también hace C++ y Java. Me pregunto cuántos otros se perdieron el enlace de C++. Gracias –

Cuestiones relacionadas