Seminario web destacado: Presentación de la prueba CT de Parasoft C/C++ para pruebas continuas y excelencia en el cumplimiento | Vea ahora

Shift dejó sus pruebas de software críticas para la seguridad con la automatización de pruebas

Foto de cabeza de Ricardo Camacho, Director de Cumplimiento de Seguridad y Seguridad
16 de Octubre de 2023
8 min leer

El desarrollo de software crítico para la seguridad tiene un alto costo. Sin embargo, esto se puede reducir mediante la automatización y las pruebas de software con desplazamiento hacia la izquierda para reducir la tasa de error. Continúe leyendo para obtener más información.

Estamos en una crisis de costos con el software crítico para la seguridad, lo que significa que la mayor funcionalidad requerida ha superado la capacidad de pagar por su desarrollo. El programa Boeing 787, por ejemplo, requirió 6.5 millones de líneas de código, cuyo diseño, desarrollo y prueba costó 4 mil millones de dólares. Las cifras de costes de Boeing 777X El programa no fue divulgado públicamente y El 737 MAX de Boeing Se estimó originalmente en 3.6 millones de dólares, pero aumentó a 6.3 millones de dólares, lo que no incluye los miles de millones en costos de fallas.

La tendencia en los principales proyectos críticos para la seguridad muestra un crecimiento exponencial en los costos totales, siendo el software una porción mayor del presupuesto total de desarrollo año tras año. El próximo gran programa aeroespacial probablemente será inasequible si se utilizan las mismas técnicas utilizadas en programas anteriores. ¿Entonces, qué podemos hacer?

Certificación de seguridad y prueba y verificación requeridas. Se requiere una gran parte del presupuesto de desarrollo de software. Prueba de cambio a la izquierda de software (probado anteriormente en el SDLC) si bien aprovecha la automatización, genera grandes dividendos en costo, riesgo y cronograma. La siguiente imagen muestra el costo en millones de dólares por cada mil líneas de código para el desarrollo de software de aerolíneas comerciales, lo que muestra claramente el aumento exponencial.

Gráfico que muestra el costo creciente de los sistemas de aviónica por KLOC (millones de dólares)
Figura 1: Costo de desarrollo de software por línea de código en proyectos de aviación comercial. Los datos se tomaron de las métricas de los proyectos de Airbus y Boeing.

Comprender cuándo se introducen y detectan errores

Como era de esperarse, los La mayoría de los defectos se introducen en un proyecto al principio., incluso antes de que se escriba la primera línea de código. La mayoría de los errores se encuentran y corrigen durante las pruebas. Pero un buen porcentaje, hasta el 20%, se descubre durante la operación después de que el producto ha sido vendido y enviado.

En los sistemas certificados, esto significa un ciclo de reparación, prueba y recertificación extremadamente costoso o soluciones alternativas para el problema por parte del operador. El siguiente gráfico muestra el porcentaje relativo de errores introducidos y detectados en cada fase del ciclo de vida del desarrollo de software.

Gráfico que muestra el porcentaje de defectos introducidos frente a los detectados a lo largo de las fases de desarrollo.
Figura 2: Gráfico que muestra el porcentaje de defectos introducidos y detectados durante las diferentes fases de desarrollo. Fuente: Medición de software aplicada: análisis global de productividad y calidad, Capers Jones, 2008.

Los defectos son más baratos de solucionar al principio del ciclo de vida. Se vuelven exponencialmente más costosos de encontrar y reparar a lo largo del proyecto. En funcionamiento, una vez que un producto ha llegado a manos de los clientes, es lo más caro de reparar. Los costos de reparación de defectos posteriores a la implementación son conservadores y no incluyen daños a su marca ni responsabilidad por incidentes de seguridad en el campo.

