Agile: l’evoluzione della test factory

Collaboration, flessibilità, velocità di sviluppo e rilascio di applicazioni con una maggior efficacia anche sul piano dei requisiti e delle performance. Ecco come stanno cambiando le test factory attraverso le metodologie Agile per rispondere a nuove esigenze di business, customer satisfaction in primis.

Pubblicato il 09 Set 2013

Quando si parla di Agile testing, ovvero del modo con cui le attività di testing vengono condotte nell’ambito delle metodologie Agile, si fa essenzialmente riferimento a una forma di testing collaborativo in cui ogni attore è coinvolto a vario titolo nel processo. Le metodologie Agile insistono molto sull'importanza di una relazione collaborativa basata su un’interazione giornaliera tra i vari attori; di fondamentale importanza è il coinvolgimento del cliente, che deve avvenire il prima possibile e per tutta la durata del progetto. Un approccio di questo tipo richiede molta collaborazione e comunicazione, generalmente maggiore di quella che caratterizza gli approcci tradizionali.

“Nelle metodologie Agile – spiega Alessandro Collino, senior test engineer di Alten Italia – il software viene sviluppato in modo interattivo, con interazioni di breve durata e feedback frequenti al fine di gestire modifiche ai requisiti anche in fasi avanzate del progetto e supportare un continuo miglioramento del processo di sviluppo. In questo contesto, il testing viene integrato con l’effort di sviluppo per guidare un continuo avanzamento e miglioramento. Inoltre lo sviluppo Agile si concretizza attraverso la collaborazione tra team che sono auto-organizzanti e inter-funzionali (si usa spesso il termine ‘whole team-approach’)”.

Alessandro Collino, senior test engineer di Alten Italia

In progetti condotti con metodologie Agile, sembrerebbe a prima vista non esserci spazio per una Test Factory e in generale per ogni forma di test indipendente, ma non è così. “Come Alten Italia abbiamo potuto riscontrare che in contesti in cui la complessità e/o la dimensione del sistema aumentano, diventa importante affiancare ai team Agile uno o più team di test indipendenti – commenta Collino -. Questa necessità nasce per vari motivi, tra cui certamente quello legato alle inefficienze, dovute alla mancanza di coordinamento delle attività di test che si possono osservare in presenza di team inter-funzionali come quelli Agile. Nella nostra esperienza in questi contesti, i team di test indipendenti agiscono da coordinatori delle attività di testing, svolgono del testing autonomamente e in ‘parallelo’ per tutta la durata del progetto e sono anche responsabili di gestire la fase di rilascio. Allo stesso tempo i team Agile svolgono principalmente attività di testing di tipo confermativo, ovvero atto a verificare che il sistema funzioni, mentre i team di test indipendenti si concentrano sulla ricerca di difetti e su forme più complesse di testing. Quando questi team trovano dei difetti li riportano allo sviluppo sotto forma di ‘change stories’. Lo sviluppo li tratterà come le ‘user stories’ nel senso che anch’esse verranno aggiunte al backlog, stimate e prioritizzate”.

Come cambia la test factory

Una test factory, di fatto, si occupa di software testing includendo sia i diversi livelli di testing (system test, integration test, user acceptance test eccetera) sia le diverse tipologie di test (funzionale, non funzionale, strutturale, di maintenance, automazione e performance/stress test eccetera). “L’attuazione di un approccio di test factory risponde normalmente all’esigenza di incrementare le logiche di controllo rispetto alla qualità dei rilasci software andando a diminuire i rischi di progetto e di prodotto – interviene Elena Conti, service manager di Alten Italia -. Un’efficace sinergia tra i team di sviluppo e test porta poi efficienza al Software Development Lifecycle Management (Sdlm) e qualità nel prodotto software”.

Elena Conti, service manager di Alten Italia

Una test factory può essere infatti inserita nel development lifecycle sia per l’esecuzione dei test (system test, integration test, test di performance eccetera) sia come livello di test di validazione (per la verifica delle soluzioni applicative dopo l’esecuzione dei test di sistema e d’integrazione).

“La test factory, in entrambe le accezioni riportate, è un servizio organizzato e strutturato che comprende sia il management delle fasi di testing sia tutte le attività previste dalla fase di testing stessa (analisi, progettazione, esecuzione, governance del testing eccetera)”, spiega Conti.

Da un punto di vista organizzativo, la funzione di validation può essere un’organizzazione indipendente o può trovare collocazione nell’area di sviluppo applicativo (in questi casi risponde normalmente all’esigenza di specializzazione e terzietà delle competenze di test e a un ottica di maggiore efficienza del Sdlm) e nell’area delle operation, quando a essere enfatizzata è la funzione di accettazione e supporto al deployment.

