Únase a nosotros el 30 de abril: Presentación de la prueba CT de Parasoft C/C++ para pruebas continuas y excelencia en el cumplimiento | Regístrese ahora

Pruebas de robustez: qué es y cómo ofrecer sistemas de software confiables con automatización de pruebas

Foto de cabeza de Ricardo Camacho, Director de Cumplimiento de Seguridad y Seguridad
26 de agosto de 2021
6 min leer

La prueba de robustez en el software es una forma de mejorar la garantía de calidad. Lea para comprender qué tipos de metodologías de prueba pueden mejorar la solidez de los sistemas de software.

Cuando la mayoría de las personas se ponen al volante de un automóvil, no se preocupan por la falla de los frenos. Tampoco se preocupan por las lesiones causadas por un mal funcionamiento cuando su hijo recibe un juguete nuevo. De hecho, la mayoría de las personas no se preocupan en absoluto por el mal funcionamiento del sistema a medida que avanzan en su vida diaria.

Esto se debe a que un desarrollador de software o un ingeniero de control de calidad como usted ha abordado problemas de calidad. Si el objetivo es ofrecer alta calidad, sistemas de software confiables, entonces se deben realizar pruebas. Los problemas de calidad no desaparecerán sin realizar pruebas porque cuanto más confiable sea el producto, más seguro será.

Uno de los procesos que utilizamos para probar la calidad y la confiabilidad se llama prueba de robustez, el grado en que un sistema funciona correctamente en presencia de entradas excepcionales o condiciones ambientales estresantes. Si es nuevo en este tipo de pruebas, abróchese el cinturón.

¿Qué es la solidez en las pruebas de calidad del software?

Los ingenieros de control de calidad serán responsables de una falla del sistema, o peor si esa falla causa una lesión. Pero eso no libera a los desarrolladores. Los desarrolladores deben construir y probar la solidez junto con las otras pruebas que realizan durante el proceso de validación, como las pruebas comparativas.

Software embebido La seguridad y los sistemas críticos para la protección requieren pruebas exhaustivas en cada fase del ciclo de vida del desarrollo de software, desde el sistema y el diseño de alto nivel hasta las pruebas unitarias y las pruebas de integración.

¿Cuál es el significado de las pruebas de robustez en el mundo real?

Cuando surge la solidez en las pruebas de software, generalmente significa que el sistema implementado o aún en desarrollo está funcionando bien en condiciones normales u ordinarias. Las pruebas sólidas tratan de mejorar la confiabilidad y encontrar esos casos de esquina ingresando datos que imitan las condiciones ambientales extremas para ayudar a determinar si el sistema es lo suficientemente sólido como para cumplir.

Probar la solidez está más enfocado que la evaluación comparativa de confiabilidad. Las pruebas sólidas se refieren a si podemos o no patear el software y si es capaz de manejar el abuso y funcionar correctamente. No se trata de esos escenarios de días soleados donde todo funciona a la perfección. Realizamos pruebas de robustez para averiguar qué otras pruebas faltan. Nuestro objetivo es crear entornos de prueba que puedan evaluar la solidez de un sistema de software. Es importante realizar un seguimiento de las métricas de prueba de software para medir la efectividad de sus pruebas.

En informática, los programadores están acostumbrados a crear algoritmos que hacen que los sistemas informáticos funcionen. No estamos acostumbrados a crear algoritmos para romper cosas, por lo que las pruebas de robustez pueden parecer contrarias a la intuición para algunos. Es necesario al verificar la robustez de los sistemas informáticos que construimos sin importar la semántica del lenguaje de programación. Esto es particularmente cierto cuando hay varias dependencias.

Cuando realizamos pruebas de robustez, buscamos los escenarios que pueden hacer que el software falle. Las pruebas de robustez son una solución de prueba de un extremo a otro para sistemas embebidos. Se lleva a cabo pasando una entrada válida y una entrada no válida para comprobar la fiabilidad del software. El software puede fallar por muchas razones, por lo que también probamos cambios que afecten al hardware, cambios en el entorno o software externo e independiente.

