Metodologie
Dopo anni di esperienza su vari progetti di grandi dimensioni, scoprendo e testando sul campo metodologie e approcci di ogni tipo, riteniamo di avere concrete competenze sul mondo Agile.
Abbiamo collezionato diversi errori e infine raggiunto risultati meravigliosi utilizzando combinazioni di buone pratiche e tool per implementarle. Abbiamo adottato Scrum e dopo alcune variazioni incoraggiamo i nostri clienti a fare lo stesso, attraverso la nostra esperienza.
Abbiamo preso ispirazione da Extreme Programming, adottando il pair programming e il Test Driven Development. La nostra mission è aiutare il cliente ad testare tutto, aumentando il code coverage e la qualità del codice.
Per i nostri servizi interni e per il lavoro di consulenza vero e proprio utilizziamo invece Kanban, che ci permette di essere agili senza iterazioni.
Agile with Scrum
Scrum è un framework agile per la gestione del ciclo di sviluppo del software, iterativo ed incrementale, concepito per gestire progetti e prodotti software o applicazioni di sviluppo. Questa metodologia prevede di dividere il progetto in blocchi di lavoro (Sprint) alla fine di ciascuno dei quali creare un incremento del software.
I Team Scrum sono auto-organizzati e cross-funzionali: scelgono come meglio compiere il lavoro organizzandosi e coordinandosi al proprio interno e hanno tutte le competenze necessarie per realizzare il lavoro senza dover dipendere da nessuno al di fuori del team. Il modello di team in Scrum è progettato per ottimizzare la flessibilità, la creatività e la produttività.
Agile with Kanban
Mentre per lo sviluppo di prodotti SCRUM è molto efficace, riteniamo che per l’organizzazione del lavoro di consulenza non sia lo strumento adatto. Dopo una lunga ricerca abbiamo iniziato ad utilizzare Kanban per il nostro lavoro quotidiano.
Kanban è una tecnica molto più longeva di SCRUM anche se è considerata uno degli approcci agili nel campo della gestione dei progetti. Deriva dal metodo Toyota e si basa in linea di massima sul fatto che un task debba essere portato a termine dal team il più velocemente possibile.
Test Driven Development
Con il termine Test Driven Development (TDD) si fa riferimento ad una tecnica di ingegneria del software nella quale i test sono scritti prima del codice sorgente. Sia la letteratura che la pratica dimostrano come l’attuazione del TDD produca importanti vantaggi durante lo sviluppo del software quali una migliore progettazione, una drastica diminuzione sulla manutenzione del codice e un rapido sviluppo del software.
Il concetto fondamentale è quello di “ottenere qualcosa subito e poi perfezionare”.
Dopo l’esecuzione dei test, avviene il refactoring del codice e poi, di nuovo, la procedura Test-Code-Refactoring. Il processo viene iterato tante volte quanto e’ necessario affinche’ la funzionalita’ voluta rispetti le specifiche dichiarate in fase di analisi.
La natura metodica del TDD assicura che tutte le singole funzionalita’ siano testate in maniera profonda, sia singolarmente sia insieme. Poich├® i test sono condotti fin dall’inizio del ciclo di progettazione, il tempo e il denaro spesi per il debug è ridotto al minimo.
Le tecnologie oggi disponibili, consentono la registrazione di batterie di test che, eseguite in automatico ad ogni modifica del programma, garantiscono la qualità del software prodotto.
Una delle principali limitazioni del TDD risiede nel fatto che i test possono talvolta essere concepiti o applicati in modo non aderente a quello che poi è il reale impiego in produzione portando ad unità che, in produzione, non funzionano come previsto. Infatti anche se tutte le unità funzionano perfettamente singolarmente e in tutti gli scenari previsti, gli utenti finali possono però incontrare situazioni non immaginate dagli sviluppatori. I risultati finali del TDD sono da considerarsi validi come i test che sono stati progettati, l’accuratezza con cui sono stati eseguiti e la misura in cui imitano le condizioni incontrate dagli utenti finali.