La metodologia agile di sviluppo del software: definizione ed esempi

L’espressione Ingegneria del software è, al contrario di quanto si crede, un’espressione piuttosto datata: fondata dalla NATO nel 1968 da un gruppo di studio, si riferiva alla gestione dei problemi del software che ne ha incoraggiato l’uso in molte attività della nostra vita di tutti i giorni.

L’ingegneria del software è una branca dell’ingegneria: il software deve infatti passare tutti i processi di analisi, design e sviluppo, esattamente come altri “prodotti” nel campo ingegneristico. Si può definire come l’applicazione di un approccio sistematico, disciplinato e quantificabile a sviluppo, operazioni e manutenzione del software. Concentriamoci sulla pima fase: lo sviluppo del software è un lavoro di cooperazione, i compiti sono spesso distribuiti tra diversi team e devono essere gestiti e ordinati in base a priorità e altri criteri. I task possono infatti essere eseguiti in parallelo o in sequenza o ancora in altri modi. La coordinazione tra compiti, processi, persone e ruoli è una condizione necessaria per ottenere software migliori a costi ridotti. Con l’avanzare della tecnologia si sono susseguite varie metodologie e framework per lo sviluppo del software. Le principali si dividono in 3 categorie:

  • le metodologie pesanti, come ad esempio il modello a cascata
  • le metodologie iterative, ad esempio il modello a spirale
  • le metodologie agili, oggetto principale di questo articolo, come ad esempio: Scrum, XP, FDD, Kanban ecc.

Che cos’è lo sviluppo agile del software e quali sono i vantaggi

Sviluppo agile del software è un termine che si riferisce ad una classe di framework e best practices basati sui valori e sui principi del Manifesto Agile. Scritto da 17 persone che cercavano di trovare un’alternativa al modello di sviluppo a cascata, il Manifesto Agile proponeva, già nel febbraio 2001, un nuovo approccio allo sviluppo del software e ne descriveva 4 aspetti chiavi che dovevano avere la precedenza:

  • Individui e interazioni rispetto a processi e strumenti
  • Un software efficiente rispetto a una documentazione esaustiva
  • La collaborazione con il cliente rispetto alla negoziazione dei contratti
  • La preparazione ad affrontare il cambiamento rispetto all’esecuzione di un piano

Ancora oggi, le metodologie di sviluppo del software che rispettano questi principi sono riconosciute come agili. Rispetto alle metodologie tradizionali, quelle agili offrono una serie di vantaggi, studiati e documentati. Aumenta infatti la produttività dei team e la soddisfazione dei lavoratori. Riduce al minimo gli sprechi inerenti a riunioni ridondanti, pianificazioni ripetitive, documentazione eccessiva, difetti di qualità e caratteristiche del prodotto di basso valore. Grazie al miglioramento della visibilità e al continuo adattamento ai cambiamenti delle priorità, il metodo agile migliora il coinvolgimento e la soddisfazione dei clienti, riducendo rischi e tempi di entrata sul mercato.

Nella pratica, le metodologie agili di sviluppo consentono di modificare rapidamente il software con l’obiettivo ultimo di migliorare la soddisfazione dei clienti, usando approcci flessibili, il lavoro di gruppo e i principi del miglioramento continuo. Grazie allo sviluppo agile i team di sviluppatori si organizzano in autonomia e collaborano direttamente con i manager tramite incontri periodici per tutto il ciclo di sviluppo del software. La metodologia agile consente inoltre di adottare un approccio più leggero alla stesura della documentazione e di integrare le modifiche in qualsiasi fase del ciclo di sviluppo.

> Scopri anche il webinar gratuito Agile & Scrum: le origini 

Metodologie agili di sviluppo del software

Sviluppo agile vs metodologie tradizionali

Come accennato prima, il Manifesto Agile è nato dalla necessità di trovare un’alternativa al modello a cascata, che in quegli anni veniva maggiormente usato. Ma vediamo quali sono le principali differenze tra le metodologie di sviluppo tradizionali e agile.

Metodologie TradizionaliMetodologie Agili
Ciclo di sviluppo
  • Lineare
  • Iterativo
Stile di sviluppo
  • Preventivo
  • Adattivo
Requisiti
  • Noti da subito
  • Difficilmente soggetti a modifiche
  • Chiaramente definiti e documentati
  • Emergono con l’avanzamento del ciclo di sviluppo
  • Facilmente soggetti a cambiamento
Management
  • Il processo al centro
  • Le persone al centro
Documentazione
  • Molto dettagliata
  • Conoscenza esplicita
  • Leggera
  • Conoscenza implicita
Obiettivo
  • Prevedibilità e ottimizzazione
  • Esplorazione e adattamento
Cambiamento
  • Contrastato
  • Incoraggiato e accolto
Team
  • Pre-strutturato
  • Di media grandezza
  • Organizzati in autonomia
  • Costituiti da pochi membri
Coinvolgimento del cliente
  • Basso coinvolgimento
  • Passivo
  • Cliente on site considerato come un membro del team
  • Attivo e proattivo
Cultura organizzativa
  • Cultura improntata sul command and control
  • Cultura improntata sulla leadership e la collaborazione
Processo di sviluppo del software
  • Approccio e soluzioni universali per fornire un’alta prevedibilità e sicurezza
  • Approccio flessibile  adattato con la comprensione collettiva dei bisogni contestuali di fornire uno sviluppo più veloce.
Grandezza del progetto
  • Grande
  • Medio o piccolo
