Università degli Studi dell’Insubria - taibi.it · hanno permesso una valutazione quantitativa e...

60
Università degli Studi dell’Insubria FACOLTA’ DI SCIENZE MATEMATICHE FISICHE E NATURALI Corso di Laurea in Informatica Studio e applicazione di metodi agili nello sviluppo di prodotti Software Open Source Tesi di Laurea di: Relatore: Prof. Luigi Lavazza MARCO BINDA Prof. Sandro Morasca Matricola: 607575 Correlatore: Davide Taibi Anno Accademico 2008-2009

Transcript of Università degli Studi dell’Insubria - taibi.it · hanno permesso una valutazione quantitativa e...

Università degli Studi dell’Insubria

FACOLTA’ DI SCIENZE MATEMATICHE FISICHE E NATURALI

Corso di Laurea in Informatica

Studio e applicazione di metodi agili nello sviluppo di prodotti

Software Open Source

Tesi di Laurea di: Relatore: Prof. Luigi Lavazza

MARCO BINDA Prof. Sandro Morasca Matricola: 607575

Correlatore:

Davide Taibi

Anno Accademico 2008-2009

ii

Riassunto

Nello studio dell’ingegneria del software si possono dividere i processi di sviluppo in due categorie: processi di sviluppo classici e processi di sviluppo agili. Quando si prende in considerazione un processo di sviluppo classico ci si riferisce a modelli come quello a cascata o a spirale, in cui la modalità di lavoro è fortemente orientata all’esecuzione di passi sequenziali dove si pianifica, si progetta e si sviluppa l’intero sistema software, con a volte la presunzione di implementare oltre alle funzionalità richieste quelle future. Questo modo di operare, ben si orienta allo sviluppo di progetti Closed Source Software (CSS). I processi di sviluppo Agili, come ad esempio Extreme Programming (XP) o SCRUM, si contrappongono a quelli classici. Questi modelli sono composti da una serie di fasi iterative, dove viene presa in considerazione una parte di progetto alla volta, piccola e ben definita. I processi di sviluppo Agili propongono un modo di lavorare fortemente orientato al risultato che ben si adatta allo sviluppo di progetto Open Source Software. In questo lavoro di tesi si è applicato un processo di sviluppo Agile, in particolare una versione modificata di SCRUM, ad uno strumento OSS contenuto all’interno del progetto Qualipso, in dettaglio allo strumento MACXIM. Gli obiettivi che ci siamo proposti all’inizio di questo lavoro sono quelli di valutare se sia possibile inserire il processo di sviluppo SCRUM in un progetto OSS già in fase di sviluppo, se sia possibile far cooperare un team di programmatori geograficamente distribuiti e se SCRUM ha contribuito effettivamente a migliorare la qualità del prodotto e la produttività del processo. SCRUM è stato studiato, modificato e adattato per poter essere applicato allo sviluppo di MACXIM. Sono state raccolte una serie di misure quantitative e qualitative prima e dopo l’introduzione di SCRUM nel processo di sviluppo, che hanno permesso una valutazione oggettiva ed empirica dell’applicazione di SCRUM a progetti OSS.

iii

Sommario 1   INTRODUZIONE ............................................................................................ 1  

1.1   OBIETTIVI DELLA TESI ....................................................................... 3  

1.2   STRUTTURA DELLA TESI .................................................................... 4  

2   I PROCESSI DI SVILUPPO ............................................................................ 5  

2.1   PROCESSI DI SVILUPO CLASSICI ...................................................... 5  

2.1.1   IL PROCESSO DI SVILUPPO A CASCATA ..................................... 5  

2.1.2   IL PROCESSO DI SVILUPPO ITERATIVO: A SPIRALE ................ 7  

2.1.3   IL PROCESSO DI SVILUPPO UNIFIED PROCESS ......................... 8  

3   I PROCESSI DI SVILUPPO AGILI .............................................................. 11  

3.1.1   EXTREME PROGRAMMING ........................................................... 14  

3.1.2   SCRUM ............................................................................................... 16  

3.1.3   FEATURE DRIVEN DEVELOPMENT ............................................ 19  

3.1.4   DYNAMIC SYSTEM DEVELOPMENT METHOD ........................ 21  

4   APPLICAZIONE DI SCRUM A PROGETTI OSS ....................................... 23  

4.1   LIGHT SCRUM ...................................................................................... 28  

5   CASO DI STUDIO ........................................................................................ 33  

5.1   MACXIM ................................................................................................ 33  

5.2   PROCESSO DI SVILUPPO ................................................................... 35  

5.3   APPLICAZIONE DI LIGHT SCRUM A MACXIM ............................. 36  

5.4   RISULTATI ............................................................................................ 38  

CONCLUSIONI E SVILUPPI FUTURI ............................................................... 45  

BIBLIOGRAFIA ................................................................................................... 47  

Appendice A - I PRINCIPI FONDANTI DEL MANIFESTO AGILE ................ 50  

Appendice B - PRATICHE ................................................................................... 52  

1

1 INTRODUZIONE

Nel corso degli anni ’90 si sono concretizzate ed hanno

avuto modo di evolvere una serie di metodologie per lo

sviluppo software denominato “Agile”.

Queste discipline si focalizzano sul conseguimento di

un obiettivo alla volta, breve e ben definito,

realizzando con un processo iterativo l’intero sistema.

Talvolta queste metodologie possono essere impiegate

per sviluppare prodotti software Open Source (OSS)[13].

Normalmente lo sviluppo di prodotti OSS avviene con

criteri molto elastici, in cui gli sviluppatori sono

distribuiti geograficamente, decidono il proprio lavoro

e come distribuirlo alla comunità.

Questa tipologia di sviluppo è in aperto contrasto con

le metodologie Closed Source Software (CSS), dove vi

sono dei paradigmi molto rigidi, come ad esempio quelli

implementati nel modello Waterfall [14], in cui i

programmatori devono seguire schemi di sviluppo

rigorosi e ben impostati.

Questo lavoro di tesi prende in esame due

considerazioni principali:

1. Il processo di sviluppo dei prodotti OSS è molto

simile al processo di sviluppo adottato nelle

metodologie Agili

2. I prodotti CSS sviluppati con processi classici

non hanno avuto modo in questi anni di abbracciare

le metodologie Agili emergenti, mantenendo

paradigmi di sviluppo rigidi.

2

Presa visione di queste due considerazioni, ho

sviluppato il mio lavoro di tesi applicando una

metodologia Agile ad uno strumento OSS nel progetto

Qualipso [18], effettuando delle misurazioni prima e

dopo l’impiego di tale processo di sviluppo, per

valutare se sia possibile ottimizzare la produttività

del team di sviluppo ed aumentare la qualità dei

prodotti OSS, attraverso un ambito più inquadrato

rispetto a quello completamente non strutturato che

caratterizza i progetti OSS.

Dopo aver preso visione delle diverse metodologie

Agili, valutando pregi e difetti di ciascuna, abbiamo

applicato il processo di sviluppo SCRUM [1] per lo

sviluppo di MACXIM (Model And Code Xml-based Integrated

Meter), uno strumento OSS che estrae misure

quantitative e oggettive da codice sorgente Java.

Terminata questa esperienza abbiamo confrontato i dati

raccolti prima e dopo l’introduzione di SCRUM e ne

abbiamo ricavato delle osservazioni su come applicare

SCRUM ai prodotti OSS.

Dai risultati ottenuti è emerso che SCRUM non ha

alterato significativamente la produttività del nostro

team di sviluppo e la qualità del nostro prodotto.

Tuttavia è stato possibile controllare meglio il

processo di sviluppo rispetto al periodo di non

sviluppo con la metodologia SCRUM.

3

1.1 OBIETTIVI  DELLA  TESI  

In questo progetto di tesi si è applicata una

metodologia si sviluppo Agile allo strumento MACXIM.

MACXIM è sviluppato nel contesto delle attività del

progetto Qualipso [18] che è dedicato alla valutazione

della qualità di progetti OSS, insieme a una serie di

altri strumenti. Considerando che il nostro interesse è

rivolto alla qualità dei prodotti OSS, è stato quindi

naturale includere MACXIM nella serie di prodotti OSS

da valutare. Come conseguenza la qualità di ciascuna

emissione di MACXIM è stata accuratamente misurata.

Gli obiettivi che ci siamo prefissati prima di

procedere all’applicazione del processo di sviluppo

SCRUM allo strumento OSS MACXIM sono convogliati nello

rispondere ai seguenti quesiti:

1. È possibile passare con successo da SCRUM a un

processo OSS in fase di sviluppo?

2. È possibile applicare SCRUM a una serie di

sviluppatori geograficamente distribuiti?

3. Può SCRUM contribuire a migliorare la qualità del

prodotto e la produttività del processo?

Per poter rispondere alle tre domande precedenti,

abbiamo individuato una serie di misure e confrontato i

dati ottenuti prima e dopo l’introduzione di SCRUM nel

processo di sviluppo dello strumento MACXIM. I dati

raccolti dopo essere stati analizzati e confrontati

hanno permesso una valutazione quantitativa e

qualitativa dell’applicazione si SCRUM a dei progetti

