Gerencia de Proyectos Informaticos

jueves, 3 de junio de 2010

Línea de Código (LOC)

Línea de Código(LOC)Una de las métricas más usadas es la del número de líneas de código (LOC), que aunque parece sencilla no lo es tanto, ya que existen diferentes alternativas: contar sólo las líneas de código ejecutable, añadirle las declaraciones de datos, también podemos contas las líneas de comentarios, añadir las sentencias de control, etc. etc. De hecho suele ser frecuente, que al usar diferentes programas de métricas, estas generen diferentes valores de LOCs para un mismo fichero. El uso principal que tiene contar líneas de código, es poder determinar proporciones entre líneas de código y fallos, es decir, generar medidas (y heurísticas) sobre el número de líneas de código y el número de fallos de una aplicación (‘número de defectos por KLOC (1000 LOC)’).

Una alternativa a las líneas de código son los puntos de función, que también intentan medir el tamaño del software. Este es bastante independiente del lenguaje de programación utilizado. Sacado de la Wikipedia: la técnica de medición del tamaño en punto-función consiste en asignar una cantidad de "puntos" a una aplicación informática según la complejidad de los datos que maneja y de los procesos que realiza sobre ellos. Como podemos ver, bastante compleja de calcular.2.2.- Complejidad ciclomática.

La métrica de la complejidad ciclomática fue diseñada por McCabe (1976) para indicar la facilidad para testear y entender el código. Esta medida está secada de la teoría de grafos, e indica el número de regiones en un grafo.
Aplicada al software, es el número de caminos linealmente independientes que contiene un programa. Como tal, puede ser usado para indicar el esfuerzo necesario para testear un programa.
Tomado de la Wikipedia: La complejidad ciclomática de un bloque de código fuente es el número de caminos ejecutables en el código fuente. Por ejemplo si el código fuente no contiene puntos de decisión (es decir no contiene instrucciones IF, ni For, etc) la complejidad ciclomática sería igual a 1, ya que sólo existe un camino de ejecución para ese código. Si el código contuviera un IF entonces existirían dos, uno si la expresión condicional del IF resulta cierta, y otro para cuando es falsa.

Existen numerosos estudios empíricos que han demostrado una alta correlación entre código con fallos y código con alta complejidad ciclomática.

3.- Descripción de la LOCE (Lines Of Code Equivalence, Equivalencia en número de líneas de código).

LOCE viene de “Lines Of Code Equivalence”, es decir, “Equivalencia en Número de Líneas de Código”, y como ya hemos dicho es una métrica que intenta mejorar las métricas de conteo de número de líneas y de complejidad ciclomática, ya que ¿acaso es igual de complejo un método con 3 IF separados que con 3 bucles FOR anidades? No lo creemos.

ToroMetrics hace una suposición muy sencilla y es que cuanto más anidada está una línea de código más difícil es de entender, o lo que es lo mismo, más complejo es el código y más probabilidades tiene de contener un error, ya que una línea de código dentro de un IF o un FOR podrá o no ejecutarse, o incluso ejecutarse numerosas veces, por lo general tendrá una semántica adicional y tendrá una relación más estrecha con el resto de líneas de código de su bloque.

La medición de la LOCE de una sentencia será sencilla, si la línea está directamente dentro del método diremos que está a nivel de profundidad igual a 0, si está anidada dentro de sentencias IF, FOR, WHILE, y DO tendrá un nivel de produndidad igual a la suma de estas sentencias que la engloben. La LOCE de una línea será por tanto:
 Para niveles igual a cero, su LOCE será uno.
 Para niveles mayores que cero, su LOCE será 2 * Nivel.

La LOCE del método (el peso del método) sería igual al sumatorio del peso de cada una de sus líneas.

El número 2 representaría el incremento de complejidad por estar dentro de una rama de la ejecución (un IF, FOR, WHILE, etc).

Veamos un pequeño ejemplo con la clase Dummy para ver cómo funciona esta aplicación:

package org.opentoro.utils.metrics;

public class Dummy {
public Dummy() {
}
public void doit(){
for (int i = 0; i < 10; i++){
for(int j = 0; j < i; j++){
System.out.println("i = " + i);
System.out.println("j = " + j);
}//End For j
}//End For i
}
}
[Referencia1]: www.freetutes.com/systemanalysis/sa3-lines-of-code.html

No hay comentarios:

Publicar un comentario