Pianificazione
  • A lungo termine
  • A Breve termine
Apprendimento
  • Apprendimento continuo durante lo sviluppo
  • Apprendimento secondario allo sviluppo

Le metodologie agile di sviluppo del software

Le metodologie che andremo ad esemplificare, sebbene adottate inizialmente da uno o pochi team di sviluppatori, hanno presto trovato molti consensi, diventando framework nel momento in cui sono stati adattati per l’uso in differenti realtà. Si precisa che i framework aiutano i team a capire da dove partire con la loro metodologia, ma quest’ultima non dovrebbe coincidere completamente con il framework di riferimento: deve anzi essere adattata alle persone, al software e all’ambiente di riferimento.

Vediamo ora tre framework di sviluppo agile del software: Scrum, Kanban e XP o extreme programming

  • Scrum è un’implementazione di un framework agile proposto per la gestione dei progetti nel campo dello sviluppo iterativo dei software. L’obiettivo è fornire il massimo valore nel più breve tempo possibile. È un framework agile orientato al team, che specifica alcuni ruoli, stabilisce iterazioni che durano un prestabilito lasso di tempo chiamati sprint in cui il sistema è sviluppato in modo incrementale e produce ogni volta un artefatto diverso che coordina il lavoro. È considerato uno dei framework agile più utilizzati. Questa popolarità è dovuta principalmente al fatto che si concentra sui problemi di gestione del software, piuttosto che su quelli tecnici e di sviluppo.

> Leggi anche Capire Scrum: introduzione al framework

  • Kanban, rispetto a Scrum, focalizzato sul management, si concentra sul miglioramento del processo di sviluppo e più che una metodologia, è un modo di pensare. Kanban mette in pratica alcuni principi del pensiero Lean, soprattutto quelli che riguardano lo spreco di tempo e di risorse nella programmazione del software. Poiché Kanban necessita di un sistema già in essere e fornisce strumenti per migliorare il processo del team di sviluppo, un team che faccia uso di Kanban deve avere una idea chiara di quali siano i passaggi che vengono svolti per costruire il software e come ogni operazione vada a influire sugli altri reparti dell’azienda, dove e quando avvengono sprechi, e come migliorare il processo rimuovendo le cause delle inefficienze. In pratica, l’obiettivo di un team che adotta il metodo Kanban é quello di intraprendere un percorso di miglioramento incrementale con lo scopo di individuare i problemi ricorrenti, trovare i fattori comuni e cercare una soluzione per risolverli.

> Leggi anche Scrum vs Kanban: metodologie Agile a confronto

  • Extreme Programming (XP) è una delle più recenti metodologie di sviluppo del software. Introdotto da Kent Back nel 1999 per superare la limitazione del processo convolutivo a fronte di requisiti che cambiano rapidamente e frequentemente e per sviluppare una metodologia adatta a progetti orientati agli oggetti che prevedono più programmatori in un unico posto. Tenta di ridurre i costi dei cambiamenti rimpiazzando il lungo ciclo di sviluppo in più cicli più piccoli. XP ha lo scopo di migliorare la qualità del software portando i concetti dell’ingegneria del software ad un livello estremo. Ha infatti 13 tecniche primarie e 11 pratiche di contorno. Le pratiche si accompagnano a 5 valori chiave: comunicazione, semplicità, feedback, coraggio e lavoro di qualità.

Oltre a queste, meritano di essere citate: DevOps ,che, attraverso la condivisione e la collaborazione dei team, accelera i tempi di rilascio del software; DSDM (Dynamic System Development Method), un approccio iterativo e incrementale che enfatizza il continuo coinvolgimento di utenti e cliente e ultimo, ma non per importanza, TDD (Test Driven Development), che guida il processo di sviluppo del software utilizzando vari test

Le complessità riscontrabili nello sviluppo di software sono in rapido aumento e con loro anche le difficoltà nel riuscire a rispondere con prontezza alle situazioni di criticità utilizzando risorse, strumenti e tempi corretti. Attraverso la consulenza e la formazione, Kinetikon può aiutare la tua azienda a mettere in atto la giusta metodologia agile di sviluppo del software, rispettando tempi e costi e utilizzando l’approccio e il percorso più affine alle caratteristiche dell’azienda stessa.

Fonti:

Alsaqqa, S., Sawalha, S., & Abdel-Nabi, H. (2020). Agile Software Development: Methodologies and Trends. International Journal Of Interactive Mobile Technologies (Ijim)14(11), 246. doi: 10.3991/ijim.v14i11.13269. Disponibile online: https://arxiv.org/ftp/arxiv/papers/1307/1307.3356.pdf

Moniruzzaman, A. B. M., & Hossain, D. S. A. (2013). Comparative Study on Agile software development methodologies. arXiv preprint arXiv:1307.3356. Disponibile online: https://www.researchgate.net/profile/Samar-Alsaqqa/publication/342848746_Agile_Software_Development_Methodologies_and_Trends/links/5f09bcdfa6fdcc4ca45e36f0/Agile-Software-Development-Methodologies-and-Trends.pdf

Cos’è la metodologia agile?. (2022). Disponibile online:  https://www.redhat.com/it/devops/what-is-agile-methodology. Ultimo accesso 10/06/2022

Rigby, D., Sutherland, J., & Takeuchi, H. (2016). Embracing Agile. Disponibile online: https://hbr.org/2016/05/embracing-agile. Ultimo accesso 10/06/2022