In breve:
Software: prodotto e processo.
Ingegneria dei requisiti.
Linguaggi e metodi di specifica.
Progettazione per contratto.
Progettazione orientata agli oggetti, design pattern.
Verifica e convalida.
Manutenzione, refactoring.
Per esteso:
*Software: prodotto e processo*
Caratteristiche di qualità. Fasi e attività del processo produttivo. Diversi processi di sviluppo (a cascata, a V, incrementali/iterativi/evolutivi). Metamodello a spirale.
*Ingegneria dei requisiti*
Elicitazione e analisi dei requisiti. Modello concettuale del dominio applicativo.
*Linguaggi e metodi di specifica*
Linguaggi formali per la descrizione di modelli di sistemi software: automi e reti di Petri. Linguaggi semi-formali per la descrizione di modelli di sistemi software: notazione UML (tutti i tipi di diagrammi).
*Progettazione*
Moduli, interfacce dei moduli e relazioni tra moduli. Principi di modularizzazione. Progettazione per contratto. Progettazione difensiva.
*Progettazione orientata agli oggetti*
Caratteristiche del paradigma orientato agli oggetti: ereditarietà, polimorfismo, binding dinamico. Principio di sostituzione, confronto fra ereditarietà e delega. Riuso. Distribuzione e interconnessione di componenti. Riduzione delle dipendenze. Elementi ricorrenti di progetto (design pattern).
*Verifica e convalida*
Attività di testing e di debugging. Metodi di testing strutturale e funzionale. Testing di unità. Testing in grande. Ispezioni del codice e walkthrough. Testing di sistemi orientati agli oggetti.
*Manutenzione*
Sistemi legacy. Refactoring di programmi orientati agli oggetti.