Concetti di base di ingegneria del software [Dalle dispense del corso «Ingegneria del software» del prof. A. Furfaro (UNICAL)] Principali qualità del software Correttezza Affidabilità Robustezza Efficienza Usabilità Verificabilità Manutenibilità Riparabilità Evolvibilità Riusabilità Portabilità Comprensibilità Interoperabilità 1
Ingegneria del software L ingegneria del software si occupa della creazione di sistemi software complessi Tali sistemi rimangono in servizio per molti anni e durante la loro vita subiscono numerose modifiche per: eliminare difetti migliorare caratteristiche introdurre funzionalità eliminare caratteristiche obsolete adattarli ad operare in ambienti differenti Princìpi chiave dell ingegneria del software Rigore e formalità Separazione degli interessi Modularità Astrazione Anticipazione del cambiamento Generalità Incrementalità 2
Ciclo di vita del software Il software subisce uno sviluppo dall idea iniziale di un possibile prodotto fino all implementazione ed alla consegna al cliente (ed in seguito durante la manutenzione) Il ciclo di vita del software è costituito da varie fasi Nel modello tradizionale, detto a cascata (waterfall), ogni fase ha un inizio ed una fine ben definiti Ogni fase termina con la produzione di un artefatto che viene trasferito alla fase successiva Processo di sviluppo del software Cerca di organizzare il ciclo di vita del software: definendo le attività coinvolte nella produzione del software stabilendo un ordine nell'esecuzione delle attività ed individuando le relazioni tra di esse Obiettivi del processo di sviluppo del software: standardizzazione predicibilità produttività elevata qualità del prodotto capacita di pianificare il tempo ed i costi di produzione 3
Attività del processo di sviluppo Corrispondono ai diversi stadi del ciclo di vita Studio di fattibilità Acquisizione, analisi e specifica dei requisiti Definizione e progettazione dell'architettura software Produzione di codice e test dei moduli Integrazione e test del sistema Rilascio, installazione e manutenzione Scopi dell analisi dei requisiti Capire gli obiettivi del sistema Documentare i requisiti da soddisfare Specificare le qualità richieste in termini di: funzionalità prestazioni facilità d'uso portabilità... 4
Analisi dei requisiti Che cosa è necessario Comprendere l'interfaccia tra l'applicazione ed il mondo esterno Comprendere il dominio applicativo Individuare i principali stakeholder (coloro che hanno un interesse nel sistema e che saranno responsabili della sua accettazione) Capire cosa essi si aspettano: Stakeholder differenti hanno punti di vista differenti L'ingegnere del software deve cercare di integrarli e riconciliarli Principi cruciali Separazione degli interessi Astrazione Modularizzazione orizzontale: strutturare il sistema come collezione allo stesso livello di astrazione Progettazione Il risultato di questa attività è la produzione di un documento di specifica di progetto La forma del documento segue standard che possono includere l'uso di una notazione quale UML Documento di specifica di progetto Descrive il sistema in termini di componenti, delle loro interfacce e delle relazioni tra di esse Registra le decisioni significative e le relative motivazioni 5
Rilascio, installazione e manutenzione Il software viene rilasciato ai clienti in due fasi: L'installazione definisce l'architettura del sistema a tempo di esecuzione, ad esempio stabilendo l'allocazione dei vari componenti su i nodi di una rete aziendale La manutenzione è la fase più costosa (60% del totale) Modello a cascata 6
Modello a cascata Vantaggi Il processo di sviluppo è soggetto a disciplina, pianificazione e gestione Svantaggi Lineare, rigido, monolitico Assenza di feedback Assenza di parallelismo Unica data di consegna Introduzione di feedback Alcuni modelli a cascata consentono di introdurre del feedback in modo disciplinato Il feedback è limitato tra una fase e quella successiva Modelli incrementali Il progettista dovrebbe accettare il fatto che i fallimenti di una versione dell'applicazione comportino il bisogno di rifare parte dell'applicazione Secondo il principio «Do it twice» (Brooks, 1995), la prima versione di un prodotto viene vista come un test Tale idea è alla base dei modelli evolutivi o incrementali Un modello di processo evolutivo è un modello le cui fasi consistono in versioni incrementali di un prodotto software con una direzione evolutiva determinata dall'esperienza pratica (Boehm, 1988) 7
UML UML è una famiglia di notazioni grafiche Servono a supportare la descrizione ed il progetto di sistemi software Sono particolarmente adatte a sistemi realizzati con il paradigma orientato agli oggetti UML è uno standard relativamente aperto controllato dall'object Management Group (OMG) UML UML2 definisce 13 tipi di diagrammi La sintassi dei diagrammi non è molto rigida: si possono usare elementi di un tipo di diagramma all'interno di un altro Lo standard UML indica quali elementi sono tipicamente inclusi in determinati diagrammi 8
Diagrammi UML Casi d'uso Classi Sequenza Oggetti Package Deployment Macchine a stati Attività Comunicazione Struttura composita Componenti Interazione generale Temporizzazione Diagrammi dei casi d uso Uno scenario è una sequenza di passi che caratterizzano una particolare interazione tra utente e sistema Un caso d'uso è un insieme di scenari che hanno in comune lo scopo finale dell'utente Uno scenario è una possibile «esecuzione» (istanza) di un caso d'uso. Gli utenti sono rappresentati per mezzo del concetto di attore Un attore rappresenta un ruolo interpretato da un'entità esterna (un utente umano, un sistema esterno) nei confronti del sistema Un singolo attore può partecipare a più casi d'uso; un singolo caso d'uso può coinvolgere più attori 9
Diagrammi dei casi d uso Generalizzazioni tra casi d uso 10
Generalizzazione tra attori Estensioni tra casi d uso 11
Diagrammi delle classi Il diagramma delle classi è il diagramma UML più ampiamente utilizzato Si presta a rappresentare il maggior numero di concetti Descrive il tipo degli oggetti che fanno parte del sistema e le varie tipologie di relazioni tra di essi Mostra le proprietà e le operazioni (metodi) delle classi ed i vincoli tra gli oggetti istanze delle classi UML usa il termine caratteristica (feature) per indicare sia le proprietà che le operazioni di una classe Diagrammi delle classi 12
Proprietà/associazioni Proprietà/associazioni 13
Proprietà/associazioni Generalizzazione 14
Interfacce e classi astratte Associazioni ricorsive 15