¡Descubre GoogleTest, con certificación TÜV y la tecnología Agentic AI para pruebas de C/C++!
Obtenga los detalles »
Saltar a la sección
Blog de Parasoft
Descubra cómo supervisar las métricas de cobertura de código e identificar y solucionar de forma eficiente las deficiencias de cobertura en software crítico para la seguridad utilizando C/C++test CT con GoogleTest, certificado por TÜV SÜD.
Saltar a la sección
Para los equipos que desarrollan sistemas críticos para la seguridad, cumplir con los requisitos de cobertura de código no se trata solo de ejecutar pruebas, sino que requiere un flujo de trabajo fundamentalmente integrado entre el marco de pruebas unitarias, la trazabilidad de los requisitos y las herramientas de cobertura.
Las pruebas unitarias son un elemento fundamental de la proceso de verificación y validación (V&V) Para software integrado y crítico para la seguridad. Todas las principales normas de seguridad funcional requieren evidencia objetiva de la exhaustividad de las pruebas a nivel de unidad.
Esta exhaustividad se demuestra normalmente mediante la trazabilidad de los requisitos y los informes de cobertura de código estructural. En consecuencia, cualquier Marco de pruebas unitarias utilizado en un cumplimiento El contexto debe integrarse a la perfección con el sistema de gestión de requisitos (RMS) del proyecto y las herramientas de cobertura de código.
En un escenario de desarrollo ideal, los equipos comienzan con requisitos bien definidos e inequívocos, acompañados de una especificación de pruebas completa. La implementación se lleva a cabo en consonancia con estos requisitos, y los informes de cobertura de código solo proporcionan evidencia objetiva de la exhaustividad de la verificación a nivel del código fuente.
En la práctica, los equipos rara vez logran este ideal. A menudo, comienzan la implementación y el desarrollo de pruebas con requisitos incompletos o en constante evolución.
En algunos casos, los requisitos formales pueden estar completamente ausentes; por ejemplo, cuando los procesos de verificación y validación y de seguridad se aplican retrospectivamente a una base de código heredada que no se desarrolló originalmente bajo un marco de seguridad funcional.
En tales situaciones, el desarrollo, la definición de requisitos y la creación de pruebas se llevan a cabo en paralelo. Este flujo de trabajo obliga a los equipos a:
Una brecha en la cobertura puede indicar código muerto, un caso de prueba faltante o un requisito incompleto o no definido.
En todos los casos, la tarea fundamental consiste en comprender por qué una determinada estructura de código permanece sin cubrir. Para métricas relativamente sencillas, como la cobertura de líneas, este análisis suele ser directo. Sin embargo, criterios más avanzados, como MC/DC (cobertura de condiciones/decisiones modificadas), pueden dificultar considerablemente el análisis de la causa raíz.
Si bien este flujo de trabajo dista mucho de ser el ideal, en la práctica el proceso suele comenzar con la identificación de una brecha en la cobertura, seguida del análisis de los estímulos faltantes necesarios para ejercitar el código no cubierto.
Basándose en este análisis, los desarrolladores crean un caso de prueba para cubrir el comportamiento que no se había probado previamente.
El caso de prueba resultante constituye la base para mejorar la comprensión del sistema y orientar los refinamientos posteriores y la definición de requisitos.
Las herramientas de prueba unitaria bien integradas pueden respaldar este proceso al proporcionar detalles sobre las deficiencias de cobertura y, en algunos casos, ayudar a generar los casos de prueba iniciales para impulsar el perfeccionamiento de los requisitos, como se describió anteriormente.
Prueba CT de Parasoft C/C++ Ofrece una distribución de GoogleTest con certificación TÜV, junto con informes integrados de cobertura de código, lo que simplifica significativamente el análisis de brechas de cobertura. También incluye capacidades basadas en IA para la generación automatizada de casos de prueba.
Los equipos pueden ejecutar sus conjuntos de pruebas de GoogleTest y recopilar la cobertura de código tanto localmente como dentro de las canalizaciones de CI con C/C++test CT.
Muchos equipos valoran la posibilidad de ejecutar localmente un subconjunto específico de casos de prueba de GoogleTest antes de confirmar los cambios, seguido de la ejecución del conjunto completo de pruebas en el pipeline de CI. Los resultados de cobertura se pueden recuperar de los pipelines de CI y analizar directamente en el IDE, lo que permite un ciclo de retroalimentación eficiente. Para los equipos que utilizan Visual Studio Code, C/C++test CT ofrece soporte optimizado para este flujo de trabajo.
Una vez que se dispone de los informes de cobertura, el siguiente paso es el análisis de brechas. C/C++test CT simplifica este proceso, especialmente para criterios de cobertura más exigentes como MC/DC.
La siguiente captura de pantalla ilustra un ejemplo de los resultados de cobertura MC/DC para una decisión específica dentro de una función.

