INFORMAZIONI SU

Ingegneria del software

Programma dell'insegnamento - Corso di laurea in Informatica

Docente

  • Prof. Carlo Tasso

Indirizzo e-mail
carlo.tasso@uniud.it

Indirizzo Pagina Web Personale
Sito Web http://www.dimi.uniud.it/tasso/

Crediti

6 CFU

Finalità

Obiettivo del corso è l'introduzione ai concetti di base dell'Ingegneria del Software, settore dell'informatica dedicato allo studio delle metodologie, delle tecniche e degli strumenti utilizzati nella produzione industriale del software. In particolare il corso descrive vari modelli del processo di sviluppo del software presentando i problemi relativi alle varie fasi del ciclo di vita, con particolare riferimento all'analisi dei requisiti e alla specifica, al progetto, al testing, agli standard ed al controllo di qualità.

Programma

Concetti e Definizioni di Base dell'Ingegneria del Software Introduzione.
Origini e motivazioni dell'Ingegneria del Software. Definizioni di base: prodotti software, caratteristiche generali dei prodotti software, distribuzione dei costi. Processi per lo sviluppo del software, modello dei processi: processi primari, di supporto e di gestione; ciclo di vita, metodologia di sviluppo. Modelli generali dei processi: modello a cascata; sviluppo incrementale; modello a spirale di Boehm, gestione del rischio; discussione ed esempi. Visibilità del processo di sviluppo. Ingegneria dei sistemi. Definizioni e problemi. Ambiente di un sistema. Modello contractor/sub-contractor per l'acquisizione del sistema. Fasi del processo di ingegnerizzazione dei sistemi: definizione dei requisiti, progetto, sviluppo dei sotto-sistemi, integrazione, installazione, funzionamento, evoluzione e dismissione. Obiettivi del sistema. Architettura di un sistema, componenti funzionali. Fattori umani, problematiche relative all'interfaccia affidabilità, resilienza.

Gestione di un Progetto Software.
Gestione di un progetto software. Attività di gestione. Personale. Pianificazione del progetto: piano di progetto, struttura e contenuti. Concetti di milestone e derivable. Schedulazione del progetto; rappresentazioni grafiche: diagramma delle attività, dei tempi, del personale. Cammino critico.

Requisiti di un sistema Software.
Ingegnerizzazione dei requisiti. Definizione del concetto di requisito. Attività di definizione, analisi e specificazione dei requisiti. Processo di ingegnerizzazione dei requisiti. Documentazione dei requisiti. Validazione dei requisiti: review sui requisiti, parametri di validazione. Evoluzione dei requisiti: requisiti duraturi, volatili, mutabili emergenti, consequenziali, di compatibilità. Analisi dei requisiti: definizione e processo d'esecuzione.

Tecniche di modellizzazione dei sistemi Modellizzazione dei sistemi. Modelli data-flow (DFD):
definizioni ed esempi. Inadeguatezza dei modelli DFD a rappresentare aspetti di controllo e di sincronizzazione. Automi a stati finiti: definizioni ed esempi. Reti di Petri posti-transizioni: definizioni, esempi, valutazioni. Modelli object oriented: modelli d'eredità, di aggregazione e di utilizzo dei servizi. Linguaggio UML e principali diagrammi. Data dictionary.

Definizione dei requisiti e specificazione del software Definizione e specificazione dei requisiti: modalità e tecnica di redazione. Uso di linguaggio naturale e di moduli in linguaggio strutturato. Linguaggi per la descrizione dei programmi (PDL). Definizione dei requisiti per interfacce software. Requisiti non funzionali, classificazione. Specificazione del software: definizione. Criteri di accettazione. Relazioni tra specificazione e progetto. Il ruolo delle specifiche formali.

Prototipizzazione del Software Prototipizzazione: definizione. Motivazioni, obiettivi, approcci. Prototipizzazione: approccio evolutionary, approccio throw-away, approccio incrementale. Strumenti per la prototipizzazione. Prototipizzazione dell'interfaccia utente.

Generalità e Progetto Architetturale Progetto del software.
Stadi del processo di progetto. Metodi di progetto: approccio Top-down, metodi strutturati, strategie funzionali e object oriented. Documentazione del progetto. Parametri di qualità del progetto: coesione, accoppiamento,comprensibilità e adattabilità. Porgetto architetturale: definizione, sistema, sotto-sistema, modulo. Modelli per la strutturazione dei sistemi software: modello basato su data base condiviso, modello client-server, concetto di tipo di dati astratto e modello basato su Macchine Astratte. Modelli del controllo; controllo centralizzato: modello call-return e modello basato su manager di controllo; controllo basato sugli eventi: modello broadcast e modello a interrupt. Modelli di scomposizione in moduli: data-flow e object oriented. Architetture specifiche del dominio: generiche e di riferimento, esempi. Architetture distribuite, architetture 2- e 3-tier, thin e fat client, middleware.

