Copertura del codice
Gli sviluppatori stanno lavorando per fa sì che il codice sorgente di MariaDB sia più coperto dalla test suite mysql-test-run (MTR). E' un processo continuo (e lento) perché vi è ancora molto vecchio codice che ha una scarsa copertura.
Obiettivi del nuovo codice
Per il codice di MariaDB, si punta molto più in alto:
Gli obiettivi sono:
- Tutte le nuove righe di codice dovrebbero idealmente essere testate con MTR.
- Il codice che non può ragionevolmente essere testato con MTR deve essere testato con un altro strumento e tali righe devono essere marcate con /* purecov: tested */.
- In questo caso lo strumento utilizzato per il testing dovrebbe essere documentato nella relativa voce del worklog o nel messaggio che accompagna il commit.
- Il codice che non può essere ragionevolmente testato (come le condizioni di errore) dovrebbe essere testato con '/* purecov: inspected */' in modo tale che il revisore possa identificarlo facilmente.
- Il codice che si sospetta sia irraggiungibile dovrebbe avere un 'DBUG_ASSERT(0)' o essere marcato con '/* purecov: deadcode */' in modo che si possa poi verificare se viene eseguito.
Il motivo per cui si usa 'purecov' per marcare le righe è dovuto allo strumento purecov, usato originariamente per la copertura del codice nei primi anni di MySQL.
Marcatori
I marcatori raccomandati sono
/* purecov: tested */
- Per le righe di codice che sono testate con qualcosa di diverso da mysql-test-run:
/* purecov: inspected */
- Per le righe di codice che sono difficili da testare, ma che qualcuno ha letto molte volte per assicurarsi che siano corrette. Anche un revisore dovrebbe ispezionarle con cura, poiché non sono state testate in modo appropriato.
/* purecov: deadcode */
- Per le righe codice che si sospetta non vengano mai eseguite. Se questo marcatore è presente, e mysql-test-run durante i suoi test scopre che la riga viene chiamata, genera un warning.
Ogni marcatore deve essere posizionato nella riga alla quale si riferisce.
Per i blocchi di codice di più righe, è possibile utilizzare questa sintassi:
/* purecov: begin tested */ .... /* purecov: end */
Eseguire mysql-test-run con gcov
Per poter conoscere il livello di copertura con la test suite corrente, si segua questa procedura:
- Ci si assicuri che gcov sia installato
- Si compili MariaDB con BUILD/compile-pentium-gcov (se la macchina non ha una CPU pentium, si modifichi lo script, o si lasci che venga compilato con le ottimizzazioni specifiche per il pentium)
- Nella directory mysql-test, si esegua questo comando:
./mysql-test-run -gcov
- Per conoscere il livello di copertura di un dato file sorgente:
grep nome_file /tmp/gcov.out
- Per vedere le righe che non sono testate, si legga
source_file_name.gcov
nell'albero dei sorgenti. Poi magari ci si sforzi di pensare un test che copra queste righe e lo si scriva.
Usare dgcov
Lo strumento dgcov permette di controllare la copertura del nuovo codice. (Documentazione originale: http://forge.mysql.com/wiki/DGCov) (codice: "bzr branch lp:mariadb-tools", o http://bazaar.launchpad.net/~maria-captains/mariadb-tools/trunk/view/head:/dgcov.pl)
Strumenti
Si può anche utilizzare il programma lcov.
Lavori in corso
Gli sviluppatori stanno lavorando per migliorare le build buildbot per ottenere automaticamente la copertura del nuovo codice che viene scritto.