(Sviluppo Rapido)

Transcript

(Sviluppo Rapido)
Lezione 3
Processi per lo sviluppo rapido del software
Sviluppo Rapido del Software
Slide 1
Riferimenti bibliografici
•
I. Sommerville – Ingegneria del Software – 8a
edizione – Cap.17
•
R. Pressman- Principi di Ingegneria del Software- 4
edizione- Cap. 3
Sviluppo Rapido del Software
Slide 2
Argomenti della lezione
•
Sviluppo rapido e Processi di sviluppo incrementali
ed iterativi.
•
I ruoli della prototipazione nel processo di sviluppo
software
•
Metodi di sviluppo opportunistico del software
Sviluppo Rapido del Software
Slide 3
Motivazioni per lo sviluppo rapido
•
A causa dei rapidi cambiamenti dell’ambiente
globale in cui operano, le aziende devono
rispondere continuamente a nuove opportunità e
mercati.
•
La rapidità dello sviluppo e consegna è oggi spesso
il requisito più critico per I sistemi software.
•
Molte aziende sono disposte a transigere sulla
qualità , pur di avere una rapida consegna delle
funzionalità essenziali.
Sviluppo Rapido del Software
Slide 4
Instabilità dei Requisiti
•
A causa di un ambiente in continua evoluzione , è
spesso impossibile arrivare a requisiti stabili e
consistenti da subito : ci si arriverà solo con l’utilizzo
del software.
•
Un modello di sviluppo a cascata è dunque
impraticabile ed un approccio allo sviluppo basato
su specifiche e consegna iterative è il solo modo per
consegnare il software rapidamente.
Sviluppo Rapido del Software
Slide 5
Caratteristiche dei processi rapidi
•
I processi di specifica, progettazione ed
implementazione sono concorrenti. Non esiste una
specifica dettagliata e la documentazione di progetto è
ridotta al minimo.
•
Il sistema è sviluppato iterativamente in una serie di
incrementi. Gli utenti valutano ciascun incremento e
quindi propongono modifiche e fanno proposte per I
successivi incrementi.
•
Le interfacce utente del sistema sono spesso
sviluppate in modo interattivo usando ambienti
interattivi per la progettazione di UI e la generazione
del codice.
Sviluppo Rapido del Software
Slide 6
Un processo di sviluppo iterativo (incrementale)
Definizione
Definizione
delle
delleconsegne
consegne
del
delsistema
sistema
Progetto
Progetto
architetturale
architetturale
Specifica
Specificadidiun
un
incremento
incremento
Costruzione
Costruzione
incremento
incremento
Testing
Testingdell’
dell’
incremento
incremento
No
Sì
Consegna
ConsegnaSistema
Sistema
Completo
Completo
Sistema
Completo?
Convalida
Convalidadel
del
sistema
sistema
Integrazione
Integrazione
incremento
incremento
Sviluppo Rapido del Software
Slide 7
Vantaggi dello sviluppo incrementale
•
Consegna rapida dei servizi ai clienti. Gli incrementi
rilasciano dapprima le funzionalità a maggiore priorità per
il cliente.
•
Coinvolgimento degli utenti nel sistema. Gli utenti sono
coinvolti nel processo di sviluppo fornendo I propri
feedback: di qui, maggiore probabilità di soddisfarne I
bisogni, e maggiore volontà degli utenti di fare funzionare
il sistema.
•
Riflette il modo tipico dell’uomo di risolvere I problemi
gradualmente, con eventuali rimodulazioni della
soluzione in caso di errore.
Sviluppo Rapido del Software
Slide 8
Problemi dello sviluppo incrementale
•
Problemi di gestione
•
•
Problemi contrattuali
•
•
É difficile scrivere un contratto senza una specifica; il
contratto può essere scritto sulla base del tempo impiegato,
ma può essere insoddisfacente sia per I clienti che gli
sviluppatori.
Problemi di Validazione
•
•
Gli avanzamenti del lavoro e gli eventuali problemi possono
essere valutati con difficoltà, giacchè non tutta la
documentazione di sistema viene prodotta.
Senza una specifica, rispetto a cosa si può verificare e
validare il sistema?
Problemi di Manutenzione
•
Le modifiche continue tendono a corrompere la struttura del
software, rendendo più difficili le modifiche future.
Sviluppo Rapido del Software
Slide 9
Applicabilità dello sviluppo incrementale
•
•
Non è usabile per sistemi molto grandi, con più team
di sviluppo paralleli e distribuiti, né per sistemi critici,
che devono essere analizzati rispetto a tutti i
requisiti.
Per questi sistemi, se c’è incertezza nei requisiti
iniziali, si può usare la prototipazione evoluzionistica
(con sviluppo incrementale) con prototipo usa e
getta.
Sviluppo Rapido del Software
Slide 10
Prototipizzazione del Software:
una alternativa allo sviluppo incrementale
•
É’ una alternativa all’approccio incrementale
quando:
•
•
•
per problemi contrattuali, non può essere usato un
approccio incrementale, ma i requisiti non sono ben chiari
o altri aspetti progettuali non sono ben definiti.
Si può allora sviluppare un prototipo (usa e getta) a
scopi esplorativi.
Un prototipo può essere usato:
•
•
•
Nel processo di ingegnerizzazione dei requisiti per
raccogliere e validare requisiti;
Nei processi di progettazione per esplorare nuove
soluzioni e sviluppare una UI;
Nel processo di testing per eseguire test back-to-back.
Sviluppo Rapido del Software
Slide 11
Confronto fra Sviluppo incrementale e
Prototipizzazione
Bozza
Bozza dei
dei
Requisiti
Requisiti
Sviluppo
Sviluppo
incrementale
incrementale
Sistema
Sistema
Consegnato
Consegnato
Prototipizzazione
Prototipizzazione
Usa
Usaeegetta
getta
Prototipo
PrototipoEseguibile
Eseguibile++
specifiche
specifichedidisistema
sistema
Entrambi gli approcci partono dalla bozza dei requisiti,
ma si pongono obiettivi diversi
Sviluppo Rapido del Software
Slide 12
Diversi Obiettivi
•
L’obiettivo dello sviluppo incrementale è di
rilasciare un sistema funzionante ai suoi
utenti. Lo sviluppo parte con I requisiti meglio
compresi.
•
L’obiettivo del prototipo usa-e-getta è di
validare o derivare I requisiti. Il processo di
prototipazione parte coi requisiti peggio
compresi.
Sviluppo Rapido del Software
Slide 13
Benefici della prototipazione
•
•
•
•
•
Migliora l’usabilità del sistema.
Garantisce una maggiore corrispondenza
con I reali bisogni utente.
Permette di esplorare soluzioni di progetto di
migliore qualità.
Migliora la capacità di manutenzione.
Riduce lo sforzo di sviluppo.
Sviluppo Rapido del Software
Slide 14
Uso del prototipo nel Back-to-back testing
Dati di Test
Prototipo
Prototipo
del
delsistema
sistema
Sistema
Sistema
applicativo
applicativo
Comparatore
Comparatore
Dei
Deirisultati
risultati
È un tipo di
testing di
sistema in cui i
casi di test
sono eseguiti
su due
versioni dello
stesso
sistema.
Rapporto
Sulle differenze
Sviluppo Rapido del Software
Slide 15
Il processo di prototipazione
Stabilire
Stabilire
gli
gliobiettivi
obiettivi
del
delprototipo
prototipo
Piano di
prototipizzazione
Sviluppo Rapido del Software
Definizione
Definizionedelle
delle
funzionalità
funzionalità
del
prototipo
del prototipo
Definizione
Schema del
prototipo
Sviluppo
Sviluppo
del
delprototipo
prototipo
Prototipo
eseguibile
Valutazione
Valutazione
del
delprototipo
prototipo
Report di
valutazione
Slide 16
Prototipi usa e getta
•
I prototipi dovrebbero essere eliminati dopo
l’uso, perchè non sono una buona base di
partenza per la produzione del sistema :
•
•
•
•
Potrebbe essere impossibile adattare il
prototipo per soddisfare I requisiti nonfunzionali;
I prototipi non sono ben documentati;
La struttura del prototipo si degrada a causa dei
rapidi cambiamenti;
Il prototipo normalmente non soddisfa gli
standard di qualità dell’organizzazione.
Sviluppo Rapido del Software
Slide 17
Alcuni processi di sviluppo rapido
•
•
•
Metodi Agili
RAD [Martin 91]
Metodi basati su riuso di COTS
Sviluppo Rapido del Software
Slide 18
Metodi Agili
•
L’insoddisfazione per l’eccessivo overhead richiesto
dai sistemi di progettazione ha portato negli anni ’90
alla creazione dei metodi agili. Tali metodi:
•
•
•
•
•
Si concentrano sul codice, piuttosto che la progettazione;
Sono basati su un approccio iterativo allo sviluppo
software;
Sono pensati per rilasciare software funzionante
rapidamente, e per farlo evolvere rapidamente per
soddisfare nuove esigenze.
I metodi agili sono più adatti per sistemi aziendali di
piccole/medie dimensioni o per prodotti per PC.
Approfondiremo I metodi agili più avanti…
Sviluppo Rapido del Software
Slide 19
Rapid Application Development (RAD)
•
Sebbene i metodi agili abbiano ricevuto molta
attenzione di recente, già in precedenza si usavano
altri metodi rapidi per lo sviluppo di applicazioni.
•
Si tratta di approcci pensati per sviluppare
applicazioni aziendali di tipo data -intensive, che si
basano su un insieme di strumenti per creare,
ricercare, visualizzare dati (es. Linguaggi di quarta
generazione )
•
Il più famoso è l’approccio RAD proposto da James
Martin nel 1991
Sviluppo Rapido del Software
Slide 20
Strumenti per gli ambienti RAD
•
•
•
•
Linguaggi per la programmazione di
Database (es. SQL-che può essere anche
generato automaticamente da moduli)
Generatori di Interfacce (per I/O dati)
Collegamenti ad applicazioni office
Generatori di rapporti
Sviluppo Rapido del Software
Slide 21
Un ambiente per lo sviluppo RAD
Office
systems
Interface
generator
DB
programming
language
Report
generator
DBMS
Rapid application
development environment
Sviluppo Rapido del Software
Slide 22
Generatori di interfacce
•
•
Molte applicazioni gestionali si basano su moduli
strutturati di input e output: sviluppare a mano
questi moduli è impraticabile!
Gli ambienti RAD forniscono in genere aiuti per
generare schermate automaticamente, quali:
•
•
•
Definizione interattiva di moduli usando tecniche di drag
and drop;
Collegamento dei vari moduli, specificando l’ordine di
presentazione degli stessi;
Verifica dei campi dei moduli : I valori consentiti per I
campi sono definiti dal programmatore.
Sviluppo Rapido del Software
Slide 23
Programmazione Visuale
•
•
•
I linguaggi di scripting tipo Visual Basic supportano
la programmazione visuale che permette di creare
un prototipo sviluppando una interfaccia utente a
partire da componenti standard (finestre, campi,
pulsanti, menu) e associando ad essi delle
elaborazioni svolte mediante script.
Esiste una vasta libreria di componenti software già
pronti che supporta questo tipo di sviluppo.
I componenti possono essere adattati per soddisfare
requisiti specifici.
Sviluppo Rapido del Software
Slide 24
Programmazione Visuale con riuso di
componenti
Menu component
Date component
File
Edit
Views
Layout
Options
1 2th January 2 000
Range checking
script
Help
General
Index
3.8 76
User prompt
component +
script
Draw canvas
component
Tree display
component
Sviluppo Rapido del Software
Slide 25
Alcune categorie di strumenti per il RAD
•
Cross-Platform RAD tools
•
•
Desktop RAD tools
•
•
•
IBM Rational, …
Embedded Control RAD Tools
Web Based RAD Tools
•
•
Visual Basic, wxDev-C++ (an extension of Dev-C++)…
Database RAD Tools
•
•
Plug-in per Eclipse, o NetBeans, …
IBM Rational, Ruby on Rails, Oracle, …
Components based on RAD paradigm
http://en.wikipedia.org/wiki/List_of_Rapid_Application_Development_to
ols
Sviluppo Rapido del Software
Slide 26
Problemi dello Sviluppo Visuale
•
•
•
•
Questo tipo di sviluppo è adatto per applicazioni
relativamente semplici, prodotte da piccoli team.
É invece difficile coordinare lo sviluppo di molti
team coinvolti nel processo di sviluppo
Non c’è una architettura esplicita del sistema.
Ci sono spesso dipendenze complesse fra le
parti del sistema che creano problemi di
manutenibilità.
Sviluppo Rapido del Software
Slide 27
Il metodo RAD [Martin 91]: obiettivi
•
Maggiore velocità:
•
•
È un modello di processo incrementale che
punta ad un ciclo di sviluppo molto breve (60/
90 giorni).
Migliore Qualità
•
La qualità è intesa non come assenza di difetti,
ma come capacità dell’applicazione di:
• soddisfare i bisogni utente,
• presentare bassi costi di manutenzione.
Un White paper sull’argomento RAD è scaricabile da:
http://www.blueink.biz/RapidApplicationDevelopment.aspx
Sviluppo Rapido del Software
Slide 28
Il Processo RAD
•
Basato su 4 fasi:
1.
Pianificazione dei requisiti
User Design (o Functional Design)
Construction
Implementation (o Deployment)
2.
3.
4.
Sviluppo Rapido del Software
Slide 29
Confronto fra Waterfall e RAD
Sviluppo Rapido del Software
Slide 30
1.Pianificazione di requisiti
•
Sono raccolti i requisiti utente iniziali e le principali
entità di business, definendo lo scope
dell’applicazione.
•
Sono impiegati strumenti automatici per la gestione
dei requisiti, che offrono funzioni di creazione del
database a partire dal modello dei dati.
Sviluppo Rapido del Software
Slide 31
2. User Design
•
La fase di User Design si basa su JAD (Joint
Application Development) workshops (a cui
partecipano utenti ed analisti) in cui:
•
•
•
si modellano i dati ed i processi del sistema (ER Diagram),
si definisce un piano di test e
si costruisce eventualmente un prototipo
funzionante delle parti più critiche.
Sviluppo Rapido del Software
Slide 32
3. Construction
•
Il Design Team sviluppa l’applicazione in maniera
iterativa, con iterazioni brevi (fra 1 e 3 settimane),
convertendo il data model (E-R) nel database.
•
•
•
•
Con appositi CASE le iterazioni sviluppano prototipi
funzionanti anche in pochi giorni.
Il prototipo viene testato con l’utente e rivisto dagli
sviluppatori
Al termine, si progetta la prossima iterazione attraverso la
definizione dei nuovi requisiti, processi e piani di test.
Nell’iterazione finale si esegue il test di accettazione
Sviluppo Rapido del Software
Slide 33
4. Implementazione e Deploy
•
•
•
Il sistema finale viene integrato e rilasciato
nell’ambiente operativo
Gli utenti finali vengono addestrati e
svolgono il Test di accettazione finale.
Si raccolgono i feedback ed eventuali
richieste di miglioramenti
Sviluppo Rapido del Software
Slide 34
Un ulteriore approccio rapido: Il Riuso di
sistemi COTS
•
Una possibile alternativa per lo sviluppo rapido
consiste nel configurare e collegare fra loro sistemi
applicativi completi (off the shelf).
•
Ad esempio, un sistema di gestione dei requisiti
potrebbe essere costruito usando:
•
•
•
Un database per memorizzare I requisiti;
Un word processor per scrivere I requisiti e preparare
report;
Un foglio elettronico per realizzare la tracciabilità fra i
requisiti.
Sviluppo Rapido del Software
Slide 35
La metafora del documento composto
•
•
•
•
Per alcune applicazioni, è possibile costruire un
prototipo sotto forma di documento composto
Un documento composto contiene elementi attivi al
suo interno (come un foglio elettronico) per eseguire
elaborazioni.
Ogni elemento attivo ha un’applicazione associata
(che viene invocata quando l’utente seleziona
quell’elemento)
In pratica il documento funge da integratore di
applicazioni.
Sviluppo Rapido del Software
Slide 36
Esempio di documento composto
Compound document
Text 1
Table 1
Table 2
Word processor
Text 2
Text 4
Spreadsheet
Text 3
Sound 2
Sound 1
Text 5
Audio player
Sviluppo Rapido del Software
Slide 37
Approfondimento su metodi opportunistici di
sviluppo software
•
•
Joel Brandt, Philip J. Guo, Joel Lewenstein, and
Scott R. Klemmer, Opportunistic Programming:
Writing Code to Prototype, Ideate, and Discover,
IEEE Software, Sept. 2009
L’articolo presenta diversi modi opportunistici di
sviluppare software (osservati in un ambito di
laboratorio museale), quali:
•
•
•
Integrando componenti di alto livello già pronti
Copiando codice dal web
Usando glue-code (in linguaggio di scripting)
Sviluppo Rapido del Software
Slide 38
Sviluppo Opportunistico
•
Considerazioni emerse:
•
•
•
•
Si sviluppa iterativamente con cicli di edit-debug molto rapidi
(pochi secondi)
Si tende a considerare il software di uso transitorio (non
permanente) ? non lo si documenta, mentre si documenta il
processo seguito
Grosse difficoltà nel debugging di codice eterogeneo
Necessità di tool di supporto per:
•
•
•
Integrare nei tool di sviluppo la funzionalità ricerca di
codice dal web
Supporto al debugging
Gestione delle versioni
Sviluppo Rapido del Software
Slide 39