El siguiente gráfico muestra el costo relativo de corregir un defecto en cada etapa del ciclo de vida. Claramente, el objetivo es trasladar los defectos detectados y solucionados a una etapa más temprana del ciclo de vida. En otras palabras, desplazarse hacia la izquierda. Además, es deseable reducir el número de defectos que llegan al cliente, una realidad en todos los ámbitos.

Gráfico que muestra el aumento en el costo relativo para corregir defectos a lo largo de las fases de desarrollo.
Figura 3: Costo relativo de encontrar y corregir errores durante cada fase de desarrollo. Durante los requisitos y el diseño es la línea base (1x) y el lugar menos costoso para corregir los defectos. Fuente de las Figuras 2 y 3: Presentación de SAVI en la Conferencia INCOSE SE 2012.

Pruebas de desplazamiento a la izquierda mediante la automatización de pruebas

La industria del software crítico para la seguridad reconoce la necesidad de cambiar la forma en que se hacen las cosas. Demasiados proyectos están reinventando la rueda, y certificar software nuevo requiere mucho tiempo y es costoso. El crecimiento de la conectividad y la funcionalidad de los nuevos productos significa que los métodos deben cambiar. En esta publicación, no cubriremos todas las técnicas que se proponen, sino que nos concentraremos en el papel que desempeña la automatización de pruebas en el cambio a la izquierda en la reducción, detección y corrección de defectos y vulnerabilidades de seguridad.

Ventajas de la automatización de pruebas

Una gran parte de cualquier proyecto crítico para la seguridad son las pruebas. La automatización es absolutamente necesaria para lograr objetivos de seguridad, protección y calidad. A continuación se muestran ejemplos de las formas en que las herramientas de automatización de pruebas respaldan desarrollo de software moderno métodos y aumentar la productividad de las pruebas y la documentación.

Soporte para canalizaciones ágiles y CI/CD

Se comprenden los problemas del método en cascada y muchos equipos están utilizando métodos de desarrollo más modernos para mejorar la calidad y la seguridad. La automatización de pruebas es una parte importante de cualquier método de desarrollo iterativo, ya que los conjuntos de pruebas se ejecutan en cada nueva iteración de un módulo, componente, etc.

La automatización de pruebas admite estos métodos con repetibilidad. pruebas automatizadas, proporcionando informes en varios niveles para cada prueba pero también resultados acumulativos a lo largo del tiempo. Estas herramientas también están diseñadas para trabajar con procesos de CI al integrarse con el seguimiento de elementos de trabajo, la gestión de requisitos, los sistemas de compilación y los servicios de repositorio de origen. Las herramientas de análisis dinámico son fundamentales para detectar errores de tiempo de ejecución que son difíciles de detectar. El análisis estático juega un papel importante en la detección de defectos antes de que comiencen las pruebas.

Inspecciones de software de soporte

Una de las mejores prácticas para eliminar defectos en las primeras etapas del ciclo de vida del desarrollo son las inspecciones. Las inspecciones significan revisar todo, no sólo el código fuente. Por ejemplo, inspeccionar los requisitos y el diseño es fundamental para prevenir la principal fuente de errores en el sistema. Consulte la Figura 2. Muchos errores están literalmente diseñados en el sistema. Las herramientas desempeñan un papel menor en esta etapa, pero mejoran la eficacia de las revisiones de código.

Las pruebas unitarias automatizadas, la detección dinámica de errores y el análisis estático proporcionan una detección de errores muy mejorada en las primeras etapas de codificación de un proyecto. Los resultados de las pruebas automatizadas se pueden presentar en revisiones de código, lo que disminuye la dependencia de la detección manual de errores y permite más tiempo para detectar requisitos y decisiones de diseño incorrectos.

Aumento de la productividad de las pruebas

Las pruebas manuales son tediosas y menos repetibles. La recopilación de resultados puede ser ad hoc y se puede pasar por alto un error a pesar de que los resultados sean “correctos”. Es difícil lograr la cobertura requerida del código, que varía según los estándares de seguridad y la criticidad del proyecto.