¿Por qué son importantes las pruebas de robustez en los sistemas de software?

La seguridad y la fiabilidad son claras ventajas de las pruebas de robustez. Salva vidas y reduce el riesgo de lesiones o demandas costosas. Algunas industrias deben realizar pruebas con estrictos estándares regulatorios y de cumplimiento más que otras.

La industria de las aerolíneas, con sus numerosos sistemas de aviación integrados, es un excelente ejemplo de la importancia de la seguridad y la confiabilidad. La vida de las personas está en juego. Es mejor que crea que piensan en el caso de la esquina al realizar la prueba.

Número de vuelos 1/2004 - 6/2021
Número de accidentes de aviones civiles desde 1945
16.9 millones de
3,346

Con un número tan alto de vuelos en los últimos dieciséis años y el número relativamente bajo de accidentes de aerolíneas civiles desde 1945, la industria de las aerolíneas tiene una tasa de éxito extremadamente alta. Incluso con ese tipo de éxito, desafortunadamente hay muertes, lesiones y demandas, pero sirve como un argumento eficaz para la efectividad de las pruebas de robustez.

La generación de pruebas automatizada es importante para acelerar las pruebas. Algunas soluciones de pruebas de robustez ofrecen generación automática de casos de prueba que mejoran la calidad y ayudan a verificar y validar los componentes de software directamente en el hardware de destino, que es un requisito dentro de los niveles de integridad de seguridad más estrictos, como DAL A en el DO-178C estándar de proceso.

La seguridad es otro ejemplo en el que los desarrolladores e ingenieros no pueden permitirse el lujo de equivocarse. Las instituciones financieras, las empresas de procesamiento de tarjetas de crédito y la industria de la defensa son solo algunas de las que deben cumplir con requisitos de cumplimiento muy rigurosos. Es posible integrar el cumplimiento en los procesos y ecosistemas de desarrollo existentes, desde la gestión de requisitos y el control de fuentes hasta los IDE y CI / CD. Al automatizar el cumplimiento de los estándares críticos de seguridad funcional y de seguridad, las organizaciones pueden ahorrar tiempo y dinero.

Integración continua y entrega continua para sistemas integrados

Independientemente de la industria o la aplicación, las pruebas de robustez ayudan a las organizaciones a lograr y automatizar el cumplimiento normativo y ofrecer software de calidad. También se logra un buen retorno de la inversión, lo que reduce el costo de entrega del software integrado.

¿Qué tipos de pruebas o métodos de prueba garantizan la solidez de las series de pruebas?

Si bien existen muchas técnicas y herramientas de prueba de robustez, el fuzz es probablemente el método de prueba más utilizado porque existe desde hace décadas. Las pruebas de fuzz han demostrado ser muy efectivas y es un método relativamente simple en el que crea casos de prueba con múltiples variaciones de entradas inesperadas y las monitorea para detectar excepciones. Después de pruebas exhaustivas, si no falla, falla en las afirmaciones de código incorporado o tiene pérdidas de memoria potenciales, entonces ha logrado un alto grado de solidez del software.

Otra técnica de prueba de robustez es la prueba de caja negra. Aquí es donde los probadores de control de calidad o el equipo de ingeniería de software, fingen ser los usuarios finales o las partes interesadas del producto o la aplicación para probar escenarios del mundo real. Al usuario solo le importa si el sistema de software funciona o no según lo previsto. Es la prueba a nivel humano o de usuario de funcionalidad y confiabilidad. Si el sistema genera la salida o el comportamiento correctos en condiciones ambientales estresantes y el sistema funciona correctamente o funciona como fue diseñado, es robusto.

¿Qué pasa con las técnicas de prueba de robustez como la inyección de fallas y las pruebas de mutación?

