programma pubblicato
Transcript
programma pubblicato
Ingegneria del software - Programma del corso aggiornato al dicembre 2012 AA 2011-12 – Prof. Michele Marchesi 5 crediti, 50 ore di lezione 3 anno, I semestre Obiettivi L'ingegneria del software ha l'obiettivo di studiare e sviluppare strumenti e metodologie per la pianificazione dello sviluppo, realizzazione e valutazione di applicazioni software complesse. Il corso ha due obiettivi formativi: • Approfondire anche praticamente alcune tecniche specifiche, in particolare legate allo sviluppo di software ad oggetti. • Fornire una panoramica generale di tali strumenti e metodologie; Programma ● ● ● ● ● ● ● ● ● ● La disciplina dell'Ingegneria del Software: prospettiva storica, impatto economico, temi principali, sfide attuali. Caratteristiche del software come prodotto ingegneristico: corretto, affidabile, efficiente, usabile, robusto, interoperabile, manutenibile, evolvibile, verificabile, riusabile, portabile. Le tipologie dei sistemi 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. 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. Modello statico e dinamico e diagrammi relativi. Cenni ai diagrammi dei pacchetti, dei componenti, di deployment, di attività, di temporizzazione, di “interaction overview”. UML e cliclo 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à. Metodo CRC (Class, Responsibility, Collaboration). Identificare le classi, tipologie delle classi, verifica delle classi. Definizione e assegnazione delle responsabilità e collaborazioni. 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 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: astrazione, raffinamento successivo, occultamento dell'informazione, accoppiamento, coesione, semplicità, refactoring, Test Driven Development. 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. Ingegneria del software per Internet: il WWW: ipertesti, architettura, il Client, il Server, il protocollo HTTP; programmazione WWW: tipi di pagine (statiche, dinamiche, attive), CGI; i Servizi Internet ed il loro funzionamento: DNS ed e-mail. Testi di riferimento Metodi di valutazione Lucidi del corso, reperibili su Internet nel sito: agile.diee.unica.it/corsi. M. Fowler, UML Distilled-Terza Edizione, Pearson Education Italia, 2004. Prova scritta con domande di teoria ed esercizi di analisi OO. Eccezionalmente, compilazione di una tesina.