La automatización de pruebas no sólo hace que las pruebas sean mucho menos tediosas y repetibles, sino que las capacidades de generación de informes de las herramientas de prueba avanzadas crean información de gestión importante sobre el estado del proyecto. Agregar análisis dinámico, que analiza el código cuando se ejecuta para detectar errores complicados en tiempo de ejecución, y análisis estático, que analiza el código antes de ejecutarlo, aumenta en gran medida la capacidad de detección de errores de las herramientas de prueba.

Automatización del cumplimiento de estándares de codificación

Muchos proyectos críticos para la seguridad requieren estándares de código fuente. MISRA, por ejemplo, es común en el software automotriz pero ha ganado aceptación en otras industrias. Algunos estándares requieren que el código cumpla con un estándar de la empresa que cumpla ciertos objetivos. En cada caso, hacer cumplir manualmente el cumplimiento de la codificación es tedioso y propenso a errores. Las herramientas de análisis estático son ideales para hacer cumplir el cumplimiento y las herramientas avanzadas van más allá al detectar errores que van más allá de las violaciones de formato.

Automatización de la documentación de certificación

Una gran parte de la carga de trabajo para lograr certificaciones de seguridad de software se encuentra en los procesos de documentación, validación y verificación. La automatización de pruebas reduce significativamente el costo de documentar los resultados de las pruebas y el análisis de cobertura.

Acelerar la reutilización del software heredado

Una estrategia clave para aumentar la productividad es reutilizar el software. Idealmente, se pueden utilizar componentes ya certificados para reducir los costos de desarrollo de estas subunidades. Automatizar la evaluación del software heredado con herramientas de análisis estático y dinámico disminuye el riesgo de utilizar estos componentes.

Mejorar la calidad, la seguridad y la protección

Incluso los regímenes de pruebas estrictos pueden pasar por alto errores críticos. La cobertura del código por sí sola no es suficiente para garantizar un comportamiento adecuado en caso de ataques de seguridad o código multiproceso, por ejemplo. Las herramientas de análisis estático pueden detectar errores en el código fuente sin ejecutar una prueba específica y pueden encontrar errores como vulnerabilidades de seguridad que son difíciles de descubrir en pruebas de unidades o sistemas.

Las herramientas de análisis dinámico pueden detectar errores en la ejecución de código durante las pruebas que podrían reflejarse en los resultados de las pruebas, como una pérdida lenta de memoria. Las pruebas de confusión y penetración durante las pruebas del sistema pueden encontrar errores que se pasaron por alto durante las condiciones normales de funcionamiento. En total, los defectos adicionales y las vulnerabilidades de seguridad encontradas por las herramientas de última generación ayudan a reducir los costos, el riesgo y muchos del 20% aproximadamente de errores que llegan a la producción.

¿Cuál es el impacto de las pruebas de desplazamiento a la izquierda?

Está claro que se debe hacer algo para resolver los problemas que se muestran claramente en la Figura 2. Se están introduciendo demasiados defectos que no se detectan al comienzo del ciclo de vida. Y muchos quedan en el producto cuando se fabrica y en manos de los clientes, o en aviones o automóviles, según sea el caso. La adopción de métodos de desarrollo modernos, la reutilización de componentes, el aprovechamiento de COTS y el código abierto y la automatización de herramientas son pasos clave para mejorar la productividad del desarrollo.

Suponiendo un proceso de desarrollo que utiliza herramientas de última generación en el que las pruebas se desplazan hacia la izquierda y se detectan y solucionan más defectos en una etapa más temprana del ciclo de vida, las pruebas unitarias son extremadamente efectivas y ayudan a que menos errores lleguen a producción. En la Figura 4, un ejemplo hipotético muestra el cambio en la detección de defectos a lo largo del ciclo de vida, donde la mayor parte de la detección y reparación de defectos se desplaza hacia la izquierda en una etapa más temprana del ciclo de vida.