Otros tipos de enfoques de prueba de robustez incluyen pruebas clásicas de inyección de fallas y pruebas de mutación. El objetivo de las pruebas clásicas de inyección de fallas es determinar la solidez del código del sistema durante el tiempo de ejecución inyectando tipos de datos corruptos o fallas de hardware para determinar si el sistema falla o no es seguro. Si tolera las fallas, es robusto. El objetivo de las pruebas de mutación es evaluar la efectividad del caso de prueba para encontrar un error. En esta prueba, pones un error en el código para ver si se detecta. Si es así, su caso de prueba es completo.

Sugerencia: Si es un desarrollador que trabaja con Java, el manejo de excepciones es un método de prueba que puede implementar para manejar los errores de tiempo de ejecución de modo que se pueda mantener el flujo normal de la aplicación.

Herramientas de prueba automatizadas y pruebas de robustez y calidad del software

Las pruebas de automatización se utilizan para automatizar tareas repetitivas y otras tareas de prueba que son difíciles de realizar manualmente. Compara el resultado real con el resultado esperado. Los casos de prueba se crean para lograr un objetivo de prueba particular. Las pruebas de robustez se pueden automatizar cuando se realizan pruebas de regresión, otro enfoque para las pruebas de robustez.

La prueba de regresión es una prueba de toda la aplicación para determinar si hay modificaciones con efectos nocivos en algún módulo o en la funcionalidad del software. La automatización es necesaria al realizar pruebas de regresión porque es casi imposible realizar pruebas del sistema manualmente. La automatización reduce la mano de obra y el tiempo de ejecución, metodología de prueba que se utiliza para realizar pruebas sólidas.

Prueba de regresión de sistemas integrados

Con las herramientas de prueba automatizadas, también puede generar automáticamente casos de prueba para admitir pruebas de fuzz o ejecución simbólica que realiza pruebas mínimas, medias, máximas y otras pruebas de rango de valores. Algunos casos de prueba también probarán fuera de los límites de los valores para determinar si sus componentes de software también pueden manejar esos valores.

Las herramientas de prueba automatizadas con interfaces gráficas fáciles de usar pueden hacer que las cosas sean uniformes. más fácil con pruebas unitarias abstrayendo el código en una tabla visual que permite al usuario completar campos, como valores de entrada y resultados esperados. Entonces puede tener lugar la generación del caso de prueba a partir de la tabla. El stubbing también se puede aplicar para realizar pruebas, aunque es posible que otras funciones del software no estén disponibles. También existe la capacidad simplificada de modificar o actualizar casos de prueba y rastrear qué casos de prueba deben cambiar si el código cambia. Mejor aún, los equipos de control de calidad pueden administrar conjuntos de prueba con todos los miles de casos de prueba creados.

¿Cuáles son las limitaciones de las pruebas de robustez?

Para organizaciones que deben cumplir Estándares IEEE, las pruebas de robustez son obligatorias, pero pueden ser excesivas para aplicaciones que no son críticas para la seguridad, por lo que pueden no estar justificadas para algunas organizaciones. Algunas pruebas, como las pruebas de mutación, requieren un caso de prueba existente e insertar errores realistas, lo que puede ser difícil de hacer.

Desafortunadamente, el tiempo no siempre es amigo de las pruebas de robustez debido al tiempo adicional y la mano de obra que consume. Pero si las pruebas de robustez del software ayudarán a su organización a cumplir su objetivo de ofrecer un software de mayor calidad y un software seguro y protegido, con un buen retorno de la inversión y reducir el costo de entrega, entonces es posible que deba considerar herramientas de automatización que puedan proporcionar la velocidad y las capacidades. necesita realizar pruebas de robustez.

Es importante tener un buen conocimiento de las pruebas de solidez. Tanto es así que el Simposio Internacional sobre Pruebas en Línea y Diseño de Sistemas Robustos (IOLTS) ha presentado datos al respecto para el IEEE. El IEEE también ha especificado una familia de estándares para mantener la compatibilidad.

Además, la Association for Computing Machinery (ACM) ha presentado estudios de casos sobre pruebas de robustez en la revista ACM.

¿Desea obtener más información sobre las pruebas de robustez para sistemas integrados?