INGEGNERIA DEL SOFTWARE AVANZATA
Anno accademico e docente
Non hai trovato la Scheda dell'insegnamento riferita a un anno accademico precedente?
Ecco come fare >>
- English course description
- Anno accademico
- 2021/2022
- Docente
- MARCO ALBERTI
- Crediti formativi
- 6
- Periodo didattico
- Secondo Semestre
- SSD
- ING-INF/05
Obiettivi formativi
- Il corso è il secondo insegnamento di Ingegneria del Software. Ha in particolare l’obiettivo di presentare il processo di sviluppo del software ed alcuni metodi e strumenti disponibili nelle fasi di:
- analisi e specifica dei requisiti
- progettazione
- verifica
- manutenzione
- misura
dei sistemi software.
Le principali conoscenze acquisite sono relative alle metodologie utilizzabili per le fasi di sviluppo software sopra elencate, in particolare:
- strutturazione di un progetto di sviluppo software e relative fasi di sviluppo;
- definizione dell'architettura di sistema e dell'applicazione
- tecnologie software per lo sviluppo dei componenti
- convalida e verifica dei componenti e dell'applicazione
- pianificazione e misura di un progetto di sviluppo software.
Le principali abilità (ossia la capacità di applicare le conoscenze acquisite) saranno:
- capacità di condurre le fasi di analisi e specifica, progetto e testing del software, e capacità di misurarne il costo applicando metriche; capacità di utilizzare strumenti per il lavoro cooperativo, sistemi di modellazione orientata agli oggetti, sistemi di gestione delle versioni, sistemi di verifica e testing per codice a oggetti, e capacità di dare una valutazione preliminare del costo del software utilizzando metriche del software. Prerequisiti
- Questo insegnamento richiede come prerequisito la conoscenza di almeno un linguaggio di programmazione di alto livello (imperativo, o preferibilmente a oggetti), e capacità di programmazione.
Contenuti del corso
- - Introduzione all’Ingegneria del Software: visione d'insieme, qualità del software, principi dell'ingegneria del software
- Modelli di sviluppo
- Specifica: qualità e stili, specifiche operazionali, specifiche descrittive
- Progettazione: modularizzazione, progettazione orientata agli oggetti, architetture, UML, design pattern
- Convalida (verifica): obiettivi e requisiti, test, analisi, esecuzione simbolica, integrazione, debugging
- Produzione: attività, processi software, manutenzione (evoluzione)
- Gestione: pianificazione di progetto, metriche del software, controllo di progetto, organizzazione, gestione dei rischi
- Strumenti: lavoro cooperativo, controllo delle versioni e delle dipendenze, di sviluppo. Relativamente a questi argomenti, si terranno esercitazioni laboratoriali pratiche e guidate su strumenti di comunicazione e condivisione, progettazione UML, Git come sistema di versioning, Maven come sistema di gestione delle dipendenze di un progetto, JUnit e Mockito come strumenti per il testing. Metodi didattici
- Il corso comprende lezioni frontali in aula per alcuni argomenti, ed esercitazioni pratiche laboratoriali svolte in Laboratorio per gli argomenti legati agli strumenti di lavoro cooperativo, di progettazione con UML, di gestione delle versioni, di verifica e testing.
Modalità di verifica dell'apprendimento
- L’obiettivo della prova d’esame è la verifica del livello di raggiungimento degli obiettivi formativi precedentemente indicati.
L'esame può essere sostenuto in lingua inglese, con avviso al docente almeno 7 giorni prima.
L’esame è organizzato in due parti:
- una prova scritta, con domande aperte sui contenuti del corso, ed esercizi su specifiche, testing, e metriche. Durante lo svolgimento di tale prova non è concesso consultare testi, appunti o altra fonte di informazione. La prova scritta consiste di esercizi tesi a verificare il livello di conoscenza raggiunto su specifiche, tecniche di verifica e testing, metriche, modelli di sviluppo. Il punteggio massimo assegnato per tale prova è di 16 punti, con una soglia di sufficienza posta a 9/16;
- una presentazione e discussione di un progetto di sviluppo software (da concordare con il docente). Il punteggio assegnato è fino a ulteriori 16 punti. Il progetto può essere svolto congiuntamente con altri insegnamenti, e realizzabile singolarmente o in gruppo. La presentazione riguarda le metodologie e gli strumenti utilizzati pertinenti agli argomenti del corso, e la documentazione a corredo prodotta nello sviluppo del progetto software. Preventivamente alla discussione va consegnata una breve relazione o un file di presentazione. La valutazione di tale prova verifica il livello ragggiunto nella capacita' di condurre un (limitato) progetto software, definirne le specifiche, il progetto, lo sviluppo e la documentazione.
Il voto finale è dato dalla somma dei due punteggi ottenuti. Con punteggio superiore o uguale a 31, il voto finale è 30/30 e Lode. Testi di riferimento
- Le diapositive proiettate e discusse a lezione saranno pubblicate nel sito Web del corso. Sono disponibili anche testi e soluzioni di prove d'esame degli anni accademici precedenti, utili allo studente per raffinare e auto-valutare la propria preparazione.
Sono consigliati i seguenti testi:
Sommerville Ian: Ingegneria del Software. Decima Edizione, Pearson Education Italia, 2017, ISBN: 978-8891902245.
Sommerville Ian: Introduzione all'ingegneria del software moderna, Pearson Education Italia, 2021, ISBN: 978-8891915276
Ghezzi Carlo, Jazayeri Mehdi, Mandrioli Dino: Ingegneria del software. Fondamenti e principi; Seconda edizione, Pearson Education Italia, 2004, ISBN: 88-7192-204-2.
Per riferimento su Java:
Horstmann Cay, Java per Impazienti (Aggiornato a Java 9), Pearson, 2018.