Seleziona l'Anno Accademico:     2017/2018 2018/2019 2019/2020 2020/2021 2021/2022 2022/2023
Docente
MARIA ILARIA LUNESU (Tit.)
Periodo
Secondo Semestre 
Modalità d'Erogazione
Convenzionale 
Lingua Insegnamento
ITALIANO 



Informazioni aggiuntive

Corso Percorso CFU Durata(h)
[60/79]  INFORMATICA APPLICATA E DATA ANALYTICS [79/00 - Ord. 2021]  PERCORSO COMUNE 6 48

Obiettivi

Conoscenza e capacità di comprensione: L’obiettivo generale di questo corso è fornire le conoscenze relative ai fondamenti dell'ingegneria del software come scienza che studia strumenti e metodologie per la pianificazione dello sviluppo, realizzazione e valutazione di applicazioni software complesse.
Gli obiettivi di apprendimento attesi riguarderanno la conoscenza e la comprensione dei seguenti argomenti:
• il ciclo di vita del software;
• qualità e metriche del software;
• gestione dei progetti software;
• ingegneria dei requisiti;
• progettazione e sviluppo del software;
• verifica e testing del software;
• analisi e progetto di sistemi ad oggetti;
• utilizzo corretto di linguaggi ad oggetti;
• utilizzo del linguaggio standard UML;
• nozioni di progettazione di applicazioni blockchain.


Capacità di applicare la conoscenza e capacità di comprensione: lo studente sarà in grado di valutare e applicare i principi che guidano il processo di sviluppo di applicazioni anche complesse, e consentano di realizzare prodotti software efficienti e affidabili; valutare gli aspetti legati alla produzione del software, agli approcci strutturati per lo sviluppo, ai modelli di sistema; effettuare l’analisi ad oggetti di un sistema di complessità limitata, a partire dai requisiti; utilizzare efficacemente uno o più linguaggi ad oggetti.

Autonomia di giudizio: lo studente saprà valutare l'adeguatezza dei processi per lo sviluppo del software e delle pratiche da usare, rispetto a specifici progetti.

Abilità comunicative: lo studente sarà in grado di dialogare con specialisti informatici sulla pianificazione della raccolta dei requisiti, analisi, progetto, sviluppo e testing di sistemi informativi. Saprà anche comunicare informazioni, idee, problemi e soluzioni a interlocutori non specialisti, in particolare a clienti e utenti del sistema. Sarà anche in grado di leggere, comprendere e comunicare modelli di analisi ad oggetti utilizzanti il linguaggio UML.

Capacità di apprendere autonomamente: lo studente sarà in grado di apprendere le problematiche e le metodologie relative ai processi di sviluppo del software, nonché i metodi di analisi di sistemi a oggetti, applicando con flessibilità i concetti di base forniti nel corso. Egli sarà i grado di ampliare in futuro le proprie conoscenze in modo autonomo, comprendendo testi scientifici e tecnici avanzati.

Prerequisiti

Il corso richiede una buona conoscenza delle tecniche di programmazione (in particolare procedurali, ad oggetti e di scripting), delle architetture di calcolatori e dei sistemi informativi aziendali, che si possono acquisire durante il corso di studi.
È richiesta una ragionevole conoscenza operativa di uno o più linguaggi di programmazione, che consente una comprensione più profonda dei problemi e delle soluzioni che verranno descritti.
Gli studenti dovranno essere in grado di concettualizzare, anche in forma grafica, le caratteristiche di un algoritmo o di una struttura dati. È utile l'abitudine all'uso di un approccio sistematico e logico nella risoluzione di problemi.

Contenuti

La disciplina dell'Ingegneria del Software
Prospettiva storica, impatto economico, temi principali, sfide attuali. Il software open source. Caratteristiche del software come prodotto ingegneristico: corretto, affidabile, efficiente, usabile, robusto, interoperabile, manutenibile, evolvibile, verificabile, riusabile, portabile.

Il ciclo di vita del software
Le fasi del ciclo di vita del software: raccolta dei requisiti, analisi, progetto, codifica, testing, rilascio, manutenzione. I principali modelli del processo di sviluppo: "waterfall", incrementale-iterativo, a spirale, RUP, agile. La certificazione di qualità nel software.

