Nuova ricerca

Francesco GUERRA

Professore Ordinario
Dipartimento di Ingegneria "Enzo Ferrari"

Insegnamento: Ingegneria del Software e Lab.

Ingegneria Informatica (MO) (Offerta formativa 2021)

Obiettivi formativi

Fornire una conoscenza di base dei modelli, dei linguaggi e delle tecnologie per la specifica dei requisiti, la progettazione, l’implementazione, il testing, la distribuzione e manutenzione di sistemi software.

Prerequisiti

Conoscenza di principi di programmazione a oggetti

Programma del corso

Il corso prevede di fornire le principali conoscenze teoriche, tecnologiche e applicative, relativamente alle seguenti fasi in cui può essere suddiviso il ciclo di vita di un sistema software: specifica dei requisiti, progettazione, implementazione, testing, distribuzione e manutenzione. In particolare:

1. Specifica dei requisiti [2.5 CFU]
Parte Teorica:
Gli obiettivi della specifica dei requisiti, gli input attesi e le modalità per generare le specifiche.
Parte Applicativa:
Uso dello use-case diagram UML per la rappresentazione dei requisiti.

2. Progettazione [4.5 CFU]
Parte Teorica:
Gli obiettivi della fase di progettazione, definizione di progettazione di alto livello e di dettaglio. Esempi di stili architetturali. Decomposizione funzionale. Object Relational Mapping: definizione e problematiche.
Definizione delle caratteristiche di qualità della progettazione. Introduzione di metriche per la valutazione del software. Definizione di coesione e accoppiamento dei moduli software.
Parte Applicativa:
Uso di diagrammi UML per la descrizione del software
ORM: JPA e Hibernate
Uso di Design Patterns per la progettazione del software.

3. Implementazione, testing [1.5 CFU]
Parte Teorica:
Definire che cosa si intende per buona programmazione e identificazione di best practices. Refactoring del software. Testing del software e ispezione del codice. Introduzione di alcune tecniche di testing (Path Analysis, Boundary values analysis, …).
Parte Applicativa:
Junit: il framework per il testing di programmi Java
Overview di tecniche basilari di defensive programming
Maven e Git come supporto alla programmazione e gestione del software.

4. Distribuzione e manutenzione [0.5 CFU]
Parte Teorica: Descrizione dei principali problemi connessi con la gestione delle configurazioni e post produzione del software. Tipi di licenze software.

Metodi didattici

La materia viene insegnata attraverso lezioni frontali che si avvalgono dell’uso di slide rese disponibili agli studenti mediante la piattaforma dolly e di lezioni pratiche in laboratorio. Le lezioni frontali hanno l’obiettivo di fornire una conoscenza “teorica” di base della materia. Per ogni argomento trattato vengono inoltre resi disponibili attraverso la piattaforma dolly alcuni elementi di dettaglio (articoli scientifici, siti web specializzati) per chi approfondire ulteriormente gli argomenti trattati. Le lezioni pratiche hanno l’obiettivo di introdurre alcuni strumenti software specifici.

Testi di riferimento

Frank Tsui, Orlando Karam, Barbara Bernal, Software engineering (Third Edition), Jones & Bartlett Learning
Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra: Head First Design Patterns, O'Reilly Media 2014
Erich Gamma, Ralph Johnson, Richard Helm, John Vlissides: Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1994
Martin Fowler, UML Distilled: A Brief Guide to the Standard Object Modeling Language , Pearson Addison Wesley
Martina Seidl, Marion Scholz, Christian Huemer, Gerti Kappel: UML @ Classroom - An Introduction to Object-Oriented Modeling, Springer 2015

Verifica dell'apprendimento

L’apprendimento viene verificato attraverso una prova scritta e una tesina.
La prova scritta ha la durata di due ore e consiste di
- 3-4 domande aperte per verificare la parte nozionistica del corso. Questa parte incide circa 30% sulla valutazione complessiva;
- esercizi di design di applicazioni software (viene fornito un problema in formato testuale e viene richiesto di progettare attraverso use case diagram, class diagram, sequence diagram, package diagram, activity diagram l’applicazione software di supporto. Viene richiesto l’uso di design pattern nello sviluppo dell’applicazione. Questa parte incide circa il 55% sulla valutazione complessiva;
- esercizi di testing (viene fornita una funzione e richiesto quali test effettuare). Questa parte incide circa il 55% sulla valutazione complessiva.
La tesina individuale ha lo scopo di descrivere in dettaglio un prodotto software. Lo studente potrà descrivere l’applicazione sviluppata nell’esame di Programmazione ad Oggetti. La descrizione dovrà contenere una breve specifica dei requisiti, e una descrizione del progetto attraverso opportuni diagrammi UML. La progettazione del software dovrà opportunamente essere rielaborata introducendo opportuni design pattern. La tesina viene valutata secondo criteri di precisione e correttezza (25%), completezza nel design e uso di pattern (50%); effetto wow (25%).

Risultati attesi

1. Conoscenza e comprensione:
Le lezioni frontali forniranno allo studente la capacità di conoscere e comprendere i maggiori trend tecnologici, scientifici e applicativi connessi con l’ingegneria del software

2. Capacità di applicare conoscenza e comprensione
Tramite le lezioni pratiche in laboratorio lo studente saprà descrivere le specifiche dei requisiti e il design di un sistema software. Lo studente sarà in grado di progettare un software utilizzando pattern consolidati in letteratura.

3. Autonomia di giudizio
Lo studente sarà in grado di valutare se un software è stato specificato, progettato e sviluppato seguendo metodologie di qualità consolidate.

4. Abilità comunicative
Lo studente sarà in grado di raccogliere e rappresentare le specifiche tecniche di un software.

5. Capacità di apprendimento
Lo studente disporrà di una conoscenza di base tale da permettergli approfondimenti successivi sui temi della progettazione del software.