


Estimación del esfuerzo de las pruebas
Comprender la complejidad del código fuente es esencial para estimar el tiempo necesario para las pruebas. Las métricas de código fuente de Cantata utilizan medidas de complejidad estándar de la industria para proporcionar estimaciones precisas de los esfuerzos de prueba de los elementos fuente. Por ejemplo, la Complejidad Ciclomática McCabe y sus variantes pueden utilizarse para determinar el número mínimo de casos de prueba necesarios para lograr una cobertura completa del código de decisión.
Visualización e informes de métricas
La visualización de datos a través de gráficos puede mejorar la comprensión y proporcionar una visión general de las tendencias que pueden no ser inmediatamente evidentes a partir de métricas numéricas por sí solas. Los gráficos pueden trazarse a varios niveles, como clase, función o categoría. Aunque las métricas formateadas son valiosas, la representación gráfica puede ser aún más útil para el análisis de datos.

Ejemplos de uso de las métricas
Dado que Cantata puede producir más de 300 métricas estáticas sobre el código fuente, a continuación se muestran algunos ejemplos de métricas específicas y su aplicación más útil. Para obtener una lista exhaustiva, consulte el manual de Cantata.
Métricas estándar del tamaño del código
Se trata de métricas sencillas relativas al número de líneas de código, comentarios, etc.
Nombre | Descripción | Alcance |
---|---|---|
LINE_CODE | Número total de líneas de código (incluidas las líneas en blanco y los comentarios). | Función o sistema |
LINE_COMMENT | Número total de líneas de comentarios (tanto en C como en C++). | Función o sistema |
LINE_SOURCE | Número total de líneas de código fuente (sin incluir líneas en blanco ni comentarios). | Función o sistema |
Código estándar Métricas de calidad
La calidad de un programa informático se basa en cierta medida en el número de casos de código dudoso que contiene. Estas métricas alertan al usuario de tales incidencias.
Nombre | Descripción | Alcance |
---|---|---|
LABEL_GOTOUSED | Número de etiquetas goto que se utilizan. | Función o sistema |
LABEL_GOTOUNUSED | Número de etiquetas goto no utilizadas. | Función o sistema |
STMT_GOTO | Número de sentencias goto. | Función o sistema |
SWITCH_NODEF | Número de sentencias switch sin valor por defecto. | Función o sistema |
SWITCH_FALLTHRU | Número de bloques de casos no vacíos que pasan al siguiente bloque de casos. | Función o sistema |
UNREACHABLE | Número de sentencias estáticamente inalcanzables en el ámbito dado. | Función o sistema |
Métricas estándar de complejidad
La complejidad de un fragmento de código suele considerarse una medida que afectará al esfuerzo que supone su mantenimiento. Estas métricas intentan estimar la complejidad del software basándose en diversos factores, como el nivel de anidamiento.
Name | Description | Scope |
---|---|---|
HALSTEAD_PARAMS | Número de parámetros. | Función |
MCCABE | El valor de complejidad ciclomática McCabe de la función. | Función |
NESTING_MAX | Nivel máximo de anidamiento de sentencias. | Función |
NESTING_SUM | Suma de los niveles de anidamiento de todas las sentencias de la función. | Función |
Especialista en métricas orientadas a objetos
Muchas métricas estándar siguen siendo aplicables a los sistemas OO. Por ejemplo, los niveles máximos de anidamiento dentro de las funciones también son aplicables a los métodos de las clases. Sin embargo, también hay una serie de métricas OO específicas. Éstas pueden referirse a una clase determinada o al sistema en su conjunto.
Nombre | Descripción | Alcance |
---|---|---|
MAX_DEPTH | Longitud máxima de la ruta de herencia a la última clase base. | Sistema |
MOOD_AD | Número de nuevos atributos definidos para esta clase. | Clase |
MOOD_MD | Número de métodos nuevos más métodos anulados definidos para esta clase. | Clase |
MOOD_AHF | Proporción de atributos ocultos (privados o protegidos). | Clase |
MOOD_MHF | Proporción de métodos ocultos (privados o protegidos). | Clase |
MOOSE_CBO | Nivel de acoplamiento entre objetos. El número de clases con las que esta clase está acoplada (a través de una dependencia no hereditaria de esta clase a aquella, o viceversa). | Sistema |
MOOSE_WMC_MCCABE | Valor medio de complejidad ciclomática McCabe de todos los métodos de la clase (excluidos los métodos heredados) definidos en esta unidad de traducción. | Clase |
MOOSE_LCOM98 | Medida de la falta de cohesión de los métodos de Chidamber y Kemerer (definición de 1998). El número mínimo de grupos disjuntos de métodos (nuevos o modificados) (excluyendo constructores), donde cada grupo opera sobre un conjunto disjunto de variables de instancia (nuevas). | Clase |
MOOSE_RFC | Respuesta de Chidamber & Kemerer para una métrica de clase. El número de métodos o funciones definidos en la clase o llamados por métodos de la clase. | Clase |
Los aspectos «OO» del lenguaje C++ han tendido a hacer menos útiles las antiguas métricas procedimentales de C, pero afortunadamente nuevos conjuntos de métricas han ocupado su lugar. Las más populares son MOOSE (Metrics for OO Software Engineering), MOOD (Metrics for OO Design) y QMOOD (Quality Metrics for OO Design). Entre ellas definen una serie de métricas que pueden ser útiles para juzgar si una clase C++ «merece la pena ser probada». Algunos ejemplos son:
Calidad identificada en el código fuente | EJEMPLO DE MÉTRICAS |
---|---|
Diseño deficiente o cuestionable |
MCCABE Calidad MOOSE Falta de cohesión entre métodos MOOD Factor de ocultación de atributos |
Número estimado de fallos |
Definición de métodos MOOD Atributos MOOD definidos Métodos MOOSE ponderados en clase |
Complejidad general |
MOOSE Profundidad de la herencia QMOOD Número de antepasados MOOSE Número de hijos |
Esfuerzo estimado de la prueba |
Métodos disponibles Respuesta MOOSE para una clase Acoplamiento MOOSE entre objetos Factor de ocultación de métodos MOOD |
Métricas adicionales del sistema
Se pueden crear métricas adicionales a nivel de sistema tomando promedios para varias métricas de ámbito de clase o función. Por ejemplo, podemos calcular el valor medio de Complejidad Ciclomática McCabe para todas las funciones o métodos de nuestro sistema.