Jerry Fitzpatrick introdujo la métrica del software ABC en 1997 para superar los inconvenientes del LOC. [1] La métrica define una puntuación ABC como un triplete de valores que representan el tamaño de un conjunto de declaraciones de código fuente. Una puntuación ABC se calcula contando el número de asignaciones (A), el número de ramas (B) y el número de condicionales (C) en un programa. La puntuación ABC se puede aplicar a métodos , funciones , clases , módulos o archivos individuales dentro de un programa.
La puntuación ABC está representada por un vector 3D
Por convención, un valor de magnitud ABC se redondea a la décima más cercana.
Historia
El concepto de medir el tamaño del software fue introducido por primera vez por Maurice Halstead [2] de la Universidad de Purdue en 1975. Sugirió que cada programa de computadora consiste principalmente en tokens : operadores y operandos . Concluyó que un recuento del número de operadores y operandos únicos nos da una medida del tamaño del programa. Sin embargo, esto no se adoptó como una medida del tamaño de un programa.
Líneas de código (LOC) fue otra medida popular del tamaño de un programa. El LOC no se consideró una medida precisa del tamaño del programa porque incluso un programa con una funcionalidad idéntica puede tener diferentes números de líneas según el estilo de codificación. [3]
Se introdujo otra métrica llamada métrica de punto de función (FP) para calcular el número de transacciones de entrada y salida del usuario. Los cálculos de puntos de función no proporcionaron información sobre la funcionalidad del programa ni sobre las rutinas que estaban involucradas en el programa. [4]
La métrica ABC está destinada a superar los inconvenientes de los recuentos de LOC, FP y token (operación y operando). Sin embargo, una puntuación FP también se puede utilizar para complementar una puntuación ABC.
Aunque el autor sostiene que la métrica ABC mide el tamaño, algunos creen que mide la complejidad. [5] La capacidad de la métrica ABC para medir la complejidad depende de cómo se defina la complejidad.
Definición
Los tres componentes de la puntuación ABC se definen de la siguiente manera:
- Asignación: almacenamiento o transferencia de datos a una variable .
- Ramas: una rama explícita del programa de reenvío fuera de alcance .
- Condicionales: prueba booleana o lógica.
Dado que los lenguajes básicos como C, C ++, Java, etc. tienen operaciones como asignaciones de variables, llamadas a funciones y condiciones de prueba únicamente, la puntuación ABC tiene estos tres componentes. [1]
Si el vector ABC se denota como <5,11,9> para una subrutina , significa que la subrutina tiene 5 asignaciones, 11 ramas y 9 condicionales. Para fines de estandarización, los recuentos deben incluirse entre corchetes angulares y escribirse en el mismo orden según la notación .,>
A menudo es más conveniente comparar los tamaños del código fuente utilizando un valor escalar. Los recuentos ABC individuales son distintos, por lo que, según Jerry Fitzpatrick, consideramos que los tres componentes son ortogonales , lo que permite calcular una magnitud ABC escalar como se muestra arriba.
Las puntuaciones ABC escalares pierden algunos de los beneficios del vector. En lugar de calcular una magnitud vectorial, la suma ponderada de los vectores puede admitir una comparación de tamaño más precisa. Las puntuaciones escalares ABC no deben presentarse sin los vectores ABC que las acompañan, ya que los valores escalares no son la representación completa del tamaño.
Teoría
Las reglas específicas para contar los valores del vector ABC deben interpretarse de manera diferente para diferentes idiomas debido a las diferencias semánticas entre ellos.
Por lo tanto, las reglas para calcular el vector ABC difieren ligeramente según el idioma. Definimos las reglas de cálculo de métricas ABC para C, C ++ y Java a continuación. Con base en estas reglas, se pueden interpretar las reglas para otros lenguajes imperativos. [1]
Reglas ABC para C
Las siguientes reglas dan el recuento de asignaciones, ramas y condicionales en la métrica ABC para C :
- Agregue uno al recuento de tareas cuando:
- Ocurrencia de un operador de asignación ( =, * =, / =,% =, + =, << =, >> =, & =,! =, ^ = ).
- Ocurrencia de un operador de incremento o decremento ( ++, - ).
- Agregue uno al recuento de sucursales cuando:
- Ocurrencia de una llamada a función .
- Ocurrencia de cualquier instrucción goto que tiene un objetivo en un nivel más profundo de anidamiento que el nivel al goto.
- Agregue uno al recuento de condiciones cuando:
- Ocurrencia de un operador condicional ( <,>, <=,> =, ==,! = ).
- Ocurrencia de las siguientes palabras clave (' else ', ' case ', ' default ', ' ? ').
- Ocurrencia de un operador condicional unario .
Reglas ABC para C ++
Las siguientes reglas dan el recuento de asignaciones, ramas y condicionales en la métrica ABC para C ++ :
- Agregue uno al recuento de tareas cuando:
- Ocurrencia de un operador de asignación (excluya declaraciones constantes y asignaciones de parámetros predeterminadas ) ( =, * =, / =,% =, + =, << =, >> =, & =,! =, ^ = ).
- Ocurrencia de un operador de incremento o decremento (prefijo o sufijo) ( ++, - ).
- Inicialización de una variable o un miembro de clase no constante .
- Agregue uno al recuento de sucursales cuando:
- Ocurrencia de una llamada a una función o una llamada a un método de clase.
- Ocurrencia de cualquier instrucción goto que tiene un objetivo en un nivel más profundo de anidamiento que el nivel al goto.
- Ocurrencia de operadores 'nuevos' o 'eliminar'.
- Agregue uno al recuento de condiciones cuando:
- Ocurrencia de un operador condicional ( <,>, <=,> =, ==,! = ).
- Ocurrencia de las siguientes palabras clave (' else ', ' case ', ' default ', ' ? ', ' Try ', ' catch ').
- Ocurrencia de un operador condicional unario.
Reglas ABC para Java
Las siguientes reglas dan el recuento de asignaciones, ramas y condicionales en la métrica ABC para Java :
- Agregue uno al recuento de tareas cuando:
- Ocurrencia de un operador de asignación (excluir declaraciones constantes y asignaciones de parámetros predeterminadas) ( =, * =, / =,% =, + =, << =, >> =, & =,! =, ^ =, >>> = ).
- Ocurrencia de un operador de incremento o decremento (prefijo o sufijo) ( ++, - ).
- Agregue uno al recuento de sucursales cuando
- Ocurrencia de una llamada a una función o una llamada a un método de clase.
- Ocurrencia de un operador 'nuevo'.
- Agregue uno al recuento de condiciones cuando:
- Ocurrencia de un operador condicional ( <,>, <=,> =, ==,! = ).
- Ocurrencia de las siguientes palabras clave (' else ', ' case ', ' default ', ' ? ', ' Try ', ' catch ').
- Ocurrencia de un operador condicional unario.
Aplicaciones
Independiente del estilo de codificación
Dado que la métrica de puntuación ABC se basa en la idea de que tareas como el almacenamiento de datos, la ramificación y las pruebas condicionales , esta métrica es independiente del estilo de codificación del usuario.
Estimación del tiempo del proyecto
El cálculo de la puntuación ABC ayuda a estimar la cantidad de tiempo necesario para completar un proyecto. Esto se puede hacer estimando aproximadamente el puntaje ABC del proyecto y calculando el puntaje ABC del programa en un día en particular. La cantidad de tiempo necesario para la finalización del proyecto se puede obtener dividiendo la puntuación ABC del proyecto por la puntuación ABC obtenida en un día.
Cálculo de la tasa de errores
La tasa de errores se calculó originalmente como Número de errores / LOC . Sin embargo, el LOC no es una medida confiable del tamaño del programa porque depende del estilo de codificación. Una forma más precisa de medir la tasa de errores es contar el - Número de errores / puntuación ABC .
Comparación de programas
Los programas escritos en diferentes idiomas se pueden comparar con la ayuda de los puntajes ABC porque la mayoría de los idiomas usan asignaciones, ramas y declaraciones condicionales.
La información sobre el recuento de los parámetros individuales (número de asignaciones, ramas y condiciones) puede ayudar a clasificar el programa como 'fuerte de datos' o 'función fuerte' o 'lógica fuerte'. La forma vectorial de una puntuación ABC puede proporcionar información sobre los principios fundamentales de la aplicación , mientras que los detalles se pierden en la forma escalar de la puntuación.
Métrica lineal
Las puntuaciones ABC son lineales , por lo que se puede puntuar cualquier archivo, módulo, clase, función o método. Por ejemplo, la puntuación ABC (vectorial) de un módulo es la suma de las puntuaciones de sus submódulos. Las puntuaciones ABC escalares, sin embargo, no son lineales.
Ver también
- Complejidad del software
- Medidas de complejidad de Halstead
- Complejidad ciclomática
- Complejidad de la sincronización
- Métrica de software
Referencias
- ↑ a b c d Fitzpatrick, Jerry (1997). "Aplicación de la métrica ABC a C, C ++ y Java" (PDF) . Informe C ++ .
- ^ Halstead, Maurice (1977). Elementos de la ciencia del software . Holanda Septentrional: Elsevier.
- ^ Fenton, Norman E. (1991). "Métricas de software: éxitos, fracasos y nuevas direcciones" (PDF) . Chapman y Hall .
- ^ Kitchenham, Barbara (diciembre de 1995). "Hacia un marco para la validación de medidas de software". Transacciones IEEE sobre ingeniería de software . 21 (12): 929–944. doi : 10.1109 / 32.489070 . S2CID 8608582 .
- ^ Fitzpatrick, Jerry (2017). "Apéndice A". Leyes atemporales del desarrollo de software . Corporación de Renovación de Software. ISBN 978-0999335604.
enlaces externos
- Aplicar la métrica ABC a C, C ++ y Java
- Métrica ABC
- Reglas de tamaño y complejidad
- Descifrando las métricas del código Ruby
- La métrica ABC