Tome un camino más rápido e inteligente hacia la automatización de pruebas C/C++ impulsada por IA. Descubra cómo >>
White Paper
¿Quieres un resumen rápido antes de empezar? Empieza a continuación.
Los equipos de C/C++ que priorizan la seguridad utilizan marcos de pruebas unitarias para garantizar una implementación correcta y el cumplimiento de los requisitos del software. Los marcos de código abierto como GoogleTest ofrecen una integración sencilla con compilaciones complejas, en línea con las tendencias del sector hacia el uso del código abierto.
Sin embargo, adoptar GoogleTest para el cumplimiento de estándares críticos de seguridad presenta dos desafíos principales: ampliar GoogleTest con funcionalidades críticas para el cumplimiento de estándares y navegar por el proceso formal de calificación de herramientas requerido para el desarrollo de software crítico de seguridad.
Las normas de seguridad evitan intencionalmente una definición rígida de "unidad", ya que esta depende de la tecnología y la arquitectura. Desde una perspectiva de cumplimiento, una unidad suele ser el componente arquitectónico más pequeño con una interfaz definida que puede probarse de forma aislada.
Normas clave como ISO 26262 (automoción) y DO-178C (aviación) mandato riguroso pruebas a nivel de unidad, lo que requiere un conjunto común de técnicas de verificación:
Para cumplir, prácticas de desarrollo debe incluir un marco de pruebas unitarias, Herramientas para la monitorización de cobertura y la inyección de fallosy un sistema de informes que correlaciona las pruebas con los requisitos de trazabilidad.
GoogleTest ofrece una amplia funcionalidad para definir casos de prueba y admite diversas estrategias de fuentes de prueba requeridas por las normas. La norma ISO 26262 recomienda cuatro métodos para derivar casos de prueba: análisis de requisitos, generación y análisis de clases de equivalencia, análisis de valores límite y estimación de errores basada en el conocimiento y la experiencia.
Los frameworks comerciales suelen ser compatibles con los cuatro métodos de automatización, pero a menudo imponen API propietarias que abstraen del código fuente. Estas API dificultan la creación de pruebas para C++ moderno, lo que dificulta enormemente la inicialización de contenedores STL y las entradas lambda.
GoogleTest destaca por su flexibilidad y su moderna API de C++ para la creación de pruebas, lo que simplifica y facilita la gestión de escenarios de estructuras de datos complejas. Los escenarios de prueba se adaptan mejor al tamaño del equipo y al volumen de casos de prueba.
Calificación de herramientas para aplicaciones de GoogleTest relacionadas con la seguridad Requiere atención especial. Los frameworks comerciales están precertificados con paquetes de calificación, pero la comunidad de código abierto no ofrece dicho soporte para GoogleTest.
La experiencia de Parasoft con empresas automotrices y aeroespaciales líderes muestra que los equipos prefieren fuertemente la facilidad de uso y la claridad de las pruebas de GoogleTest por sobre las capacidades básicas de generación, especialmente cuando se utilizan los sistemas de compilación Bazel.
La calificación de herramientas es un proceso formal exigido por las normas de seguridad para garantizar que el riesgo de error relacionado con las herramientas sea aceptablemente bajo. La comunidad de código abierto no ofrece soporte para la calificación de GoogleTest.
El proceso de calificación debe incluir la clasificación y validación de herramientas, y concluir con la documentación pertinente. La documentación contiene directrices para implementaciones en desarrollo crítico (Manual de Seguridad de Herramientas/TSM).
Clasificación de herramientas Determina el rigor de la calificación basándose en los casos de uso de la herramienta y medidas adicionales. Una práctica común es el análisis del impacto de la herramienta: la probabilidad de que la herramienta introduzca un error o no lo detecte.
Los frameworks de pruebas unitarias como GoogleTest no generan código para el sistema de destino, por lo que no existe la posibilidad de introducir un error. Sin embargo, pueden no detectar errores. Una aserción incorrecta puede reportar una prueba fallida como aprobada, lo que resulta en la implementación de código defectuoso en el producto.
La norma ISO 26262 define tres niveles de confianza (TCL 1-3), siendo el nivel 3 el que impone el máximo rigor de calificación. La norma DO-178C utiliza cinco niveles (TQL 1-5). Los marcos de pruebas unitarias suelen clasificarse como TQL5 para el cumplimiento de la norma DO-178C.
La calificación de la herramienta mediante validación demuestra que se comporta según lo estipulado en los requisitos operativos, lo que garantiza una probabilidad de error aceptablemente baja. Dos aspectos críticos son los requisitos operativos de la herramienta y las pruebas que los validan.
Para la certificación de GoogleTest, ambos aspectos requieren una inversión significativa. GoogleTest incluye documentación de calidad, pero no dispone de requisitos formales para la validación. Las organizaciones deben desarrollar la documentación de requisitos y las pruebas de validación.
Los requisitos desempeñan un papel fundamental en los procesos de seguridad, ya que especifican con precisión qué se ha validado y qué se puede utilizar de forma segura. La documentación de herramientas no puede sustituir a los requisitos, ya que cumplen funciones diferentes.
La experiencia de Parasoft resultó en un proceso de tres fases:
Los requisitos se desarrollaron con base en la documentación pública de GoogleTest, y se realizaron experimentos específicos cuando la documentación no era exhaustiva. Cada requisito se vinculó con un elemento de la API, el código fuente y la documentación del usuario para facilitar el mantenimiento.
El análisis completo dio como resultado Más de 1500 requisitos.
Recomendaciones:
Los casos de prueba de calificación deben derivar de los requisitos para fines de validación. Los casos de prueba preexistentes de GoogleTest son de alta calidad, pero difíciles de usar directamente en la calificación debido a desajustes de granularidad y pruebas negativas insuficientes.
La experiencia de Parasoft muestra que la mayoría de los casos de prueba de validación se desarrollaron desde cero.
Un desafío clave fue desarrollar una estrategia de pruebas para las cadenas de llamadas de API. GoogleTest es un framework basado en plantillas que ofrece una enorme flexibilidad. Realizar pruebas exhaustivas de todas las combinaciones posibles de API es imposible. La macro EXPECT_CALL de GoogleTest Mock ilustra este desafío: acepta parámetros y puede ajustarse con modificadores, lo que resulta en un número astronómico de casos de prueba.
Enfoque de todos los pares: Para cadenas de llamadas largas, esta metodología garantiza que cada combinación de dos modificadores diferentes se pruebe al menos una vez en lugar de probar todas las combinaciones posibles.
Estrategia inspirada en la cobertura de MC/DC: Se aplicó a cadenas de llamadas largas de Afirmaciones/Expectativas. Toda la cadena de llamadas se consideró una decisión, con cada modificador como condición. Las pruebas se centraron en demostrar que cada modificador individual puede afectar el resultado, manteniendo los demás modificadores inalterados.
Ambas estrategias permitieron una reducción significativa en el número de casos de prueba para invocaciones de API complejas.
El proceso de calificación requiere documentos específicos que incluyen requisitos operativos, declaración de nivel de confianza, plan de calificación, matriz de cobertura de requisitos y pautas para la aplicación segura de herramientas (Manual de seguridad de herramientas/TSM).
Las organizaciones deben extraer las directrices relevantes de TSM de la documentación de GoogleTest y analizar todos los errores conocidos para determinar sus implicaciones. Aplicar las restricciones de TSM es un desafío, generalmente manual. Parasoft aplicó reglas de análisis estático para automatizar la aplicación de muchas recomendaciones de TSM, lo que redujo significativamente los costos.
El framework de pruebas unitarias GoogleTest es probablemente la mejor opción para probar aplicaciones C++ modernas. Los proyectos que utilizan Adaptive AUTOSAR o plataformas similares, así como aquellos basados en bibliotecas C++ modernas de IA/ML, seleccionan GoogleTest por defecto. El creciente uso de GoogleTest refleja una fuerte tendencia en la industria hacia el software de código abierto para el desarrollo de sistemas de seguridad.
El despliegue GoogleTest para el desarrollo de software crítico para la seguridad Es posible. Sin embargo, se requiere un esfuerzo considerable y un equipo capacitado para calificar la herramienta con éxito. Las organizaciones deben reconocer que la calificación de GoogleTest puede no ser un esfuerzo único. Con los avances en C++ moderno y las nuevas funcionalidades añadidas en versiones posteriores, los equipos de desarrollo pueden exigir la adopción de versiones más recientes, lo que obliga a recalificar la herramienta.
Sin embargo, las ganancias generales en eficiencia en las pruebas de software, esfuerzo de integración de herramientas, facilidad de desarrollo de activos de prueba y mantenimiento superan los costos adicionales relacionados con el cumplimiento.
¿Listo para sumergirte más profundamente?
FICHA DE DATOS
WEBINAR
reloj de 29 minutos
BLOG
6 minutos de lectura