|
Giacomo CABRI
Professore Ordinario Dipartimento di Scienze Fisiche, Informatiche e Matematiche sede ex-Matematica
|
Insegnamento: Metodologie di sviluppo software
Informatica (Offerta formativa 2024)
Obiettivi formativi
Gli obiettivi dell'insegnamento sono:
- Presentare i modelli di sviluppo del software e i concetti di gestione dei progetti
- Presentare le tecniche di sviluppo del software
- Presentare alcuni esempi di metodologie
- Presentare strumenti per stimare i costi dei progetti software
Al termine dell’insegnamento lo studente dovrebbe essere in grado di:
- sviluppare un progetto software applicando una metodologia;
- stimare i tempi e i costi di sviluppo di un progetto software;
- applicare le tecniche di sviluppo.
Prerequisiti
Conoscenza di un linguaggio di programmazione (suggeriti Java o Python) e dei linguaggi di modellazione del software.
Programma del corso
Modelli e metodologie di sviluppo software (1 CFU)
* Modello a cascata
* Modello evolutivo
* Modello incrementale
* Esempi di metodologie
Metodologie agili (3,5 CFU)
* Principi e tecniche agili
* Esempi di tecniche agili (TDD, pair-programming, refactoring)
* Metodologia Scrum
* Esempi di altre metodologie agili
Tecniche di stima dei progetti (1,5 CFU)
* COCOMO
* Putnam
* PERT/CPM
Metodi didattici
Lezioni frontali sulla teoria (4 CFU) ed esercitazioni in aula di applicazione della teoria (2 CFU).
La frequenza non e' obbligatoria.
L'insegnamento e' in italiano ma il materiale e' in inglese.
Gli studenti non frequentanti possono accedere alle slide delle lezioni e al materiale delle esercitazioni.
Testi di riferimento
Slide presentate a lezione messe a disposizione all'inizio dell'insegnamento tramite Moodle
Libri consigliati:
- C. Ghezzi, D. Mandrioli, M. Jazayeri. Ingegneria del Software (2/Ed.). Pearson Education Italia
- E. Gamma, R. Helm, R. Johnson, J. Vlissides. Design Patterns. Pearson
- Eric Freeman, Elisabeth Robson. Head First Design Patterns. O'Reilly Media
- Ian Sommerville. Ingegneria del software. Pearson
Verifica dell'apprendimento
La verifica consisterà in una prova orale atta a verificare la comprensione dei contenuti di tutto il programma svolto e la capacità di applicare le tecniche di stima dei progetti.
Orientativamente sarà della durata di 30 minuti e prevederà 1 domanda sulle metodologie per verificare la conoscenza delle metodologie, 1 domanda o esercizio sulle tecniche agili per verificare la capacità di metterle in pratica, 1 esercizio sulla stima dei progetti per verificare la capacità di applicare gli strumenti.
Ogni domanda ha lo stesso peso nel voto finale.
Potrà essere previsto un pre appello a fine lezioni.
Il voto varia da 18/30 (conoscenza basilare degli argomenti e capacità parziale di applicare la conoscenza) a 30/30 e lode (conoscenza piena degli argomenti e capacità ottima di applicare la conoscenza), graduazione dei voti intermedi in base al raggiungimento dei risultati di apprendimento attesi, compresi quelli trasversali dimostrati durante la prova d’esame.
Risultati attesi
Conoscenza e comprensione
Lo studente conoscerà metodologie e architetture software per sviluppare sistemi software.
Lo studente conoscerà le tecniche di stima dei progetti software.
Capacità di applicare conoscenza e comprensione
Lo studente avrà la capacità di:
- applicare metodologie per progettare, sviluppare e testare applicazioni software;
- stimare i costi e i tempi di progetti software;
- applicare le tecniche di sviluppo software.
Autonomia di giudizio
Lo studente avrà la capacità di giudicare le tecniche e le metodologie software più adatte a ogni contesto, valutando le possibili alternative;
Abilità comunicative
Lo studente avrà la capacità di comunicare le scelte tecnologiche fatte.
Capacità di apprendimento
Lo studente avrà la capacità di:
- valutare la propria preparazione in relazione allo stato dell'arte delle metodologie di sviluppo;
- individuare le competenze mancanti per affrontare il lavoro che gli viene proposto;
- fare formazione continua per colmare le lacune e mantenersi aggiornato;
- sfruttare le fonti appropriate;
- affrontare problemi sempre nuovi con un approccio scientifico e metodologico.