Giorgio Meini Fiorenzo Formichi Tecnologie e progettazione di sistemi informatici e di telecomunicazioni



Documenti analoghi
Ingegneria del Software

Concetti di base di ingegneria del software

Ciclo di vita del software

Sistemi Informativi e Sistemi ERP

ISO/IEC 2700:2013. Principali modifiche e piano di transizione alla nuova edizione. DNV Business Assurance. All rights reserved.

Ciclo di vita del progetto

IL PROCESSO DI FABBRICAZIONE (sviluppo nuovo prodotto)

5.1.1 Politica per la sicurezza delle informazioni

LA PIANIFICAZIONE DELLE ATTIVITÀ AZIENDALI E.R.P. (ENTERPRISE RESOURCE PLANNING)

Ingegneria del Software. Introduzione ai pattern

UML e (R)UP (an overview)

PROJECT MANAGEMENT SERVIZI DI PROJECT MANAGEMENT DI ELEVATA PROFESSIONALITÀ

Il cloud per la tua azienda.

Metodologie Agili per lo sviluppo di applicazioni Internet Distribuite. Agile Group DIEE, Università di Cagliari

Configuration Management

Generazione Automatica di Asserzioni da Modelli di Specifica

Project Management. Modulo: Introduzione. prof. ing. Guido Guizzi

Rational Unified Process Introduzione

Soluzione dell esercizio del 2 Febbraio 2004

Università degli Studi di Parma Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica. Ingegneria del Software. La fase di Analisi

INGEGNERIA DEL SOFTWARE. Prof. Paolo Salvaneschi

Organizzazione e pianificazione delle attività di marketing

1- Corso di IT Strategy

MService La soluzione per ottimizzare le prestazioni dell impianto

REFERENZIAZIONI 2001) NUP

Scrum. Caratteristiche, Punti di forza, Limiti. versione del tutorial: Pag. 1

03. Il Modello Gestionale per Processi

Gestione dello sviluppo software Modelli Agili

PROGETTO TECNICO SISTEMA DI GESTIONE QUALITA IN CONFORMITÀ ALLA NORMA. UNI EN ISO 9001 (ed. 2008) n. 03 del 31/01/09 Salvatore Ragusa

PROTOTIPAZIONE DI UN TRADUTTORE DA SORGENTE PLC AD ASSEMBLY DI UNA MACCHINA VIRTUALE

Ibpm è lo strumento per la gestione dei processi, dalla modellazione, all esecuzione, al monitoraggio.

Poca documentazione: uso di Story Card e CRC (Class Responsibility Collabor) Collaborazione con il cliente rispetto alla negoziazione dei contratti

SISTEMI E RETI 4(2) 4(2) 4(2) caratteristiche funzionali

QUESTIONARIO 3: MATURITA ORGANIZZATIVA

MANUALE DELLA QUALITÀ Pag. 1 di 6

TECNICO SUPERIORE PER L AUTOMAZIONE INDUSTRIALE

Object Oriented Programming

PROXYMA Contrà San Silvestro, Vicenza Tel Fax

La gestione manageriale dei progetti

Piano di gestione della qualità

IL MODELLO SCOR. Agenda. La Supply Chain Il Modello SCOR SCOR project roadmap. Prof. Giovanni Perrone Ing. Lorena Scarpulla. Engineering.

Il valore sinergico delle Certificazioni dei Sistemi di Gestione per la Qualità e di servizio rilasciate sotto Accreditamento.

Progetto Atipico. Partners

Business Process Management

Ciclo di vita dimensionale

Specifiche tecniche e funzionali del Sistema Orchestra

SVILUPPO, CERTIFICAZIONE E MIGLIORAMENTO DEL SISTEMA DI GESTIONE PER LA SICUREZZA SECONDO LA NORMA BS OHSAS 18001:2007

SISTEMA DI GESTIONE PER LA QUALITA Capitolo 4

4.5 CONTROLLO DEI DOCUMENTI E DEI DATI

FONDAMENTI di INFORMATICA L. Mezzalira

Dispensa di Informatica I.1

Automazione Industriale (scheduling+mms) scheduling+mms.

Corso formazione su Sistema di gestione della qualità. Standard ISO 9001:2000/2008 Vision 2000

Base di dati e sistemi informativi

Format per la progettazione (di un unità formativa di xx ore per apprendere per competenze)

INVENTION AND TECHNOLOGY DISCLOSURE FORM SCHEDA DI RICHIESTA PER L APERTURA DI UNA PRATICA DI BREVETTO

SOA GOVERNANCE: WHAT DOES IT MEAN? Giorgio Marras

QUESTIONARIO 1: PROCESSO DI AUTOVALUTAZIONE

Norme per l organizzazione - ISO serie 9000

PIANIFICAZIONE DI PROGETTO DI SISTEMI INFORMATIVI

