INGEGNERIA ELETTRICA ELETTRONICA E INFORMATICAIngegneria informaticaAnno accademico 2025/2026
9797565 - SOFTWARE DESIGN AND WEB PROGRAMMING A - L
Modulo ELEMENTI DI INGEGNERIA DEL SOFTWARE
Docente: Orazio TOMARCHIO
Risultati di apprendimento attesi
Il modulo presenta i principi, i
metodi e gli strumenti principali dell’Ingegneria del Software, settore
dell’informatica dedicato allo studio delle metodologie, delle ricerche e degli
strumenti utilizzati nella produzione industriale del software.
In particolare il modulo 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 ed alla specifica dei requisiti, alla definizione dell'architettura
di sistema, al progetto, ed al testing. Vengono anche descritti alcuni dei più
diffusi design pattern ed il loro ruolo nella progettazione e sviluppo del
software. Ampio spazio viene dato al linguaggio UML, standard di riferimento
per la modellazione visuale dei sistemi software.
Gli obiettivi formativi del
modulo, declinati secondo i descrittori di Dublino sono:
Conoscenza e capacità di comprensione (knowledge and
understanding)
- Conoscere i principi, le metodologie e gli
strumenti principali nei processi di sviluppo del software, con particolare
riferimento all’analisi ed alla specifica dei requisiti, alla definizione
dell'architettura di sistema, al progetto, ed al testing
- Conoscere alcuni dei più diffusi design pattern
e comprendere il loro ruolo nella progettazione e sviluppo del software
- Conoscere la notazione standard UML per la
modellazione dei sistemi software
Capacità di applicare conoscenza e comprensione (applying
knowledge and understanding)
- Saper progettare un sistema informatico con
architettura mediamente complessa, pianificando le varie attività dei processi
del ciclo di vita del software e producendo documenti in accordo agli standard
del settore
- Saper modellare le diverse viste di un sistema
software utilizzando la notazione standard UML
- Saper riconoscere quando e quali design pattern
applicare durante la progettazione di un sistema software
Autonomia di giudizio (making judgements)
- Lo studente sarà in grado di valutare le diverse
scelte progettuali nel corso dello sviluppo di un sistema informatico,
identificando le soluzioni più indicate nel rispetto dei requisiti e degli
interessi manifestati dagli stakeholders
Abilità comunicative (communication skills)
- Lo studente acquisisce la conoscenza delle
notazioni standard per la modellazione di un sistema software, che lo rendono
in grado di interagire e comunicare al meglio all'interno di un team di
sviluppo software
Capacità di apprendimento (learning skills)
- Lo studente è in grado di apprendere ed
applicare nuovi modelli di sviluppo del software che si basino sulle fasi
fondamentali analizzate durante il corso
Modalità di svolgimento dell'insegnamento
Il corso prevede come metodo di insegnamento:
- le lezioni frontali per acquisire le conoscenze teoriche e metodologiche della disciplina
- lo svolgimento di esercitazioni proposte dal docente per acquisire la capacità di risolvere i problemi, applicare la conoscenza e le metodologie di progettazione studiate e utilizzare degli ambienti di sviluppo software.
Il docente propone, inoltre, delle esercitazioni (homework) che consistono nella soluzione di un problema progettuale che gli studenti devono affrontare in gruppi in modo autonomo, che vengono successivamente corrette e/o discusse in aula.
Qualora l'insegnamento venisse impartito in modalità mista o a distanza potranno essere introdotte le necessarie variazioni rispetto a quanto dichiarato in precedenza, al fine di rispettare il programma previsto e riportato nel syllabus.
Prerequisiti richiesti
- Fondamenti di programmazione
- Programmazione orientata agli oggetti
Frequenza lezioni
Frequenza non obbligatoria ma fortemente consigliata
Contenuti del corso
- Concetti e definizioni di base dell'Ingegneria del Software (4h teoria)
- Introduzione. Origini e motivazioni
dell'Ingegneria del Software. Definizioni di base: prodotti software,
caratteristiche generali dei prodotti software. La modellazione del software
con UML.
- Ciclo di vita del software. (4h teoria)
- Processi per lo sviluppo del software: modello a
cascata, modelli iterativi, modelli agile.
- Analisi e specifica dei requisiti (2h teoria +
4h esercitazioni)
- Il concetto di requisito. Requisiti funzionali e
non funzionali. Attività di definizione, analisi e specifica dei requisiti. Modellare
i requisiti con i casi d'uso.
- Analisi e Progettazione software (8h teoria + 14
ore esercitazioni)
- Analisi orientata agli oggetti. Modello di
dominio. La modellazione di dominio con i diagrammi di classe. Diagrammi di
sequenza di sistema. Contratti delle operazioni.
- Cenni su architetture software. Modelli per la
strutturazione dei sistemi software (pattern architetturali).
- Progettazione del software orientata agli
oggetti. Diagramma delle classi. Diagrammi di interazione. I pattern GRASP per
la progettazione software. Parametri di qualità di un progetto software.
- Ulteriori diagrammi UML: diagramma degli stati,
diagrammi di attività, diagrammi dei componenti e di deployment.
- Design pattern (5h teoria + 5 h esercitazioni)
- Ruolo dei design pattern nella progettazione e
sviluppo del software. Pattern GRASP. Pattern GoF: creazionali,
strutturali, comportamentali.
- Il testing del software (3h teoria + 3h
esercitazioni)
- Il controllo di qualità dei prodotti software:
la verifica e la validazione. Il testing: obiettivi e concetti generali.
Tipologie di testing: test unitari, tet di integrazione, test di sistema. Strategie
di testing: black box testing (funzionale) e white box testing (strutturale). Tool
per il testing unitario: jUnit.
- Gestione di un progetto software (2h teoria + 4h
esercitazioni)
- Software configuration management. Il concetto
di versioning. Strumenti per il versioning: SVN e Git. Gestione delle build,
release e branch.
- Strumenti per il build di un progetto software:
Maven.
- Continuous integration e cenni di DevOps.
Testi di riferimento
- [LAR]
- Craig Larman
Applicare UML e i pattern – Analisi e progettazione orientata agli oggetti
Pearson Education Italia
- [FOW]
- M.
Fowler
UML Distilled
Pearson Education Italia
- [GAM]
- Gamma, E., Helm, R., Johnson, R. e Vlissides, J.
Design Patterns: elementi per il riuso di software a oggetti
Addison Wesley
- Appunti e dispense fornite dal docente su alcuni
argomenti (pubblicate sul canale MS Teams del corso: codice 4agcmdz)
Programmazione del corso
| | Argomenti | Riferimenti testi |
| 1 | Introduzione all'Ingegneria del Software | Dispense del docente |
| 2 | Overview Analisi e Progettazione orientata agli oggetti | [LAR] Cap. 1 |
| 3 | Ciclo di vita e Processi di sviluppo del Software | [LAR] Cap. 2 e 3 - [FOW] Cap. 2 |
| 4 | La modellazione del software. Introduzione a UML | [FOW] Cap. 1 |
| 5 | Analisi e specifica dei requisiti | [LAR] Cap. 6 |
| 6 | Modellare i requisiti con i casi d'uso | [LAR] Cap. 7 - [FOW] Cap. 9 |
| 7 | Analisi orientata agli oggetti | [LAR] Cap. 12 |
| 8 | Modello di dominio | [LAR] Cap. 12 - [FOW] Cap. 3 |
| 9 | Diagrammi di sequenza di sistema | [LAR] Cap. 13 |
| 10 | Contratti delle operazioni | [LAR] Cap. 14 |
| 11 | Architetture software | [LAR] Cap. 15-16 |
| 12 | Progettazione del software orientata agli oggetti | [LAR] Cap. 16-17 |
| 13 | Diagrammi di Interazione in UML | [LAR] Cap. 18 - [FOW] Cap. 4-12 |
| 14 | Diagrammi delle Classi in UML | [LAR] Cap. 19 - [FOW] Cap. 3-5 |
| 15 | I pattern GRASP per la progettazione software | [LAR] Cap. 20-21 |
| 16 | Ulteriori diagrammi UML: diagramma degli stati, diagrammi di attività | [LAR] Cap. 31-32 - [FOW] Cap. 10-11 |
| 17 | Ulteriori diagrammi UML: diagrammi dei componenti e di deployment | [LAR] Cap. 31-32 - [FOW] Cap. 10-11 |
| 18 | I design pattern | [GAM] Cap. 1 |
| 19 | Pattern GoF: creazionali, strutturali, comportamentali | [GAM] Cap. 3-4-5 |
| 20 | Il testing del software | Dispense del docente |
| 21 | Tipologie di testing. Strategie di testing | Dispense del docente |
| 22 | Tool per il testing unitario: jUnit | Dispense del docente e riferimenti Web |
| 23 | Gestione della configurazione del software. Git | Dispense del docente e riferimenti Web |
| 24 | Strumenti per il build di un progetto software: Maven | Dispense del docente e riferimenti Web |
| 25 | Continuous integration e cenni di DevOps | Dispense del docente |
Verifica dell'apprendimento
Modalità di verifica dell'apprendimento
L’esame consiste in:
- Prova scritta consistente in:
- Esercizi di Analisi/Progettazione e modellazione software
- Quesiti teorici a risposta aperta
- Prova orale facoltativa
- Partecipazione alle esercitazioni progettuali durante il corso e la consegna degli appositi homework proposti daranno luogo fino ad un massimo di 2 punti aggiuntivi sul voto finale
Esempi di domande e/o esercizi frequenti
Esercizi tipici saranno pubblicati sul canale MS Teams del corso
English version