You cannot control what you cannnot measure
Con la salida de Visual Studio 2008, salio un muy buen feature llamado “Code Metrics” en el cual se manejaban 5 metricas, las cuales ya formaban parte de la industria desde hace algún tiempo:
- Lines of Code
- Class Coupling
- Cyclomatic Complexity
- Depth of Inheritance
- Maintainability Index
A continuación les anexo una referencia breve sobre para que deberían ser usadas cada una de estas métricas.
Lines of Code (LOC)
string textoPantalla = numeroPrimo == 3 ? “Cierto” : “Falso”
Creo que con esta linea de codigo podriamos definir que aunque el codigo sea muy pequeño en lineas de codigo este podria ser muy complejo.
Además si quicieramos medir la efectividad o la productividad en el numero de lineas de codigo que un desarrollador escribe por día podriamos caer en la siguiente pregunta:
“Un desarrollador escribe el codigo para el acceso a datos, el cual es el modulo más importante de nuestra aplicación y escribio 50 lineas por día y tenemos otro desarrollador que hizo toda la GUI utilizando el Visual Studio y genero 150. Entonces ¿Despedimos al que construyo el acceso a datos?”
Uso
- Medir las lineas de código por Clase o Método
Class Coupling
Entre menos numero de clases dependa nuestra clase, entonces será más estable. Por lo tanto deberá ser considerada digna de reutilización
Esta métrica esta basada en medir la estabilidad de la clase dependiendo del numero de dependencias que esta contenga, digamos que tenemos una baja dependencia de otros objetos; Por lo tanto nuestra clase será más estable. y entonces reutilizable.
Cyclomatic Complexity
Mide el numero de flujos independientes dentro de un modulo
Podriamos compararlo con un diagrama de flujo donde los nodos son los procesos y la medicion es realizada cada vez que el flujo pasa por un nodo.
Detalle Tecnico
La siguiente formula es aplicada en la medición:
Cyclomatic complexity (CC) = E - N + p
- E = Numero de bordes en la grafica
- N = Numero de nodos en la grafica
- p = Numero de componentes conectados
Escala de Valores
| Cyclomatic Complexity | Risk Evaluation |
|---|---|
| 1-10 | A simple program, without much risk |
| 11-20 | More complex, moderate risk |
| 21-50 | Complex, High risk problem |
| Greater than 50 | Unestable program (Very high risk) |
Uso
- Análisis de riesgos en la construcción y mantenimiento
- Planeación del proceso de pruebas
- Análisis de reingenieria
Depth of Inheritance
Indica el numero de definiciones de clase que se extienden en la jerarquía de clases
- Entre más profunda se encuentre la clase en la jerarquia, aumenta el numero de metodos que utilizan herencia, haciendo así que sea más complejo de predecir su comportamiento
- Arboles de herencia mayores constituyen un diseño más complejo, esto debido a que más clases y metodos estan involucrados en el mismo
- Entre más profunda este la clase en la jerarquia, es más probable la reutilización de methodos heredados
Uso
- Medir la reusabilidad de los componentes
- Definir la dificultad en el mantenimiento de la solucíon
Maintainability Index
Calcula un valor entre 0 y 100 con el cual indicara la facilidad con la que se le puede dar mantenimiento al codigo
Entre mayor es el valor más facil es la realización de mantenimiento.
- Verde - 20 a 100
- Amarillo - 10 a 19
- Rojo - 0 a 9
Detalle Tecnico
Se obtiene el indice mediante la siguiente formula:
- Maintainability Index = MAX(0,(171 - 5.2 * ln(Halstead Volume) - 0.23 * (Cyclomatic Complexity) - 16.2 * ln(Lines of Code))*100 / 171)
Uso
- Medir la complejidad y la mantenibilidad de la solución, basandose en varias metricas
Saludos @ Traffic City







