Unit test e build server

Attualmente partecipo allo sviluppo di un progetto dove abbiamo circa 500 unit-test, 1.000 assert ed il tempo di esecuzione di tutti i test si avvicina ai 5 minunti. Questo porta a non eseguire sempre tutta la suite di test. Per esempio se modifico una singola classe modifico o aggiungo qualche test, scrivo il codice per far passare solo i test che mi interessano in questo momento e quando quest'ultimi sono ok faccio il commit sul source control. Così facendo però corro il rischio di aver fatto il commit di codice che potenzialmente fa fallire gli altri test che non ho eseguito ma d'altro canto non posso sempre "perde" 5 minuti per controllare che tutto si ok.

La soluzione a questo problema è far eseguire i test a qualcun'altro, ovvero un un build server. Io ho scelto CIFactory ovvero un CruiseControl.NET preconfezionato e preconfigurato. L'installazione è abbastanza semplice per chi in passato ha già provato CruiseControl.NET ed è comunque disponibile anche uno screencast piuttosto dettagliato su come installarlo.

Utilizzando un sistema di questo tipo sono sicuro che dopo ogni commit su mio source control tutti gli unit-test vengono eseguiti completamente ed ho diversi sistemi per ricevere notifica del risultato di questa operazione. Utilizzando uno strumento di questo tipo è inoltre possibile automatizzare una lunga serie di operazioni quali versioning , tagging,  code analisys, code coverage, creazione di pacchetti di setup, statistiche sul codice, diff sui file modificati. Alcune operazioni possono sembrare superflue ma avere sempre a disposizione metriche aggiornate sul codice da noi prodotto "senza sforzi" permette di mantenere la qualità del codice elevata riducendo i tempi ed i costi.