Un ejemplo de resultados de cobertura MC/DC para una decisión específica dentro de una función en Parasoft C/C++test CT.
Como se muestra, los resultados ofrecen un desglose detallado de las condiciones cubiertas y no cubiertas dentro de la decisión, junto con una tabla del conjunto mínimo precalculado de vectores de prueba necesarios para lograr una cobertura del 100 %. Este conjunto mínimo es particularmente valioso porque orienta a los desarrolladores hacia las combinaciones de condiciones específicas que deben probarse para cumplir con los requisitos de MC/DC.
Una vez identificadas las deficiencias en la cobertura, el siguiente paso suele ser desarrollar uno o más casos de prueba que ejerciten el código no cubierto, lo que permite a los equipos evaluar si es necesario actualizar o refinar los requisitos. Como ya se mencionó, si bien esto representa un flujo de trabajo reactivo, es una práctica común en muchos proyectos.
Estos casos de prueba se pueden crear manualmente, basándose en la información de cobertura proporcionada por C/C++test CT, o generarse automáticamente utilizando las herramientas disponibles.
C/C++test CT incluye un servidor MCP que expone datos de cobertura estructurados a agentes de IA. Para métricas avanzadas como MC/DC, estos datos incluyen información detallada sobre los vectores de prueba faltantes necesarios para evaluar completamente todas las condiciones dentro de una decisión dada.
Con el servidor MCP de C/C++test CT, los usuarios, entre muchas otras consultas, pueden pedirle al agente de IA: "Genera casos de prueba de GoogleTest para eliminar las brechas de cobertura en el archivo <>".
El gráfico que aparece a continuación muestra una vista simplificada del flujo de datos entre el motor de cobertura, el servidor MCP y el agente de IA.
Flujo de datos simplificado entre el motor de cobertura, el servidor MCP y el agente de IA.
Mediante esta información estructurada, los agentes de IA pueden generar automáticamente casos de prueba de GoogleTest para escenarios no cubiertos, lo que ayuda a mejorar la cobertura y a reducir el esfuerzo de los desarrolladores. Posteriormente, los desarrolladores pueden revisar estas pruebas generadas y evaluar su relevancia con respecto al comportamiento del sistema y los requisitos existentes o aún por definir.
Al combinar el marco de trabajo GoogleTest, certificado por TÜV, con análisis de cobertura avanzado y generación de pruebas mediante IA, C/C++test CT simplifica el proceso para lograr una cobertura de código completa y el cumplimiento normativo. Permite a los equipos que desarrollan con C++ moderno identificar deficiencias en las pruebas, generar las pruebas faltantes y mantener un flujo de trabajo de verificación eficiente y escalable.
Descubre cómo tu equipo puede alcanzar sus objetivos de cobertura de código utilizando C/C++test CT integrado con GoogleTest, la única herramienta certificada por TÜV.
Blog
5 minutos de lectura
DEMOSTRACIÓN BREVE
White Paper