I test sono preziosi. Per lo meno, registrano che qualcuno ha pensato che avrebbero dovuto trascorrere del tempo a scriverli, quindi presumibilmente avevano un certo valore per qualcuno una volta. Con un po 'di fortuna, conterranno un registro completo di tutte le funzionalità e i bug su cui il team ha mai lavorato, anche se potrebbero anche essere stati un modo per raggiungere un numero arbitrario di copertura del test senza essere attentamente esaminati. Fino a quando non li guardi, non saprai quale sia il caso qui.
Se la maggior parte dei test passa per la maggior parte del tempo, morde semplicemente il proiettile e investi il tempo a capire quali sono stati i pochi test che hanno fallito e risolverli o migliorarli in modo che il lavoro sia più facile la prossima volta. In tal caso, passare alla sezione Determina l'intento per ciascuna sezione di test , per alcuni consigli su cosa fare con un numero limitato di test non riusciti.
D'altra parte, potresti dover affrontare una build Red ora e centinaia o addirittura migliaia di test che non sono passati da un po 'di tempo e Jenkins non è verde da molto tempo. A questo punto, lo stato della build Jenkins è diventato inutile e un indicatore chiave dei problemi con il check-in non funziona più. Devi risolvere questo problema, ma non puoi permetterti di fermare tutti i progressi mentre riordini il disordine nel tuo salotto.
Al fine di mantenere la sanità mentale durante l'esecuzione dell'archeologia richiesta per determinare quale valore può essere recuperato dai test che hanno fallito, raccomanderei i seguenti passaggi:
Disabilitare temporaneamente i test non riusciti.
Ci sono diversi modi in cui potresti farlo, a seconda del tuo ambiente, che non descrivi chiaramente, quindi non posso davvero consigliarne uno in particolare.
Alcuni framework supportano la nozione di guasti previsti. Se il tuo lo fa, allora è fantastico, poiché vedrai un conto alla rovescia di quanti test sono rimasti in questa categoria e verrai anche informato se alcuni di loro iniziano a passare inaspettatamente.
Alcuni framework supportano gruppi di test e consentono di dire a Hudson di eseguire solo alcuni dei test o di saltare un gruppo di test. Ciò significa che occasionalmente è possibile eseguire manualmente il gruppo di test per vedere se qualcuno sta passando.
Alcuni framework consentono di annotare o contrassegnare in altro modo i singoli test da ignorare. In questo caso è più difficile gestirli come gruppo, ma impedisce loro di distrarti.
È possibile spostare i test su un albero di origine che normalmente non è incluso nella build.
In extremis, è possibile eliminare il codice dall'HEAD del sistema di controllo della versione, ma ciò renderà più difficile riconoscere quando la terza fase è stata completata.
L'obiettivo è far sì che Jenkins diventi verde il più presto possibile, così puoi iniziare a muoverti nella giusta direzione il prima possibile.
Mantenere i test pertinenti.
Risolvi per aggiungere nuovi test mentre aggiungi o modifichi il codice e ti impegni a mantenere tutti i test che superano.
I test possono fallire per una serie di ragioni, incluso il fatto che non erano test ben scritti per cominciare. Ma una volta che ottieni Jenkins verde, mantenerlo in questo modo è davvero importante.
Abituati a scrivere buoni test e rendilo un grosso problema se i test iniziano a fallire.
Determinare l'intento per ciascun test.
Passare i test disabilitati uno per uno. Inizia con quelli che influenzano i moduli che cambi più frequentemente. Determinare l'intento del test e il motivo del fallimento.
Verifica una funzionalità che è stata rimossa dalla base di codice di proposito? Quindi probabilmente puoi eliminarlo.
Sta rilevando un bug che nessuno ha ancora notato? Ripristinare il test e correggere il bug.
Sta fallendo perché stava facendo ipotesi ingiustificate (ad esempio supponendo che il testo del pulsante sarebbe sempre in inglese, ma ora hai localizzato la tua applicazione per più lingue)? Quindi scopri come focalizzare il test su una sola cosa e isolalo nel miglior modo possibile da modifiche non correlate.
Il test si estende su tutta l'applicazione e rappresenta un test di sistema? Quindi rimuovilo dalla tua suite di test Jenkins principale e aggiungilo alla suite di regressione che viene eseguita meno frequentemente.
L'architettura dell'app è cambiata oltre il riconoscimento, quindi il test non fa più nulla di utile? Cancellalo.
Il test è stato aggiunto per aumentare artificialmente le statistiche sulla copertura del codice, ma in realtà non fa altro che confermare che il codice viene compilato correttamente e non va in un ciclo infinito? Altrimenti, il test conferma semplicemente che il framework di derisione selezionato restituisce i risultati a cui gli hai appena detto? Cancellalo.
Di conseguenza, alcuni test rimarranno, alcuni saranno modificati, alcuni divisi in più blocchi indipendenti di dimensioni ridotte e altri rimossi. Fintanto che stai ancora facendo progressi con i nuovi requisiti, riservare un po 'di tempo per affrontare il debito tecnico come questo è la cosa responsabile da fare.