48
SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI
REGGIO DI CALABRIA
Dati Generali
Periodo di attività
Syllabus
Obiettivi Formativi
Il corso di Ingegneria del Software mira a fornire i principi, le metodologie e le tecniche alla base delle diverse fasi di sviluppo e produzione del codice: pianificazione, modellazione e specifica, progettazione, implementazione, collaudo e verifica, valutazione, manutenzione. Gli studenti sono messi in condizione di condurre le principali attività previste dal ciclo di vita del software, a partire dalla specifica e/o dagli artefatti prodotti nelle fasi precedenti. Il corso fornisce gli strumenti teorici e le relative linee guida per affrontare ciascuna fase del ciclo di vita. È inoltre prevista una parte esercitativa, con l’obiettivo di fornire agli studenti elementi pratici per la progettazione di software complessi.
Prerequisiti
Conoscenza base di Java.
Metodi didattici
L'insegnamento è organizzato secondo la seguente ripartizione:
Lezioni frontali (26 ore): Esposizione dei concetti teorici con l'ausilio di slide e lavagna.
Esercitazioni in aula (22 ore): risoluzione guidata di problemi di progettazione software mediante l’uso di diagrammi UML, in particolare use case diagram, class diagram e sequence diagram; esercitazioni sull’uso di strumenti per la gestione e la condivisione del codice sorgente basati su Git; esercitazioni sui criteri di copertura del codice, svolte sia alla lavagna sia in ambiente Java mediante appositi strumenti di analisi della copertura; esercitazioni sui concetti di ereditarietà e polimorfismo; esercitazioni introduttive di analisi formale di protocolli di sicurezza tramite BAN Logic.
Verifica Apprendimento
Gli esami di accertamento e di valutazione consistono in:
- un progetto, da svolgersi singolarmente o in gruppo, per la progettazione di un sistema software secondo i principi illustrati nel corso;
- una prova scritta (2,5 ore) comprensiva di esercizi e domande teoriche, volta ad accertare la capacità di progettazione e di validazione dei sistemi software e di semplici protocolli di sicurezza;
- una prova orale, volta a discutere il progetto realizzato e la prova scritta ed accertare la comprensione degli argomenti teorici del corso.
Al termine della prova orale, allo studente viene attribuito un voto massimo 30/30.
Il voto finale sarà attribuito secondo il seguente criterio di valutazione:
30 e lode: conoscenza completa, approfondita e critica degli argomenti, eccellente proprietà di linguaggio, completa ed originale capacità interpretativa, piena capacità di applicare autonomamente le conoscenze per risolvere i problemi proposti;
28 - 30: conoscenza completa e approfondita degli argomenti, ottima proprietà di linguaggio, completa ed efficace capacità interpretativa, in grado di applicare autonomamente le conoscenze per risolvere i problemi proposti;
24 - 27: conoscenza degli argomenti con un buon grado di padronanza, buona proprietà di linguaggio, corretta e sicura capacità interpretativa, buona capacità di applicare in modo corretto la maggior parte delle conoscenze per risolvere i problemi proposti;
20 - 23: conoscenza adeguata degli argomenti ma limitata padronanza degli stessi, soddisfacente proprietà di linguaggio, corretta capacità interpretativa, più che sufficiente capacità di applicare autonomamente le conoscenze per risolvere i problemi proposti;
18 - 19: conoscenza di base degli argomenti principali, conoscenza di base del linguaggio tecnico, sufficiente capacità interpretativa, sufficiente capacità di applicare le conoscenze di base acquisite;
Insufficiente: non possiede una conoscenza accettabile degli argomenti trattati durante il corso.
Testi
- I. Sommerville. Ingegneria del Software, decima edizione., Pearson 2017.
- C. Larman, Applicare UML e i Pattern - Analisi e Progettazione orientata agli Oggetti, III ed. Prentice-Hall, 2005.
- Applicare UML e i pattern. Analisi e progettazione orientata agli oggetti. Ediz. MyLab, Object-Oriented Software Engineering Using UML, Patterns, and Java: Pearson New International Edition
- Bruegge, Bernd, and Allen A. Dutoit. Object-oriented software engineering; conquering complex and changing systems. Prentice Hall
- Usare UML. Ingegneria del software con oggetti e componenti
- P. Amman, J. Offutt. Introduction to software testing, Cambrigde Univerisity Press
- E. Gamma, R. Helm, R.Johnson, J.Vissides. Design patterns, Addison Wesley
- SRC Research Report 39. A Logic of Authentication. Michael Burrows, Martin Abadi, and Roger Needham. February 28, 1989
Contenuti
Programma del corso
Introduzione all'Ingegneria del Software (0.5 CFU)
Processo e prodotto. Ciclo di vita del software. Costo dello sviluppo software. Qualità esterna: Correttezza, Affidabilità, Usabilità, Scalabilità, Efficienza, Robustezza. Qualità interna: Riparabilità, Manutenibilità, Riusabilità, Portabilità, Verificabilità.
Ingegneria dei Requisiti (0.5 CFU)
Concetto di prodotto software. Analisi e specifica dei requisiti. Documento dei requisiti (SRS). Requisiti utente e requisiti di sistema. Requisiti funzionali e non funzionali. Requisiti di dominio. Modello FURPS. Completezza e consistenza dei requisiti. Elicitazione, analisi e validazione dei requisiti. Modellazione dei casi d’uso in UML. Diagramma dei casi d’uso. Template di Cockburn.
La Modellazione a Oggetti (1 CFU)
Obiettivi della modellazione. Progettazione tradizionale e progettazione orientata agli oggetti. L’ereditarietà come strumento di progettazione e riuso. La fase di progettazione. Modellazione a oggetti in linguaggio UML. Diagrammi delle classi: attributi, operazioni, responsabilità, associazioni, molteplicità, aggregazione, composizione, classi associative, ereditarietà, interfacce. Dal progetto UML all’implementazione in Java.
Pattern Creazionali, Strutturali e Comportamentali (1 CFU)
I pattern DAO, Observer, Factory, Singleton, Façade, Adapter, Composite, Abstract Factory, Bridge, Builder, Strategy.
Modelli e Architetture Software (0.5 CFU)
Partizioni e layer. Pattern architetturali. Repository architecture. Client/Server architecture. Peer-to-peer architecture. Model/View/Controller. Architetture n-tier.
Verifica e Validazione del Software (V&V) (1 CFU)
Analisi statica. Obiettivi e pianificazione del testing. Tecniche di testing black-box e white-box. Test di unità, integrazione, sistema, accettazione, regressione. Test strutturali, criteri di copertura. Complessità ciclomatica. Test combinatoriale. Model-based testing. Test di robustezza.
Verifica Formale di Protocolli di Sicurezza (1.5 CFU)
Concetti introduttivi di cybersecurity: cifratura simmetrica, cifratura asimmetrica, freshness, autenticazione. BAN Logic: notazioni e postulati (message meaning rule, nonce verification, jurisdiction rule). Analisi formale di protocolli di sicurezza: Otway-Rees, Needham-Schroeder (chiave condivisa), Needham-Schroeder (chiave pubblica).
Risultati attesi
Conoscenza e capacità di comprensione
a seguito del superamento dell’esame, lo studente conosce i principi fondamentali dell’Ingegneria del Software, con particolare riferimento ai processi, ai metodi, alle tecniche e agli strumenti di supporto alle diverse fasi del ciclo di vita del software, nonché alle principali architetture software, ai framework di sviluppo e ai concetti essenziali di sicurezza utili alla progettazione e all’analisi di sistemi software.
Conoscenza e capacità di comprensione applicate
A seguito del superamento dell’esame, lo studente è in grado di applicare metodologie, tecniche e strumenti dell’Ingegneria del Software per l’analisi, la progettazione, lo sviluppo, la verifica e la manutenzione di sistemi software, operando scelte coerenti con i requisiti funzionali e non funzionali del contesto applicativo e tenendo conto, a livello introduttivo, anche degli aspetti di sicurezza e della correttezza delle interazioni tra componenti e protocolli.
Autonomia di giudizio:
Per il superamento dell’esame, lo studente deve essere in grado di valutare autonomamente diverse alternative nelle fasi di analisi, progettazione e verifica del software, tenendo conto dei requisiti del sistema, della manutenibilità, delle prestazioni, dell’affidabilità e della qualità complessiva della soluzione proposta.
Abilità comunicative:
il corso e l’esame aiutano lo studente a sviluppare adeguate abilità comunicative, consentendogli di esporre con linguaggio tecnico appropriato le motivazioni teoriche e progettuali alla base delle soluzioni adottate e di descrivere in modo chiaro ed efficace struttura, comportamento, qualità e proprietà rilevanti di un sistema software.
Capacità di apprendimento:
A seguito del superamento dell’esame, lo studente è in grado di apprendere in autonomia nuove tecniche, metodologie, tecnologie e strumenti derivanti dall’evoluzione dell’Ingegneria del Software, e di applicarli criticamente allo sviluppo e alla valutazione di nuovi sistemi software.
Altre informazioni
Codice Teams: o0w4e3c
Il gruppo team contiene il materiale didattico (slide, note ed eserci risolti) utilizzato a lezione