Negli ultimi circa un anno ho guidato il mio team verso la modalità di sviluppo release-early-release-spesso (AKA: Rapid Application Development, non Agile). Per ulteriori informazioni sul modo in cui chiudiamo la build, vedere la mia risposta qui: Un modo semplice per migliorare la qualità di rilascio in ambiente RAD
Quando abbiamo adottato RAD, le persone erano abbastanza indipendenti e stavano facendo prima i test unitari; i test integrati sono avvenuti molto più tardi nel processo. È stato un processo naturale per loro senza molta applicazione formale. Ora la situazione è abbastanza diversa:
L'intera piattaforma è ben integrata con build / release consolidate funzionanti sul lato client senza hot spot.
Nuovi requisiti di funzionalità continuano a venire e li costruiamo progressivamente mentre procediamo.
Le dinamiche generali del sistema sono molto importanti perché mentre gruppi di sviluppo indipendenti potrebbero seguire correttamente i processi, si sono verificati gravi guasti dovuti a circostanze complicate e non ovvie.
Molte parti del sistema coinvolgono nuovi algoritmi e input di ricerca, quindi le sfide (e quindi il meccanismo per i test) non sono sempre del tutto previste correttamente, come i test delle funzionalità in software ben definiti.
Di recente, stavo cercando di ottenere un quadro generale migliore per vedere se abbiamo bisogno di un miglioramento del processo. Quando mi sono seduto con la mia squadra, molti di loro hanno esitato: "Non eseguiamo più test unitari!" mentre altri hanno pensato che non dovremmo iniziare ora perché non sarà mai efficace.
I test unitari sono utili in un sistema relativamente maturo? Dovremmo almeno pesare l'ambito del test in base alla maturità delle unità? I test unitari rallenteranno il ritmo dello sviluppo? È necessario valutare i test unitari in modo diverso?
Quali sono le migliori pratiche di test per una piattaforma matura in un ambiente di rilascio-rilascio anticipato-spesso-spesso?