Las pruebas son valiosas. Por lo menos, registran que alguien consideró que deberían pasar tiempo escribiéndolos, por lo que presumiblemente tuvieron algún valor para alguien una vez. Con suerte, contendrán un registro completo de todas las características y errores en los que el equipo ha trabajado alguna vez, aunque también pueden haber sido una forma de obtener algún número de cobertura de prueba arbitraria sin haber sido cuidadosamente pensados. Hasta que los mire, no sabrá cuál es el caso aquí.
Si la mayoría de sus pruebas pasan la mayor parte del tiempo, simplemente muerda la bala e invierta el tiempo en averiguar qué intentaban hacer las pocas pruebas que fallaron, y corregirlas o mejorarlas para que el trabajo sea más fácil la próxima vez. En ese caso, avance a la sección Determinar la intención de cada prueba , para obtener algunos consejos sobre qué hacer con un pequeño número de pruebas reprobadas.
Por otro lado, es posible que ahora se enfrente con una construcción Roja, y cientos o incluso miles de pruebas que no han pasado por un tiempo, y Jenkins no ha sido Verde durante mucho tiempo. En este punto, el estado de compilación de Jenkins se ha vuelto inútil, y un indicador clave de problemas con su registro ya no funciona. Necesita arreglar esto, pero no puede permitirse el lujo de detener todo el progreso hacia adelante mientras arregla el desorden en su sala de estar.
Para mantener su cordura mientras realiza la arqueología requerida para determinar qué valor se puede recuperar de las pruebas que han fallado, recomiendo los siguientes pasos:
Desactiva temporalmente las pruebas fallidas.
Hay varias formas de hacerlo, dependiendo de su entorno, que no describe claramente, por lo que no puedo recomendar ninguna en particular.
Algunos marcos apoyan la noción de fallas esperadas. Si el suyo lo hace, entonces esto es genial, ya que verá una cuenta regresiva de cuántas pruebas quedan en esta categoría, e incluso se le informará si algunas de ellas comienzan a pasar inesperadamente.
Algunos marcos admiten grupos de prueba y le permiten decirle a Hudson que solo ejecute algunas de las pruebas o que omita un grupo de pruebas. Esto significa que ocasionalmente puede ejecutar el grupo de prueba manualmente para ver si alguno está pasando.
Algunos frameworks le permiten anotar o marcar pruebas individuales para ser ignoradas. En este caso, es más difícil ejecutarlos como grupo, pero evita que te distraigan.
Puede mover las pruebas a un árbol de origen que normalmente no se incluye en la compilación.
In extremis, puede eliminar el código del HEAD del sistema de control de versiones, pero esto hará que sea más difícil de reconocer cuando se haya completado la tercera fase.
El objetivo es lograr que Jenkins se ponga verde lo antes posible, para que pueda comenzar a moverse en la dirección correcta lo antes posible.
Mantenga las pruebas relevantes.
Resuelva agregar nuevas pruebas a medida que agrega o modifica código, y comprométase a mantener todas las pruebas aprobadas.
Las pruebas pueden fallar por una variedad de razones, incluido el hecho de que no eran pruebas bien escritas para comenzar. Pero una vez que consigues que Jenkins sea verde, mantenerlo así es realmente importante.
Acostúmbrate a escribir buenas pruebas y haz que sea un gran problema si las pruebas comienzan a fallar.
Determine la intención de cada prueba.
Ir a través de las pruebas desactivadas una por una. Comience con los que afectan los módulos que cambia con más frecuencia. Determine la intención de la prueba y la razón del fracaso.
¿Prueba una función que se eliminó de la base del código a propósito? Entonces probablemente puedas eliminarlo.
¿Está atrapando un error que nadie ha notado todavía? Vuelva a instalar la prueba y corrija el error.
¿Está fallando porque estaba haciendo suposiciones injustificadas (por ejemplo, suponiendo que el texto del botón siempre estaría en inglés, pero ahora ha localizado su aplicación para varios idiomas)? Luego, descubra cómo hacer que la prueba se enfoque en una sola cosa y aislarla de los cambios no relacionados lo mejor que pueda.
¿La prueba se extiende por toda la aplicación y representa una prueba del sistema? Luego, retírelo del conjunto de pruebas principal de Jenkins y agréguelo al conjunto de Regresión que se ejecuta con menos frecuencia.
¿La arquitectura de la aplicación ha cambiado más allá del reconocimiento, por lo que la prueba ya no hace nada útil? Bórralo.
¿Se agregó la prueba para aumentar artificialmente las estadísticas de cobertura de código, pero en realidad no hace más que confirmar que el código se compila correctamente y no entra en un bucle infinito? O bien, ¿la prueba simplemente confirma que el marco de simulación seleccionado devuelve los resultados que acaba de decirle? Bórralo.
Como resultado de esto, algunas pruebas se mantendrán, algunas se modificarán, algunas se dividirán en múltiples fragmentos independientes de tamaño de bocado y algunas se eliminarán. Mientras sigas progresando con los nuevos requisitos, es responsable dedicar un poco de tiempo a lidiar con deudas técnicas como esta.