Vantaggi e Tecniche Code Review

Tecniche di Code Review: quali sono i benefici?

Lo sviluppo di un software è un processo complesso. Nasce dalle esigenze di business del cliente e richiede parecchi mesi di lavoro. Seguendo la filosofia Agile, in Paradigma la fase di progettazione è fondamentale e segue un processo durante il quale le funzionalità vengono divise in storie, secondo il framework Scrum. Ogni storia prevede il coinvolgimento di buona parte del team, sia tecnico, che di design e marketing. Come la fetta di una torta, ogni competenza viene applicata per far sì che la piattaforma sia tecnicamente performante, semplice da utilizzare e possa creare valore economico per l’imprenditore. Ogni elemento si sposa al meglio, ma modifiche e correzioni fanno parte della sua naturale evoluzione, seguendo gli stimoli del mercato ed i feedback degli utenti. Per raggiungere questi obiettivi sappiamo quanto sia importante fornire un prodotto stabile, per questo in Paradigma utilizziamo la Code Review, il controllo sistematico del codice sorgente, che ha lo scopo di rilevare e correggere errori prima di rendere il prodotto pubblico. Si tratta di una fase fondamentale nello sviluppo. Infatti, il codice di un software è scritto da esseri umani, che in quanto tali sono soggetti a commettere errori. Ad oggi, la Code Review è un insieme di tecniche utilizzata da team di programmatori, siano colleghi o collaboratori esterni, e negli ultimi anni si è evoluta attraverso l’utilizzo di tool che facilitano e velocizzano il processo di revisione.

 

I benefici della Code Review

I benefici della Code Review sono molteplici. Se eseguita correttamente, ottimizza i tempi, riducendo le ore di lavoro dedicate alla fase successiva del processo di sviluppo e manutenzione, ovvero la Quality Assurance.
Per non parlare dei vantaggi economici che la Code Review comporta. Rilevare bug in anticipo evita problemi spesso riscontrati nel testing del software o addirittura durante il rilascio del prodotto stesso. Fornire un prodotto non funzionante rischia di diventare un boomerang negativo per l’azienda

Oltre a far risparmiare tempo e denaro, la Code Review apporta valore guidando il team nel creare un ambiente di lavoro collaborativo e produttivo. Immagina il programmatore come un artigiano che lavora ad un grande progetto architettonico. Dopo aver pianificato il progetto, deciso ed assegnati i task, ognuno lavorerà in autonomia, per velocizzare il processo di creazione. In questa fase, il confronto è minimo perché ciascuno ha il proprio modo di lavorare e di approcciarsi ai problemi, ma questo può portare a non riconoscere i propri errori, commettendoli ancora ed ancora. Condividendo le proprie azioni alla fine delle singole attività, i colleghi potrebbero segnalare modi più performanti per approcciarsi ai problemi, evitando di reiterare gli errori precedenti e migliorando il risultato finale.

 

“Teamwork is the ability to work together toward a common vision. The ability to direct individual accomplishments toward organizational objectives. It is the fuel that allows common people to attain uncommon results.”

Andrew Carnegie

 

Quindi, estendendo il confronto ad aspetti specifici dello sviluppo spesso riservati ai singoli programmatori, la qualità del prodotto finale trova giovamento. Inoltre, sottoporre il proprio codice al controllo del team ne aumenta la qualità, stimolando i programmatori a fare del proprio meglio. Insomma: la Code Review rende il lavoro trasparente e facilita la sana competitività.

 

Code Review in Paradigma

 

Ai tre fattori sopra citati se ne aggiunge un quarto, che conferma l’importanza dell’uso della Code Review all’interno di ogni team. Infatti, durante la fase di sviluppo è fondamentale che più di un componente del team conosca nel dettaglio la struttura del codice di un’applicazione, così da evitare che il flusso di lavoro si possa bloccare in assenza di un programmatore.

