Slide 1

Métricas de Código Fuente

Más de 300 métricas proporcionan una medición objetiva
y visualización de cualidades no funcionales.

Métricas de Código Fuente Automatizadas para C y C++

Cantata ofrece más de 300 métricas de código fuente para C/C++, proporcionando una medición objetiva y útil, así como visualización de las cualidades no funcionales de su código fuente. Estas métricas incluyen:

Medir cualidades no funcionales implica la inspección estática del código fuente, que evalúa varias características no funcionales relacionadas con el software. Esto se activa al construir un proyecto de software habilitado para Cantata. Puedes configurar el análisis a través de los siguientes métodos:

  • Habilitar/deshabilitar el análisis de encabezados del sistema.
  • Especificar qué métricas de análisis estático calcular mediante un archivo de opciones.
  • Especificar los archivos fuente, funciones o clases que se analizarán.
  • Especificar las declaraciones precisas de código fuente que se analizarán mediante pragmas en el código fuente.

Al utilizar Cantata, puede mejorar la calidad de su código C/C++, hacerlo más mantenible y potenciar su proceso de desarrollo. Pruebe Cantata hoy mismo y descubra cómo puede ayudar a su proyecto de software.

Complejidad y Estructura del Código

Cantata ofrece soporte para medir métricas de complejidad del código en código fuente procedural. Estas métricas son reconocidas por la academia y son enfoques de sentido común para aumentar la mantenibilidad del software a través de una medición objetiva. Las métricas soportadas incluyen:

  • Métricas de Ciencia del Software de Halstead
  • Métricas de complejidad ciclomática de McCabe, Myers y Hansen
  • Nivel promedio y máximo de anidamiento
  • Recuentos básicos de constructos de lenguaje como comentarios, líneas de código, declaraciones y parámetros.

Al incorporar estas métricas en el proceso de desarrollo, Cantata puede ayudar a los desarrolladores a identificar posibles áreas problemáticas en la base de código y realizar mejoras para aumentar la calidad y mantenibilidad del software.

Implementación Orientada a Objetos

Además de las medidas de complejidad del código para el código orientado a objetos, Cantata también proporciona una serie de métricas que miden aspectos de la implementación orientada a objetos. Estas incluyen:

  • Conjunto de métricas MOOSE de Chidamber y Kemerer.
  • Conjunto de métricas MOOD de Fernando Brito e Abreu.
  • Conjunto de métricas QMOOD de Bansiya y Davis.
  • Métricas de dependencia orientada a objetos de Robert Martin.
  • Métricas orientadas a objetos de McCabe.
  • Métricas de entropía de clase de Bansiya.

Todas las métricas se proporcionan a nivel de función, clase, unidad de traducción o sistema, según corresponda.

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.