Suponga que está utilizando procesos de integración continua que frecuentemente actualizan algunos entornos de destino, de modo que cada vez que haya algunos cambios "usted" pueda probar sus cambios de inmediato. Eso es parte de los objetivos de CI, ¿no?
Pero, también suponga que tiene otras personas involucradas en su ciclo de prueba, por ejemplo, gerentes o clientes. Tiene sentido involucrar a otras personas para tratar de revisar (¿romper?) Sus próximos cambios, ¿no?
Pero si continúa continuamente entregando cambios en el entorno en el que esas otras personas están, en serio, tratando de probarlos, entonces pueden surgir múltiples problemas, como:
they
podría perder su tiempo informando problemas que, cuando guardan el informe (en profundidad), ya ni siquiera pueden reproducir el problema por sí mismos (por ejemplo, porque accidentalmente también se encontró con el mismo problema y ya lo solucionó en su entorno).you
es posible que no pueda reproducir los problemas que informaron, ya que los entornos en los que se encontraron con algún problema ya no son idénticos (usted (!!!) podría haber superpuesto su entorno).
Entonces, ¿qué puede hacer (¿cómo configurar las cosas?) Para evitar tales (frustrantes) situaciones?
fuente
Parece que está hablando de un entorno de prueba que se reutiliza constantemente sin reinicializarse de manera confiable para cada ejecución de prueba. Esto hace que tal prueba no sea confiable. Similar, desde la perspectiva de la confiabilidad, con pruebas manuales, si lo desea.
En mi humilde opinión, no debe utilizar tales pruebas dentro de sus propósitos de calificación de CI / CD, ya que eso invalidará efectivamente su proceso de calificación (al menos en esa área). Decir que el software pasa la prueba X sin ejecutar realmente la prueba X para cada versión de software entregada o sin tener la certeza de que el
pass
resultado obtenido no es accidental (debido a falsos positivos) erosionará el nivel de confianza de su prueba. Los falsos negativos no son perjudiciales para la credibilidad, pero tampoco son indeseables debido al "ruido" innecesario que crean.Está bien ejecutar tales pruebas fuera de su proceso de calificación de CI / CD. Pero trataría un resultado fallido en tales pruebas como un error encontrado por el cliente: necesitaría reproducir de manera confiable el problema para poder desarrollar una solución y confirmar que la solución está funcionando. Y realmente no puede hacer eso si la prueba no es confiable.
Si planea abordar el problema, lo ideal sería desarrollar primero un caso de prueba automatizado y confiable para reproducir el problema. Lo que usaría para desarrollar una solución y confirmar su efectividad (el resultado de la prueba debe pasar de FALLO a PASO). También puede (¿debería?) Colocar este caso de prueba dentro de su proceso de calificación de CI / CD para evitar futuras repeticiones, si lo desea, para aumentar su nivel general de calidad de lanzamiento de software.
fuente
inside
youtside
son relativas al bucle de verificación de CI. Básicamente, cuestiono la razón de la existencia del entorno de control de calidad: la mayoría de las pruebas realizadas allí deben ser confiables y eventualmente ejecutadas como parte de las verificaciones de CI, especialmente en un contexto de implementación continua, ya que desea ejecutarlas en cada iteración de CI (exitosa hasta ese punto al menos) de todos modos.El enfoque habitual es crear diferentes entornos:
DEV: este es el lugar donde el equipo de desarrollo ensucia las cosas. Aquí se crean ajustes de todos los cambios, se implementa una nueva versión, etc. Aquí es el lugar donde CI está completamente integrado.
PREPROD / QA: este es el lugar donde "juega" el equipo de QA / prueba / validación para realizar las pruebas. Este ambiente generalmente se congela durante las pruebas. La integración de CI con este entorno es solo para proporcionar una nueva versión del producto, configuraciones, etc.
PRODUCCIÓN: ¿es necesario explicar :)?
fuente
Si está haciendo CI / CD, eso implica que hay algunas pruebas automatizadas que están ocurriendo (CI) antes de la implementación (CD). Si encuentra muchos problemas en su entorno de prueba, eso significa que las pruebas que se ejecutan antes de la implementación no los detectan; Esto indica pruebas automáticas insuficientes. Si los desarrolladores tienen problemas donde surgen defectos en los entornos de prueba, deben mejorar sus conjuntos de pruebas automatizadas para evitar esto. Esto también mejorará la calidad y la confiabilidad en general, hasta la producción.
fuente
Para agregar a la respuesta de Romeo Ninov, internamente dentro de un entorno debe intentar separar las aplicaciones tanto como sea posible. Esto es en parte por qué Docker ha sido tan exitoso para dev / test. Casi te permite fingir que no estás compartiendo un entorno en absoluto.
La otra opción es tener servidores claramente definidos en los que se ejecutan las aplicaciones, que son independientes del resto de la infraestructura que conforma su entorno. Es decir. Toda la maquinaria de gestión o habilitación del entorno va en servidores separados y de larga duración. Luego conecta nuevos servidores de corta duración basados en una imagen conocida para probar una aplicación y, si se realizan cambios en la imagen base, debe aplicar esos cambios en todas partes para cada nuevo componente. Lo que significa probar los cambios contra todo.
Si un equipo de appdev solicita un cambio que rompa la aplicación de otra persona, entonces, mala suerte, deben crear internamente un mitigante en su código y mantener sus requisitos específicos separados de los entornos que ofrecen.
fuente