OSS.

4

1.2 STRUTTURA  DELLA  TESI  

In questo capitolo è stata presentata un’introduzione

al lavoro di tesi svolto.

Nel secondo capitolo vengono presentate i principali

processi di sviluppo classici, andando ad evidenziare

le principali caratteristiche legate ad ogni modello

analizzato.

Nel terzo capitolo vengono presentati i principali

modelli di sviluppo Agili, presi in considerazione per

poter portare a termine con successo gli obiettivi

prefissati.

Nel quarto capitolo viene spiegato come il processo di

sviluppo SCRUM è stato scelto e adattato allo sviluppo

dello strumento MACXIM.

Nel quinto capitolo viene descritto lo strumento

MACXIM, il processo di sviluppo adottato, come è stato

applicato LIGHT SCRUM allo strumento MACXIM ed i

risultati ottenuti a fine lavoro.

5

2 I PROCESSI DI SVILUPPO

Nell’ingegneria del software esistono vari processi di

sviluppo. Possiamo suddividere i processi di sviluppo

in due categorie: i processi classici ed i processi

agili.

2.1 PROCESSI  DI  SVILUPO  CLASSICI  

Nel corso degli anni sono stati sviluppati diversi

processi di sviluppo del software. In questo capitolo

ne verranno presentati alcuni tra i più noti.

• A cascata.

• A spirale.

• Unified Process.

2.1.1 IL  PROCESSO  DI  SVILUPPO  A  CASCATA  

Il processo di sviluppo a cascata (waterfall) è stato

il primo processo di sviluppo studiato nell’ingegneria

del software (Fig. 1).

Il processo di sviluppo a cascata è strutturato

secondo una serie di fasi. Le fasi di questo processo

di sviluppo sono lo studio di fattibilità, descrizione

del problema, progettazione della soluzione, sviluppo e

test di unità, integrazione e test del sistema,

deployment e manutenzione. Vengono svolte in forma

sequenziale: ogni fase per poter iniziare, deve

attendere la conclusione di quella precedente.

6

Fig. 1 Modello a cascata

Vi sono dei problemi evidenti in questo processo di

sviluppo: pur avendo una struttura semplice che

permette di semplificare il lavoro degli sviluppatori,

accade spesso che in una di queste fasi ci si rende

conto che sarebbe necessario tornare a quella

precedente.

Ad esempio, come spesso accade in fase di sviluppo,

emergono alcuni aspetti del sistema non noti in una

prima fase di analisi, che rendono quindi necessario

tornare alla fase precedente per poter chiarire questi

nuovi aspetti.

Un ulteriore problema del processo di sviluppo a

cascata è di non sposarsi bene con progetti dove i

requisiti utente cambiano con una frequenza alta.

7

Questo processo di sviluppo è più adatto allo sviluppo

di grossi progetti software, come ad esempio i primi

sistemi operativi.

2.1.2 IL  PROCESSO  DI  SVILUPPO  ITERATIVO:  A  SPIRALE  

Nel corso degli anni sono stati ideati altri processi

di sviluppo con l’intenzione di affrontare e risolvere

gli aspetti problematici di quello a cascata. È nato

cosi il processo di sviluppo iterativo, ancora oggi

ampiamente usato.

Il processo di sviluppo iterativo è composto da una

serie di iterazioni al termine delle quali è sempre

prodotto un particolare deliverable. Le iterazioni sono

mini-progetti formati da una ripetizione di fasi: le

attività e i deliverable prodotti cambiano in funzione

dello stato di avanzamento del progetto.

Il più famoso processo di sviluppo iterativo è quello a

spirale (Fig. 2).

Fig. 2 Modello a spirale

8

Il processo di sviluppo a spirale conserva gli aspetti

sistematici di quello a cascata, ma cerca di ridurre la

possibilità di errori. Per far questo, il processo di

sviluppo a spirale prevede la realizzazione del

prodotto software attraverso più rilasci incrementali.

Le attività che portano alla creazione di un rilascio,

sono ciclicamente ripetute per ogni versione

successiva, secondo una spirale.

Il processo di sviluppo a spirale è caratterizzato da

una struttura composta da task region. Ogni task region

è costituita da un insieme di attività.

Uno dei vantaggi principali di questo modello è

l’introduzione dell’analisi del rischio a ogni livello

di iterazione. La presenza dell’analisi del rischio

influenza in modo significativo le decisioni prese nel

progetto.

2.1.3 IL  PROCESSO  DI  SVILUPPO  UNIFIED  PROCESS  

Uno dei modelli iterativi più significativi è lo

Unified Process (UP) e il suo esempio più famoso, il

Rational Unified Process (RUP). UP è un modello che

definisce una struttura generica di processo: tale

struttura è poi specializzata per un’ampia classe di

sistemi software.

UP è iterativo e incrementale: è scomposto in progetti

di dimensione e complessità minori da svolgere in

singole iterazioni. Al termine di ogni iterazione è

necessario un momento di verifica e, se l’esito è

positivo, il progetto passa all’iterazione successiva.

Inoltre viene mantenuto un feedback di quanto fatto nel

9

corso dell’iterazione, in modo da assecondare eventuali

cambiamenti occorsi durante il progetto.

Il modello UP è strutturato secondo due diverse

dimensioni:

1. una dimensione temporale suddivisa in fasi che

determina la vita e la maturità del progetto (è la

sequenza di iterazioni citate in precedenza);

2. una dimensione di workflow del processo,

articolata in attività ripetute in ogni iterazione

di ciascuna fase (definisce la struttura di ogni

singola iterazione).

Le fasi del modello UP vengono illustrate in Fig. 3 e

sono inception, elaboration, construction e transition.

Mentre le attività individuate a ogni iterazione sono

requirements, analysis, design, implementation, test.

Fig. 3 Fasi del modello Unified Process

A volte queste fasi assumono un peso ritenuto fin

troppo rilevante. Per questo motivo negli ultimi anni

10

sono stati definiti nuovi processi di sviluppo,

identificati con l’espressione Agile Software

Development.

11

3 I PROCESSI DI SVILUPPO AGILI

L’Agile Software Development è un approccio che punta

l’attenzione verso la capacità di rispondere in modo

veloce ed efficace ai cambiamenti che caratterizzano il

processo di sviluppo del software.

Nel 2001 è stato pubblicato un manifesto dell’Agile

Software Development che ne descrive i principi

fondanti e i valori.

Il termine agile fa riferimento, in generale, alla

capacità di reazione al cambiamento, come ad esempio la

capacità di adattare la soluzione software in base ai

cambiamenti dei requisiti richiesti dall’utente, e alla

flessibilità del lavoro del team durante l’intero

progetto.

In Appendice A - I PRINCIPI FONDANTI DEL MANIFESTO

AGILEvengono riportati i dodici principi che stanno

dietro la stesura del manifesto mentre in [2] i

firmatari del documento.

Nel manifesto sono indicati quattro aspetti che

differenziano il processo di sviluppo agile rispetto ai

modelli esistenti:

• Lo sviluppo agile si focalizza sulle persone e

sull’interazione piuttosto che sul processo e i

tool.

• L’enfasi è sulla realizzazione del software

piuttosto che sulla redazione di una

documentazione esaustiva.

• L’aspetto essenziale è la collaborazione con

l’utente e non la negoziazione del contratto.

12

• È essenziale rispondere al cambiamento piuttosto

che seguire in modo rigido un piano di progetto

preordinato.

Sulla base di questi principi e dei dodici punti del

Manifesto Agile, sono nate un insieme di metodologie

agili, all’interno delle quali è possibile applicare

una o più pratiche in base all’esigenza del committente

del progetto.

Con il termine “pratica” si indica un modo di operare

associato alla metodologia.

Le singole pratiche applicabili alle metodologie agili

sono decine e nella loro scelta si deve tener conto

delle caratteristiche di ogni pratica, per i benefici

che apporta e le conseguenze che comporta. Le pratiche

più diffuse tra cui scegliere sono simili fra di loro e

possono essere raggruppate in categorie come riportato

in Appendice B - PRATICHE.

Qui di seguito verranno descritte le metodologie agili

più significative:

• Extreme Programming.

• SCRUM.

• Feature Driven Development.

• DSDM.

• Lean Software Development.

Tutte le metodologie agili condividono una serie di

caratteristiche comuni e fondamentali come

adattabilità, iteratività, rilasci frequenti, testing,

orientamento alle persone e applicabilità a progetti

dove i requisiti utente cambiano in continuazione.

Operativamente, quindi, le metodologie agili

13

ridimensionano l’importanza e lo sforzo impiegato nelle

attività preliminari del progetto, come ad esempio la

raccolta dei requisiti, la progettazione della

soluzione e in particolare dell’architettura di base.

Ciò non significa che queste attività non siano

eseguite, ma che il tempo e lo sforzo dedicati sono

minori rispetto ai processi di sviluppo software

classici.

14

3.1.1 EXTREME  PROGRAMMING  

Nel 1999 fu pubblicato Extreme Programming Explained

nel quale l’autore Kent Beck presenta un nuovo modo di

sviluppare software, che permette di limitare i rischi

di fallimento strettamente legati alla fase di

