Insegnamenti

 

60/61/131 - INGEGNERIA DEL SOFTWARE

Anno Accademico ​2017/2018

Docente
MICHELE ​MARCHESI (Tit.)
Periodo
Secondo Semestre​
Modalità d'Erogazione
Convenzionale​
Lingua Insegnamento




Informazioni aggiuntive

CorsoPercorsoCFUDurata(h)
[60/61] ​ ​INFORMATICA [61/00 - Ord. 2015] ​ ​PERCORSO COMUNE984
Obiettivi

Conoscenza e capacità di comprensione: lo studente conoscerà i 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.


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 comunicare e di leggere 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

1. Conoscenze. 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 è possibile acquisire durante i semestri precedenti del corso di studi.
2. Abilità. Gli studenti dovranno essere in grado di scrivere programmi in uno o più linguaggi di programmazione, e di concettualizzare, anche in forma grafica, le caratteristiche di un algoritmo o di una struttura dati.
3. Competenze. E' richiesta una ragionevole conoscenza operativa di uno o più linguaggi di programmazione di computer, che consente una comprensione più profonda dei problemi e delle soluzioni che verranno descritti. Sono utili l'abitudine all'uso di un approccio sistematico e logico nella risoluzione di problemi.

Contenuti

La disciplina dell'Ingegneria del Software (lezioni: 4 ore)
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 (lezioni: 5 ore)
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 (lezioni: 4 ore)
Le varie architetture software. Architetture adatte ai vari tipi di sistemi da realizzare.

La raccolta dei requisiti (lezioni: 4 ore)
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 (lezioni: 4 ore)
Tipi di test: black e white box, unitari, funzionali, di accettazione, di integrazione, stress test. Testing automatico.

Il linguaggio di modellazione standard UML (lezioni: 5 ore)
Regole e costrutti fondamentali. Modello statico e di­namico e diagrammi relativi. Cenni ai diagrammi dei pacchetti, dei componenti, di deployment, di at­tività, di temporizzazione, di “interaction overview”. UML e ciclo di vita del software. Diagramma UML di stato e suo uso.

Analisi e progettazione a oggetti (lezioni: 8 ore)
I principi dell'OOA: astrazione procedurale e dei dati, incapsula­mento, ereditarietà. Metodo CRC (Class, Responsibility, Collaboration). Identificare le classi, tipologie delle classi, verifica delle classi. Definizione e assegnazione delle responsabilità e collaborazioni. Dia­gramma delle classi UML e suo uso nel contesto dell'analisi e progettazione OO. Identificazione, as­segnazione e verifica di attributi e operazioni. Descrizione degli scenari di funzionamento del sistema con i diagrammi sequenziali e di collaborazione. Le relazioni tra le classi: ereditarietà, associazione, aggregazione, composizione, dipendenza. Cardinalità e navigabilità.

Principi e pratiche di buona progettazione del software (lezioni: 4 ore)
Astrazione, raffinamento successivo, occulta­mento dell'informazione, ac­coppiamento, coesione, semplicità, refactoring, Test Driven De­velopment. Codice auto-documentante.

I Design Patterns (lezioni: 4 ore)
Strumenti di buona progettazione ad oggetti e di comunicazione della stuttura dei programmi: definizione, specifica, i principali pattern, esempi d'uso.

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

Metriche del software (lezioni: 4 ore)
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.

Linguaggio Python (esercitazioni: 30 ore)

Metodi Didattici

I risultati attesi di conoscenza e comprensione sono conseguiti tramite la partecipazione alle lezioni, alle esercitazioni ed ai laboratori, nonché tramite lo studio individuale, previsti dalle attività formative attivate.
Le modalità di verifica del sufficiente raggiungimento di delle conoscenze e capacità (tramite prove scritte, prove orali, realizzazioni di progetti applicativi, verifica della partecipazione attiva alle lezioni ed ai laboratori) 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: 52 ore.
Lezioni ed esercitazioni di linguaggi ad oggetti: 30 ore.

Verifica dell'apprendimento

L'esame è composto da due parti: teoria ed elaborato pratico.
La teoria riguarda tutto il programma, escluso il linguaggio Python. Gli esami sono tipicamente svolti in forma scritta, rispondendo a domande e risolvendo esercizi in formato aperto e/o chiuso, a risposta singola o multipla. Il docente si riserva di effettuare l'esame in forma orale, in caso di un numero ridotto di iscrizioni all'appello.
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.
L'elaborato pratico viene affidato a gruppi di 4 studenti. Questi devono sviluppare un progetto software in Python per risolvere un dato problema, utilizzando un repository Git e includendo i test automatici.
I gruppi hanno un mese di tempo per consegnare la prova pratica. I gruppi presentano poi il proprio elaborato con una presentazione effettuata da tutti e 4 i membri.

Testi

Lucidi del corso.

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

Git: https://www.linuxtrent.it/sites/default/files/Comprendere%20Git%20concettualmente%20-%20Marco%20Ciampa%20-%20r1.pdf

The Python Tutorial: https://docs.python.org/3/tutorial/

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

Gli strumenti a supporto della didattica si trovano sul sito del docente: http://people.unica.it/michelemarchesi/
Tra essi si trovano:
- copia dei lucidi mostrati a lezione
- esempi di testi d'esame con soluzioni

Ulteriore materiale e avvisi si trovano nel sito:
http://agilegroup.eu

credits unica.it | accessibilità Università degli Studi di Cagliari
C.F.: 80019600925 - P.I.: 00443370929
note legali | privacy

Nascondi la toolbar