Virtù emergente: continuous integration

Una riflessione snella, senza pretese, un divertissement estivo. Sarò breve, seguimi.

La teoria della complessità ci insegna che comportamenti complessi possono emergere da sistemi costituiti da agenti semplici in relazione tra di loro in virtù di regole semplici. Craig Reynolds può introdurti a questi concetti sul web con spettacolari sciami virtuali.

Bene. Poniamo ora un team soggetto a queste due regole:

  1. ogni sviluppatore – ogni coppia – deve fare commit del codice solo a test verdi sulla sua macchina
  2. ogni sviluppatore – ogni coppia – deve prendersi carico della risoluzione dei conflitti che incontrerà al momento del proprio commit

È evidente che la probabilità di avere conflitti nel codice tende a 1 col passare delle ore; i commit degli altri sviluppatori infatti avranno sempre maggiori possibilità di introdurre linee di codice non integrabili automaticamente con le nostre. Questo dato sommato al fatto che eventuali conflitti su poche righe sono comunque preferibili a conflitti su interi moduli del nostro software fanno sì che ogni sviluppatore sarà quindi fortemente incentivato a fare frequenti commit che, in virtù della prima regola, non violeranno la stabilità della repository. Abbiamo quindi introdotto con queste due semplici regole una delle pratiche più preziose del contesto agile: la continuous integration.

Spesso introdurre pratiche nuove nei team può essere complicato anche quando il vantaggio che ne deriverebbe può essere facilmente dimostrato. Individuare regole molto semplice e deburocratizzanti può essere molto utile ad indurre i giusti comportamenti nel team di sviluppo con una redditività molto elevata, anche – perché no – in termini di morale.

August 07 2009 11:50 am | Esperti

One Response to “Virtù emergente: continuous integration”

  1. Andrea Maietta on 07 Aug 2009 at 13:24 #

    Confermo in pieno l’utilità della CI; oltretutto puoi usare il tuo server di CI anche per fare cose che sul tuo pc porterebbero via tempo, come ad esempio i test di code coverage (es. cobertura) o analisi statica sul codice (es. pmd, checkstyle, findbugs). Hudson è un ottimo sistema che supporta come plugin tutti i tool citati.

    Tra l’altro, noi festeggiamo giusto oggi la build numero 100 per il progetto che stiamo seguendo, con … un grazie a Hudson e soprattutto ai miei colleghi che tengono la barra verde!

Trackback URI | Comments RSS

Leave a Reply