progettazione.

L’Extreme Programming (XP) è una metodologia agile,

come tale cerca di rispondere agli obiettivi fissati

dal manifesto agile. In particolare mira alla

realizzazione di un processo di sviluppo leggero e

flessibile, adatto a rispondere in tempi brevi e con

costi ridotti, alle mutevoli richieste del committente

anche in fase avanzata del progetto.

XP propone l’utilizzo di dodici pratiche agili, e

suggerisce di utilizzarle al massimo delle loro

potenzialità, da qui il termine “Extreme”.

Tra le pratiche consigliate troviamo progettare con il

cliente, test funzionali e unitari, refactoring

(riscrivere il codice senza alterarne le funzionalità

esterne), progettare al minimo, descrivere il sistema

con una metafora, proprietà del codice collettiva

(contribuisce alla stesura chiunque sia coinvolto nel

progetto), scegliere ed utilizzare un preciso standard

di scrittura del codice, integrare continuamente i

cambiamenti al codice, il cliente deve essere presente

e disponibile a verificare (sono consigliate riunioni

settimanali), open workspace, quaranta ore di lavoro

settimanali, pair programming (due programmatori

lavorano insieme su un solo computer).

Inoltre XP è caratterizzato da quattro valori chiave:

semplicità, feedback, comunicazione e coraggio. Questo

approccio si focalizza su una progettazione della

15

soluzione il più semplice, inclusiva delle sole

funzionalità che di volta in volta il team deve

rilasciare al committente. L’ideazione e la

pianificazione della soluzione avvengono tramite user

story.

Una user story è la descrizione, semplice e breve, di

una particolare funzionalità richiesta dal committente:

il team di sviluppo analizza tutte le user story e

decide in che ordine implementarle. Il feedback è

ottenuto dal testing continuo eseguito sul codice:

spesso i casi di test sono pensati prima

dell’implementazione del codice che viene quindi

realizzato per rispondere al test definito. Il team,

ricevendo i frequenti feedback del committente, può

adattare i rilasci successivi in modo flessibile.

XP riscuote molto successo nel mondo dello sviluppo e

dell’ingegneria del software, ma ha anche i suoi

detrattori. Essi evidenziano alcuni fattori critici del

metodo, sostenendo che XP funzioni solo con

programmatori di alto profilo (programmatori senior),

capaci di progettare applicazioni scalabili da subito o

in grado di applicare un buon refactoring. Inoltre

sostengono che il pair programming dimezzi il numero di

task eseguibili in parallelo e individuano nel test

driven development del lavoro aggiunto, in quanto

costringe a scrive e mantenere altro codice.

L’estremismo di questo metodo non sempre è apprezzato,

ma gli va riconosciuto il merito di evidenziare

pratiche agili di successo, tra queste può valere la

pena sperimentare in ambiente produttivo quelle che più

si avvicinano alla filosofia aziendale.

16

3.1.2 SCRUM  

SCRUM è stato creato da Ken Schwaber, Jeff Sutherland e

Mike Beedle.

La parola SCRUM non è un acronimo, viene utilizzato

cosi come si presenta dalle aziende per indicare

l’attuazione del processo stesso. Deriva probabilmente

dai primi documenti pubblicati da Ken Schwaber che

portavano nel titolo la parola in maiuscolo SCRUM. È un

termine che deriva dal Rugby ed indica il “pacchetto di

mischia”, dove ogni componente del team di sviluppo

deve “spingere” nella stessa direzione, agendo come

un’entità coordinata.

Di seguito in Fig. 4 viene mostrato il ciclo di vita

del processo SCRUM relativo allo svolgimento di un

Sprint Backlog.

Fig. 4 Ciclo di vita del processo SCRUM

Prima di descrivere il processo stesso, analizziamo le

parti che lo compongono. SCRUM è composto da tre ruoli,

tre cerimonie e tre artefatti.

17

I tre ruoli sono ricoperti da Product Owner, colui che

commissiona, finanzia il progetto ed ha la

responsabilità di definire le caratteristiche del

prodotto e di decidere la data di rilascio ed il

contenuto. Lo ScrumMaster deve garantire che il team di

lavoro sia funzionale e produttivo, una stretta

cooperazione in tutti i ruoli e le funzioni e che il

processo sia eseguito in ogni sua cerimonia, inoltre

deve schermare il team da interferenze esterne.

L’ultimo ruolo ma non meno importante è il team di

sviluppo. Esso si occupa di selezionare e portare a

termine l’obiettivo di ogni Sprint, inoltre si

organizza il proprio lavoro, mostrando i risultati

ottenuti per mezzo di demo al Product Owner.

La prima delle tre cerimonie è lo sprint planning

meeting, un incontro della durata di circa quattro ore,

in cui il Product Owner e il team di lavoro negoziano

su quali caratteristiche devono essere implementate

durante l’iterazione (Sprint), basando questa decisione

su quali caratteristiche con la massima priorità e un

alto valore commerciale è possibile portare a termine

in quel periodo. La seconda cerimonia è il daily scrum

meeting, un incontro mattutino della durata di quindici

minuti, in cui ogni componente del team di lavoro rende

noto cosa ha fatto nella giornata precedente, cosa farà

durante quella giornata e che problemi ha incontrato.

La terza cerimonia è data dallo sprint review meeting,

un incontro di quattro ore, in cui il team di lavoro

presenta al Product Owner ciò che è stato implementato

durante lo Sprint, inoltre viene deciso cosa

implementare nello Sprint successivo, ristabilendo le

priorità di ciascuna caratteristica.

18

I tre artefatti utilizzati in questo processo sono: il

product backlog, che consiste in una lista di

caratteristiche che definisco il prodotto finale. Lo

sprint backlog, è la lista di caratteristiche che il

team di lavoro deve implementare durante lo Sprint. La

burndown chart, contiene il lavoro che non è stato

svolto dal team durante lo Sprint.

In una fase di pre-processo si effettua uno sprint

planning meeting, tra il Product Owner e il team di

lavoro, in cui viene definito il product backlog e lo

sprint backlog. Dopo questa fase avviene il primo

sprint della durata di quattro settimane, in cui

quotidianamente avviene il daily scrum meeting,

presidiato dallo ScrumMaster. Al termine di questo

periodo si effettua lo sprint review meeting, in cui

ciò che non è stato completato viene aggiunto alla

burndown chart, mentre la parte di lavoro portata a

termine viene presentata tramite una demo al Product

Owner.

19

3.1.3 FEATURE  DRIVEN  DEVELOPMENT  

La feature driven development (FDD) è stata ideata da

Jeff De Luca e Peter Coad. Questa metodologia agile

basa la propria forma di sviluppo sulle funzionalità

richieste dal programma. Per poter applicare FDD è

necessario dividere il progetto in cinque fasi chiamate

processi.

Qui di seguito in Fig. 5 viene mostrato il ciclo di

vita del processo FDD con le rispettive fasi

Fig. 5 Ciclo di vita del processo FDD

La prima fase riguarda lo sviluppo di un modello

complessivo. Questa fase viene svolta da un team di

“modellatori”, persone altamente qualificate della

materia da trattare. Hanno il compito di sviluppare un

modello complessivo del dominio del problema. Questo

modello viene aggiornato iterativamente, sulla base dei

risultati ottenuti dal quarto processo.

La seconda fase consiste nella costruzione di una lista

di funzionalità, dove il modello complessivo è

suddiviso in aree più grandi. Ogni area ottenuta viene

20

a sua volta divisa in singole attività (funzionalità o

features), organizzate successivamente in una lista con

una struttura gerarchica.

La terza fase è una pianificazione del processo di

sviluppo sulla base delle funzionalità ottenute

precedentemente, in cui vengono considerate le attività

da svolgere e le relative priorità. Questo processo

coinvolge il capo del progetto, il responsabile dello

sviluppo e i capi programmatori.

Nella quarta fase vengono elaborate le funzionalità. Lo

svolgimento di questa parte è supervisionata dai capi

programmatori, i quali identificano e coordinano i

singoli programmatori per fargli sviluppare una singola

funzionalità.

Nella quinta fase vengono testate le funzionalità

sviluppate al passo precedente utilizzando dei test di

unità e successivamente revisionate dai capi

programmatori.

Una volta terminate queste due operazioni, il codice

viene inserito nel repository del codice di progetto

per poter essere condiviso da tutti gli sviluppatori e

quindi pronto per il rilascio.

21

3.1.4 DYNAMIC  SYSTEM  DEVELOPMENT  METHOD  

Il Dynamic System Development Method (DSDM) è stato

sviluppato in Gran Bretagna ed ora divenuto uno

standard europeo. L’evoluzione del processo agile DSDM

è gestito da un consorzio, che ne permette la

distribuzione gratuita.

Sviluppare un progetto con il processo DSDM, consiste

nel dividere tale sviluppo in tre fasi: pre-project,

ciclo di vita e post-project. Di seguito viene

rappresentata in Fig. 6 la fase ciclo di vita.

Fig. 6 Ciclo di vita del processo DSDM

Il processo DSDM si compone di tre fasi sequenziali,

dove nella fase di pre-project deve essere

concretizzato il finanziamento al progetto e