Architettura dei sistemi software
Le varie architetture software. Architetture adatte ai vari tipi di sistemi da realizzare.

La raccolta dei requisiti
Tipologie dei requisiti; proprietà dei “buoni” requisiti. Requisiti espressi come casi d'uso. Proprietà dei casi d'uso. Diagrammi UML dei casi d'uso. User stories e raccolta dei requisiti secondo l'XP. Analisi dei requisiti e problematiche relative.

Il testing
Tipi di test: black e white box, unitari, funzionali, di accettazione, di integrazione, stress test. Testing automatico.

Il linguaggio di modellazione standard UML
Regole e costrutti fondamentali. Cenni ai diagrammi dei package, dei componenti, di deployment, di attività, di temporizzazione, di “interaction overview”. UML e ciclo di vita del software. Diagramma UML di stato e suo uso.

Analisi e progettazione a oggetti
I principi dell'OOA: astrazione procedurale e dei dati, incapsulamento, ereditarietà. Identificare le classi, tipologie delle classi, verifica delle classi. Definizione e assegnazione delle responsabilità Diagramma delle classi UML e suo uso nel contesto dell'analisi e progettazione OO. Identificazione, assegnazione e verifica di attributi e operazioni. Descrizione degli scenari di funzionamento del sistema con i diagrammi di sequenza e di collaborazione. Le relazioni tra le classi: ereditarietà, associazione, aggregazione, composizione, dipendenza. Cardinalità e navigabilità.

Principi e pratiche di buona progettazione del software
Astrazione, raffinamento successivo, occultamento dell'informazione, accoppiamento, coesione, semplicità, refactoring, Test Driven Development. Codice auto-documentante.

I Design Patterns
Strumenti di buona progettazione ad oggetti e di comunicazione della struttura dei programmi: definizione, specifica, i principali pattern, esempi d'uso.

Metodologie Agili e Lean
L'Agile Manifesto. La programmazione estrema: motivazioni, valori e pratiche. Scrum. I principi del Lean Software Development e l'approccio Kanban.

Metriche del software
Metriche di processo e di prodotto, metriche dimensionali, metriche funzionali e metriche ad oggetti. Complessità ciclomatica, metriche di Chidamber e Kemerer. Stima dell'effort e Function Points.

Digital Ledger Technology (DLT) e Blockchain
Cos'è e come funziona una blockchain. La blockchain di Bitcoin. Ethereum e gli Smart Contract. Blockchain pubbliche e permissioned. Usi della blockchain. Metodi di ingegneria del software per sviluppare applicazioni blockchain.

Metodi Didattici

I risultati attesi di conoscenza e comprensione sono conseguiti tramite la partecipazione alle lezioni, e alle esercitazioni, nonché tramite lo studio individuale, previsti dalle attività formative attivate.

Le modalità di verifica del sufficiente raggiungimento delle conoscenze e capacità (tramite prove scritte, prove orali) prevedono lo svolgimento di specifiche prove in cui lo studente dimostra la padronanza delle nozioni, degli strumenti, delle metodologie e certificano anche l'autonomia critica.

Lezioni frontali di teoria ed esercizi: 48 ore.

Verifica dell'apprendimento

Gli esami sono tipicamente svolti in forma scritta o tramite Moodle, rispondendo a domande e risolvendo esercizi in formato aperto e/o chiuso, a risposta singola o multipla. Le modalità di verifica prevedono il superamento di due prove in itinere o una prova finale, in entrambi i casi scritte.
La prova è valutata con un punteggio massimo di 33. In caso di punteggio maggiore o uguale a 32, viene data la lode. In caso di punteggio uguale a 31, viene dato 30.

Testi

“Slide” del corso.

M. Fowler, UML Distilled-Terza Edizione, Pearson Education Italia.

Libri di consultazione:
J. Sommerville - Ingegneria del software 8/Ed Addison-Wesley Professional.
R.S. Pressman, "Principi di ingegneria del software" Mc. Graw Hill Italia, Milano

Altre Informazioni

Le slide e gli esempi delle prove scritte, con soluzioni illustrate a lezione, saranno condivisi sul sito Moodle del corso

Questionario e social

Condividi su:
Impostazioni cookie