Soy ingeniero de software en una empresa mediana. Tenemos una plataforma de prueba bastante robusta que se ejecuta en TeamCity. Realiza pruebas unitarias en cada registro y una prueba unitaria diaria / BVT.
El problema es que tenemos una gran cantidad de pruebas unitarias rotas.
Muy a menudo, menciono la inutilidad de las pruebas unitarias si se rompen constantemente y no se mantienen. No poder ver si un cambio ha causado una regresión elimina la mayor parte del valor de una plataforma de prueba unitaria.
Me gustaría plantar una semilla que cree una cultura de buenos hábitos: arreglar las pruebas cuando se rompen, verlas como valiosas, priorizar la fijación de las pruebas junto con otros trabajos.
He intentado el soborno (¡productos horneados!), Simplemente preguntando y hablando con los líderes del equipo. Todos dicen que es una buena idea, pero veo que soy el único que hace algo al respecto.
¿Cuál es la mejor manera de comenzar a alentar a otros a corregir sus pruebas y priorizar la corrección de pruebas dentro de sus sprints?
Si hay una forma menos subjetiva de preguntar esto, me complacería aceptar cualquier consejo.
fuente
Respuestas:
Haz que sea imposible liberar algo sin arreglar las pruebas.
El hecho es que, si su compilación se rompe durante más de 15 minutos a la vez (y eso incluye pruebas fallidas), entonces no está haciendo una integración continua .
La "opción nuclear" es hacer que su servidor de control de origen rechace las confirmaciones / registros de cualquier usuario que no sea el que rompió la compilación. Obviamente, un administrador debe poder anular esto temporalmente si dicha persona se va de vacaciones, pero si todos saben que todo el equipo está jodido hasta que arreglen sus pruebas, lo resolverán muy rápido.
Una buena política (que es aún mejor cuando está automatizada) es revertir la fuente a la última confirmación estable conocida después de 15 minutos de la falla de compilación. En otras palabras, si no puede solucionarlo, o no sabe qué causó la ruptura de la compilación o la prueba, revísela y trabaje localmente hasta que se resuelva; nunca haga que otros desarrolladores muevan sus pulgares mientras usted trabaja problema que no les importa.
PD Si ya tiene muchas pruebas fallidas, puede usar un "umbral final" en CI. Configúrelo para que la compilación solo falle si hay más fallas de prueba que la última vez. Esto, junto con una regla de cobertura, obligará a los desarrolladores a mejorar eventualmente la situación de prueba si quieren seguir trabajando.
PPS Me doy cuenta de que esto puede parecer draconiano para algunos, pero todo depende de tu cultura. Si llega a un punto en el que la gente simplemente no deja la construcción rota o las pruebas fallan (mi equipo casi nunca lo hace, aunque ocasionalmente tengo que recordarles), entonces no necesita continuar con el conjunto más estricto de reglas. Aunque IMO siempre debe fallar la compilación en una prueba de unidad rota. Las pruebas de integración / navegador a veces pueden fallar.
fuente
Las pruebas de unidades que fallan no son el problema. Son un síntoma .
El verdadero problema está en la cultura. Necesitas pisar suavemente: aquí hay dragones . No puedes cambiar la cultura por ti mismo, y ser la rueda chirriante, al final, te convertirá en un paria. Literalmente.
Sugiero que si intentas encontrar a una persona mayor para defender la causa y liderar el camino. Si eso falla, intente plantearlo en una reunión general de desarrolladores, sin señalar ni llamar. Otra alternativa es asumir la responsabilidad de hacer un trabajo adecuado: solo arregle algunas pruebas más cada vez que realice un check-in. Mantenga un cuadro en la pared que muestre cuántas pruebas fallan con el tiempo. Otros lo verán: tal vez opten.
No hay una respuesta fácil.
fuente