successivamente vengono individuati i candidati per

portarlo a termine. Nella fase ciclo di vita, composta

da cinque tappe, il progetto è realmente sviluppato.

22

La prima e la seconda tappa sono chiamate Studio, si

dividono rispettivamente in uno studio di fattibilità,

che consiste nel valutare se il processo DSDM è idoneo

per poter realizzare il progetto analizzato e in uno

studio businnes dove viene definito un elenco di

requisiti con le rispettive priorità.

La terza tappa chiamata modello funzionale

d’iterazione, consiste nello sviluppare un modello

funzionale contenente le funzionalità ricavate dal

elenco dei requisiti, accordarsi sugli orari

d’incontro, sviluppare un prototipo funzionale sulla

base del modello e controllarne la correttezza.

La quarta tappa denominata progettazione e costruzione

d’iterazione, è applicata per produrre una prima

release funzionate da consegnare agli utenti finali per

essere utilizzata come test.

Nella tappa finale chiamata attuazione, vengono

raccolti i feedback degli utenti, utilizzati come test,

per proseguire con un successivo raffinamento del

prodotto.

Nella terza fase di post-progetto, viene effettuata una

manutenzione del prodotto, effettuando una nuova

iterazione della seconda fase.

 

 

23

4 APPLICAZIONE DI SCRUM A PROGETTI OSS In genere lo sviluppo di prodotti Software Open Source

(OSS), non segue il tradizionale sviluppo software

proveniente dai paradigmi descritti nei libri di testo

dell’ingegneria del software.

In contrapposizione allo sviluppo OSS, vi sono i

paradigmi di sviluppo classici, pensati e progettati

per sviluppare Closed Source Software (CSS).

L’OSS ha ereditato caratteristiche che hanno reso

questi paradigmi difficilmente conciliabili. Per

esempio, OSS è spesso sviluppato da una comunità

distribuita di sviluppatori ed è liberamente

distribuito, come codice sorgente aperto e disponibile

sia per gli sviluppatori che per gli utilizzatori

finali, sotto specifiche licenze.

Come stiamo descrivendo in questo lavoro di tesi,

l’analisi di alcune caratteristiche intrinseche

dell’OSS [13] da un lato confermano che i paradigmi

rigidi di sviluppo, come ad esempio il modello

Waterfall [14], non sono applicabili all’OSS, mentre,

da un altro lato sembra suggerire che i paradigmi Agili

[15] possano aiutare gli sviluppatori OSS a migliorare

la qualità dei loro prodotti.

Questo è il risultato del fatto che i principi generali

dietro il Manifesto Agile [1] sono riflessi nel modo in

cui la maggior parte dei progetti OSS sono sviluppati e

rilasciati agli utenti finali.

Ciò che caratterizza molti progetti OSS è di non avere

una visione commerciale a breve termine, questo implica

che le attività di analisi del sistema e di

progettazione, di solito non sono pre-programmate nello

sviluppo OSS. Inoltre molti progetti OSS sono stati

24

avviati per risolvere il particolare problema di un

utente, ma a volte finiscono innovando profondamente il

campo del software (questo è il caso di Linux, Perl e

Word Wide Web) anche se non hanno avuto una visione a

lungo termine almeno alla loro nascita.

La necessità di una profonda evoluzione della maggior

parte dei progetti OSS è generalmente percepita dopo

che sono stati utilizzati con successo da una vasta

comunità di utenti.

Il successo di un prodotto OSS è di solito

imprevedibile. Esso è direttamente connesso al grado di

attrattività e di utilità che il prodotto ha nella

comunità degli utenti nel corso del tempo. È quindi

molto difficile pianificare in anticipo le nuove

versioni di un sistema, fatta eccezione per il breve

termine. Queste osservazioni rispecchiano i primi due

principi del Manifesto Agile:

1. Soddisfare il cliente attraverso la consegna

rapida e continua di software di valore.

2. Consegnare frequentemente il software prodotto.

Inoltre OSS è caratterizzato da un ambiente di lavoro

non strutturato, dove la maggior parte degli

sviluppatori OSS sono volontari, che, non si impegnano

a rispettare tempi di consegna e ad avere assegnati dei

compiti specifici.

Nei progetti CSS, ai membri del team sono assegnati

compiti specifici, mentre nei progetti OSS sono i

membri del team che scelgono i propri compiti.

A causa di queste libertà le attività che sono viste

come fattori nocivi, quali la definizione del piano di

progetto, la progettazione del sistema di valutazione e

25

l’analisi dei requisiti, non possono essere eseguite

seguendo paradigmi tradizionali nella comunità degli

sviluppatori OSS.

In molti contesti di sviluppo utilizzando processi

Agili, i requisiti che non sono stati definiti in

anticipo dagli analisti qualificati sono continuamente

discussi dagli sviluppatori.

I rischi vengono monitorati e gestiti nel corso del

ciclo di vita del progetto, in modo naturale, come

parte del normale sviluppo di lavoro.

Queste caratteristiche dell’OSS riflettono il principio

Agile: “Le architetture migliori, i requisiti e i

disegni, emergono da gruppi auto-organizzati”.

L’OSS è sviluppato in modo organizzativo e distribuito

[8]. I sistemi OSS sono sviluppati in un ampio contesto

di scala cooperativa, dove diverse squadre di utenti

privati, nuclei di sviluppatori appassionati e comunità

virtuali, creano la “società non strutturata” (ad

esempio Rymond lo ha soprannominato il “Bazaar”)

contribuiscono allo sviluppo del progetto.

Internet e il desktop, sono il ponteggio per queste

organizzazioni virtuali di sviluppo del software, dove

gli sviluppatori sono coordinati dalle politiche di

licenza semplice, senza meccanismi di controllo

gerarchico, altrettanto rigorosi nello sviluppo CSS.

Di conseguenza gli sviluppatori OSS non seguono quasi

mai metodologie di sviluppo, come ad esempio quelle

definite e seguite dagli sviluppatori CSS.

Inoltre lo sviluppo di progetti OSS è caratterizzato da

una crescita più rapida [16] e più creativa rispetto

allo sviluppo di progetti CSS [17], con l’obbiettivo di

soddisfare e rispondere più rapidamente alle esigenze

degli utilizzatori.

26

Ciò è dovuto principalmente a una organizzazione non

strutturata e informale della comunità. La struttura e

le regole possono “inibire pensatori innovativi e

portarli ai margini” [17], mentre l’informalità e la

libertà di azione promuovono la creatività.

Ciò richiede implicitamente la definizione di

architetture che sono intrinsecamente modulari e

scalabili. Questo per garantire l’estensibilità di un

sistema e l’interoperatività tra differenti hardware e

piattaforme software.

Queste osservazioni rispecchiamo il settimo principio

dell’Agile: “Costruire progetti intorno a persone

motivate, dare loro l’ambiente e il sostegno di cui

hanno bisogno e fidarsi di loro per ottenere il lavoro

svolto”.

L’uso massiccio della rete e delle risorse distribuite

favorisce la diffusione della conoscenza del progetto,

attraverso canali non strutturati come la mailing list,

i forum e la chat, in modo da facilitare la

comunicazione tra sviluppatori, utenti finali e

gestori.

Questo in parte si ricongiunge ai due principi Agili:

“Coloro che finanziano il progetto e gli sviluppatori,

devono lavorare insieme ogni giorno per tutta la durata

del progetto” e “Il più efficiente ed efficace metodo

di trasmissione delle informazioni da e all’interno di

un team di sviluppo è la conversazione face to face”.

Il lavoro riportato in questo documento prende in

considerazione due aspetti principali:

1. Il processo di sviluppo di prodotti OSS assomiglia

spesso ai processi di sviluppo Agili come XP, nei

quali ogni piccola granularità dello sviluppo

27

incrementale viene effettuata tramite un ciclo che

coinvolge la progettazione e l’esecuzione di test;

2. Mentre CSS in questi ultimi anni ha definito

paradigmi di sviluppo rigidi per abbracciare i

modelli Agili, rilasciando poche opere circa

l’applicazione di paradigmi Agili per lo sviluppo

di OSS (ad esempio [10]).

Dopo aver preso in considerazione le osservazioni fatte

fino ad ora, abbiamo applicato una metodologia Agile

allo sviluppo di uno strumento OSS nel progetto

Qualipso [18], e abbiamo effettuato delle misurazioni

per valutare se sia possibile migliorare la

produttività dei processi e la qualità dei prodotti OSS

attraverso un ambiente più controllato rispetto a

quello completamente non strutturato che caratterizza i

progetti OSS.

Più specificatamente abbiamo applicato il processo di

sviluppo SCRUM [1] per l’implementazione di MACXIM

(Model And Code Xml-based Integrated Meter), uno

strumento OSS che estrae misure quantitative e

oggettive da codice sorgente Java.

Abbiamo descritto un insieme di misure di qualità e

produttività che sono state applicate prima e dopo

l’introduzione della metodologia SCRUM nello sviluppo

di MACXIM.

Abbiamo poi confrontato i dati raccolti prima e dopo

l’introduzione di SCRUM, per capire se e come il

processo SCRUM abbia interessato lo sviluppo e abbiamo

ricavato una serie di osservazioni su come applicare

SCRUM ai prodotti OSS.

28

4.1 LIGHT  SCRUM    

Come descritto nel paragrafo precedente, abbiamo deciso

di adottare il processo di sviluppo SCRUM da applicare

allo sviluppo del prodotto MACXIM. Prima di poter

applicare il processo di sviluppo SCRUM al nostro

progetto, si è dovuto elaborare tale processo per

poterlo adattare alle nostre specifiche esigenze di

lavoro, principalmente per risolvere dei problemi

legati alla distribuzione geografica del team di

programmatori.

L'introduzione del processo di sviluppo SCRUM è

avvenuta a metà giugno ‘09 e abbiamo terminato il suo

utilizzo con il rilascio della prima release di MACXIM

alla fine di ottobre ‘09.

Prima di iniziare a utilizzare il processo di sviluppo

SCRUM in modo definitivo, abbiamo voluto effettuare un

periodo di prova di quattro settimane, coincidenti con

l’esecuzione di due “Sprint”.

Dopo che i periodi di prova sono andati a buon fine, si

è deciso di adottare il processo di sviluppo SCRUM.

Uno Sprint consiste in un periodo di due settimane,

dove ogni membro del team di lavoro deve portare a

termine delle funzionalità presenti nello “Sprint

Backlog”.

Uno Sprint Backlog è una lista di funzionalità,

contenente il carico di lavoro del team di

programmatori, necessario ad implementare un certo

numero di caratteristiche presenti nel “Product

Backlog”.

Il Product Backlog è una sequenza di obiettivi,

tradotti in caratteristiche, che il prodotto finale

deve essere in grado di soddisfare. Questa successione

29

di obiettivi è stata generata da un responsabile ad

alto livello del progetto Qualipso.

Ogni Sprint è iniziato con la generazione di uno Sprint

Backlog, che deve essere portato a termine dal team di

programmatori entro e non oltre l’inizio dello Sprint

successivo.

Lo ScrumMaster, colui che ha il compito di facilitatore

nello svolgimento del processo SCRUM, in collaborazione

con il team di programmatori, ha generato i vari Sprint

Backlog sulla base delle priorità di ogni obiettivo

contenuto nel Product Backlog.

Una o più funzionalità presenti nello Sprint Backlog

sono state assegnate dallo ScrumMaster ad ogni singolo

sviluppatore coerentemente con le capacità del membro

del team.

A causa della distribuzione fisica del team di sviluppo

di MACXIM, gli incontri giornalieri prescritti da

SCRUM non sono avvenuti di persona. Abbiamo adottato

una modalità di lavoro on-line, con l'uso di un forum e

di un sistema di videoconferenze. Nello specifico

abbiamo sostituito gli incontri mattutini con un forum

on-line.

Il forum è stato strutturato in modo che per ogni

giorno ci sia un argomento, all’interno del quale tutti

i membri del team devono scrivere i propri commenti in

riferimento a tre domande standard:

1. Che cosa hai completato relativamente allo Sprint

Backlog dell'ultimo incontro?

2. Quale obiettivo ti sei prefissato per oggi (in

relazione allo Sprint Backlog)?

3. Quali difficoltà hai incontrato nello svolgimento

del lavoro?

30

Di seguito in Fig. 7 viene riportata una pagina

d’esempio del forum utilizzato:

Fig. 7 Pagina d'esempio del forum utilizzato

Il forum completo è disponibile al sito

http://qualipso.uniinsubria.it/forum (in italiano).

Ogni mattina, tutti i membri del team di sviluppo

devono accedere al forum per leggere i post e se uno di

loro ha un idea di come risolvere i problemi postati è

incoraggiato a suggerire la soluzione.

La Fig. 8 da un esempio degli incontri mattutini.

Fig. 8 Esempio di incontro mattutino

31

Con l’introduzione del forum i membri del team non si

sono mostrati entusiasti di dover scrivere e leggere

ogni giorni i post mattutini.

Dopo alcuni giorni, il team di sviluppo ha iniziato a

comprendere l’utilità degli incontri virtuali ed

entrambi, il project manager e i nostri "clienti" (cioè

il responsabile ad alto livello del progetto Qualipso)

hanno la possibilità di tenere traccia del lavoro

svolto su base giornaliera.

Dopo aver introdotto il forum abbiamo fatto trascorrere

un periodo di assestamento, della durata di due Sprint

(quattro settimane), in modo che tutti i membri del

team si sono abituati alla nuova modalità di

interazione.

Successivamente abbiamo sostituito l’incontro di inizio

Sprint, tra ScrumMaster e il team di sviluppo, nel

quale viene definito lo Sprint Backlog con un report

on-line via forum, dove sono state riportate le

funzionalità da implementare abbinate ai rispettivi

sviluppatori.

Quindi gli incontri, non sono più avvenuti di persona,

ma on-line ogni due settimane.

Per ovviare a problemi di interazione dovuti al solo

colloquio via forum, abbiamo introdotto incontri in

videoconferenza per un tempo complessivo di quattro

ore, dove si è effettuato il punto della situazione in

merito al progetto ed i membri del team hanno ricevuto

delucidazioni sulle funzionalità da implementare.

Questi incontri sono stati riportati sul forum con un

report.

Durante questi incontri, il team ha iniziato a crescere

insieme, a mostrare maggiore interesse e padronanza del

progetto.

32

Il team di sviluppo ha portato a termine con successo

alcuni Sprint Backlog, mentre le funzionalità che non

sono state sviluppate nei tempi previsti, sono state

ricollocate nel successivo Sprint Backlog assegnato al

team di sviluppo al successivo Sprint.

Un fattore molto interessante che si è verificato con

l’introduzione di questa metodologia di sviluppo è

stato che nel momento in cui un membro del progetto si

è trovato di fronte a un problema che gli impediva di

proseguire con il proprio lavoro, gli altri

sviluppatori lo aiutavano.

Il risultato di aver introdotto il forum e gli incontri

in videoconferenza è stato quello di far condividere a

tutti i membri del team di sviluppo un obiettivo comune

da raggiungere ed un modo di collaborare efficiente.

Nonostante le due tipologie di incontro definite in

precedenza si è reso necessario introdurre degli

incontri di persona una volta al mese della durata di

quattro ore, per evitare un possibile rischio di

mancanza di interazione.

33

5 CASO DI STUDIO

Nel capitolo seguente viene descritto il caso di studio

relativo a questo progetto di tesi. Dopo aver applicato

un processo di sviluppo Agile a un progetto OSS in

particolare allo strumento MACXIM, in questo modo

abbiamo applicato un ambiente più controllato rispetto

a quello completamente non strutturato che caratterizza

i progetti OSS. In fine si è valutato se dalle

misurazioni effettuate è stato possibile ottenere dei

risultati soddisfacenti per migliorare produttività e

qualità dei prodotti OSS. Più precisamente il processo

di sviluppo applicato è stato LIGHT SCRUM, descritto

nel capitolo precedente.

Le misurazione prese in considerazione alla fine del

lavoro di tesi, sono state applicate prima e dopo

l’introduzione di LIGHT SCRUM nello sviluppo di MACXIM.

I dati raccolti sono stati comparati prima e dopo

l’introduzione di LIGHT SCRUM e abbiamo ottenuto una

serie di considerazioni su come applicare LIGHT SCRUM a

prodotti OSS.

5.1  MACXIM  

Lo sviluppo dello strumento MACXIM è iniziato in

maniera piuttosto strutturata e priva di un processo

ben definito. Questo ha comportato che le misure della

qualità di MACXIM, insieme con le misure che indicano

la velocità del progresso di sviluppo, non hanno

mostrato una situazione cosi buona come ci si poteva

immaginare.

34

I nostri obbiettivi di sviluppo servivano per trovare

le cause di tali prestazioni insoddisfacenti e per

trovare e utilizzare i meccanismi che potrebbero

consentire di migliorare il processo di sviluppo e la

qualità del nostro prodotto OSS.

L’analisi della prassi di sviluppo ha indicato che il

problema principale è stata la scarsità di

coordinamento tra gli sviluppatori, i quali, anche a

causa di una mancanza di comunicazione, favorito dalla

distanza fisica degli sviluppatori, non sono stati in

grado di raggiungere una visione condivisa del progetto

e ha omesso di agire in modo coerente.

Si è quindi deciso di migliorare la gestione del

progetto, applicando le attività di coordinamento.

Tuttavia, non abbiamo voluto introdurre troppi vincoli

agli sviluppatori, ma solo orientare i loro sforzi

verso un obbiettivo comune e condiviso.

A tal fine abbiamo deciso di adottare un processo di

sviluppo Agile, in particolare SCRUM [1], una tecnica

di gestione del progetto che consente agli sviluppatori

di raggiungere un compromesso molto buono tra un

coordinamento efficace e una agilità nel processo.

Prima di applicare questo processo di sviluppo allo

strumento MACXIM sono state rilevate delle misurazioni

relative alla situazione “pre-SCRUM”, in modo da poter

utilizzare questi dati come una base rispetto alla

quale abbiamo potuto confrontare i risultati ottenuti

dopo l’introduzione di SCRUM.

In particolare tali misure potrebbero aiutarci ad

effettuare una valutazione quantitativa e oggettiva

dell’impatto dell’introduzione di SCRUM in un contesto

di sviluppo OSS.

35

Questa valutazione ha portato a raggiungere tre

obiettivi principali della ricerca.

In primo luogo abbiamo voluto verificare la possibilità

di passare con successo da SCRUM a un processo OSS in

corso di sviluppo. Quando il nostro progetto è iniziato

è stato seguito da un processo di sviluppo diverso,

quindi non era chiaro se l’introduzione di SCRUM

sarebbe effettivamente stata utile al progetto.

In secondo luogo è stato valutato se l’applicabilità di

SCRUM a una serie di sviluppatori geograficamente

distribuiti poteva essere fattibile: una delle pratiche

di base del metodo di SCRUM è quello di partecipare

alle riunioni quotidiane che possono chiaramente essere

problematiche da organizzare se i partecipanti

risiedono lontano gli uni dagli altri.

In terzo luogo abbiamo voluto verificare in che misura

SCRUM possa aiutare a migliorare la qualità del

prodotto e la produttività del processo. Questo

obbiettivo potrebbe essere definitivamente misurato per

mezzo del set di strumenti di valutazione della qualità

Qualipso.

5.2 PROCESSO  DI  SVILUPPO  

Lo sviluppo del MACXIM è iniziato nel settembre 2007,

senza un preciso progetto in testa. Dopo alcuni mesi,

il project manager ha realizzato che i requisiti e le

scadenze del progetto stesso fossero difficili da

rispettare senza un piano di lavoro ben sviluppato e

senza un team interamente dedicato.

Un anno più tardi, è stato composto un team di

sviluppatori dedicati allo sviluppo di MACXIM e il

36

progetto MACXIM ha iniziato a seguire il suo percorso

naturale, partendo degli attributi di alto livello e

andando nello specifico passo a passo.

Il team era composto da due sviluppatori junior e un

project manager fino a maggio ‘09, quando un nuovo

sviluppatore junior fu coinvolto nel progetto.

Il team crebbe da tre a quattro sviluppatori nel

periodo tra giugno e ottobre ‘09 e ne perse uno in

ottobre.

Tutti gli sviluppatori junior erano coinvolti full-time

sullo sviluppo di MACXIM, mentre il project manager era

impegnato solo parzialmente (tre volte a settimana).

Come molti altri team di sviluppo di progetti OSS , il

nostro team era distribuito geograficamente, con gli

sviluppatori junior residenti a diversi chilometri di

distanza gli uni dagli altri.

Si sono verificati dei problemi di scadenze nel momento

in cui il team è passato da quattro a tre sviluppatori,

principalmente dovuti a esigenze di volatilità.

Come conseguenza il project manager raccomandò

l'introduzione della metodologia Agile per risolvere

questi problemi.

5.3 APPLICAZIONE  DI  LIGHT  SCRUM  A  MACXIM  

Abbiamo iniziato raccogliendo dati sulle misure di

qualità e produttività a Marzo 2009 e abbiamo finito la

raccolta dati alla fine di Ottobre 2009 con l’uscita

della prima release ufficiale di MACXIM. Per due

settimane, alla fine di giugno, abbiamo stoppato lo

sviluppo di MACXIM e abbiamo iniziato un’indagine di

37

qualità e testing per ridurre il numero di errori e

warning all’interno del codice.

L’indagine è stata organizzata sia implementando una

casistica di “unit-test” e “integration test”, ma anche

facendo analizzando il codice con dei tools esterni

come il PMD e Checkstyle, per migliorare la qualità del

codice e rispettare gli standard di codifica (coding).

Questa attività è finita all’inizio di luglio 2009.

A metà luglio abbiamo cambiato il processo di sviluppo,

mantenendo la raccolta dati come avevamo fatto nel

periodo precedente.

Come indicatori “fine-grained” per valutare gli

obiettivi iniziali di ricerca, abbiamo considerato le

misure per le seguenti caratteristiche di prodotto e

processo:

• Organizzazione del codice: abbiamo previsto che

una migliore coordinazione tra gli sviluppatori

poteva portare a un codice meglio strutturato.

Abbiamo usato il numero totale dei “packages”, il

numero medio delle effettive linee di codice

(eLoc) per classe e il numero totale di classi per

misurare l’organizzazione del codice.

• La velocità di produzione. Abbiamo usato il

numero di classi per misurare la “somma del

prodotto”, perché le classi sono più

rappresentative degli eLoc in uno sviluppo

“object-oriented”, sebbene sufficientemente “fine-

grained” per mostrare un progresso quantificabile

su base settimanale. In ogni caso, abbiamo anche

quantificato la produzione in termini di codice

prodotto e eravamo soliti a misurare gli eLoc per

valutare la produttività.

38

• Qualità del codice. Per la qualità interna abbiamo

usato misure tradizionali come le misure di

modularizzazione Chidamber e Kemerer e la misura

di complessità di McCabe, come regole elementari

di struttura del codice, che prevede valutazioni

piuttosto dure, ma significative e facili da

raccogliere. Inoltre, il totale dei commenti nel

codice, che è spesso un indice trascurato, è stato

considerato come un fattore di qualità.

• Efficacia. Infine, come misura di efficacia della

coordinazione di progetto attraverso il processo

di sviluppo SCRUM abbiamo considerato il numero di

“Sprint” andati a buon fine nel applicazione di

SCRUM, considerando l’evoluzione del team di

sviluppo.

5.4 RISULTATI    

Al termine del processo di raccolta dati abbiamo

iniziato l’analisi dei dati e abbiamo derivato un set

di grafici come in Fig. 9Fig. 10Fig. 11Fig. 12Fig. 13.

La Fig. 9 mostra l’evoluzione delle misure usate per

tracciare l’evoluzione del progetto e

dell’organizzazione del codice.

39

Fig. 9 Evoluzione delle misure

Abbiamo raccolto il numero totale di packages, il

numero medio di eLoc per classe e il numero totale

delle classi. La Fig. 9 mostra che il numero dei

packages e il numero totale delle classi è aumentato

con l’introduzione del processo di sviluppo SCRUM,

mentre il numero medio di eLoc per classi è diminuito.

I comportamenti dei numeri di packages e del numero

totale delle classi mostrano che la velocità di

crescita dello strumento MACXIM continua dopo

l’introduzione del processo di sviluppo SCRUM e il

codice sembra essere modulato meglio fino alla

dimensione prevista, da quando il numero medio di eLoc

appare in aumento. Sebbene questi trend sembrano

esistere prima della sua introduzione, lo SCRUM non era

dannoso… inoltre possiamo osservare che l’introduzione

dello SCRUM ha livellato il picco massimo e minimo di

eLocperclass medio che avevamo nel periodo precedente.

Questo è probabilmente dovuto alla funzione generale

dello SCRUM che suggerisce consegne a frequenza

intermedia con funzionalità di lavoro, come tutte le

altre forme di processi software agili. Così il

progetto può cambiare i suoi requisiti in accordo con

40

la modifica dei bisogni, focalizzando su piccole

funzionalità e implementando queste funzionalità in

classi meglio modulate.

La Fig. 10 mostra il numero medio di linee di commento

per eLoc.

Fig. 10 Numero medio di linee di commento

Un’osservazione preliminare del grafico mostra che

questa misura diminuisce dopo l’introduzione dello

SCRUM. Questo non è del tutto vero, perché noi possiamo

osservare solo una crescita durante il periodo di

qualità-testing tra la fine di giugno e l’inizio di

luglio 2009. Il numero medio di linee di commento per

eLoc stava già diminuendo prima di quel periodo, tra

metà aprile e meta giugno 2009. Lo stesso trend di

diminuzione è stato confermato anche dopo

l’introduzione dello SCRUM, nel periodo da metà luglio

a metà ottobre 2009.

La Fig. 11 mostra rapporti sulle misure di qualità del

codice.

41

Fig. 11 Misure della qualità del codice

Abbiamo calcolato la media di mancanza di coesione dei

metodi metriche (LCOM per classe), l'accoppiamento

media tra classi di oggetti (CBO per classe), e la

complessità media ciclomatica nei metodi di ogni

classe. Come indicato nella letteratura, i valori

elevati di queste misure sono indesiderabili, mentre

valori bassi indicano una buona qualità interna del

prodotto software object-oriented. Nella nostra

esperienza, la complessità ciclomatica diminuisce

lentamente ma costantemente, dopo l'introduzione di

SCRUM, mentre le altre due misure di seguire una

tendenza all'aumento. Per quanto riguarda CBO,

accoppiamento eccessiva tra le classi di oggetti è

dannosa per la progettazione modulare e impedisce il

riutilizzo. Il più indipendente di una classe è, più

facile è quello di riutilizzare in un'altra

applicazione. Manutenzione La più grande l'attacco,

maggiore è la sensibilità ai cambiamenti in altre parti

del disegno, e quindi è più difficile. Ciò è in

contrasto con i dati che abbiamo raccolto in Fig. 11

che sembrano suggerire un miglioramento della

42

modularizzazione del codice e, come conseguenza, la

manutenzione del codice. L'incremento del CBO possono

essere correlati a l'incremento elevato abbiamo avuto

sul numero totale di classi dopo l'introduzione di

mischia. In ogni caso, il valore del CBO MACXIM è molto

bassa (ad esempio, un alto valore CBO è considerato

maggiore di 14) [21]. Per quanto riguarda LCOM, la

qualità e la sperimentazione delle attività svolte poco

prima dell'adozione di SCRUM fortemente ridotto LCOM da

un valore di 10 ad un valore di 4. Questo valore

aumenta improvvisamente dopo l'introduzione di SCRUM,

con una punta di valore 7 alla fine di settembre 2009.

Questo valore è negativo si è verificato nello stesso

tempo come il valore massimo del numero complessivo di

classi, suggerendo così un rapporto tra le due misure.

In media, il valore calcolato LCOM durante il processo

a cascata è uguale a quella calcolata durante il

processo di mischia.

In ogni caso, il CBO ei valori LCOM sembrano suggerire

che l'attività di test effettuati durante il processo

di SCRUM, non è così efficace come quella effettuata

durante la qualità precedente / attività di testing.

Ciò può essere spiegato con l'inesperienza dei nostri

tester. Tester che non sono specializzati in processi

che l'uso del ciclo di vita iterativo possono

incontrare maggiori difficoltà quando si prova

all'interno di ogni iterazione, piuttosto che alla fine

di un ciclo di sviluppo, di decidere che cosa prova

quando un prodotto è ancora finito, e lavorando con

altri membri del team per capire cosa a prova,

piuttosto che dai documenti di requisiti di prova.

La Fig. 12 indica il numero di avvisi per ELOC

calcolata per mezzo di PMD e Checkstyle.

43

Fig. 12 Numero di avvisi per eLoc

Il numero di avvisi è stato molto elevato durante il

processo a cascata (una media di 5 avvisi per ELOC), un

brusco calo durante il periodo di controllo di qualità

(con il risultato di 1 avvertimento per ELOC), ed è

rimasta pressoché invariata, con uno molto lento e

lineare crescente tendenza (attualmente, 2 avvisi per

ELOC) dopo l'introduzione di SCRUM.

La Fig. 13 mostra il tasso di sprint il successo e

l'evoluzione del numero di sviluppatori nella nostra

squadra SCRUM.

44

Fig. 13 Evoluzione del tasso di Sprint avvenuti con successo

Con quattro sviluppatori consolidato il tasso di

successo aumenta fortemente dal 55% di sprint con

successo a un tasso del 85%. Il tasso di successo

peggiora con il rinnovamento inaspettata della squadra

alla fine di settembre. Probabilmente, questo

rinnovamento ha invalidato le previsioni e le stime

dello sforzo del team fissati all'inizio del processo

di mischia. L'andamento lineare di sprint di successo

(la linea di luce grigia del grafico) è quasi costante

al tasso del 65%. Probabilmente, una migliore

definizione di arretrati sprint e compiti potrebbero

aumentare questo tasso. Purtroppo, le caratteristiche

intrinseche del MACXIM resa difficile per abbattere le

sue caratteristiche in compiti di poche ore di lavoro.

45

CONCLUSIONI E SVILUPPI FUTURI

Al termine di questo periodo di lavoro, è stato

possibile trarre delle conclusioni in riferimento al

capitolo 1.1 di questo documento. La nostra esperienza

con l’applicazione di un processo di sviluppo agile, in

questo caso SCRUM, a un progetto OSS, in questo caso lo

strumento MACXIM, ha suggerito che:

1. È possibile applicare il processo di sviluppo

SCRUM a progetti OSS anche a progetto già

iniziato. L’analisi dei risultati ottenuti

conferma che l’introduzione di SCRUM non ha inciso

negativamente e in modo significativo sui valori

delle misure che abbiamo calcolato e, in alcuni

casi, abbiamo riscontrato un miglioramento di

queste misure, come ad esempio per la

modularizzazione del codice e la complessità

ciclomatica. Inoltre l’introduzione di SCRUM

induce a pensare che la produttività ha seguito un

andamento costante, senza sbalzi di picchi,

mantenendo una curva di evoluzione più lineare,

rispetto a quelle che abbiamo ottenuto durante lo

sviluppo cascata.

2. È possibile applicare il processo di sviluppo

SCRUM a sviluppatori geograficamente distribuiti,

andando a sostituire gli incontri giornalieri

face-to-face con meccanismi di comunicazione on-

line. Dai risultati ottenuti il team di sviluppo

ha dato una buona risposta in termini di

cooperazione e di raggiungimento di un obiettivo

comune.

46

3. Con l’applicazione del processo di sviluppo SCRUM

abbiamo ottenuto un codice di alta qualità, con un

rendimento medio della produttività da parte del

team di sviluppatori del 70%. Inoltre siamo stati

in grado di rispettare i tempi previsti per il

rilascio della prima release ufficiale dello

strumento MACXIM.

Come considerazione finale, applicando il processo di

sviluppo SCRUM originale, a una comunità di sviluppo

OSS non sarebbe possibile a causa di limitazioni

geografiche, culturali e problemi di comunicazione.

Spesso gli sviluppatori appartenenti a queste comunità

si trovano in tutto il mondo, in genere in diversi fusi

orari. Pertanto, non è possibile né avere incontri del

mattino, né incontri di pianificazione dello Sprint

Backlog. Nel nostro team, abbiamo applicato una

versione leggermente modificata di SCRUM e abbiamo

sostituito gli incontri di persona con un forum online.

Inoltre, pensiamo che SCRUM si possa applicare a

progetti OSS caratterizzati da un numero limitato di

partecipanti, per consentire una comunicazione puntuale

tra gli sviluppatori.

Attualmente, stiamo raccogliendo nuovi dati SCRUM dal

monitoraggio dello sviluppo della seconda release di

MACXIM prevista per la fine del 2010. Ci occupiamo di

raccogliere anche questi dati, al fine di confrontare

questi nuovi dati con quelli ottenuti da questo lavoro

e di confermare, con ulteriori risultati, le

conclusioni che abbiamo ottenuto con questa prima

esperienza. In realtà, ci aspettiamo un ulteriore

miglioramento di tutte le misure che abbiamo raccolto.

47

BIBLIOGRAFIA

1. Schwaber, K., Beedle, M.: Agile Software

Development with SCRUM. Prentice Hall (2001).

2. Beck, K., Beedle, M., van Bennekum, A., Cockburn,

A., Cunningham, W., Fowler, M., Grenning, J.,

Highsmith, J., Hunt, A., Jeffries, R., Kern, J.,

Marick, B., C. Martin, R., Mellor, S., Schwaber,

K., Sutherland, J., Thomas, D.: Manifesto for Agile

Software Development. Web published:

http://www.agilemanifesto.org/

3. Crisà, A.F., del Bianco, V., Lavazza, L.: A tool

for the measurement, storage, and pre-elaboration

of data supporting the release of public datasets.

In González-Barahona, J.M., Conklin, M., Robles, G.

(eds.) Workshop on Public Data about Software

Development (WoPDaSD 2006), Como (2006).

4. Chidamber, S.R., Kemerer, C.F.: A Metrics Suite for

Object Oriented Design. IEEE Transactions on

Software Engineering. 20, 476--493 (1994)

5. McCabe, T.J.: A complexity measure. IEEE

Transactions on Software Engineering. 2, 30--320

(1976).

6. Boehm, B.W.: A Spiral Model of Software Development

and Enhancement, IEEE Computer. 21(5), 61--72

(1988).

7. Northover, M., Northover, A., Gruner, S., Kourie,

D.G., Boake, A.: Agile software development: A

contemporary philosophical perspective. ACM

International Conference Proceeding Series. 226,

106--115 (2007).

48

8. Raymond, E.S.: The Cathedral & the Bazaar. O’Reilly

(2001).

9. Sutherland, J.: Agile can scale: Inventing and

reinventing scrum in five companies. Cutter IT

Journal. Cutter Information Corp. Vol. 14, No. 12,

December (2001).

10. Düring, B.: Sprint Driven Development: Agile

Methodologies in a Distributed Open Source Project

(PyPy). In XP 2006. 191--195 (2006).

11. Mann, C., Maurer, F.: A Case Study on the Impact of

SCRUM on Overtime and Customer Satisfaction. In

Agile Development Conference, 70--79 (2005).

12. Rising, L., Janoff, N.S.: The SCRUM Software

Development Process for Small Teams. IEEE Software,

17(4), 26—32 (2000).

13. Feller, J., Fitzgerald B., A framework analysis of

the open source software development paradigm,

Proceedings of the twenty first International

Conference on Information systems (2000).

14. Ghezzi, C., Jazayeri, M., Mandrioli, D.:

Fundamentals of Software Engineering, Second

Edition. Pearson, Prentice Hall (2002).

15. Northover, M., Northover, A., Gruner, S., Kourie,

D. G., & Boake, A.: Agile software development: A

contemporary philosophical perspective. ACM

International Conference Proceeding Series (Vol.

226, pp. 106–115) (2007).

16. Mockus, R., Fielding, T., and Herbsleb J.: A case

study of OSS development: the apache server, in

Proceedings of the International Conference on

Software Engineering (ICSE), pp. 263–272, (2000).

49

17. O’Reilly, T.: Lessons from Open-Source Software

development, Communications of the ACM, vol. 42,

no. 4, (1999).

18. QualiPSo portal. Web published:

http://www.qualipso.eu Accessed: December 2009

19. Checkstyle tool download. Web published:

http://checkstyle.sourceforge.net/ Accessed:

December 2009

20. PMD tool download. Web published:

http://pmd.sourceforge.net/ Accessed: December 2009

21. Sahraoui, H.A., Godin R., Miceli T.: Can Metrics

Help Bridging the Gap Between the Improvement of OO

Design Quality and Its Automation? In Proceedings

of the International Conference on Software

Maintenance (ICSM), (2000).

50

Appendice A - I PRINCIPI FONDANTI DEL MANIFESTO AGILE

• La nostra massima priorità è soddisfare il cliente

per mezzo di tempestivi e continui rilasci di

software di valore.

• Siano benvenuti i cambiamenti nelle specifiche,

anche a stadi avanzati dello sviluppo. I processi

agili sfruttano il cambiamento a favore del

vantaggio competitivo del cliente.

• Rilascia software funzionante frequentemente, da

un paio di settimane a un paio di mesi, con

preferenza per i periodi brevi.

• Manager e sviluppatori devono lavorare insieme

quotidianamente lungo il progetto.

• Basa i progetti su individui motivati. Dai loro

l'ambiente e il supporto di cui necessitano e

confida nella loro capacità di portare il lavoro a

termine.

• Il metodo più efficiente ed efficace di

trasmettere informazione verso e all'interno di un

team di sviluppo è la conversazione faccia a

faccia.

• Il software funzionante è la misura primaria di

progresso.

• I processi agili promuovono uno sviluppo

sostenibile. Gli sponsor, gli sviluppatori e gli

utenti dovrebbero essere in grado di mantenere un

ritmo costante indefinitamente.

• L'attenzione continua per l'eccellenza tecnica e

il buon design esaltano l'agilità.

51

• La semplicità - l'arte di massimizzare l'ammontare

di lavoro non svolto - è essenziale.

• Le migliori architetture, specifiche e design

emergono da team auto-organizzati.

• A intervalli regolari il team riflette su come

diventare più efficace, dopodiché mette a punto e

aggiusta il suo comportamento di conseguenza.

52

Appendice B - PRATICHE

• Automation - Se l'obiettivo delle metodologie

leggere è concentrarsi sulla programmazione senza

dedicarsi alle attività collaterali, allora

possono essere eliminate o automatizzate; la

seconda soluzione è migliore perché si può, ad

esempio, eliminare la documentazione aumentando il

testing, ma non si possono eliminare entrambe;

quindi si sceglie che strada si vuole percorrere e

si fa in modo da utilizzare strumenti per

automatizzare il maggior numero di attività;

• Close Communication - Secondo Alistar Cockburn,

probabilmente il primo teorico delle metodologie

leggere, questo è l'unico vero aspetto nodale che

renda leggera una metodologia. Per comunicazione

diretta si intende la comunicazione

interpersonale, fra tutti gli attori del progetto,

cliente compreso. Ciò serve ad avere una buona

analisi dei requisiti ed una proficua

collaborazione fra programmatori anche in un

ambito di quasi totale assenza di documentazione;

• Customer Involvement - Il coinvolgimento del

cliente è qui indicato singolarmente perché ci

sono differenti gradi di coinvolgimento possibili;

ad esempio in Extreme Programming il

coinvolgimento è totale, il cliente partecipa

persino alle riunioni settimanali dei

programmatori; in altri casi, il cliente è

coinvolto in una prima fase di progettazione e poi

non più; in altri ancora il cliente partecipa

53

indirettamente e viene usato come test della

versione rilasciata;

• Design & Documentation - Pensare che le

metodologie leggere eliminino la progettazione e

la documentazione è un errore, in effetti non è

così, le metodologie leggere introducono

un'iterazione nel ciclo di vita del progetto;

quanta progettazione fare e quanta documentazione

produrre, escludendo i casi estremi, è una scelta

lasciata a chi gestisce il progetto e spesso i

teorici dell'Agile Alliance avvisano che è un

errore trascurare o addirittura omettere queste

due fasi;

• Frequent Delivery - Effettuare rilasci frequenti

di versioni intermedie del software permette di

ottenere più risultati contemporaneamente: si

ricomincia l'iterazione avendo già a disposizione

un blocco di codice funzionante in tutti i suoi

aspetti, si offre al cliente 'qualcosa con cui

lavorare' e lo si distrae così da eventuali

ritardi nella consegna del progetto completo, si

usa il cliente come se fosse un test visto che

utilizzerà il software e riscontrerà eventuali

anomalie, si ottengono dal cliente informazioni

più precise sui requisiti che probabilmente non

sarebbe riuscito ad esprimere senza avere a

disposizione utilità e carenze del progetto;

• Hierarchy - La scelta di creare una struttura

gerarchica all'interno del team di sviluppo

dipende molto dall'approccio del project manager,

54

in ogni caso si ha una conseguenza non secondaria

facendo questa scelta; se si decide per una

struttura gerarchica ad albero e frammentata si

ottiene la possibilità di gestire un numero molto

alto di programmatori e di lavorare a diversi

aspetti del progetto parallelamente; se si decide

per una totale assenza di gerarchia si avrà un

team di sviluppo molto compatto e motivato, ma

necessariamente piccolo in termini di numero di

programmatori;

• Pair Programming - Programmare in coppia, ossia:

due programmatori, due sedie, una scrivania, un

computer, una tastiera ed un mouse; uno dei due

scrive, l'altro verifica, entrambi scelgono la

soluzione costruttiva migliore; è stato dimostrato

che i costi di questa scelta sono inferiori ai

benefici che apporta, ma ci sono esempi pratici

che indicano come questa pratica possa essere

insopportabile per alcuni programmatori e quindi

controproducente;

• Refactoring - Ossia la riscrittura completa di

parti di codice mantenendone invariato l'aspetto

esterno, nel caso di una funzione ciò significa

riscriverne completamente il core mantenendone

invariato header ed ovviamente sintassi,

trattandola cioè come una black box; è una delle

pratiche più diffuse e suggerite, ma anche questa,

come il Pair Programming, ha differenti studi che

ne attestano l'inutilità ed in alcuni casi la

dannosità;

55

• Reflective Improvement - Nata con l'avvento della

programmazione Object-Oriented, non è altro che la

presa di coscienza della produzione di conoscenza

che si fa in un un'azienda man mano che si produce

codice; questa conoscenza prodotta non deve andare

perduta ed è per far ciò che si sfruttano spesso

le altre pratiche, come la comunicazione stretta o

la condivisione della proprietà del codice;

• Reverse Engineering - Ossia ottenere, spesso in

maniera automatica, la documentazione a partire

dal codice già prodotto; è una delle pratiche più

diffuse e più controverse, diffusa perché permette

un guadagno enorme in termini di tempo, ma

controversa perché spesso la documentazione

prodotta è inutilizzabile oppure è prodotta solo

per una richiesta burocratica del cliente e non

verrà mai realmente utilizzata;

• Simplicity - Uno dei punti chiave delle

metodologie leggere, direttamente mutuato dalla

programmazione Object-Oriented, è la semplicità;

semplicità nel codice, semplicità nella

documentazione, semplicità nella progettazione,

semplicità nella modellazione; i risultati così

ottenuti sono una migliore leggibilità dell'intero

progetto ed una conseguente facilitazione nelle

fasi di correzione e modifica;

• Team forming & Code property - La formazione del

team di sviluppo è condizionata dalla scelta sulla

gerarchia interna, ma segue regole precise che

permettono di ottenere un team produttivo

56

nell'ambito della metodologia scelta; la scelta

dei membri del team è condizionata anche alla

scelta della proprietà del codice, che può essere

individuale o collettiva; nel primo caso la

responsabilità sullo sviluppo è individuale, nel

secondo dipende da tutto il team e quindi dal

project manager;

• Testing - Pratica diffusissima anche prima della

nascita delle metodologie leggere, ha prodotto una

letteratura vastissima ed una serie di approcci

differenti come il Rapid Testing o il Pair

Testing; nell'ambito delle metodologie leggere

vengono spesso utilizzati insieme tre tipi di test

differenti: i test funzionali, utilizzati per

verificare che il software faccia effettivamente

ciò che è previsto debba fare, i test unitari,

utilizzati per verificare che ogni pezzo di codice

funzioni correttamente, e i test indiretti

effettuati inconsciamente dal cliente ogni volta

che gli si consegna una versione;

• Version Control - Una delle conseguenze dirette

dell'iterazione nella produzione è la necessità di

introdurre un modello, un metodo, uno strumento,

per il controllo delle versioni del software

prodotto e rilasciato; uno degli strumenti più

diffusi e maggiormente suggeriti per ottemperare

automaticamente a questa pratica è il CVS.

57

RINGRAZIAMENTI