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