Anda di halaman 1dari 25

Métricas de calidad de código

Departamento de Sistemas y Computación


Universidad de los Andes, Bogotá
Métricas sobre la estructura interna del
software
 Tamaño
 Complejidad cyclomática o métrica de
McCabe
 Comentarios
 Duplicados
¿Por qué medir el tamaño de un
programa?
 Uno de los objetivos primordiales al planear,
es determinar el esfuerzo y, por ende, el
tiempo, que va a tomar un proyecto.
 Típicamente, el esfuerzo necesario para
completar un proyecto se relaciona con
ciertas medidas del mismo:
 Metros cuadrados de área construida
 Metros de cable tendido
 Kilómetros de carretera
 Número de personas atendidas
Medición de programas

 Las medidas de tamaño permiten obtener


medidas derivadas útiles.
 Es de esperarse que sobre un programa se
puedan tomar medidas similares. Por ejemplo,
densidad de defectos, productividad, …
Características de una buena métrica

 Buena correlación con el esfuerzo


 Alto grado de exactitud
 Facilidad de medición
Posibles métricas de programación

 Tamaño en bytes de los fuentes


 Número de líneas de código
 Número de instrucciones
 Conteo de determinados elementos sintácticos:
 Terminadores de instrucción (i. e. caracteres de ";").
 Delimitadores de bloque (i. e. "{" y "}").
 Medidas de anidamiento de elementos, complejidad
de las expresiones, etc.
Líneas de código

 En la literatura, líneas de código se abrevia


como LOC (lines of code)
 Existen varias formas posibles de contar las
líneas de código
 Las líneas de código se pueden contar
automáticamente
Métodos de conteo
 Es necesario definir con precisión el método
de conteo de líneas que se va a usar
 El método debe ser:
 Comunicable: debe ser posible explicar el método
a otro de modo que éste pueda usarlo y obtener
los mismos resultados.
 Repetible: usos sucesivos del método deben
producir el mismo resultado.
Métodos de conteo: Definición

 Al definir un método de conteo hay que


determinar cómo se cuentan:
 Las instrucciones ejecutables
 Las declaraciones
 Instrucciones para el compilador
 Comentarios
 Líneas en blanco
 Normalmente hay que agregar notas y
comentarios para aclarar los casos especiales y
las excepciones
Métodos de conteo: Conteo físico

 Consiste en contar las líneas de código físicas o


una variante cercana de ellas
 Puede hacerse automáticamente con
programas bastante sencillos
 Es fuertemente dependiente del formato
Métodos de conteo: Conteo lógico

 Consiste en contar instrucciones efectivas y


estructuras de control
 Puede ser un método complejo de definir con
toda precisión
 Es más difícil de implantar en forma
automática
 Es más independiente del formato
Estándares de codificación y conteo
lógico
 Un estándar de codificación define el formato
que el programador debe usar al escribir un
programa
 El uso de un buen estándar de codificación
mejora la legibilidad del código y facilita la
comunicación entre programadores
 Si se sigue un estándar preciso el conteo físico
de líneas se aproxima bastante al conteo lógico
 Está es una buena opción para combinar hacer
conteo lógico mediante un programa simple
Tamaño en SonarQube
Tamaño en SonarQube
Tamaño en SonarQube
Complexity

 Se refiere a la complejidad ciclomática o


número de MacCaby.
 Mide la complejidad de un código en
términos del número de flujos de control que
encuentre
 Cada función tiene una complejidad mínima
de 1
Flowgraphs

 Un Grafo de flujo es un grafo dirigido tiene


dos nodos especiales: el iniicarl (no llega
ningun arco a él) y el final (no sale ningún
arco de él. 1

2 salen = 2
llegan = 2

3 4

5
Control-flow structure
1
1. X= X+1;
2. If (X>5) 2
3. print(“ nothing”);
4. else
5. print (“anything”); 3 4

5
MacCaby
v(F) = e –n +2

 F: Flowgraph
 e: número de arcos
 n: número de nodos

 Mide el número de rutas linealmente


independientes en el grafo F
Complexity en SonarQube
Complexity /class class_complexity Average complexity by
class.
Complexity /file file_complexity Average complexity by
file.
Complexity /method function_complexity Average complexity by
function.

http://docs.codehaus.org/display/SONAR/
Metrics+-+Complexity
Complexity en SonarQube
Example: the following method has a complexity of 5

public void process(Car myCar){ // +1


if(myCar.isNotMine()){ // +1
return; // +1
}
car.paint("red");
car.changeWheel();
while(car.hasGazol() &&
car.getDriver().isNotStressed()){ // +2
car.drive();
}
return;
}

http://docs.codehaus.org/display/SONAR/
Metrics+-+Complexity
Documentación: Líneas de
comentarios
/** +0 => empty comment line
* +0 => empty comment line
* This is my documentation +1 => significant comment
* although I don't +1 => significant comment
* have much +1 => significant comment
* to say +1 => significant comment
* +0 => empty comment line
*************************** +0 => non-significant comment
* +0 => empty comment line
* blabla... +1 => significant comment
*/ +0 => empty comment line

/** +0 => empty comment line


* public String foo() { +1 => commented-out code
* System.out.println(message); +1 => commented-out code
* return message; +1 => commented-out code
* } +1 => commented-out code
*/
http://docs.codehaus.org/display/SONAR/
Metric+definitions#Metricdefinitions-Design
Documentación: Densidad de líneas
de comentarios

Density of comment lines = Comment lines / (Lines of code + Comment lines)


* 100

With such a formula:


50% means that the number of lines of code equals the number of comment lines
100% means that the file only contains comment lines

http://docs.codehaus.org/display/SONAR/
Metric+definitions#Metricdefinitions-Design
Duplicaciones
Java: se considera duplicado cuando hay al menos 10 líneas de código iguales.

Name Key Description


Duplicated blocks duplicated_blocks Number of duplicated
blocks of lines.
Duplicated files duplicated_files Number of files involved
in a duplication.
Duplicated lines duplicated_lines Number of lines involved
in a duplication.
Duplicated lines (%) duplicated_lines_density Density of duplication
= Duplicated
lines / Lines * 100

http://docs.codehaus.org/display/SONAR/
Metric+definitions#Metricdefinitions-Design

Anda mungkin juga menyukai