Fallo in modo che sia impossibile rilasciare effettivamente qualcosa senza correggere i test.
- Fallire la compilazione se qualche test fallisce.
- Fallire la compilazione se qualche test viene ignorato.
- Fallire la compilazione se la copertura del test scende al di sotto di un certo livello (quindi le persone non possono semplicemente eliminare i test per aggirarlo).
- Utilizzare il server CI di fare la vostra build di rilascio, e solo consentire costruisce da goccia di build del server per essere promosso a SVS / staging / produzione / qualunque cosa.
Il fatto è che se la tua build viene interrotta per più di circa 15 minuti alla volta (e questo include test falliti), allora non stai facendo un'integrazione continua .
L '"opzione nucleare" è che il tuo server di controllo del codice sorgente rifiuti commit / check-in da qualsiasi utente diverso da quello che ha rotto la build. Ovviamente un amministratore deve essere in grado di sovrascriverlo temporaneamente se detta persona va in vacanza - ma, se tutti sanno che tutto il team è fregato fino a quando non risolvono i loro test, lo risolveranno rapidamente.
Una buona politica (che è ancora meglio quando è automatizzata) è di riportare l'origine all'ultimo commit stabile noto dopo 15 minuti di fallimento della compilazione. In altre parole, se non riesci a risolverlo o non sai cosa ha causato l'interruzione della compilazione o del test, ripristinalo e lavora localmente fino a quando non viene risolto: mai fare in modo che altri sviluppatori agitino il pollice mentre ti macini problema a cui non importa.
PS Se hai già molti test falliti, puoi usare una "soglia finale" in CI. Impostalo in modo che la compilazione fallisca solo se ci sono più errori di test rispetto all'ultima volta. Questo, insieme a una regola di copertura, costringerà gli sviluppatori a migliorare eventualmente la situazione del test se vogliono essere in grado di continuare a lavorare.
PPS Mi rendo conto che questo potrebbe sembrare draconiano per alcuni, ma dipende tutto dalla tua cultura. Se arrivi a un punto in cui le persone non lasciano la build interrotta o i test falliscono (il mio team non lo fa quasi mai, anche se ogni tanto devo ricordare loro), allora non è necessario continuare con il set di regole più rigoroso. Anche se IMO dovresti sempre fallire la compilazione su un test unitario rotto. Talvolta i test di integrazione / browser possono fallire.