Progettazione Object-Oriented
Definizioni di base della tecnologia object-oriented. Progettazione object-oriented (OOD): caratteristiche e vantaggi. Analisi object-oriented e OOD: differenze. Identificazione di Oggetti e Classi basata sul linguaggio naturale. Interfacce tra oggetti (esempi in ADA e C++). Il ruolo dell'astrazione. Classi riusabili, astrazione, standardizzazione e altri criteri di progettazione delle classi. Gerarchia di Aggregazione. Diagramma dei servizi. Progettazione dell'interfaccia tra oggetti. Diagrammi UML per la progettazione OO.

Progettazione funzionale
Progettazione funzionale: definizione. Progettazione data-flow. Decomposizione strutturale e diagrammi di struttura. Trasformazione dei diagrammi data-flow in diagrammi di struttura. Progetto di dettaglio (o esecutivo). Modello fetch&execute per i sistemi interattivi. Confronto delle diverse strategie di progetto.

Verifica e Validazione
Processi di supporto. Il controllo di qualità dei prodotti software: la verifica e la validazione, definizioni secondo ISO 12207. Verifica e validazione statiche e dinamiche. Testing e ispezione. Validazione tecnica e sociale. Obiettivi e problematiche generali del testing. Testing statistico e di identificazione dei difetti. Debugging.

Testing del Software
Processo di debugging. Pianificazione e organizzazione dei test. Strategie di test. Il test incrementale. La metodologia Big Bang. Strategie di testing top down e bottom up. Test dinamico black box (funzionale) e white box (strutturale). Il concetto di test case. Dati di test. Classi di equivalenza. La verifica statica. Il processo di ispezione.

Introduzione all'Dependability del Software
Definizione di dependability (fidatezza) e sue dimensioni: affidabilità, disponibilità, sicurezza e protezione (safety). Concetto di affidabilità. Fallimenti, guasti, errori. Metriche di affidabilità. Unità di tempo: tempo di esecuzione, di calendario, cronometrico. Confronto del concetto di affidabilità per il software e per l'hardware. Distribuzione probabilistica delle misure di affidabilità. Classificazione delle conseguenze dei malfunzionamenti. Possibili usi delle misure di affidabilità.

Qualità del Software
Concetto di standard: standard de jure, defacto, aperto, proprietario. Il ruolo dell'ISO e delle organizzazioni nazionali. Definizione di qualità del SW secondo lo standard ISO 8402. Controllo di Qualità secondo ISO 9000. Modello di qualità del software secondo ISO 9126: parametri di funzionalità, affidabilità, usabilità, efficienza, manutenibilità, portabilità. Gestione della qualità. Politica di qualità. Sistema qualità, controllo e assicurazione di qualità. Scope e pianificazione delle attività di assicurazione della qualità. Qualità di un prodotto basata sulla qualità del processo di produzione. Review di qualità. Check di qualità ed azioni correttive. Documentazione dei review di qualità. Processo di valutazione e metriche dei parametri di qualità secondo ISO 9126. Standard ISO 9000 per la gestione ed assicurazione della qualità: ISO 9001, 9002, 9003 e 9004, manuale della qualità. Standard ISO 9000-3: linee guida per l'applicazione dello standard ISO 9001 al software. Certificazione di qualità ed accreditamento.

Standard sul Ciclo di Vita
Standard ISO 12207 sul ciclo di vita del software. Definizione dei vari processi software. Definizione dei ruoli degli esecutori dei processi: acquirente, fornitore, proprietario, sviluppatore, operatore, manutentore. Prospettiva contrattuale. Processi di monitoraggio e tailoring del ciclo vita.

Bibliografia

Ian Sommerville. Ingegneria del Software – 8^ Edizione, Pearson Addison Wesley, 2007. ISBN 978-88-7192-354-3.

Ian Sommerville, Software Engineering – 8thEdition, Addison-Wesley, Harlow, UK, 2006.

G. Guida, C. Tasso. Design and Development of Knowledge-Based Systems: from Life Cycle to Development Methodology. John Wiley & Sons, Chichester, UK, 1994.

Materiale didattico (slide, testi esami ed esercitazioni) disponibile sul sito MaterialeDidattico.unid.it

Modalità d'esame

Esame scritto e orale.