Non odiate quando qualcosa rompe la struttura del vostro software? I problemi di costruzione creano lavoro extra, non pianificato. Sembrano sempre accadere quando si ha fretta di risolvere qualche altro problema. Spesso, la costruzione si interrompe per qualche fattore che non è correlato a qualsiasi cosa stiate facendo in questo momento. Quindi può essere piuttosto frustrante dover abbandonare ciò che si sta facendo, scavare in ciò che ha causato la rottura della costruzione, risolvere il problema e riavviare la costruzione (sperando di avere un solo problema da risolvere).
Mi sono imbattuto in questo numero oggi, mentre ricostruivo alcuni pacchetti open-source. Qualche mese fa, abbiamo aggiornato la nostra copia di OpenSSL alla versione 1.0.0, ma non abbiamo ricostruito tutti i pacchetti che dipendono da esso. Si dà il caso che, quando sono andato a ricostruire il client di subversion per prendere una correzione di un bug, ho scoperto che la compilazione di subversion era stata interrotta a causa del fatto che OpenSSL 1.0.0 ha introdotto alcune modifiche incompatibili. Non mi ci è voluto molto per trovare la correzione, perché questo problema era stato corretto mesi fa, e una semplice ricerca sul web ha trovato sia la segnalazione del bug che la correzione. Ma era ancora piuttosto irritante imbattersi in questo problema quando stavo cercando di ricostruire il prodotto.
Non ho un brillante suggerimento da fare qui. Ma ho un'osservazione, ovvero che il tempo macchina è ormai abbondante. Forse dovremmo semplicemente ricostruire tutto il nostro software ogni notte. In questo modo i problemi di costruzione si risolveranno quando i problemi saranno ancora freschi nella mente di tutti.
Inoltre, nel caso in cui abbiate qualche passaggio manuale nel vostro processo di costruzione, decidere di ricostruire frequentemente sarà un buon incentivo per eliminarli. I passaggi manuali sono una fonte comune di errori.
I tester di software tendono a non gradire la ricostruzione del software una volta che lo hanno testato. Lo vedono come un'opportunità per introdurre nuovi difetti. Mi piace avere abbastanza fiducia nei miei strumenti di compilazione (compilatori, linker, makefile) da poter ricostruire in qualsiasi momento. Dato che lavoriamo in lingue di alto livello, dobbiamo avere fiducia nei nostri strumenti di compilazione. Ma c'è abbastanza spazio per entrambi i punti di vista in un processo di sviluppo graduale.
Se avete suggerimenti su come gestire lo sviluppo del software per ridurre al minimo le possibilità di rompere la costruzione, o di ridurre al minimo lo sforzo necessario per correggere i problemi di costruzione, si prega di aggiungere i vostri commenti a questo post.