rcov è uno strumento di code coverage, ovvero un affare che serve a verificare quanta parte del vostro codice viene esercitata dai vostri test. Oggi l’ho sperimentato con il wiki, e sono abbastanza soddisfatto.

Oddio, tecnicamente si potrebbe usare iun tool di coverage senza test, se si fosse interessati a sapere quanta parte del proprio codice viene utilizzata in un certo uso del programma, ma tipicamente uno strumento del genere è utile per verificare che la propria test suite copra effettivamente tutto il codice che si è scritto.

rcov è decisamente semplice da usare:

rcov [opzioni] file.rb

al momento non supporta più di un file in input (modificare il codice per farglielo fare è banale), ma tanto è pratica comune usare un file test_all.rb che raccolga tutti i vari test.

In applicazioni fatte con rubyonrails però non è così comune, perché si usa il Rakefile per eseguire tutti i test, quindi io mi sono creato un paio di file all.rb in test/unit/ e test/functional, ed un test_all.rb nella directory principale che caricava quei due.

A questo punto ho dato un:

rcov -I test/unit/ -I test/functional/ -x test -x lib all_tests.rb

che tradotto significa “esegui all_tests includendo nel path test/functional e test/unit ed escludendo dall’analisi i file con lib nel nome“.

È utile escluderli altrimenti i dati globali vengono fuori falsati. Attenzione, i risultati non sono comunque del tutto corretti, in quanti rcov usa delle euristiche per capire se alcune cose sono state usate, e non sempre ci prende.
Sono comunque meglio di un rake stats ( Code LOC: 336 Test LOC: 435 Code to Test Ratio: 1:1.3)

I risultati vengono mostrati creando una directory coverage/ che contiene numerosi file html, ognuno rappresenta uno dei file del vostro progetto, con

  1. numero di linee
  2. numero di linee di codice
  3. percentuale di linee coperte
  4. percentuale di linee di codice copert
  5. il codice, colorato in modo differente se è stato eseguito o meno, in modo da evidenziare gli “interruttori” da toccare per testare tutto

Decisamente utile, quantomeno per avere piena confidenza nella propria test suite.
(ah, per il wiki si ottiene: Average (code only): 78.1%
Average (with comments): 81.5%, devo controllare ancora un sacco di cose :( )