Processi software e agile computing. Requirement engineering. Modelli di sistema e viste architetturali. Diagrammi UML, pattern architetturali. Software per sistemi distribuiti, sistemi orientati ai servizi, micro-servizi. Software fault tolerance, qualità del software.
I principali tesi di riferimento sono:
I. Sommerville, Ingegneria del Software, 10° edition, Pearson.
Martina Seidl , Marion Scholz , Christian Huemer , Gerti Kappel, UML @ Classroom - An Introduction to Object-Oriented Modeling, 2015, Springer.
Robert Cecil Martin, “Clean Code: A Handbook of Agile Software Craftsmanship”, 2009
Altri libri e articoli scientifici saranno identificati durante il corso
Gli strumenti software raccomandati saranno identificati durante il corso.
Obiettivi Formativi
KNOWLEDGE AND UNDERSTANDING
Gli studenti acquisiranno conoscenze sui fondamenti di ingegneria del software, in particolare sui principali processi di sviluppo e le principali attività previste, e sulle più note tecnologie per la progettazione software.
APPLYING KNOWLEDGE AND UNDERSTANDING
Alla fine del corso, lo studente dovrebbe essere in grado di applicare le tecnologie ed i metodi studiati durante il corso per la realizzazione di semplici progetti software o per la partecipazione a progetti di sviluppo software.
MAKING JUDGEMENTS
Gli studenti saranno in grado di commentare una soluzione architetturale o la qualità di un software.
COMMUNICATION SKILLS
Alla fine del corso, lo studente dovrebbe essere in grado di relazionare su tutta l'attività tecnica e sui processi alla base della progettazione e implementazione di un progetto software.
LEARNING SKILLS
Il corso fornirà allo studente le conoscenze per esplorare la letteratura su argomenti di ingegneria del software.
Prerequisiti
Metodi Didattici
Didattica frontale, lezioni teoriche affiancate da esercitazioni in aula per migliorare la comprensione dei temi trattati. Le esercitazioni sono distribuite durante il corso, per applicare le soluzioni tecniche viste a lezione per lo sviluppo di un progetto, che sarà assegnato nelle prime lezioni.
CFU: 6
Altre Informazioni
Frequenza delle lezioni ed esercitazioni: Raccomandata
Strumenti a supporto della didattica UniFi E-Learning: http://e-l.unifi.it
Prof. Andrea Ceccarelli,
MARTEDI ore 16.30-17.30
Contattare il docente preventivamente (andrea.ceccarelli@unifi.it).
DiMai, Università di Firenze, Viale Morgagni, 65 - 50134 Firenze
Modalità di verifica apprendimento
Sviluppo di un progetto. Il testo del progetto sarà assegnato durante le prime lezioni del corso. Il progetto prevede l’applicazione delle principali tecnologie e metodologie affrontate durante il corso. Il progetto potrà essere svolto in gruppo di massimo 2 studenti. Un progetto, se sufficiente, avrà un voto tra: BASSO, MEDIO, ALTO.
Esame orale su tutti gli argomenti trattati nel corso, e sul progetto. L’orale avrà un voto in trentesimi. Si ha accesso alla prova orale solo se il progetto è ritenuto sufficiente.
Il voto finale (in trentesimi) è definito come segue:
i) Se il progetto ha voto ALTO, il voto finale sarà il voto della prova orale
ii) Se il progetto ha voto MEDIO, il voto finale è il valore inferiore tra il voto della prova orale e 25.
iii) Se il progetto ha voto BASSO, il voto finale è il valore inferiore tra il voto della prova orale e 20.
Programma del corso
- Processi software e agile computing, con applicazione di tecniche agile per lo svolgimento di un progetto
- Ingegneria dei requisiti e diagrammi di casi di uso UML, con applicazione per la definizione di una specifica dei requisiti software per lo svolgimento di un progetto
- Modelli di Sistema, viste architetturali, viste UML (class diagrams, sequence diagrams, activity diagrams). Applicazione di UML per lo sviluppo di un progetto.
- Software per sistemi distribuiti, architetture orientate ai servizi, e microservizi. Applicazione per la realizzazione di una piccola architettura a servizi REST.
- SW fault tolerance: design diversity, recovery blocks, rejuvenation, safety net.
- Qualità del software, regole di codifica, etica nella software engineering. Applicazione delle regole di codifica per migliorare la qualità di un software.
- Clean coding: regole ed esempi.