Ingegneria del software – 1 - Una disciplina per la realizzazione di sistemi software così impegnativi da richiedere lavoro di gruppo - Produrre “in grande” (per dimensione e/o volume) - Assicurare la qualità dei prodotti - Garantire l’efficienza della produzione - Molti sistemi esistono in versioni multiple - Alcune devono operare per molti anni - Esistono svariate tipologie di prodotti software - Su commessa - forma, contenuto e funzione fissate dal cliente - Pacchetto - forma, contenuto e funzione idonee alla replicazione - Componente - forma, contenuto e funzione adatte alla composizione - Servizio (su sistemi e/o dati) - forma, contenuto e funzione fissate dal problema Ingegneria del software – 2 - Durante il proprio ciclo di vita molti sistemi vengono sottoposti a diverse forme di manutenzione - Correttiva: per correggere difetti eventualmente rilevati - Adattativa: per adattare il sistema a requisiti modificati - Evolutiva: per aggiungere funzionalità al sistema - La manutenibilità è una qualità essenziale! - Come ottenerla, come garantirla? Ingegneria del software – 3 - I progetti software sono spesso in ritardo - Difficoltà nelle fasi iniziali - Cambi inattesi di piattaforma e tecnologia - Difetti residui nel prodotto finale - Ed a volte falliscono clamorosamente - Per obsolescenza prematura - Per incapacità od impossibilità di completare - Per esaurimento dei finanziamenti Ingegneria del software – 4 - Riuscire a soddisfare obiettivi prefissati entro limiti certi di tempo e di sforzo - L’applicazione di principi ingegneristici al software è compito arduo - Mancano base matematica solida e parametri tecnici certi - Disciplina prevalentemente basata su un ciclo virtuoso esperienza - sistematizzazione - Conferenza NATO a Garmisch (D) - 7-11 ottobre 1968: nasce la disciplina Definizione 1: IEEE - Il software è un prodotto con un proprio ciclo di vita - Il suo trattamento richiede un approccio sistematico Definizione 2: Fairley - Enfasi sulla disciplina gestionale - Controllo di costi, tempi, risorse - Controllo di qualità: costi contenuti e risultati definiti Figura professionale – 1 - Software engineer - programmatore - Il programmatore - Figura professionale dominante negli anni pionieristici dell’informatica (’50-’70) - Scrive programmi per se stesso, da solo, sotto la propria responsabilità tecnica - svolge un’attività creativa fortemente personalizzata - “Bomba logica” contro il licenziamento Figura professionale – 2 - Il software engineer - Realizza parte di un sistema complesso, che potrà essere usato, completato e modificato da altri - Deve guardare e comprendere il quadro generale nel quale il suo sistema di colloca - La dimensione “sistema” include, ma non si limita al software - Deve operare compromessi intelligenti e lungimiranti tra visioni e spinte contrapposte - Costi - qualità. Risorse - disponibilità. … Un principio cardine – 1 - Frederick P. Brooks, Jr. Computer Magazine, aprile 1987 No Silver Bullet. Essence and Accidents of Software Engineering - Distingue tra problematiche essenziali … - Specifica, realizzazione, verifica di prodotti software - … e problematiche accidentali - Gli strumenti e le tecniche per la rappresentazione e la verifica di accuratezza di rappresentazione delle problematiche essenziali Un principio cardine – 2 - L’evoluzione tecnica e tecnologica può rendere sempre più agevole affrontare i problemi accidentali - Tuttavia, nessuna soluzione tecnica o tecnologica renderà mai nullo l’impegno concettuale, di astrazione, di analisi, di rigore (etc.!) necessario per affrontare i problemi essenziali - Non ci può essere alcuna “soluzione finale” Un principio cardine – 3 - L’intuizione (ben argomentata) di Brooks ci invita a guardare con giusto scetticismo ad ogni slogan commerciale che attribuisca a strumenti tecnici o tecnologie la capacità intrinseca di risolvere problemi essenziali dell’informatica! Relazione con altre discipline - L’ingegneria del software porta in sé relazioni strette con svariate discipline sia informatiche che non - Linguaggi di programmazione - Architettura degli elaboratori - Hardware, sistemi operativi, basi di dati - Scienze gestionali (del tempo, delle risorse, delle persone) - Ingegneria dei sistemi Libro di testo – 1 - I libri esistenti si dividono in due categorie - Teorici : trattano la materia in modo privo di riflessi di esperienza concreta - Principi esposti, ma troppo spesso non vissuti - Esperienziali : espongono l’esperienza degli autori, ma spesso senza relazionarla in modo convincente alla visione astratta del problema e della disciplina - Eccessiva enfasi sugli aspetti accidentali - Non utilizzeremo né gli uni né gli altri Libro di testo – 2 - Useremo invece: - Guide to the Software Engineering Body of Knowledge IEEE Computer Society Software Engineering Coordinating Committee versione 16 febbraio 2005, http://www.swebok.org - Lo SWEBOK ci aiuterà a familiarizzarci con le 10 aree di conoscenza della disciplina Libro di testo – 3 Libro di testo – 4 - Validi testi di consultazione - Ian Sommerville Software Engineering, 7th ed. Addison Wesley (Pearson Education) 2004 - Jim Arlow, Ila Neustadt UML 2 and the Unified Process – Practical Object-Oriented Analysis and Design, 2nd ed. Addison Wesley (Pearson Education), 2005 Problematiche essenziali – 1 - Realizzazione - Strategie di analisi e di progettazione - Tecniche per la comprensione e la soluzione di un problema - Top-down, bottom-up, progettazione modulare, OO - Linguaggi di specifica e progettazione - Strumenti formali per la definizione di sistemi software - UML, Reti di Petri, Z, OMT - Ambienti di sviluppo - Strumenti per analisi, progettazione e realizzazione - Strumenti tradizionali, CASE, RAD Problematiche essenziali – 2 - Processo software - Organizzazione e gestione dei progetti - Metodi di composizione dei gruppi di lavoro - Strumenti di pianificazione, analisi, controllo - Cicli di vita del software - Definizione e correlazione delle attività - Modelli ideali di processo di sviluppo - Modelli del processo di sviluppo - Norme per la definizione delle attività - Strumenti per la definizione dei processi Problematiche essenziali – 3 - Qualità del software - Metodi di verifica e controllo - Metodi di verifica, criteri di progettazione delle prove - Controllo della qualità, valutazione del processo di sviluppo - Modelli di qualità - Definizione di caratteristiche della qualità - Valutazione dei prodotti - Metriche software - Unità di misura, scale di riferimento, strumenti - Indicatori di qualità Progetto didattico – 1 - Un progetto didattico impegnativo da svolgere in gruppo - Riconduce ad unità i 2 moduli del corso IS - Aiuta ad esplorare in forma esperienziale le 3 dimensioni fondamentali della disciplina IS - 6 persone per gruppo - Circa 90 ore di impegno individuale Progetto didattico – 2 - Dimensione 1: attività di gruppo - Ripartita, coordinata, regolata e controllata - Dimensione 2: analisi del problema - Al di là degli aspetti puramente realizzativi - Attenzione alla tipologia degli utenti, all’ambito d’uso, alle risorse disponibili, alle evoluzioni future, … - Dimensione 3: disciplina - Adesione rigorosa ad una disciplina di conduzione del progetto