Test automatizzati: Come catturiamo i bug di Thunderbird prima di voiDal rilascio di Thunderbird 115, ci siamo concentrati sul miglioramento dello stato dei nostri test automatici.
I test automatizzati aumentano la qualità del software, riducendo al minimo il numero di bug introdotti accidentalmente dalle modifiche al codice. Per ogni modifica apportata a Thunderbird, le nostre macchine di test eseguono una serie di test su Windows, macOS e Linux per individuare errori e conseguenze non intenzionali.
Per una singola modifica (o per un gruppo di modifiche che avvengono nello stesso momento), da 60 a 80 test vengono eseguiti su Windows, macOS e Linux.
Il nostro codice sarà sottoposto a una pressione maggiore rispetto al passato, con un team più grande che apporta più modifiche e rilasci mensili che riducono il tempo che il codice trascorre nei canali di test prima di essere rilasciato.
Perché facciamo i testNon scriviamo test solo per sentirci meglio. I test migliorano Thunderbird poiché:
Prevengono gli errori Se sperimentiamo che un codice si comporta in un modo atteso, scopriremo immediatamente se non si comporta più in quel modo. Questo significa un ciclo di feedback più breve e possiamo risolvere il problema prima che infastidisca gli utenti.
Scopriamo quando qualcosa a monte ci "rompe"Thunderbird è costruito a partire dal codice di Firefox. Il codice di Firefox, di cui non siamo responsabile, è da 30 a 40 volte più grande del codice di cui siamo responsabili. Quando inevitabilmente in Firefox cambia qualcosa che ci riguarda, vogliamo saperlo immediatamente per poter reagire.
Liberare i tester umaniSe usiamo i computer per dimostrare che il programma fa quello che dovrebbe fare, in particolare se si evitano
ripetizioni noiose e compiti difficili da impostare, allora le limitate risorse umane di cui disponiamo possono fare più cose in cui gli uomini sono migliori delle macchine.
Per esempio, ho aggiunto di recente dei test che verificano 22 modi per attivare il
fetching mail e 10 circostanze in cui il recupero della posta potrebbe non funzionare.
È impossibile che i nostri tester umani (per quanto bravi) li verifichino tutti, ma i nostri test automatici possono farlo e lo fanno, più volte al giorno.
Pensare a ciò che il codice dovrebbe fareI test costringono un ingegnere a guardare il codice da un punto di vista diverso, e questo è utile per pensare a ciò che il codice dovrebbe fare in più circostanze. Inoltre, rende più facile dimostrare che il codice funziona in circostanze oscure.
Trovare i bug esistentiIn termini di software, stiamo lavorando con un codice molto vecchio e in gran parte non "testato". Provarlo
è un nuovo punto di vista sul codice e rivela alcuni degli errori del passato, dove il tempo ha danneggiato le cose. Inoltre aiuta la persona che scrive i test a capire cosa fa il codice, molto più di quanto non faccia la semplice lettura del codice.
Non stiamo cercando di coprire completamente una funzione o ogni caso limite nei test. Stiamo cercando di creare un framework di test intorno alla funzione, in modo che quando troviamo un bug, oltre a risolverlo, possiamo facilmente scrivere un test per evitare che il bug si ripeta senza essere notato. Per gran parte del codice, questo è stato impossibile senza una settimane di test.
Infrangere nuovi orizzontiNegli ultimi mesi abbiamo capito come eseguire test automatizzati per cose che prima erano impossibili:
- Comunicazione con server di posta tramite canali crittografati.
- Autenticazione OAuth2 con server di posta.
- Non deve essere utilizzato la comunicazione con server web dove deve essere utilizzato un indirizzo specifico e un canale non crittografato.
- Server su qualsiasi nome host o porta.
In precedenza, se volevamo avviare un server per i test automatizzati, doveva trovarsi sul computer locale in una posizione non standard. Ora possiamo far finta che il server sia ovunque e utilizzi porte standard, necessarie per provare adeguatamente le funzionalità di configurazione dell'account. (In realtà prima era possibile, ma ora è molto più semplice).
Queste nuove funzionalità vengono utilizzate per effettuare test migliori sulle funzionalità di configurazione dell'account, in vista dello sviluppo del nuovo Account Hub, in modo da poter essere sicuri che nulla si "rompa" senza essere notato. Aiutano anche a verificare che la raccolta della posta funzioni quando dovrebbe o forniscano i messaggi di errore previsti quando non funziona.
Copertura del codiceRegistriamo ogni riga di codice eseguita durante i nostri test. La raccolta di tutti questi dati indica quale codice non viene eseguito durante i nostri test. Se un blocco di codice non viene eseguito durante uno qualsiasi dei nostri test, nulla ci dirà quando si danneggia finché qualcuno non usa il codice e si lamenta.
I nostri dati sulla copertura del codice possono essere visualizzati su
cover.thunderbird.net . Puoi anche consultare i dati di Firefox su
cover.moz.tools .
Osservando i dati, potresti notare che il nostro numero complessivo è ora inferiore rispetto a quando abbiamo iniziato a misurare. Ciò non significa che i nostri test siano peggiorati, in realtà mostra dove abbiamo aggiunto molto codice (che non è gestito da noi) nella directory di terze parti. Per una migliore rappresentazione dei progressi che abbiamo fatto, controlla le singole directory, in particolare mail/base che contiene il codice dell'interfaccia utente più importante.
È sufficiente impostare gli strumenti di copertura del codice e osservare i risultati per scoprire diverse perdite di memoria (una perdita di memoria è il punto in cui la memoria viene allocata per un'attività e non viene rilasciata quando non è più necessaria).
Abbiamo corretto queste perdite e alcune altre che esistevano nel nostro codice di test. Ora abbiamo livelli molto bassi di perdite di memoria durante i nostri test, quindi se commettiamo un errore è facile da individuare.
I dati sulla copertura del codice possono anche indicare codice che non viene più utilizzato. Abbiamo rimosso alcune grosse parti di questo codice morto, il che significa che non stiamo perdendo tempo a mantenerlo.
Mozmill non piùVerso la fine dello scorso anno abbiamo finalmente ritirato una vecchia suite di test conosciuta come Mozmill. Questi test sono stati parzialmente migrati in una suite di test diversa (Mochitest) circa quattro anni fa e le cose funzionavano per lo più bene, quindi non era una priorità completarli. Questi test ora fanno le cose in un modo più convenzionale invece di fare affidamento su una serie di trucchi intelligenti ma strani.
Quanto del codice è codice di prova?Circa il 27%. Si tratta di una stima molto approssimativa basata sui file nel nostro repository di codice (meno alcune directory di terze parti) e sul fatto che si trovino o meno all'interno di una directory con "test" nel nome. È aumentato da circa il 19% negli ultimi cinque anni.
Non c'è un obiettivo particolare in mente, ma posso immaginare un futuro in cui ci sarà tanto codice di test quanto codice non di test. Se riusciremo a raggiungere questo obiettivo, Thunderbird si troverà in una situazione molto sana.
https://blog.thunderbird.net/files/2024/03/Screenshot-2024-03-25-at-9.14.08%E2%80%AFAM.pngGuardando al futuro, chiederemo ai contributori di aggiungere test alle loro patch più spesso. Questo dipende ovviamente dalle circostanze. Ma se stai aggiungendo o correggendo qualcosa, è il momento migliore per assicurarti che continui a funzionare in futuro.
Come sempre, non esitate a contattarci se avete bisogno di aiuto per scrivere o eseguire test, tramite le mailing list Matrix o Topicbox:
- Matrix: puoi unirti al nostro canale di chat di sviluppo su
#maildev:mozilla.org - Topicbox mailing list: l'
elenco degli sviluppatori di Thunderbird è un buon posto per sollevare domande sullo sviluppo di Thunderbird.
Geoff Lankow, Staff Engineer