Programma preliminare
Obiettivo
Prerequisiti
Contenuti
Libri
Materiale
didattico
L'obiettivo del corso è far conoscere
principi, metodi e tecniche dell'ingegneria del software e sviluppare competenze
applicabili allo sviluppo ed evoluzione di grandi sistemi software, aventi
caratteristiche di qualità ed economicità. Il corso utilizza
lo studio di un caso che illustra i problemi e gli esiti delle differenti
attività su un sistema software realizzato sia in versione C (mediante
approccio orientato alle funzioni) che in versione C++ (mediante approccio
orientato agli oggetti).
Fondamenti di Informatica I, II, III, Basi
di Dati; conoscenza base dei linguaggi di programmazione C e C++.
1. Introduzione
Software: definizione e caratteristiche
essenziali; ingegneria del software: definizione, fattori caratterizzanti,
il problema della qualità del software, obiettivo e strategia; sviluppo
per fasi: caratteristiche e fasi fondamentali.
2. Modelli di processo software
Modelli di processo software. I modelli
di ciclo di vita del software: modello a cascata, modelli basati su prototipo,
modelli evolutivi ed incrementali.
3. Analisi e Specifica dei Requisiti
Caratteristiche; problemi; ruolo del documento
SRS; processo di specifica dei requisiti; approcci alla comprensione del
problema; la definizione delle specifiche; caratteristiche di un buon SRS,
componenti base, standard IEEE, validazione dei requisiti, classificazione
dei difetti.
4. Analisi dei Casi d'Uso
Generalità; terminologia; il modello
dei casi d'uso; specifica di un caso d'uso; passi per la costruzione di
un modello dei casi d'uso.
5. Analisi Strutturata
Caratteristiche principali; diagrammi
di flusso dei dati (DFD), notazione dei DFD, DFD a livelli, passi per la
costruzione di un modello DFD, dizionario dei dati.
6. Analisi Orientata gli Oggetti
Caratteristiche principali; concetti fondamentali:
oggetto, classe, attributo, operazione, associazione, aggregazione, generalizzazione
ed ereditarietà; notazione UML; passi per la costruzione di un modello
delle classi.
7. Progettazione
Caratteristiche e principi fondamentali:
astrazione, modularità, information hiding, decomposizione; livelli
di progettazione: high-level design, low-level design, data-design; documentazione
di progetto.
8. Progettazione Strutturata
Caratteristiche; notazione grafica: carte
di struttura; criteri di progettazione e valutazione della modularità:
coesione e accoppiamento; misure morfologiche ed euristiche di progettazione;
passaggio dal modello DFD alle carte di struttura: analisi delle transazioni
e analisi delle trasformazioni.
9. Progettazione Orientata agli Oggetti
Generalità ed obiettivi; concetti
base: oggetti, classi, stato di un oggetto, relazioni; ereditarietà
e polimorfismo; legami statici e dinamici; classi astratte; metodologie
di progettazione: l’esempio di OMT; diagrammi di interazione: diagramma
di sequenza e di collaborazione; diagrammi delle attività. La specifica
di sistemi Orientati agli Oggetti mediante UML.
10. Testing
Definizioni; problemi del testing; criterio
di selezione dei casi di test; test funzionale: suddivisione in classi
di equivalenza e analisi valori limite; test strutturale: basato sul flusso
di controllo e sul flusso dei dati, test dei cammini indipendenti; valutazione
dei risultati del test; criterio di terminazione del testing; livelli di
test: test d’unità, d’integrazione, di sistema, di accettazione;
test di programmi OO; pianificazione, specifica, esecuzione e rapporti
del test.
11. Manutenzione
Generalità sulla manutenzione del
software; leggi dell’evoluzione del software; classi di manutenzione; modelli
di processo per la manutenzione del software: riparazione veloce e miglioramento
iterativo.
Altri libri consigliati
Roger S. Pressman, Principi di Ingegneria del Software, terza edizione,
McGraw Hill
C. Ghezzi, et al. ‘Ingegneria del Software’, Mondadori ed.
James Rumbaugh and Michael Blama, Modelli e Progetti Object-Oriented, Jackson
M. Fowler, UML Distilled, Addison-Wesley