Tome un camino más rápido e inteligente hacia la automatización de pruebas C/C++ impulsada por IA. Descubra cómo >>
¡Haga un recorrido autoguiado de Parasoft C/C++test!
Vea cómo lograr el cumplimiento de DO-178C.
ComenzarWEBINAR
Lograr la conformidad con la norma DO-178C para el software de sistemas de aviónica presenta desafíos únicos, especialmente a la hora de garantizar una cobertura estructural completa a nivel de código objeto. Esta presentación explora métodos prácticos para optimizar este proceso, centrándose en cómo reducir el esfuerzo de prueba y acelerar el tiempo de comercialización.
Aprenda métodos para centrar las pruebas y reducir el esfuerzo redundante al realizar pruebas de cobertura de código de máquina estructural como se describe en DO-178C 6.4.4.2. Los lenguajes fuente de alto nivel, como C++, están en constante evolución. Cuanto más fácil sea para un desarrollador expresarse a través de un lenguaje fuente de alto nivel, más difícil será rastrear el código de máquina equivalente generado por el compilador.
Guiada por ejemplos, esta presentación adopta un enfoque iterativo del proceso de producción de una cobertura estructural completa del código de máquina y muestra las mejores prácticas en acción para reducir el tiempo de comercialización.
Puntos clave
Cumplimiento de DO-178C Implica varios objetivos clave que pueden verse influenciados por el Nivel de Garantía de Diseño (DAL) de su software. Estos incluyen:
Parasoft ofrece soluciones para abordar estos desafíos, incluidas integraciones con herramientas ALM para trazabilidad, soporte para varios estándares de codificación y capacidades de verificación de hardware en el objetivo.
Explore cómo DO-178C estructura el proceso de cumplimiento del software en nuestra guía completa.
Lograr la corrección a nivel de código objeto es una tarea importante. La estrategia consiste en centrarse en pequeñas secciones aisladas con deficiencias en la cobertura estructural. Esto implica aplicar la instrumentación de objetos a los resultados de las pruebas a nivel de código fuente.
Al instrumentar a nivel de origen para requisitos, MCDC (Cobertura de Condición/Decisión Modificada) y pruebas en el objetivo, se puede lograr una cobertura estructural casi completa a nivel de objeto sin necesidad de examinar directamente el código objeto inicialmente. Los informes acumulativos pueden combinar los resultados de diversos métodos de prueba con la instrumentación a nivel de objeto.
Consideremos un ejemplo simple A OR B expresión. Lograr una cobertura del 100% de MCDC a nivel de fuente requiere tres ejecuciones de prueba para aislar A y BCuando se compila este código C, el ensamblaje resultante podría tener diferentes estructuras de ramificación.
Si comienza las pruebas MCDC desde cero a nivel de ensamblado, podría perder la cobertura de una sentencia de rama si omite una ejecución de prueba necesaria. Sin embargo, si ya realizó las pruebas MCDC a nivel de código fuente, es probable que esa tercera ejecución ya esté incluida, lo que proporciona una cobertura completa a nivel de ensamblado sin esfuerzo adicional.
Los compiladores suelen introducir comprobaciones implícitas, comprobaciones de límites u optimizaciones que no son directamente evidentes en el código fuente de alto nivel. Esto puede provocar una cobertura insuficiente únicamente a nivel del código fuente.
Por ejemplo, probar una función en C podría lograr una cobertura MCDC del 100 % en el nivel de código fuente. Sin embargo, al examinar la salida del ensamblado, podría encontrar una cobertura de bifurcación del 97 %, con una instrucción de salto específica (p. ej., jump if above to L51) no se está ejerciendo.
Esta deficiencia podría deberse a una comprobación de valor de enumeración fuera de los límites introducida por el compilador. Para solucionarlo, puede crear un caso de prueba específico con un parámetro que fuerce el valor de enumeración fuera de su rango esperado. Al ejecutar esta prueba aislada y fusionar los resultados de su cobertura con la cobertura MCDC existente, puede corregir la brecha y aumentar la cobertura general de la rama.
Algunas construcciones generadas por el compilador, como el formato de archivos, la interfaz funcional o las comprobaciones del sistema (p. ej., la protección contra la destrucción de pila), podrían no tener una representación directa en el código fuente. Para obtener cobertura para estas, deberá instrumentar el propio ejecutable de producción.
Por ejemplo, si una función termina con una llamada de comprobación de pila fallida, y esta ruta no está cubierta por las pruebas unitarias, se instrumentaría el ejecutable de producción. Al ejecutar este ejecutable instrumentado y manipular su estado (por ejemplo, modificando un valor de registro como RCX Para forzar el fallo de un salto, puede ejercitar la ruta deficiente. Los datos de cobertura de esta ejecución se pueden combinar con sus informes de cobertura existentes, logrando una cobertura de instrucción del 100 % para esa sección.