Luca Dan Șerbănați all'esame di maturità, 1961
Luca Dan Șerbănați nei primi anni Settanta
Luca Dan Șerbănați all'ultima lezione del quinto anno, aprile 1989

Luca Dan Șerbănați

Professore emerito alla Politehnica di Bucarest

Ricerca, insegnamento, industria e memorie

RO | EN | IT
Luca Dan Șerbănați a Venezia, 1990
Luca Dan Șerbănați a New York, 2005
Luca Dan Șerbănați

Riferimenti essenziali

  • Istituzione: Università POLITEHNICA di Bucarest
  • Facoltà: FILS – Facoltà di Ingegneria in Lingue Straniere
  • Programma: master in Software Engineering
  • Semestre: primo semestre
  • Lingua di insegnamento: inglese
  • Titolo ufficiale: Software Methodologies
  • Docente responsabile: Luca Dan Șerbănați
  • Responsabile delle applicazioni: Luca Dan Șerbănați
  • Struttura: 3 ore di lezione + 2 ore di applicazioni alla settimana
  • Crediti: 6
  • Prerequisiti: Programming Languages, Object-Oriented Programming, Software Development Methods

Il posto del corso nella mia attività didattica

Questo corso appartiene a una fase tarda della mia attività didattica, nella quale il mio interesse non era più rivolto soltanto a tecniche particolari di analisi, progettazione o programmazione, ma alla comprensione comparativa delle grandi famiglie di metodologie software. Presuppone uno studente già formato nella programmazione e nell’ingegneria del software di base e cerca di rispondere a una domanda più generale: come organizziamo e come scegliamo un metodo di sviluppo adatto a un determinato tipo di sistema software?

In questo senso, il corso ha un carattere di sintesi. Collega il processo software a modelli, notazioni, criteri di qualità, requisiti, architetture e discipline di progettazione, spostando l’accento dal semplice uso di una tecnica alla comprensione dello spazio metodologico nel suo insieme.

Obiettivo del corso

L’idea di fondo del corso è che lo sviluppo pratico del software richieda metodi capaci di collegare il problema da risolvere al sistema software che deve essere costruito. Il corso presenta le metodologie software come insiemi coerenti di processi, modelli, regole, prodotti intermedi e strumenti che guidano l’ingegnere del software dalla definizione dei requisiti fino alla progettazione e all’implementazione.

Persegue due obiettivi complementari. Da una parte, offrire una visione ampia delle principali metodologie e paradigmi di sviluppo; dall’altra, fornire allo studente criteri per confrontare approcci differenti, anche dal punto di vista della complessità, della tracciabilità, della qualità e del riuso.

Le idee guida del corso

Il materiale inizia con un’introduzione alla software engineering: la natura del software, la crisi del software, la complessità dei progetti, il processo software e il ruolo dei metodi e degli strumenti nel disciplinare lo sviluppo. Una parte importante è dedicata al processo software, considerato come insieme di attività, pratiche, trasformazioni e prodotti associati, nonché alla maturità del processo, anche attraverso il modello CMMI.

Il corso insiste sul fatto che una metodologia di sviluppo possiede due componenti complementari: un processo standard e una notazione standard. Attorno a questa idea sono organizzati i confronti tra metodologie strutturate, Information Engineering e metodologie orientate agli oggetti, insieme alla discussione dei modelli di processo iterativi e dello sviluppo basato su componenti.

Struttura del corso

1. Software Engineering e processo software

La prima parte introduce le nozioni fondamentali della software engineering: definizione del software, tipi di applicazioni software, complessità dei progetti, crisi del software, processo software, discipline di sviluppo, product assurance, gestione dei progetti e maturità del processo. Vengono presentati anche i principali modelli di processo: waterfall, prototyping, RAD, incremental, spiral, WINWIN spiral, concurrent development, iterative development e component-based development.

2. Systems Engineering Methodologies

La seconda parte amplia la prospettiva dal software al sistema. Vengono discussi la nozione di sistema, i principi della systems engineering, il rapporto tra sistema e ambiente, la modellazione dei sistemi, la loro partizione e il legame tra requisiti e architettura. Compaiono concetti quali system hierarchy, black-box / white-box view, information model rispetto a physical model, architecture flow context diagram e modelli per la partizione dei sistemi.

3. Structured Methodologies for Software Development

Una parte consistente è dedicata alle metodologie strutturate. Vengono discussi il ciclo di vita strutturato, le sue fasi, le attività di analisi e progettazione e gli strumenti classici di modellazione: decomposition diagrams, data flow diagrams, entity-relationship diagrams, data dictionary, state transition diagrams, process specifications, PDL, HIPO, IPO e structure charts. Questa sezione ha anche un valore storico e concettuale, perché mostra come si cercò di disciplinare lo sviluppo software entro un paradigma incentrato sulle funzioni.

4. Software Requirements Analysis

Il corso tratta poi l’analisi dei requisiti software come ponte tra systems engineering e software design. Vengono discussi i modelli logici, i principi operativi dell’analisi, gli strumenti dell’analisi strutturata, il rapporto tra system requirements e software requirements, la struttura di una Software Requirements Specification e il modo in cui viene costruito il modello concettuale del software.

5. Software Design

Segue la sezione dedicata alla progettazione software vera e propria, nella quale l’accento cade sul passaggio dal modello di analisi al modello di design. Vengono discussi i componenti della progettazione: data design, architectural design, interface design e component-level design, nonché i criteri di qualità di un buon design: modularità, separazione delle responsabilità, tracciabilità e adeguatezza delle strutture risultanti.

6. Metodologie orientate agli oggetti: Unified Process e UML

L’ultima parte del corso si sposta verso la metodologia orientata agli oggetti. Vengono presentati i concetti fondamentali dell’orientamento agli oggetti, i messaggi tra oggetti e quindi lo Unified Process come processo estensibile, use-case-driven, architecture-centric, risk-focused, iterativo e incrementale. Il corso si conclude con UML, considerato come notazione grafica per visualizzare, specificare, costruire e documentare gli artefatti di un sistema software.

Significato del corso

Visto retrospettivamente, questo corso esprime molto bene una delle convinzioni costanti della mia attività didattica: il software non si costruisce seriamente senza metodo, ma neppure senza spirito critico nei confronti del metodo. Non esiste una soluzione unica e il valore della formazione universitaria consiste proprio nell’insegnare agli studenti a comprendere le differenze tra paradigmi, le loro ipotesi, i loro vantaggi e i loro limiti.

Per questo motivo, Software Methodologies non è soltanto un corso sulle tecniche, né soltanto una storia dei metodi. È piuttosto un corso sul discernimento metodologico nell’ingegneria del software e sul rapporto tra requisiti, modellazione, processo, architettura e implementazione.

Risorse