L o. Walter Ambu japs: una soluzione agile (

ILSISTEMA INTEGRATO DI PRODUZIONE E MANUTENZIONE

Modellazione dei dati in UML

COME SVILUPPARE UN EFFICACE PIANO DI INTERNET MARKETING

Il glossario della Posta Elettronica Certificata (PEC) Diamo una definizione ai termini tecnici relativi al mondo della PEC.

La portata del software

La Metodologia adottata nel Corso

La Guida per l Organizzazione degli Studi professionali

La gestione della qualità nelle aziende aerospaziali

della manutenzione, includa i requisiti relativi ai sottosistemi strutturali all interno del loro contesto operativo.

La norma ISO 9001:08 ha apportato modifiche alla normativa precedente in

Politica per la Sicurezza

Follia è fare quel che si è sempre fatto aspettandosi risultati diversi

Strumenti di modellazione. Gabriella Trucco

Infrastruttura di produzione INFN-GRID

ascoltare ispirare e motivare miglioramento problem solving Flex360 pianificare comunicare la vision organizzare

ƒ Gli standard e la gestione documentale

INFORMATICA 1 L. Mezzalira

Appendice III. Competenza e definizione della competenza

Strategie e Operatività nei processi di backup e restore

Introduzione. Il software e l ingegneria del software. Marina Mongiello Ingegneria del software 1

Programma del Corso. Dati e DBMS SQL. Progettazione di una. Normalizzazione

PRESENTARE UN IDEA PROGETTUALE

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

Iniziative di Welfare per i dipendenti. Index

Introduzione alle basi di dati. Gestione delle informazioni. Gestione delle informazioni. Sistema informatico

Modellazione di sistema

CORSO BUSINESS CONTINUITY AND DISASTER RECOVERY MANAGEMENT LE 10 PROFESSIONAL PRACTICES

Sistemi di misurazione e valutazione delle performance

7. Esigenze informative e FAQ. 8. Allegati. Repository documentale.

La progettazione centrata sull utente nei bandi di gara

MANUALE DELLA QUALITA Revisione: Sezione 4 SISTEMA DI GESTIONE PER LA QUALITA

figure professionali software

LA SOLUZIONE. EVOLUTION, con la E LA TECNOLOGIA TRASPARENTE IL SOFTWARE INVISIBILE INVISIBILE ANCHE NEL PREZZO R.O.I. IMMEDIATO OFFERTA IN PROVA

SCHEDA REQUISITI PER LA QUALIFICAZIONE DEL CORSO PER ESPERTI IN MARKETING & COMUNICAZIONE

NuMa Nuove Manutenzioni. Web Application per la Gestione dell Iter di Manutenzione degli Edifici e del Territorio

esales Forza Ordini per Abbigliamento

Manuale della qualità. Procedure. Istruzioni operative

SINPAWEB corso per Tecnico della programmazione e dello sviluppo di siti internet e pagine web co.reg matricola 2012LU1072

Strumenti e metodi di ausilio didattico per i dislessici

Transcript:

1 2 3 Idee per il tuo futuro Giorgio Meini Fiorenzo Formichi Tecnologie e progettazione di sistemi informatici e di telecomunicazioni per Informatica Ciclo di vita del software e UML Programmazione concorrente

Giorgio Meini Fiorenzo Formichi Tecnologie e progettazione di sistemi informatici e di telecomunicazioni per Informatica Ciclo di vita del software e UML Programmazione concorrente

Copyright 2012 Zanichelli editore S.p.A., Bologna [6173] www.zanichelli.it I diritti di elaborazione in qualsiasi forma o opera, di memorizzazione anche digitale su supporti di qualsiasi tipo (inclusi magnetici e ottici), di riproduzione e di adattamento totale o parziale con qualsiasi mezzo (compresi i microfilm e le copie fotostatiche), i diritti di noleggio, di prestito e di traduzione sono riservati per tutti i paesi. L acquisto della presente copia dell opera non implica il trasferimento dei suddetti diritti né li esaurisce. Per le riproduzioni ad uso non personale (ad esempio: professionale, economico, commerciale, strumenti di studio collettivi, come dispense e simili) l editore potrà concedere a pagamento l autorizzazione a riprodurre un numero di pagine non superiore al 15% delle pagine del presente volume. Le richieste per tale tipo di riproduzione vanno inoltrate a Centro Licenze e Autorizzazioni per le Riproduzioni Editoriali (CLEARedi) Corso di Porta Romana, n. 108 20122 Milano e-mail autorizzazioni@clearedi.org e sito web www.clearedi.org L editore, per quanto di propria spettanza, considera rare le opere fuori del proprio catalogo editoriale, consultabile al sito www.zanichelli.it/f_catalog.html. La fotocopia dei soli esemplari esistenti nelle biblioteche di tali opere è consentita, oltre il limite del 15%, non essendo concorrenziale all opera. Non possono considerarsi rare le opere di cui esiste, nel catalogo dell editore, una successiva edizione, le opere presenti in cataloghi di altri editori o le opere antologiche. Nei contratti di cessione è esclusa, per biblioteche, istituti di istruzione, musei ed archivi, la facoltà di cui all art. 71 - ter legge diritto d autore. Maggiori informazioni sul nostro sito: www.zanichelli.it/fotocopie/ Realizzazione editoriale: Coordinamento redazionale: Matteo Fornesi Segreteria di redazione: Deborah Lorenzini Progetto grafico: Editta Gelsomini Collaborazione redazionale, impaginazione, disegni e indice analitico: Stilgraf, Bologna Contributi: Rilettura dei testi in inglese: Roger Loughney Copertina: Progetto grafico: Miguel Sal & C., Bologna Realizzazione: Roberto Marchetti Immagine di copertina: GrandeDuc/Shutterstock, Artwork Miguel Sal & C., Bologna Prima edizione: gennaio 2012 Ristampa: 5 4 3 2 1 2012 2013 2014 2015 2016 L impegno a mantenere invariato il contenuto di questo volume per un quinquennio (art. 5 legge n. 169/2008) è comunicato nel catalogo Zanichelli, disponibile anche online sul sito www.zanichelli.it, ai sensi del DM 41 dell 8 aprile 2009, All. 1/B. File per diversamente abili L editore mette a disposizione degli studenti non vedenti, ipovedenti, disabili motori o con disturbi specifici di apprendimento i file pdf in cui sono memorizzate le pagine di questo libro. Il formato del file permette l ingrandimento dei caratteri del testo e la lettura mediante software screen reader. Le informazioni su come ottenere i file sono sul sito www.zanichelli.it/diversamenteabili Suggerimenti e segnalazione degli errori Realizzare un libro è un operazione complessa, che richiede numerosi controlli: sul testo, sulle immagini e sulle relazioni che si stabiliscono tra essi. L esperienza suggerisce che è praticamente impossibile pubblicare un libro privo di errori. Saremo quindi grati ai lettori che vorranno segnalarceli. Per segnalazioni o suggerimenti relativi a questo libro scrivere al seguente indirizzo: lineazeta@zanichelli.it Le correzioni di eventuali errori presenti nel testo sono pubblicati nel sito www.online.zanichelli.it/aggiornamenti Zanichelli editore S.p.A. opera con sistema qualità certificato CertiCarGraf n. 477 secondo la norma UNI EN ISO 9001:2008

Giorgio Meini Fiorenzo Formichi Tecnologie e progettazione di sistemi informatici e di telecomunicazioni per Informatica Ciclo di vita del software e UML Programmazione concorrente

Indice SEZIONE A Ciclo di vita del software e UML A1 Ciclo di vita e ingegneria del software 1 Ingegneria del software e metodologie di sviluppo 4 2 Linguaggio di modellizzazione UML 8 3 Qualità del software e pattern 10 4 Un caso di studio: Advanced Trip Computer 13 SINTESI 13 QUESITI 14 ORIGINAL DOCUMENT 16 A2 Requisiti software e casi d uso 1 Definizione e classificazione dei requisiti di un prodotto/servizio software 21 2 Diagrammi UML dei casi d uso 23 3 Definizione dei requisiti del caso di studio 25 SINTESI 27 QUESITI ESERCIZI 27 A3 Progettazione software e linguaggio C++ 1 Il linguaggio C++ 31 2 Schede CRC e diagrammi UML delle classi 45 3 La gestione dinamica degli array in linguaggio C++ 51 4 Diagrammi UML di sequenza 56 5 La progettazione software del caso di studio 58 SINTESI 67 QUESITI ESERCIZI LABORATORIO 69 ORIGINAL DOCUMENT 76 Indice V

A4 Gestione e documentazione del codice 1 Regole e convenzioni di codifica 80 2 Ambienti di sviluppo integrati 83 3 Diritto d autore e licenze software 84 4 Documentazione del codice sorgente con Doxygen 87 5 Gestione delle versioni del codice sorgente con Subversion 93 6 Codice sorgente del caso di studio 103 SINTESI 121 QUESITI LABORATORIO 122 ORIGINAL DOCUMENT 124 A5 Test del software 1 Pianificazione e classificazione dei test 129 2 Uno strumento per la codifica e l esecuzione dei test unitari: googletest 136 3 Strumenti di bug-tracking per la manutenzione correttiva ed evolutiva del software 143 4 Test unitari e di integrazione del caso di studio 146 SINTESI 157 QUESITI LABORATORIO 158 ORIGINAL DOCUMENT 160 SEZIONE B Programmazione concorrente B1 Tecniche di programmazione concorrente in Windows e Linux 1 Thread in ambiente Linux 174 2 Il modello produttore-consumatore e le regioni critiche di codice 177 3 Uso delle variabili di condizione per la sincronizzazione 194 4 Deadlock 205 SINTESI 207 QUESITI ESERCIZI LABORATORIO 210 ORIGINAL DOCUMENT 214 VI Indice

B2 Inter-Process Communication in Linux e Windows 1 Processi e pipe in ambiente Windows 220 2 Esecuzione di programmi e FIFO in ambiente Linux 226 3 Memoria condivisa e semafori 231 4 Memoria condivisa e semafori in ambiente Windows 254 SINTESI 266 QUESITI ESERCIZI LABORATORIO 268 ORIGINAL DOCUMENT 272 B3 Gestione della concorrenza nel linguaggio Java 1 Thread in Java 2 Condivisione di risorse tra thread 3 Sincronizzazione dei thread SINTESI ESERCIZI Indice analitico 275 Il capitolo B3 è disponibile, con chiave di attivazione, all indirizzo: www.online.zanichelli.it/meiniformichitecnologie Indice VII

SEZIONE A del A1 A2 A3 A4 A5 Ciclo di vita software e UML Ciclo di vita e ingegneria del software Requisiti software e casi d uso Progettazione software e linguaggio C++ Gestione e documentazione del codice Test del software

A1 Ciclo di vita e ingegneria del software La torre Eiffel, a Parigi, fu costruita in poco più di due anni, in tempo per l esposizione universale del 1889. Come tutte le attività complesse, la costruzione della torre richiese un accurata progettazione della struttura e una precisa pianificazione delle fasi di realizzazione. 2 A1 Ciclo di vita e ingegneria del software

ANALISI PROGETTAZIONE SVILUPPO VERIFICA MANUTENZIONE FIGURA 1 Verosimilmente Gustave Eiffel seguì il tradizionale processo di realizzazione delle grandi opere dell ingegneria civile, in cui ogni fase del processo segue necessariamente la fase precedente: progettazione; costruzione; manutenzione. Il processo di realizzazione di un applicazione complessa non è dissimile ed è schematizzato nel famoso modello «a cascata» del ciclo di vita del software (FIGURA 1). Il ciclo di vita del software è l insieme della attività e delle azioni da intraprendere per realizzare un progetto software. Ciascuna fase del ciclo di vita «a cascata» del software (software waterfall life-cycle) produce uno specifico output che rappresenta l input della fase successiva: Documentazione di un prodotto software Oltre allo sviluppo del codice, ogni progetto software richiede la redazione di una adeguata documentazione: la documentazione tecnica (per esempio la descrizione dell architettura e delle interazioni tra i componenti o la procedura di installazione e configurazione) è destinata agli sviluppatori che devono mantenere il prodotto, mentre la documentazione utente (per esempio il manuale d uso o l help online) è destinata agli utilizzatori dell applicazione. Analisi Fase Descrizione Output La fase di analisi ha lo scopo di identificare i requisiti dell applicazione da realizzare Requisiti Progettazione Implementazione Nella fase di progettazione (design) viene definita l architettura del software che deve essere sviluppato, avendo come scopo la decomposizione in componenti In questa fase viene sviluppato e testato (development) il codice dei singoli componenti software che costituiscono l applicazione, utilizzando uno o più linguaggi di programmazione Architettura Codice sorgente/eseguibile da verificare Introduzione 3

Verifica Fase Descrizione Output L integrazione dei componenti, la corretta esecuzione del codice sviluppato e il fatto che l applicazione realizzata soddisfi i requisiti previsti devono essere puntualmente verificati (testing) Codice sorgente/eseguibile da rilasciare Manutenzione Successivamente al rilascio dell applicazione soft ware realizzata è spesso necessario correggere errori (bug) non rilevati in fase di verifica (manutenzione correttiva) o integrare funzionalità non previste in fase di analisi e identificazione dei requisiti (manutenzione correttiva) Versioni aggiornate del codice sorgente/eseguibile OSSERVAZIONE Le fasi di analisi e di verifica dei requisiti coinvolgono normalmente il committente del progetto software. La maggior parte dei progetti software prevedono infatti lo sviluppo di un applicazione su commessa e non di un prodotto da immettere sul mercato. In questo caso il committente è un ente pubblico o privato che richiede la realizzazione di un software con determinate caratteristiche per soddisfare le proprie esigenze e i cui utenti sono il proprio personale e/o i propri clienti. ESEMPIO Una scuola che intenda informatizzare la gestione delle valutazioni necessita di un sistema software che consenta ai docenti di memorizzare in modo sicuro i voti delle singole prove di verifica e periodici per ciascuno studente e agli studenti e ai genitori di poterle visionare in modo altrettanto sicuro, eventualmente anche connettendosi dall esterno della suola. La scuola commissionerà a un azienda di informatica la realizzazione dell applicazione software che in seguito potrà gestire in proprio: nella fase di analisi saranno documentati i requisiti che costituiranno parte integrante del contratto di affidamento della commessa e che saranno verificati dal committente al momento dell installazione dell applicazione. 1 Ingegneria del software e metodologie di sviluppo Circa un quarto di tutti i grandi progetti software viene interrotto prima della conclusione e più della metà viene terminato in notevole ritardo o con costi molto maggiori di quelli inizialmente previsti. Queste statistiche unite al fatto che frequentemente il software realizzato non soddisfa i requisiti del committente non sono accettabili per la moderna industria del software: la situazione è nota almeno dal 1968, anno in cui il Comitato scientifico della NATO organizzò un convegno a Garmisch, in Germania, sulla «crisi del software», ed è solo con l avvento del nuovo millennio che l adozione sistematica delle metodologie dell ingegneria del software ha introdotto miglioramenti significativi nella capacità di progettare e realizzare software di qualità. 4 A1 Ciclo di vita e ingegneria del software

ESEMPIO Uno dei più noti esempi di progetti software dall esito disastroso è dato dallo sviluppo del sistema di controllo dello smistamento dei bagagli nell aeroporto di Denver, in Colorado (USA), uno dei più grandi del mondo. La complessità di realizzazione del software, distribuito su centinaia di computer, che doveva gestire lo spostamento di migliaia di convogli guidati automaticamente su una rete di binari sotterranei estesa decine di chilometri, ha ritardato di quasi due anni dal 1993 al 1995 l inaugurazione dell aeroporto, comportando perdite economiche che hanno superato il milione di dollari al giorno. La conclusione della commessa ha in ogni caso ri- chiesto una riprogettazione sostanziale del sistema di smistamento dei bagagli, in cui è stato abbandonato il controllo completamente automatico in favore di una più tradizionale movimentazione gestita da operatori. Tutte le analisi condotte su questo disastro dell industria del software concordano sul fatto che i responsabili dell aeroporto e della ditta fornitrice del sistema ne hanno in mancanza di una rigorosa disciplina progettuale sottostimato l enorme complessità realizzativa; in particolare, la mancanza di una metodologia condivisa ha rapidamente condotto al caos, tanto che alcuni responsabili organizzativi e tecnici hanno cambiato lavoro o incarico. L ingegneria del software è la disciplina tecnologica e gestionale relativa alla realizzazione sistematica e alla manutenzione di un prodotto o servizio software rispettando tempi e costi preventivati. Il ciclo di vita è uno dei concetti fondamentali dell ingegneria del software, ma la rigida sequenzialità delle fasi prevista dal processo a cascata risulta impraticabile nei progetti reali. I problemi che emergono in fase di verifica e di manutenzione correttiva comportano frequentemente modifiche al codice e, di conseguenza, una ripetizione parziale delle fase di implementazione. Inoltre la necessità di eseguire la manutenzione evolutiva delle funzionalità del software può anche determinare la ripetizione dell intero processo di sviluppo a partire dalle fasi di analisi e progettazione. Per questi motivi il ciclo di vita a cascata è stato con il tempo superato per flessibilità e praticabilità da processi di tipo incrementale e iterativo. Un processo di sviluppo è incrementale se il software che ne costituisce il risultato viene realizzato in versioni successive, ciascuna delle quali evolve dalla precedente accrescendone le funzionalità, fino a soddisfare tutti i requisiti previsti. La realizzazione di varie versioni del software implica l iterazione delle tradizionali fasi di analisi, progettazione, implementazione e verifica. OSSERVAZIONE Non deve sorprendere che anche la fase di analisi in cui si definiscono i requisiti del sistema software da realizzare sia inclusa nell iterazione: molte esperienze di sviluppo di grandi progetti software dimostrano che i requisiti sono estremamente soggetti a cambiare nel corso del progetto stesso. È infatti difficile stabilire a priori in modo corretto e completo i requisiti di un applicazione e, di conseguenza, è estremamente probabile che la valutazione di un prototipo da parte del committente suggerisca un adattamento incrementale dei requisiti iniziali. La FIGURA 2 chiarisce perché il processo incrementale e iterativo sia noto anche come modello a spirale del ciclo di vita del software. Prodotti e servizi software È sempre più comune il caso che l oggetto finale di un progetto software non sia il rilascio al committente o la vendita ai clienti di un programma, ma l erogazione di un servizio. Per quanto basati su prodotti estremamente complessi, la cui manutenzione correttiva ed evolutiva è continua, siti come Google e Facebook rendono disponibili su web le proprie funzionalità senza richiedere ai propri utenti l acquisto o l installazione di un applicazione software. Sempre più spesso questa soluzione viene adottata per sostituire, anche da parte di enti pubblici e privati, le funzionalità di applicazioni software tradizionali. 1 Ingegneria del software e metodologie di sviluppo 5

Metodologie agili Pur volendo evitare la rigida strutturazione delle metodologie tradizionali, alcune metodologie agili sono state formalizzate dai loro autori. Una delle metodologie agili più note è XP (extreme programming), ideata da Kent Beck nel 1999: i princìpi, le attività e le pratiche previste sono fortemente focalizzate sulla produzione e il rilascio al committente del codice sviluppato dai programmatori, che lavorano sempre in coppia. SCRUM, invece, è una metodologia agile i cui metodi il termine identifica il pacchetto di mischia del gioco del rugby enfatizzano il ruolo del gruppo di sviluppatori nel raggiungere uno scopo comune. FIGURA 2 analisi progettazione verifica implementazione Pur condividendo un ciclo di vita a spirale di tipo incrementale e iterativo, esistono molte diverse metodologie per lo sviluppo di un progetto software; tra le più adottate dalle grandi aziende vi è RUP (Rational Unified Process), mentre PSP (Personal Software Process) è stata specificatamente ideata per i singoli sviluppatori. In ogni caso queste metodologie di sviluppo, anche se estremamente diverse tra loro, sono entrambe molto disciplinate e dettagliate, e la loro applicazione a un progetto software richiede strumenti specifici e una formazione dedicata. Negli ultimi anni si stanno affermando forme meno strutturate di metodologie di sviluppo che hanno assunto la denominazione di metodologie agili e che, pur con molte differenze, condividono un manifesto comune pubblicato nel 2001: Stiamo scoprendo modi migliori di creare software, sviluppandolo e aiutando gli altri a fare lo stesso. Grazie a questa attività siamo arrivati a considerare importanti: Gli individui e le interazioni più che i processi e gli strumenti Il software funzionante più che la documentazione esaustiva La collaborazione col cliente più che la negoziazione dei contratti Rispondere al cambiamento più che seguire un piano Ovvero, fermo restando il valore delle voci a destra, consideriamo più importanti le voci a sinistra. Tra i firmatari del manifesto figurano i nomi di noti sviluppatori e autori di testi di programmazione di fama internazionale; il sito del manifesto (agilemanifesto.org) riporta i 12 princìpi informali a cui ogni metodologia agile dovrebbe attenersi: La nostra massima priorità è soddisfare il cliente rilasciando software di valore, fin da subito e in maniera continua. Accogliamo i cambiamenti nei requisiti, anche a stadi avanzati dello sviluppo. I processi agili sfruttano il cambiamento a favore del vantaggio competitivo del cliente. 6 A1 Ciclo di vita e ingegneria del software

Consegniamo frequentemente software funzionante, con cadenza variabile da un paio di settimane a un paio di mesi, preferendo i periodi brevi. Committenti e sviluppatori devono lavorare insieme quotidianamente per tutta la durata del progetto. Fondiamo i progetti su individui motivati. Diamo loro l ambiente e il supporto di cui hanno bisogno e confidiamo nella loro capacità di portare il lavoro a termine. Una conversazione faccia a faccia è il modo più efficiente e più efficace per comunicare con il team e all interno del team. Il software funzionante è il principale metro di misura di progresso. I processi agili promuovono uno sviluppo sostenibile. Gli sponsor, gli sviluppatori e gli utenti dovrebbero essere in grado di mantenere indefinitamente un ritmo costante. La continua attenzione all eccellenza tecnica e alla buona progettazione esaltano l agilità. La semplicità l arte di massimizzare la quantità di lavoro non svolto è essenziale. Le architetture, i requisiti e la progettazione migliori emergono da team che si autoorganizzano. A intervalli regolari il team riflette su come diventare più efficace, dopodiché regola e adatta il proprio comportamento di conseguenza. Per assicurare la qualità del codice rilasciato tutte le metodologie agili enfatizzano il ruolo del testing del software prodotto, fino a teorizzare la predisposizione del codice di test prima ancora dello sviluppo del codice dell applicazione da realizzare (test-driven development). Un altra pratica condivisa dalle metodologie agili che deriva direttamente dalla focalizzazione dell attenzione sulla qualità del codice prodotto è il refactoring: anche il codice sorgente che genera codice eseguibile corretto e conforme ai requisiti viene continuamente ristrutturato allo scopo di migliorarne la coerenza e la flessibilità in fase di manutenzione correttiva ed evolutiva. Testing e refactoring sono aspetti strettamente connessi nella pratica dello sviluppo software, perché l introduzione deliberata di modifiche al codice già verificato può essere effettuata solo se la ripetizione dei test di conformità ai requisiti è di semplice attuazione, preferibilmente mediante strumenti automatici. Beta testing La verifica di un prodotto software da immettere sul mercato prevede normalmente una fase di test interno (alfa test) seguita da una fase di test esterno effettuata da utenti potenziali e volontari (beta test) che riportano al produttore i bug riscontrati prima del rilascio o della commercializzazione. OSSERVAZIONE Una distinzione fondamentale tra le metodologie di test software è tra black-box testing e white-box testing. 1 Ingegneria del software e metodologie di sviluppo 7

Nel primo caso i test sono effettuati «a scatola chiusa», avendo come riferimento esclusivo i requisiti dell applicazione e ignorando la struttura del codice, mentre nel secondo caso i test sono eseguiti «a scatola aperta», con l intento di verificare la corretta esecuzione di ogni singola linea di codice. 2 Linguaggio di modellizzazione UML Una tecnica generalmente adottata per mitigare il rischio di insuccesso di un progetto software consiste nella decomposizione dell applicazione da sviluppare in componenti indipendenti, ciascuno di complessità limitata e testabile unitariamente. La decomposizione del software avviene a vari livelli, ma nel caso del codice è resa naturale dall adozione di un linguaggio di programmazione e di una progettazione orientati agli oggetti (objectoriented programming e object-oriented design). 1. Il termine «unificato» ricorda come la versione originale del linguaggio di modellizzazione derivi dall integrazione di proposte precedenti degli autori. Il linguaggio di modellizzazione UML (Unified Modeling Language 1 ) la cui prima versione fu definita nel 1996 a opera di Grady Booch, Jim Rumbaugh e Ivar Jacobson, noti come los tres amigos è un insieme di formalismi grafici che consentono di definire e documentare mediante vari tipi di diagrammi i diversi aspetti di un sistema software, in particolare se realizzato secondo il paradigma a oggetti. I principali diagrammi previsti dalla versione attuale del linguaggio sono i seguenti: Diagramma Casi d uso Classi Oggetti Stati Attività Sequenze Componenti Descrizione Diagramma comportamentale di descrizione delle funzionalità di un sistema software in termini di utenti (denominati «attori», termine con il quale si denota sia una persona sia un sistema informatico) e di azioni eseguibili. Diagramma strutturale che descrive l architettura di un sistema software in termini di classi con i relativi attributi e metodi e delle relazioni tra esse. Il diagramma delle classi è una metodologia di progettazione a oggetti estremamente diffusa. Diagramma strutturale che rappresenta lo stato completo o parziale di un sistema software in un istante della propria esecuzione in termini di oggetti istanziati dalle classi e delle loro relazioni e dipendenze. Diagramma comportamentale che rappresenta le transizioni di stato di un componente software. Diagramma comportamentale che illustra le fasi del flusso di controllo di un sistema software. Diagramma di interazione che descrive la comunicazione tra i componenti di un sistema software in termini di «messaggi» (termine con il quale si intende l invocazione di metodi). Diagramma strutturale che documenta l architettura di un sistema software in termini di componenti e delle loro dipendenze. 8 A1 Ciclo di vita e ingegneria del software

ESEMPIO Il diagramma UML dei casi d uso di FIGURA 3 rappresenta in forma semplificata le funzionalità consentite al cliente di un sito di commercio elettronico (l attore «Cliente» è raffigurato con la classica icona grafica stilizzata). La visualizzazione dei commenti dei clienti relativi a uno specifico prodotto è una «estensione» facoltativa della funzionalità di visualizzazione dei dettagli di un prodotto, mentre l operazione di pagamento è necessariamente «inclusa» nell operazione di acquisto. FIGURA 3 visualizza catalogo prodotti visualizza dettagli prodotto aggiungi prodotto al carrello acquisto prodotti carrello «extend» «include» visualizza commenti pagamento ESEMPIO Il diagramma UML delle classi di FIGURA 4 rappresenta in forma semplificata l architettura software di un sito che commercializza libri, CD audio e film in DVD (la classe «Prodotto» costituisce una loro generalizzazione astratta): il catalogo raccoglie tutti i prodotti disponibili, mentre un carrello comprende i soli prodotti che un cliente intende acquistare. Gli elementi di questo tipo di diagramma UML corrispondono al concetto di classe dei linguaggi di programmazione orientati agli oggetti, con i relativi attributi e metodi: la relazione di generalizzazione corrisponde all ereditarietà tra classi, mentre le relazioni di composizione corrispondono alla definizione di attributi istanze di altre classi aventi la cardinalità specificata. Prodotto Catalogo +aggiungiprodotto() +eliminaprodotto() +elencaprodotti() +cercaprodotto() 1 * codice titolo descrizione anno prezzo quantita +setcodice() +getcodice() +settitolo() +gettitolo() +setdescrizione() +getdescrizione() +setanno() +getanno() +setprezzo() +getprezzo() +setquantita() +getquantita() * * Carrello +aggiungiprodotto() +eliminaprodotto() +elencaprodotti() +calcolaimporto() FIGURA 4 Libro autore editore pagine +setautore() +getautore() +seteditore() +geteditore() +setpagine() +getpagine() CD autore esecutore durata +setautore() +getautore() +setesecutore() +getesecutore() +setdurata() +getdurata() DVD regista produttore durata +setregista() +getregista() +setproduttore() +getproduttore() +setdurata() +getdurata() 2 Linguaggio di modellizzazione UML 9

ESEMPIO Un diagramma UML di sequenza come quello riportato di FIGURA 5 illustra l interazione nel tempo (che trascorre dall alto verso il basso) tra i componenti di un sistema software, in particolare se riferito a un linguaggio di programmazione orientato agli oggetti mostra la sequenza temporale di invocazione dei metodi tra oggetti di classi diverse. client web catalogo prodotto carrello elencaprodotti elenco cercaprodotto prodotto getcodice, getdescrizione, getprezzo codice, descrizione, prezzo aggiungiprodotto conferma calcolaimporto importo FIGURA 5 3 Qualità del software e pattern 2. ISO/IEC 9126:2001. Uno standard internazionale 2 identifica le seguenti caratteristiche di qualità di un prodotto software: Funzionalità Affidabilità Usabilità Efficienza Manutenibilità Portabilità Presenza delle funzionalità che soddisfano i requisiti stabiliti e/o impliciti Mantenimento delle prestazioni in condizioni definite e/o per un periodo di tempo stabilito Livello di impegno richiesto per l impiego da parte di varie tipologie di utenti Relazione tra il livello di prestazione e le risorse hardware/software utilizzate in condizioni definite Livello di impegno richiesto per la modifica del codice Facilità di esecuzione su piattaforme diverse Dopo l adozione di una metodologia e di un ciclo di sviluppo, uno dei fattori che maggiormente influenzano le caratteristiche di qualità di un 10 A1 Ciclo di vita e ingegneria del software

prodotto software è il ricorso a soluzioni standardizzate per i problemi di progettazione e di implementazione. Il concetto di pattern nasce nel contesto dell architettura di edifici e aree urbane a cura di Cristopher Alexander, che lo definì come una soluzione a un problema ricorrente di progettazione «in modo che la soluzione sia applicabile milioni di volte senza doverla applicare allo stesso modo nemmeno due volte»; è lo stesso Alexander che stabilisce un possibile formato di pubblicazione di un pattern: nome del pattern; descrizione del problema ricorrente; descrizione del contesto di applicazione e delle «forze» in gioco; descrizione della soluzione proposta; descrizione del contesto risultante dall applicazione della soluzione proposta. Antipattern The gang of four ha coniato il termine antipattern per definire un problema ricorrente nello sviluppo software che dovrebbe essere evitato. Uno dei più famosi e purtroppo comuni! è reinventing the wheel (and make it square): il rifiuto da parte dei progettisti e degli sviluppatori software a usare soluzioni sperimentate (i pattern appunto) porta spesso a soluzioni faticose ed errate! È auspicabile, inoltre, documentare il pattern con esempi e casi noti di applicazione. OSSERVAZIONE Le «forze» in gioco nel contesto di applicazione di un pattern rappresentano le motivazioni per adottare una soluzione piuttosto che un altra e sono spesso nei problemi reali opposte: la soluzione proposta deve quindi tenerne conto, risultando in un contesto in cui queste trovano un effettivo equilibrio. L iniziale adozione del concetto di pattern nel contesto della progettazione e dell implementazione del software è dovuta a Kent Beck e Ward Cunningham, che li utilizzarono come strumento didattico per la programmazione a oggetti con il linguaggio Smalltalk fin dagli anni 80 del secolo scorso, e a Jim Coplien, autore di un testo sullo stile di programmazione in C++ in cui introduceva gli «idiomi», una forma di pattern. Ma la diffusione dei pattern tra i progettisti di software e i programmatori avvenne nel 1995, con la pubblicazione del famoso testo Design Pattern: elementi per il riuso di software orientato agli oggetti, a cura di Erich Gamma, Richard Helm, Ralph Johnosn e John Vlissides, che sono ormai noti a tutti gli informatici come the gang of four. Il testo presenta 23 pattern per la progettazione del software classificati in tre categorie (creazione, struttura e comportamento) che sono considerati fondamentali nella progettazione/ programmazione orientata agli oggetti. Nel seguito sono introdotti alcuni pattern che non appartengono a nessuna delle categorie individuate da the gang of four si tratta di pattern di tipo metodologico e di uso generale allo scopo di esemplificare il concetto. PATTERN Nome Keep It Simple 3 Problema È difficile comprendere un sistema software quando diviene complesso. 3. Questo pattern ha dato origine al principio «KISS» (Keep It Simple Stupid!). 3 Qualità del software e pattern 11

Contesto e forze Soluzione Contesto risultante La complessità genera numerosi errori e rende un sistema software difficilmente mantenibile. Sono desiderabili sistemi software più comprensibili, più mantenibili, più flessibili e meno esposti agli errori. La progettazione del software non è un processo casuale: ci sono infatti molti fattori da prendere in considerazione. La progettazione dovrebbe essere la più semplice possibile, ma non di più. Questa soluzione facilita l ottenimento di un sistema più facilmente comprensibile e mantenibile nel tempo, ma non significa che i requisiti e le caratteristiche (compresi i requisiti e le caratteristiche interne) debbano essere tralasciati in favore della semplicità. I progetti software più eleganti sono spesso i più semplici ed essenziali. Semplice non significa quick and dirty, e infatti il raggiungimento della semplicità richiede spesso molta attività concettuale e numerose iterazioni. Il software è più comprensibile, più mantenibile e meno esposto agli errori. PATTERN Nome Problema Contesto e forze Soluzione Contesto risultante Make it run, make it right, make it fast, make it small Quando ottimizzare un progetto software? Si sta affrontando un nuovo progetto e la soluzione richiesta deve normalmente essere «migliore, più veloce e più economica» ed è necessaria una strategia di sviluppo che bilanci le necessità del cliente o del mercato e organizzative. L ottimizzazione ha costi sia a breve termine sia a lungo termine. L ottimizzazione precoce porta con sé il rischio di alti costi per risultati limitati: gli sviluppatori normalmente non sono in grado di prevedere quali saranno gli hot-spot del progetto e posticipare l ottimizzazione fino al momento in cui essi non sono noti si è spesso dimostrato saggio («Molti errori di progettazione e programmazione sono stati compiuti in nome dell efficienza più che per ogni altro singolo motivo, compresa la stupidità cieca»; «Il miglioramento dell efficienza spesso viene ottenuto a costo di sacrificare qualsiasi altra desiderabile caratteristica del prodotto»). Lo sviluppo incrementale ha un effetto estremamente positivo sul morale degli sviluppatori: ottenere qualcosa che funziona in una fase iniziale del processo di sviluppo e che «mette su carne» progressivamente mantiene l entusiasmo e la visione ad alti livelli. La correttezza dei prodotti è una caratteristica estremamente desiderabile, prodotti software veloci ottengono una valutazione positiva da parte del committente e i progetti «piccoli» sono più facilmente distribuibili e mantenibili. Adottare un ciclo di sviluppo iterativo che ordini gli obiettivi come di seguito: 1 make it run (garantire il funzionamento); 2 make it right (garantire il rispetto dei requisiti); 3 make it fast (ottimizzare le prestazioni); 4 make it small (ottimizzare la struttura interna). La ricerca dell efficienza non impatta eccessivamente sulla buona progettazione dell architettura; il morale del gruppo di sviluppo rimane elevato e solo le ottimizzazioni realmente necessarie sono effettuate. 12 A1 Ciclo di vita e ingegneria del software

4 Un caso di studio: Advanced Trip Computer Le metodologie di progettazione e le tecniche di sviluppo illustrate nel seguito del testo saranno esemplificate in relazione a un caso di studio realistico: l analisi, progettazione, implementazione e verifica di un applicazione software denominata ATC (Advanced Trip Computer) che interfacci un dispositivo GPS e che nel corso di un viaggio effettuato con qualsiasi mezzo sulla superficie della Terra (a piedi, in auto, in treno, in barca o in nave) consenta in ogni momento di ottenere le seguenti informazioni: velocità e direzione attuale rispetto al Nord; distanza complessiva dal punto di partenza, tempo impiegato e velocità media; percorso effettuato dal punto di partenza in cui per ogni posizione siano note la data e l ora di passaggio. Sintesi Il ciclo di vita del software è l insieme della attività e delle azioni da intraprendere per realizzare un progetto software. Il modello «a cascata» (waterfall) del ciclo di vita del software prevede le seguenti fasi rigorosamente sequenziali (tra parentesi è indicato il relativo output): analisi (requisiti), progettazione (architettura), sviluppo (codice da verificare), verifica (codice da rilasciare) e manutenzione (versioni aggiornate del codice). L ingegneria del software è la disciplina tecnologica e gestionale relativa alla realizzazione sistematica e alla manutenzione di un prodotto o servizio software rispettando tempi e costi preventivati. Un processo di sviluppo è incrementale se il software che ne costituisce il risultato viene realizzato in versioni successive, ciascuna delle quali evolve dalla precedente accrescendone le funzionalità fino a soddisfare tutti i requisiti previsti. La realizzazione di varie versioni del software implica l iterazione delle tradizionali fasi di analisi, progettazione, implementazione e verifica. Le metodologie di sviluppo agili enfatizzano il ruolo del testing del software prodotto fino a teorizzare la predisposizione del codice di test prima ancora dello sviluppo del codice dell applicazione da realizzare (test-driven development). Inoltre le metodologie agili promuovano il refactoring: anche il codice sorgente che genera codice eseguibile corretto e conforme ai requisiti viene continuamente ristrutturato allo scopo di migliorarne la coerenza e la flessibilità in fase di manutenzione correttiva ed evolutiva. Il linguaggio di modellizzazione UML (Unified Modeling Language) è un formalismo grafico che consente di definire e documentare mediante vari tipi di diagrammi diversi aspetti di un sistema software, in particolare se realizzato secondo il paradigma a oggetti. I principali diagrammi previsti dalla versione attuale del linguaggio sono: casi d uso, classi, oggetti, stati, attività, sequenze e componenti. Le caratteristiche che concorrono alla qualità di un prodotto software sono: la funzionalità, l affidabilità, l usabilità, l efficienza, la manutenibilità e la portabilità. Un pattern è una soluzione a un problema ricorrente in un dato contesto della progettazione o dello sviluppo software; la documentazione di un pattern prevede: il nome, la definizione del problema, la descrizione del contesto e delle «forze» in gioco, la descrizione della soluzione e del contesto risultante dall applicazione del pattern. Sintesi 13