Gráfico titulado Desplazamiento de la detección de defectos hacia la izquierda y comparación de la búsqueda de errores antes y después. Cuando se encuentran antes, la detección de errores disminuye a medida que se acerca el lanzamiento.
Figura 4: Un gráfico que muestra un proceso de desarrollo hipotético mejorado que desplaza la detección de errores y vulnerabilidades de seguridad a una etapa más temprana del ciclo de vida.

Sabemos por la Figura 3 anterior que los costos aumentan significativamente en cada fase del desarrollo. La Figura 5 a continuación muestra la comparación de los costos para corregir defectos en el método tradicional versus el método moderno que se muestra en la Figura 4. Desplazar la búsqueda y corrección de errores hacia la izquierda cuesta menos que corregirlos más tarde. En la situación presentada aquí, la diferencia general de costos es de alrededor del 40% a favor del enfoque de desplazamiento a la izquierda.

Gráfico titulado Costos relativos para corregir defectos, que compara los costos de encontrar errores antes y después. Cuando se encuentra antes, el costo de la detección de errores disminuye a medida que se acerca el lanzamiento.
Figura 5: Un gráfico que muestra el costo relativo de corregir errores en el enfoque tradicional versus el enfoque de desplazamiento a la izquierda. Incluso con el mismo número total de defectos, la detección temprana reduce los costos significativamente.

La importancia de las cadenas de herramientas certificadas y la asistencia de calificación

El uso de herramientas automatizadas en proyectos críticos para la seguridad requiere confianza en las herramientas mismas. Es responsabilidad del fabricante del producto tener confianza en que los procesos y herramientas utilizados para crear el software cumplen con los requisitos del estándar. Los proveedores de herramientas pueden ayudar con esto al tener herramientas certificadas por organismos de normas de seguridad antes de venderlas a los fabricantes o, en los casos en que no sea posible dicha certificación previa, brindar asistencia en materia de calificación. Luego pueden utilizar la evidencia de certificación del proveedor de la herramienta en su propia presentación para la certificación y reducir el esfuerzo necesario. Por ejemplo, Parasoft C / C ++test ha sido certificado por TÜV SÜD como calificado para el desarrollo de software relacionado con la seguridad según las normas IEC 61508 e ISO 26262.

En algunos estándares de seguridad de software, como DO-178C, la certificación se realiza a nivel de sistema y las herramientas y el software individuales no se certifican de forma independiente. En estos casos, el proveedor de la herramienta proporciona kits de calificación y asistencia en términos de documentación y servicios profesionales, lo que reduce en gran medida el costo y el esfuerzo necesarios para calificar las herramientas para su uso en el proyecto.

Cómo gestionar los costos de software críticos para la seguridad con una estrategia de desplazamiento a la izquierda

El software crítico para la seguridad ciertamente se encuentra en una crisis de costos. Se está volviendo demasiado costoso desarrollar nuevos proyectos grandes y críticos para la seguridad, hasta el punto de que pueden no ser rentables. Se necesitan métodos modernos para desarrollar software crítico para la seguridad, y ese esfuerzo debe reducir la cantidad de errores encontrados al final del ciclo de vida del desarrollo de software. Hacia la izquierda, la detección y reparación de defectos y vulnerabilidades de seguridad lo más temprano posible en el ciclo de vida reduce los costos significativamente. La automatización de pruebas juega un papel clave en la mejora de la eficiencia y los resultados de las pruebas. Es una parte importante del enfoque moderno para el desarrollo de software crítico para la seguridad.

Guía de metodologías de prueba de software: maximice la calidad, el cumplimiento, la seguridad y la protección

“MISRA”, “MISRA C” y el logotipo del triángulo son marcas comerciales registradas de The MISRA Consortium Limited. © The MISRA Consortium Limited, 2021. Todos los derechos reservados.