“Di fondamentale importanza è poi l’integrazione della test factory rispetto ai vari gruppi che contribuiscono all’Application Lifecycle Management – aggiunge Conti -. È quindi necessario che l’intervento della test factory venga armonizzato all’interno dell’azienda, ponendo il giusto accento e divulgando correttamente le informazioni che possano rendere consapevoli i team interessati del valore aggiunto che può portare all’intero processo”.

Questo aspetto assume un rilievo ancor più importante nel caso di modelli di sviluppo Agile o di tipo incrementale in cui si ha un’integrazione stretta tra sviluppo e testing con short feedback cycles: “la test factory deve esser in grado di equilibrare il proprio intervento rispondendo alle richieste in maniera veloce, ma mantenendo la propria struttura indipendente”, conclude Conti.

Verso il performance testing

Nell’ambito del test factory stanno assumendo sempre più rilievo le attività di performance testing. Se fino a poco tempo fa i problemi di performance di un sistema erano percepiti più in termini di ‘mancato business’, nell’ultimo periodo i riflettori si sono accesi sulla customer satisfaction. Gli utenti, aumentati in modo esponenziale con la diffusione dei dispositivi mobili, hanno aspettative più alte rispetto alle prestazioni dei sistemi che stanno usando e sono pronti a cambiare fornitore in caso di delusioni. “Un studio di Strangeloop (parte del gruppo Radware) indica che il 57% degli utenti online abbandonano il sito se il tempo di attesa è maggiore di 3 secondi; di questi, l’80% non ritornerà mai più su tale sito – sottolinea Ioana Ene di Alten Italia -. I fornitori si stanno attrezzando sia dal puto di vista metodologico sia sul fronte dei tools per includere il performance testing come parte integrante del ciclo di sviluppo dei prodotti: l’obiettivo è dare inizio a un ciclo virtuoso nel quale la buona qualità di un prodotto rilasciato (cioè minori spese di sviluppo) porta un incremento di mercato e richieste di ulteriori sviluppi”.

Nello specifico, il test delle prestazioni di un applicativo software consiste nella simulazione, sotto diversi aspetti, del comportamento del sistema al verificarsi di ipotetiche situazioni di accesso più o meno concorrente da parte di più utenti. Benché trattasi di simulazione, il carico prodotto è reale, proprio per ottenere l’esatta percezione di ciò che accadrà nella realtà.

Ioana Ene di Alten Italia

“Il performance testing è una parte importante di qualsiasi progetto per lo sviluppo di applicazioni o servizi di business. L’inclusione di requisiti prima e stime prestazionali nei cicli di pianificazione dopo assicura un’applicazione rilasciata con criteri di scalabilità, disponibilità e carico, in linea con le caratteristiche richieste – spiega Ene -. Spesso la sola presenza di requisiti prestazionali fa emergere tutta una serie di aspetti e considerazioni che prima non erano nemmeno contemplati”.

I test di performance dovrebbero essere condotti in una fase del ciclo di vita applicativo che si colloca a metà tra il momento in cui il ‘prototipo’ è sufficientemente stabile e il rilascio definitivo in produzione.

Al fine di avere le condizioni necessarie per il corretto svolgimento delle sessioni di test prestazionali, è necessario che siano soddisfatti alcuni prerequisiti, fra cui i più importanti sono:

– i requisiti prestazionali devono essere chiaramente definiti e identificati per l’applicazione in oggetto;

– l’applicazione deve avere superato positivamente i test funzionali previsti;

– l’ambiente per il test è adeguato e rapportato all’ambiente previsto per la produzione, con la corretta configurazione, anche hardware, degli strumenti necessari all’esecuzione dei test.

