Nuova ricerca

Francesco GUERRA

Professore Ordinario
Dipartimento di Ingegneria "Enzo Ferrari"

Insegnamento: Ingegneria del Software e Lab.

Ingegneria Informatica (MO) (Offerta formativa 2020)

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

Propedeuticità obbligatorie: Inglese, Basi di Dati e Lab. Programmazione ad 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
Parte Teorica:
Gli obiettivi della specifica dei requisiti, gli input attesi e le modalità per generare le specifiche. Lo standard IEEE 830 per la specifica dei requisiti.
Parte Applicativa:
Scrittura di documenti SRS conformi allo standard IEEE830.
Uso dello use-case diagram UML per la rappresentazione dei requisiti.

2. Progettazione
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
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
Parte Teorica: Descrizione dei principali problemi connessi con la gestione delle configurazioni e post produzione del software. Tipi di licenze software.

Metodi didattici

Il corso comprende lezioni pratiche e teoriche che verranno svolte a distanza in modo (possibilmente) sincrono., Le lezioni si avvalgono dell’uso di slide rese disponibili agli studenti mediante la piattaforma dolly. Le lezioni 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 consiste di domande aperte e piccoli esercizi per la verifica delle parti teoriche e applicative del programma dell’insegnamento.
La tesina individuale ha lo scopo di descrivere il software prodotto nell’esame di Programmazione ad Oggetti. La descrizione dovrà contenere la specifica dei requisiti, descritta seguendo lo standard SRS (IEEE 830), e una descrizione del progetto attraverso opportuni diagrammi UML. La progettazione del software dovrà eventualmente essere rielaborata introducendo opportuni design pattern.

Se non sarà possibile svolgere la prova scritta in presenza, la prova scritta sarà sostituita da una prova svolta a distanza in cui verranno valutate le conoscenze sulla progettazione del software e da una breve prova orale in cui verrà valutata la conoscenza della parte teorica del corso.

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.