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
Obiettivi della lezione Spiegare come un processo di sviluppo incrementale ed iterativo porti ad una più rapida consegna del software. Introdurre ilprocesso RAD Spiegare I ruoli della prototipazione nel processo di sviluppo 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
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 Define system deliverables Design system architectur e Specify system increment Build system increment Validate increment NO Deliver final system YES System complete? Validate system Integrate increment 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 nelprocesso di sviluppo fornendo I propri feedback: di qui, maggiore probabilità di soddisfarne I bisogni, e maggiore volontà degli utenti di fare funzionare il sistema. Sviluppo Rapido del Software Slide 8
Problemi dello sviluppo incrementale Problemi di gestione Gli avanzamenti del lavoro e gli eventuali problemi possono essere valutati con difficoltà, giacchè non tutta la documentazione di sistema viene prodotta. 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 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ù difficile 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
Alcuni processi di sviluppo rapido Metodi Agili RAD [Martin 91] Metodi basati su riuso di COTS Prototipizzazione Sviluppo Rapido del Software Slide 11 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 12
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 13 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 sia di soddisfare i bisogni utente, sia di presentare bassi costi di manutenzione. Un Whitepaper sull argomento RAD è scaricabile da: http://www.blueink.biz/rapidapplicationdevelopment.aspx Sviluppo Rapido del Software Slide 14
Elementi essenziali del RAD Prototipizzazione Sviluppo Iterativo Sviluppo Time Boxed (a feature ridotte) Team di lavoro Management del progetto Strumenti RAD Sviluppo Rapido del Software Slide 15 Prototipizzazione Lo sviluppo si basa sulla costruzione di un prototipo che serve al cliente come prova dell applicazione e per raffinare i requisiti. Il prototipo viene fatto evolvere iterativamente nel sistema completo. Per lo sviluppo del prototipo si fa uso di strumenti CASE che catturano rapidamente i requisiti, li convertono in un modello dei dati, e quindi convertono il modello nel database e generano automaticamente il codice. Sviluppo Rapido del Software Slide 16
Sviluppo Iterativo e Time Boxing Ogni versione viene rivista col cliente per stabilire i requisiti da sviluppare con la prossima versione. Per accorciare i tempi di completamento delle versioni ed ottenere rapidamente il feedback del cliente, si selezionano accuratamente le core features da realizzare e si rimandano quelle inessenziali a iterazioni successive (Time boxing). Sviluppo Rapido del Software Slide 17 Team di lavoro e Management Si raccomanda l impiego di piccoli team di lavoro con persone motivate e capaci di svolgere ruoli diversi. I team di lavoro possono includere anche il cliente o utenti dell applicazione (es. per le riunioni di raccolta requisiti, o di progettazione rapida) Gli SWAT (Skilled Workers with Advanced Tools ) sono gruppi di esperti in RAD e CASE tools che si occupano dello sviluppo Il management deve evitare il rischio di lunghi cicli di lavoro, incomprensioni col cliente, o mancate consegne. Opera attraverso una accurata selezione del personale, motivandole per il successo del progetto, rimuovendo ostacoli politici o burocratici. Sviluppo Rapido del Software Slide 18
Confronto fra Waterfall e RAD Sviluppo Rapido del Software Slide 19 Il Processo RAD Basato su 4 fasi: 1. Pianificazione dei requisiti 2. User Design (o Functional Design) 3. Construction 4. Implementation (o Deployment) Sviluppo Rapido del Software Slide 20
Pianificazione di requisiti e User Design Sono raccolti i requisiti utente iniziali e le principali entità di business, definendo lo scope dell applicazione. Sono impiegati strumenti per la gestione dei requisiti, che offrono funzioni di creazione del database a partire dal modello dei dati. La fase di User Design si basa su JAD (Joint Application Development) workshops (per utenti ed analisti) in cui si modellano i dati ed i processi del sistema (E-R Diagram), si definisce un piano di test e si costruisce eventualmente un prototipo funzionante delle parti più critiche. Sviluppo Rapido del Software Slide 21 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 22
Implementazione 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 23 Strumenti per gli ambienti RAD Linguaggiper la programmazione di Database (es. SQL-che può essere anche generato automaticamente damoduli) Generatori di Interfacce (per I/O dati) Collegamenti ad applicazioni office Generatori dirapporti Sviluppo Rapido del Software Slide 24
Un ambiente RAD Interface gener ator Office systems DB programming langua ge Report gener ator Da tabase mana gement system Rapid application development environment Sviluppo Rapido del Software Slide 25 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 26
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 27 Alcune categorie di strumenti per il RAD Cross-Platform RAD tools Plug-in per Eclipse, o NetBeans, Desktop RAD tools Visual Basic, wxdev-c++ (an extension of Dev-C++) Database RAD Tools IBM Rational, Embedded Control RAD Tools Web Based RAD Tools 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 28
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 29 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 30
La Prototipizzazione Sviluppo Rapido del Software Slide 31 Prototipizzazione del Software A volte per problemi contrattuali, non può essere usato un approccio incrementale, ma I requisiti non sono benchiari 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 32
Sviluppo incrementale e Prototipizzazione Outline Delineamento requir ements requisiti Incremental development Throw-a way prototyping Delivered Sistema system Consegnato Executable Prototipo Eseguibile prototype + System specifiche specifica di sistema tion Sviluppo Rapido del Software Slide 33 Diversi Obiettivi L obiettivo dello sviluppo incrementale è di rilasciare un sistemafunzionante 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 coirequisiti peggio compresi. Sviluppo Rapido del Software Slide 34
Benefici della prototipazione Migliora l usabilità del sistema. Garantisce una maggiore corrispondenza con I reali bisogni utente. Permette diesplorare soluzioni diprogetto di migliore qualità. Migliora la capacità di manutenzione. Riduce lo sforzo di sviluppo. Sviluppo Rapido del Software Slide 35 Uso del prototipo nel Back to back testing Test data System prototype Application system Results comparator Difference repor t Sviluppo Rapido del Software Slide 36
Il processo di prototipazione Establish prototype objecti ves Define prototype functionality Develop prototype Evalua te prototype Prototyping plan Outline definition Executa ble prototype Evalua tion repor t Sviluppo Rapido del Software Slide 37 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 38
Key points Un approccio di sviluppo software iterativo porta a più rapide consegne del software. I metodi agili sono metodi iterativi che tendono a ridurre l overhead di sviluppo e a consegne rapide. Esistono diversi ambienti RAD che includono linguaggi di programmazione database, generatori di form e collegamenti a office applications. I prototipi usa-e-getta sono usati per esplorare I requisiti e soluzioni di progettazione. Sviluppo Rapido del Software Slide 39