Esistono diverse tipologie di test prestazionale, ognuno idoneo a condizioni e obiettivi diversi. “La scelta del tipo di test dipende molto dagli obiettivi specifici da verificare, dal comportamento dell’utenza reale e dalla distribuzione temporale delle attività che vengono svolte – spiega Ene -. Generalmente i tipi di test prestazionali sono: stress testing (verifica come si comporta l'applicazione in condizioni di carico elevatissimo; serve sostanzialmente per trovare il punto di rottura oltre il quale l'applicazione incomincia a produrre errori di vario genere); load testing (test di carico – verifica il comportamento dell'applicazione in condizioni di carico; solitamente sono definiti negli Sla sia le condizioni normali sia quelle di picco di utilizzo dell'applicazione in termini di tempi di risposta, utilizzo delle risorse eccetera); il load testing può essere implementato con differenti criteri di durata del test e aggregazione delle transazioni utente, evolvendosi in capacity testing (verifica il livello di scalabilità dell'applicazione) e stability testing (verifica il grado di stabilità dell’infrastruttura applicativa); non-regression performance testing (si prefigge di verificare che l’integrazione con altri sistemi o componenti non degradi o comprometta ciò che è stato ottenuto in termini prestazionali fino a quel momento)”.

Il valore dell’Agile

Le metodologie di sviluppo Agile sono caratterizzate da un forte ‘orientamento al cliente’ e si concentrano sulle attività a valore aggiunto, cercando di minimizzare gli sprechi che possono nascere utilizzando metodologie tradizionali. Esse si legano molto al cosiddetto Lean Software Development che rappresenta la traduzione in ambito software di concetti provenienti dal mondo industriale. “Attraverso la loro struttura fortemente iterativa, che consiste in rilasci frequenti, stretta collaborazione e cooperazione, continuous integration, cicli di feedback molto corti, le metodologie Agile permettono di gestire modifiche ai requisiti in qualsiasi momento, anche nelle fasi più avanzate del progetto, minimizzando costi e impatti – spiega Collino -. I vantaggi legati alla loro introduzione riguardano non sono il cliente e l’organizzazione nel suo complesso, ma anche i team stessi (sia quelli Agile che di test indipendente). In ambito Agile lo sviluppo delle applicazioni deve svolgersi in un ambiente molto cooperativo, nel quale i team sono coinvolti più attivamente e sono più responsabilizzati che nello sviluppo tradizionale, in quanto prendono le decisioni in maniera collaborativa. La definizione dei requisiti non si svolge in modo up-front: ovvero i requisiti non vengono più definiti tutti in anticipo, ma vengono definiti, analizzati e implementati via via nel corso del progetto. Particolarmente importanti sono la comunicazione diretta e una semplificazione della documentazione, spesso minimale e principalmente diretta allo scambio di opinioni. I team ricevono feedback frequenti grazie ai test che sono automatizzati e questo permette di ridurre drasticamente i tempi di rilavorazione”.


Alten: “guidare il cambiamento”

“Alten riconosce nell’approccio Agile importanti valori legati alla valorizzazione della collaborazione e sinergia delle diverse fasi progettuali: dalla relazione con la committenza in termini di demand alla sinergia interna al gruppo di progetto e all’importanza di meccanismi di continuous feedback da parte del committente su brevi iterazioni – esordisce Alessandro Collino, senior test engineer di Alten Italia illustrando la strategia e il posizionamento della società sul fronte delle metodologie Agile -. Ciascuno dei valori elencati porta già in sé alcuni dei principi fondamentali richiesti dal ‘buon testing’, quali l’aderenza ai requisiti e il coinvolgimento delle attività di testing fin dalle prime iterazioni, anticipando in questo modo l’intercettazione dei defect. In contesti Agile il nostro sforzo va nella direzione di portare i principi e le best practice di ‘buon testing’ all’interno dei progetti, facendo sì che nei team di progetto siano presenti competenze specifiche che garantiscono la bontà del testing effettuato (intesa come validità, valore, qualità, affidabilità, sicurezza)”.

“Nella nostra esperienza uno dei principali ostacoli a una efficace adozione di approcci Agile è legato al coinvolgimento della committenza nei progetti – osserva Collino -. Il nostro obiettivo è quindi ‘guidare’ prima di tutto il cambiamento culturale necessario ad avvicinare il business e l’It, i clienti e i fornitori, in un’ottica di trasparenza e collaborazione imprescindibile perché un approccio Agile porti i propri frutti”.

In particolare un aspetto centrale del cambiamento culturale di cui parla Collino è legato alla condivisione del presupposto per cui la qualità del software che si va a rilasciare deve essere una condizione imprescindibile e dominante rispetto, ad esempio, allo ‘scope’ di progetto. “In situazioni di contingenza, che sappiamo essere all’ordine del giorno, il team di progetto deve avere le leve per poter decidere di sacrificare le features meno prioritarie evitando la consuetudine del quick and dirty o l’assunzione incontrollata di rischio legata al rilascio di software non adeguatamente testato – puntualizza il manager di Alten -. In termini di strumenti, l’adozione di soluzioni di test management può essere un facilitatore nell’avvicinare e mettere in collaborazione i diversi attori del progetto soprattutto quando si rendano necessarie relazioni inter-progetto (coordinamento di più progetti relazionati); l’adozione di strumenti di automazione è poi spesso fondamentale in ottica di non regressione rispetto a un modello Agile caratterizzato da brevi e frequenti iterazioni”.

Valuta la qualità di questo articolo

La tua opinione è importante per noi!

Articoli correlati

Articolo 1 di 3