REL08-BP02 Integración de las pruebas funcionales como parte de la implementación
Utilice técnicas como las pruebas unitarias y las pruebas de integración que validen la funcionalidad requerida.
Las pruebas unitarias son un proceso en el que se prueba la unidad funcional de código más pequeña para validar su comportamiento. Las pruebas de integración sirven para validar que cada característica de la aplicación funcione de acuerdo con los requisitos del software. Mientras que las pruebas unitarias se centran en probar parte de una aplicación de forma aislada, las pruebas de integración tienen en cuenta los efectos secundarios (por ejemplo, el efecto de la modificación de los datos mediante una operación de mutación). En cualquier caso, las pruebas se deben integrar en una canalización de implementación y, si no se cumplen los criterios de éxito, la canalización se detiene o se revierte. Estas pruebas se llevan a cabo en un entorno de preproducción, que se lleva a cabo antes de la producción en la canalización.
Los mejores resultados se obtienen cuando estas pruebas se ejecutan automáticamente como parte de las acciones de creación e implementación. Por ejemplo, con AWS CodePipeline, los desarrolladores confirman los cambios en un repositorio de origen, donde CodePipeline detecta automáticamente los cambios. Se crea la aplicación y se ejecutan las pruebas unitarias. Una vez completadas las pruebas unitarias, el código compilado se implementa en servidores de ensayo para su comprobación. En el servidor de ensayo, CodePipeline ejecuta pruebas adicionales, como pruebas de integración o carga. Una vez completadas correctamente estas pruebas, CodePipeline implementa el código probado y aprobado en instancias de producción.
Resultado deseado: utiliza la automatización para realizar pruebas unitarias y de integración a fin de validar que el código se comporta según lo previsto. Estas pruebas se integran en el proceso de implementación y, en caso de fallo de una prueba, se interrumpe la implementación.
Patrones comunes de uso no recomendados:
-
Durante el proceso de implementación, se ignoran u omiten los errores y planes de las pruebas para acelerar el cronograma de implementación.
-
Las pruebas se hacen manualmente fuera de la canalización de implementación.
-
Omite los pasos de prueba de la automatización mediante flujos de trabajo de emergencia manuales.
-
Las pruebas automatizadas se ejecutan en un entorno que no se parece mucho al entorno de producción.
-
Crea un conjunto de pruebas que no es lo suficientemente flexible y que es difícil de mantener, actualizar o escalar a medida que la aplicación evoluciona.
Beneficios de establecer esta práctica recomendada: las pruebas automatizadas durante el proceso de implementación detectan los problemas de forma temprana, lo que reduce el riesgo de que se lance a producción con errores o un comportamiento inesperado. Las pruebas unitarias validan que el código se comporte como se desea y que se cumplan los contratos de la API. Las pruebas de integración validan que el sistema funcione de acuerdo con los requisitos especificados. Estos tipos de pruebas verifican de manera sistemática el orden de funcionamiento previsto de los componentes, como las interfaces de usuario, las API, las bases de datos y el código fuente.
Nivel de riesgo expuesto si no se establece esta práctica recomendada: alto
Guía para la implementación
Adopte una estrategia de desarrollo basada en pruebas (TDD) para desarrollar software que incluya casos de prueba para especificar y validar el código. Para empezar, cree casos de prueba para cada función. Si la prueba falla, escriba un código nuevo para superarla. Este enfoque ayuda a validar el resultado esperado de cada función. Ejecute pruebas unitarias y valide que se aprueben antes de enviar el código a un repositorio de código fuente.
Implemente pruebas unitarias o de integración como parte de las etapas de compilación, prueba e implementación de la canalización de CI/CD. Automatice las pruebas e inicie las pruebas automáticamente cada vez que haya una nueva versión de la aplicación lista para su implementación. Si no se satisfacen los criterios de éxito, la canalización se detiene o se revierte.
Si la aplicación es una aplicación web o móvil, realice pruebas de integración automatizadas en varios navegadores de escritorio o dispositivos reales. Este enfoque es particularmente útil para validar la compatibilidad y la funcionalidad de las aplicaciones móviles en una amplia gama de dispositivos.
Pasos para la implementación
-
Escriba pruebas unitarias antes de desarrollar código funcional (desarrollo basado en pruebas o TDD). Establezca pautas de código para que escribir y ejecutar pruebas unitarias sea un requisito de codificación no funcional.
-
Cree un conjunto de pruebas de integración automatizadas que cubran las funcionalidades comprobables identificadas. Estas pruebas deben simular las interacciones de los usuarios y validar los resultados esperados.
-
Cree el entorno de pruebas necesario para ejecutar las pruebas de integración. Esto puede incluir entornos de preparación o preproducción que imiten fielmente el entorno de producción.
-
Configuración de las etapas de origen, compilación, prueba e implementación mediante la consola de AWS CodePipeline o la AWS Command Line Interface (CLI).
-
Implemente la aplicación una vez que se haya creado y probado el código. AWS CodeDeploy puede implementarlo en sus entornos de puesta en escena (pruebas) y producción. Estos entornos pueden incluir instancias de Amazon EC2, funciones de AWS Lambda o servidores en las instalaciones. Se debe usar el mismo mecanismo de implementación para implementar la aplicación en todos los entornos.
-
Monitoree el progreso de la canalización y del estado de cada etapa. Utilice controles de calidad para bloquear la canalización en función del estado de las pruebas. También puede recibir notificaciones cuando se produzca un fallo en una etapa de canalización o cuando se haya completado la canalización.
-
Supervise continuamente los resultados de las pruebas y busque patrones, regresiones o áreas que requieran más atención. Utilice esta información para mejorar el conjunto de pruebas, identificar las áreas de la aplicación que necesitan pruebas más sólidas y optimizar el proceso de implementación.
Recursos
Prácticas recomendadas relacionadas:
Documentos relacionados: