Feature Driven Development: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nuova pagina; testo: 'È una metodologia agile, ideata da Jeff De Luca e Peter Coad, che propone una robusta fase di analisi e progettazione integrata con un modello di sviluppo agile. ...' |
Nessun oggetto della modifica |
||
(28 versioni intermedie di 22 utenti non mostrate) | |||
Riga 1:
Come s'intuisce dal nome è una forma di sviluppo ''guidata dalle funzionalità'' richieste e necessarie del programma. Sono disponibili diversi strumenti di supporto free, alcuni anche [[open source]],
È forse il miglior compromesso e la miglior soluzione agile possibile, ma è molto meno conosciuta di [[Extreme Programming]], pur essendo indicata
==
FDD è stato inventato da [[Jeff De Luca]] nel 1997, che propose un insieme di cinque processi che riguardavano lo sviluppo completo basato sulle features. Tale modello era fortemente basato sulle idee di Peter Coad e integrato dall'esperienza personale. La prima forma strutturata di FDD fu presentata nel libro ''Java Modeling in Color with UML'' dello stesso Coad, Eric Lefebvre and Jeff De Luca nel 1999; in seguito una versione più generale fu pubblicata nel libro di Stephen Palmer e Mac Felsing ''A Practical Guide to Feature-Driven Development'' . Ulteriori informazioni storiche si possono trovare nel sito personale di Jeff De Luca.
== Le fasi di sviluppo ==
Il progetto viene diviso in cinque fasi, dette processi:
* '''sviluppare un modello generale'''
** ''criteri
** ''attività'': il project manager deve formare il team di modellazione; il team di modellazione deve offrire una panoramica del dominio del problema, preparare i documenti funzionali e, diviso in piccoli gruppi, sviluppare il modello; il capo-architetto deve rifinire il modello generale ad oggetti insieme al team di modellazione e scrivere le note al modello insieme ai capi-programmatori;
** ''verifica'': il team di modellazione deve effettuare un accertamento interno ed esterno con riferimento agli esperti di business ed ai futuri utenti;
** ''criteri
* '''costruire una lista di funzionalità'''
** ''criteri
** ''attività'': il project manager deve formare il team della lista delle funzionalità che deve comprendere i capi-programmatori del team di modellazione; il team della lista delle funzionalità deve definire la lista delle funzionalità in termini di azione-risultato-oggetto;
** ''verifica'': il team della lista delle funzionalità deve effettuare un accertamento interno ed esterno con riferimento agli esperti di business ed ai futuri utenti;
** ''criteri
* '''pianificare per funzionalità'''
** ''criteri
** ''attività'': il project manager deve formare il team di progettazione che comprende capi-programmatori e manager dello sviluppo; il team di progettazione deve definire la sequenza di sviluppo, assegnare le attività di business ai capi-programmatori ed assegnare le classi agli sviluppatori;
** ''verifica'': il team di progettazione deve effettuare
** ''criteri
* '''progettare per funzionalità'''
** ''criteri
** ''attività'': ogni capo-programmatore forma il team delle funzionalità; ogni esperto del problema definisce la strada per affrontare il problema e risolverlo; il team delle funzionalità studia i documenti dei requisiti delle proprie funzionalità; il team di progettazione sviluppa i diagrammi di sequenza; il capo-programmatore raffina il modello ad oggetti per definire se scrivere o modificare classi, metodi, attributi; il team delle funzionalità scrive le classi e gli header dei metodi;
** ''verifica'': il team delle funzionalità ispeziona il progetto in tutti i suoi aspetti funzionali e temporali;
** ''criteri
* '''sviluppare per funzionalità'''
** ''criteri
** ''attività'': il team delle funzionalità implementa classi e metodi, ispeziona il codice ed effettua i test unitari; il capo-programmatore decide (dopo i test unitari) insieme al team delle funzionalità quali classi siano ''promuovibili'' come utili alla costruzione del progetto in riguardo alle funzionalità richieste;
** ''verifica'': il capo-programmatore sovrintende affinché siano completate effettivamente in tutti i punti dal team delle funzionalità l'ispezione dei codici
** ''criteri
In pratica si può ridurre l'iterazione al semplice ciclo composto dai soli ultimi due passi: ''definire una lista di funzionalità'' / ''sviluppare per funzionalità''. Il processo critico è il primo, ossia ''sviluppare un modello generale'', ed è questo deve dare in uscita la documentazione [[Unified Modeling Language|UML]]. Questi diagrammi devono essere impostati in maniera tale da ottenere una frammentazione (una granularità)
Ogni iterazione è composta da sei fasi:
Line 41 ⟶ 44:
* Development (si implementa il codice previsto con i relativi unit test);
* Code review meeting (la revisione del codice viene effettuata da tutti i programmatori);
* Release meeting (le funzionalità implementate vengono
== Il processo di sviluppo ==
La collezione dei requisiti dell'utente e delle specifiche, avviene coinvolgendo il cliente anche durante lo sviluppo del progetto e non solo in una fase iniziale. Inizialmente si ottengono una lista di funzionalità richieste, che diventerà la base della timeline del progetto, ed uno o più diagrammi UML che definiscano il dominio del problema. Partendo da questa base, cliente e sviluppatori lavoreranno insieme ai requisiti in brevi iterazioni che coprano frammenti di business.
Line 60 ⟶ 63:
Date le numerose riunioni effettuate prima di cominciare a scrivere il codice, questa attività diventa qualcosa di meccanico, infatti Feature Driven Development scoraggia l'uso di pratiche tipo il [[Refactoring]] mentre incoraggia la condivisione del codice prodotto (in maniera particolare della documentazione relativa) fra i diversi programmatori.
Per la revisione del codice si va oltre il [[Pair
Il rilascio delle versioni è previsto per la fine di ogni iterazione, raramente di più iterazioni, ma ciò permette di coinvolgere molto di meno il cliente rispetto a quanto facciano le altre metodologie leggere. E permette anche di non consegnare alcune versioni intermedie quando le condizioni al contorno non lo rendano possibile, ad esempio in caso di software medici embedded.
Line 74 ⟶ 77:
Partendo da questi dati, [[Jeff De Luca]] afferma che cambiamenti fino al 10% dei requisiti durante il corso del progetto non incidono in maniera tale da inficiare la deadline prevista.
== Strumenti a supporto ==
Benché tutta la struttura organizzativa ed ogni processo di Feature Driven Development possano essere eseguiti manualmente, esistono diversi strumenti a supporto di questa metodologia. In particolare si possono trovare strumenti free, ed anche open source, tramite la community FDD. Riteniamo però più utile soffermarsi sugli oggetti e le attività, rispetto ai singoli, differenti, strumenti che le supportano.
===
Per '''UML colorato''' si intende un [[Unified Modeling Language|UML standard]] con le classi divise in quattro categorie individuate da quattro colori diversi:
* giallo (indica un Ruolo, ricoperto da persona o da organizzazione, come ad esempio i differenti tipi di utente di un servizio);
* blu (indica una Descrizione modello-catalogo, ad esempio il tipo di oggetto in un database ma non il singolo oggetto);
* verde (indica un Luogo o un Oggetto, ad esempio il singolo oggetto del database di prima);
* rosa (indica i Tempi, un momento o un intervallo associati ad un processo, ad esempio ad un
Le classi ausiliari e le interfacce restano standard e non sono colorate.
===
Un '''Progress Report''' è definito e rappresentato con un modello esclusivo di Feature Driven Development, i diagrammi ''a parcheggio''. Ogni ''posto auto'' rappresenta un set di funzionalità e la sua lettura è piuttosto semplice ed immediata.
* Sfondo verde: funzionalità completate;
Line 97 ⟶ 100:
Lo stesso Progress Report ha un livello di dettaglio maggiore in una tabella con la timeline per singola funzionalità. Sono previste le milestone di ogni passo dell'iterazione mentre i colori indicano semplicemente: verde (tutto secondo i piani), rosso (lo sviluppo della funzionalità è in ritardo rispetto allo scheduling previsto).
==
* Serguei Khramtchenko
* [[Metodologia agile]]▼
== Voci correlate ==
▲* [[Metodologia agile]]
▲Serguei Khramtchenko – '''Comparing eXtreme Programming and Feature Driven Development in academic and regulated environments''' – ''Harvard University, CSCIE-275: Software Architecture and Engineering'' – 2004
* [[Extreme Programming]]
* [[Presenter first]]
[[Categoria:
|