Code, Deploy Value

Golden Master Testing per testare legacy code

3 Ottobre 2019 - 4 minuti di lettura

Qualche mese fa Intré ha inaugurato la nuova ala della sede di Seriate, dotata di un ampio spazio destinato a conferenze e workshop aziendali.
Nello stesso periodo si è unito al team Marco Testa, professionista di lungo corso e membro storico dell’eXtreme Programming User Group Bergamo.
Da qualche tempo si stava pensando di aprire questo spazio all’esterno, mettendolo a disposizione per meetup serali: quale migliore occasione se non provare a ridare vita all’XPUGBG?

Fabio Ghislandi, Executive Agile Coach nonché partner di Intré e presidente dell’Italian Agile Movement (patrocinante dell’evento) ha aperto la serata ricordando l’importanza di questi momenti, il cui scopo è far incontrare appassionati e curiosi di eXtreme Programming e metodologie di sviluppo agile del software. Con questa iniziativa vogliamo offrire uno spazio alle persone di Bergamo e provincia (ma non solo!) per potersi esprimere e confrontare in un ambiente dotato di tutti i comfort.

Marco ha poi ricordato lo spirito che ha guidato il gruppo negli anni passati, augurandosi che questa opportunità permetta alla folta comunità di professionisti della zona di tornare insieme a scoprire nuovi modi per sviluppare software.

La parola passa infine a Ferdinando Santacroce, che ha organizzato un workshop sull’annoso problema del legacy code, offrendo qualche spunto per affrontarlo usando test di caratterizzazione e tecniche quali Golden Master Testing e Approval Test.

Vediamo com’è andata.

Testare codice legacy sconosciuto: mob programming e Golden Master testing

Ferdinando ha portato un kata relativo ad un quiz game. Il codice del programma è contenuto in un’unica classe dove abbiamo il metodo main() e altri metodi necessari al funzionamento del gioco quali l’aggiunta di un giocatore, il lancio del dado, la creazione delle categorie e la risposta alle domande.

L’idea è testare questo software che non conosciamo. Da dove partire?

Siamo in tanti in una stessa aula, abbiamo a disposizione un computer e il codice è proiettato e ben visibile a tutti. Perché non utilizzare la tecnica del mob programming?
Il mob programming è un approccio allo sviluppo software in cui l’intero team lavora sulla stessa cosa, allo stesso tempo, nello stesso spazio e sullo stesso computer.
Estende il concetto di pair programming dalla coppia all’intero team.

Per l’occasione Ferdinando ha deciso di adottare un particolare stile di pair programming, lo Strong Style di Llewellyn Falco.
In questa configurazione di fatto è il navigator che programma, mentre il driver ha il solo compito di tradurre linguaggio naturale in codice. In altre parole, tutto il codice arriva al computer passando dal cervello e dalla bocca del navigator attraverso le orecchie e le mani del driver.
Ferdinando e i presenti in sala hanno assunto il ruolo di navigator, il collega Damiano quello del driver.

I presenti hanno proposto fin da subito diversi possibili test da scrivere, dal test su una nuova istanza del gioco al test dell’aggiunta di un nuovo giocatore.
L’obiettivo è usare i test per ottenere informazioni dal software, caratterizzandolo con casi d’uso. In questo particolare esercizio ci siamo avvalsi delle <code>print</code> sullo standard output, in modo da ottenere del testo da usare nelle asserzioni.
Ferdinando ha spiegato quindi come redirigere lo standard output in uno stream, e nel giro di pochi minuti Damiano, sotto suggerimento della platea, ha scritto dei casi di test che verificassero l’intera esecuzione del programma.

Approval testing

Una volta introdotto il concetto di Golden Master Testing viene naturale adottare un approccio ai test di caratterizzazione dove la verifica del funzionamento di un sistema diventa il modo per scoprirne il comportamento, assumendo i risultati come la “verità assoluta”. D’altronde come diceva Uncle Bob in Clean Code, “Truth can only be found in one place: the code.”.

Gli Approval Tests rispondono esattamente a questa necessità.
La libreria omonima, scritta a suo tempo dal già citato Llewellin Falco, ci viene in aiuto offrendo un sistema rapido ed efficace per verificare il comportamento di un sistema e generare in maniera incrementale tutti i “golden master” di cui abbiamo bisogno. Esistono versioni per i linguaggi di programmazione più diffusi, Ferdinando ci ha introdotto l’implementazione per Java.

Purtroppo il tempo a disposizione per Ferdinando era agli sgoccioli e la libreria è stata appena accennata; non è stato comunque un problema, perché la libreria in sé è molto semplice da comprendere ed utilizzare, tant’è che vi invitiamo a dare un’occhiata tra i riferimenti di questo articolo.

Come meetup iniziale è andata davvero bene, si è percepita un’atmosfera elettrizzante e voglia di confronto.
Arrivederci al prossimo evento!

Riferimenti

Contenuti

  1. Slides Testare l’intestabile – Workshop – XPUGBG
  2. Ugly Trivia Kata – Ugly Trivia Kata, Java version
  3. Strong Style Pair Programming – LLewellin Falco’s Blog
  4. Characterization test – Characterization test
  5. Approval tests – versione della libreria per Java

Links

  1. eXtreme Programming User Group Bergamo – xpugbg.it
  2. Italian Agile Movement – agilemovement.it

A breve verrà pubblicato anche il video della serata, rimanete sintonizzati.

Articolo scritto da