La Code Review è una procedura ben consolidata in aziende di grandi dimensioni. Tra esse vanno annoverate Aetna Insurance Company, IBM, AT&T e Jet Propulsion Laboratories (una divisione della NASA), che grazie all’introduzione della Code Review nei processi di sviluppo, hanno visto incrementare notevolmente la qualità dei software realizzati, riducendo tempi e risorse dedicate, quindi con un notevole risparmio economico. Anche Paradigma ha riscontrato importanti benefici dall’utilizzo delle revisioni, passando da una media del 30% di errori rilevati durante la prima fase di testing al 60% (un incremento del 100%!).

 

Quali sono le tecniche di Code Review più utilizzate ed efficaci?

Nello spirito della filosofia Agile, la Peer Code Review in Paradigma pone gli sviluppatori sullo stesso livello. Applicando le Good Practices, previste dal framework Scrum che utilizziamo ormai da diversi anni, ogni collega controlla il codice dell’altro, al fine di garantire elevata qualità. Le tecniche utilizzate dal nostro team di sviluppo sono prevalentemente tre.

  1. Pair Programming.
    Con questa tecnica gli sviluppatori lavorano fianco a fianco sullo stesso codice, controllandosi reciprocamente. È un approccio efficace sia nell’attività di mentoring tra senior e junior developer, che in quella tra programmatori di pari livello. Il Pair Programming permette, tra l’altro, di integrare il processo di revisione all’interno della fase di sviluppo stessa. Si tratta, però, di un approccio non esente da difetti. Infatti, i due programmatori posti a diretta collaborazione tenderanno a condizionarsi a vicenda, rendendo il processo di revisione meno oggettivo.
  2. Revisione tramite tool.
    Si tratta della tecnica più moderna, poiché si serve di specifici tool automatizzati che danno manforte allo sviluppatore nell’attività di revisione. Spesso si tratta di software integrati con una varietà di framework di sviluppo IDE e SCM. Nello specifico, in Paradigma utilizziamo LINTER, utile nel rilevare errori di svista e nel produrre una struttura sintatticamente pulita e comprensibile, particolarmente utile nel caso di linguaggi non tipizzati come JavaScript e Python.
  3. Over-the-Shoulder.
    Letteralmente “Sopra la Spalla”, questo approccio, un tempo il più utilizzato in Paradigma, sta cedendo il passo alla revisione tramite tool. Una volta completato il codice, ogni developer chiederà ad un collega di revisionarlo. Seguendo passo dopo passo il processo di controllo, il programmatore dovrà spiegare al collega il perché delle sue scelte, così da innescare un confronto costruttivo. Si tratta indubbiamente di una tecnica molto pratica, ma spesso priva di documentazione che attesti le modifiche effettuate. Per ovviare alla mancanza di monitoraggio, l’evoluzione è l’utilizzo di tool web-based. In particolare, in Paradigma utilizziamo Travis CI, tool per la gestione della continuous integration che si integra con la piattaforma web GitHub. La combinazione degli strumenti facilita la revisione permettendo correzioni asincrone e non locali ed evitando perdite di tempo.

 

Code Review Over-the-Shoulder

 

Un’altra metodologia, ormai in disuso, ma ancora menzionata in letteratura è la revisione via Email. Ogni volta che un pezzo di codice è pronto per la revisione, il file verrà inviato al revisore via email. Consiste in una tecnica flessibile rispetto ad altre, ma che perde di utilità quando sorgono opinioni differenti tra developers e si presenta la necessità di discutere approfonditamente di porzioni di codice complesse.

 

Il Futuro della Code Review

Naturalmente, la Code Review non sostituisce le modalità di testing, come il White o Black Box, ma fornisce un consistente contributo nel rilevare errori e, quindi, facilita la creazione di un codice corretto, pulito e dunque comprensibile.
Come si evolverà la Peer Code Review nei prossimi anni? Non è facile prevedere il futuro, ma è ormai evidente come i software odierni siano sempre più complessi rispetto al passato e questo porta ad un maggior numero di righe di codice, aumentando l’esposizione a bug. Sistemi automatici di revisione del codice supportano il team nel rilevare i bug durante le prime fasi di sviluppo, riducendo i tempi e rispettando le scadenze.