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
  • Specializzazione: Information Engineering
  • Anno / semestre: terzo anno, secondo semestre
  • Lingua di insegnamento: inglese
  • Titolo ufficiale: Software Development Methods
  • Docente responsabile: Luca Dan Șerbănați
  • Laboratorio / progetto: Andrei Vasilățeanu
  • Struttura: 2 ore di lezione + 2 ore di laboratorio alla settimana
  • Totale: 56 ore per semestre
  • Crediti: 3

Il posto del corso nella mia attività didattica

Questo corso appartiene alla fase tarda della mia attività didattica alla FILS ed esprime in forma sintetica una parte importante dell’esperienza da me accumulata nell’ingegneria del software. Riunisce, in un quadro pedagogico accessibile agli studenti di laurea, molti dei temi che mi hanno interessato nel corso degli anni: il processo software, la modellazione concettuale, l’analisi e la progettazione orientate agli oggetti, il ruolo dell’architettura e della modellazione comportamentale, nonché la relazione tra requisiti, analisi, progettazione e implementazione.

Sebbene sia ancorato al paradigma orientato agli oggetti e al linguaggio UML, il corso non si riduce a una semplice presentazione di tecniche. Cerca di mettere in evidenza ciò che rimane stabile e generale nei metodi di sviluppo del software: la necessità della modellazione, della separazione dei livelli di astrazione, di una documentazione coerente e del passaggio controllato dal mondo reale alle strutture implementabili.

Obiettivo del corso

Il corso mira a esplorare i metodi e le tecniche di sviluppo dei sistemi software sia da una prospettiva teorica sia applicativa. L’idea guida è che i metodi di sviluppo del software cerchino di ottimizzare il processo di produzione mediante attività prescritte, strumenti e prodotti intermedi, allo scopo di migliorare la qualità del software e la prevedibilità del processo di sviluppo.

Il materiale del corso sceglie il metodo orientato agli oggetti come principale veicolo espositivo, utilizzando UML come linguaggio di comunicazione dei modelli e degli artefatti prodotti nelle diverse fasi del ciclo di vita. Tuttavia, l’accento non cade esclusivamente sulla tecnica, ma su ciò che è persistente in tutti i metodi: analisi del problema, modellazione concettuale, progettazione, documentazione e preparazione dell’implementazione.

Prerequisiti e profilo del corso

La scheda della disciplina colloca questo corso dopo insegnamenti quali Object Oriented Programming, Algorithms and Data Structures e Formal Languages & Compilers. Appartiene alla categoria dei corsi concettuali: non mira soltanto all’uso di linguaggi o strumenti, ma alla formazione di una comprensione più profonda delle tecniche astratte di analisi, progettazione e modellazione.

Per il suo contenuto, il corso prepara gli studenti a ruoli quali business analyst, software analyst o software architect, offrendo loro un quadro coerente per comprendere come si costruisce gradualmente un sistema software, dal problema alla soluzione.

Struttura del corso

1. Introduzione all’ingegneria del software

La prima parte del corso introduce le nozioni di sistema, sistema informativo e sistema software, quindi discute le caratteristiche specifiche del software come prodotto ingegneristico, la sua complessità, la “crisi del software” e le cause tipiche degli insuccessi nello sviluppo. Vengono poi presentate le nozioni di software engineering, processo software, metodologia di sviluppo e relazione tra processo, notazione, assicurazione della qualità e strumenti CASE.

Nella stessa parte vengono analizzati i principali modelli del ciclo di vita: modello a cascata, prototipazione, sviluppo iterativo e incrementale, modello a spirale e quindi Unified Process, con particolare attenzione alle iterazioni, alla riduzione dei rischi, all’architettura e al ruolo dei casi d’uso.

2. UML come linguaggio della metodologia

Proseguendo la parte introduttiva, il corso presenta UML come linguaggio di modellazione visuale per specificare, costruire e documentare sistemi software-intensive. Vengono introdotti i principali tipi di elementi UML, le relazioni tra essi e la famiglia dei diagrammi statici e dinamici.

3. Fondamenti dell’orientamento agli oggetti

La seconda grande sezione tratta la base concettuale dell’orientamento agli oggetti: concetti, oggetti, tipi, classificazione, generalizzazione, associazioni, mapping, ruoli, cardinalità, aggregazione e composizione. L’accento non cade soltanto sulla programmazione orientata agli oggetti, ma sulla modellazione concettuale del dominio e sulla relazione tra concetti, oggetti e relative rappresentazioni in UML.

4. Business Modelling

Il corso introduce la modellazione del business come fase necessaria prima dell’analisi software vera e propria. Vengono discussi lo scopo del modello di business, la relazione tra modellazione del business e modellazione software, i processi, le funzioni, gli agenti, le risorse e le regole di business. Sono poi presentate le principali forme di documentazione: business use case, activity diagram, business object model e business domain model.

5. Requirements Analysis

La parte dedicata all’analisi dei requisiti tratta requisiti funzionali e non funzionali, artefatti dell’analisi, attori, casi d’uso, scenari, formati di descrizione di uno use case e tecniche per identificare gli attori e i loro obiettivi. Vengono presentati sia i diagrammi dei casi d’uso sia la documentazione testuale dei flussi principali e alternativi.

In questa parte compaiono anche i System Sequence Diagrams e i contratti delle operazioni, come strumenti per passare dal comportamento osservabile del sistema alle responsabilità interne degli oggetti.

6. Analisi del dominio e modello concettuale

Una componente importante del corso è la costruzione del domain model: identificazione delle classi concettuali, degli attributi e delle associazioni rilevanti e chiara delimitazione tra il modello concettuale del dominio e il futuro modello software. Vengono discusse tecniche semplici per identificare le classi, la relazione tra use case e modello del dominio e il ruolo del diagramma delle classi nell’analisi orientata agli oggetti.

7. Progettazione architetturale

La sezione dedicata all’architettura definisce l’architettura software come l’insieme delle principali decisioni riguardanti l’organizzazione del sistema, gli elementi strutturali, le interfacce, i connettori e gli stili architetturali. Vengono introdotti i concetti di componente, connettore, configurazione e stile architetturale.

Il corso passa quindi in rassegna stili classici: main program / subroutines, orientamento agli oggetti, sistemi data-flow, architetture data-centered, architetture a strati, macchine virtuali, client/server e relative varianti. Nella parte finale compaiono anche pattern con ruolo architetturale o micro-architetturale, quali Facade, Observer e Model-View-Controller.

8. Modello comportamentale e interazioni

L’ultima parte consistente del corso sviluppa la modellazione comportamentale: comunicazione tra oggetti, collaborazioni, interazioni, sequence diagram e communication diagram. L’accento è posto sull’assegnazione delle responsabilità alle classi e sul passaggio da scenari e attività a collaborazioni tra oggetti.

9. Responsabilità, collaborazioni e raffinamento della progettazione

In quest’area compaiono le tecniche di assegnazione delle responsabilità, la relazione tra collaborazione e interazione, l’uso dei diagrammi di sequenza per scoprire gli oggetti e la tecnica delle CRC Cards per strutturare le classi importanti dell’applicazione.

10. Osservazione sul profilo del corso

Il materiale mostra chiaramente che non si trattava di un semplice corso di UML. UML veniva utilizzato come linguaggio comune di espressione, ma la posta in gioco reale della disciplina era ingegneristica: il passaggio controllato dalla comprensione del problema e del business ai requisiti, al modello concettuale, all’architettura e alla progettazione orientata agli oggetti.

Laboratorio e progetto

La scheda della disciplina mostra che il corso aveva una componente pratica consistente. I laboratori iniziavano con argomenti Java più tecnici — accesso ai database mediante JDBC, programmazione di rete con socket e Java RMI — per poi passare a una successione di esercizi e deliverable di analisi e progettazione: modello di business, modello dei casi d’uso, system sequence diagrams e contratti delle operazioni, modello del dominio, diagrammi di interazione, statechart, application class diagram e package diagram.

Il progetto era individuale e i compiti a casa contribuivano gradualmente al progetto finale. Dal punto di vista pedagogico, questo è un dettaglio importante: gli studenti non ricevevano soltanto nozioni teoriche, ma erano obbligati a costruire passo dopo passo un insieme coerente di modelli capace di condurre a un’applicazione implementabile.

Bibliografia di base

  • Luca Dan Șerbănați, Software Development Methods. Lecture Notes, FILS, 2009.
  • R. S. Pressman, Software Engineering: A Practitioner’s Approach, 7th edition.
  • L. D. Șerbănați, Integrating Tools for Software Development, Yourdon Press / Prentice Hall, 1992.
  • G. Booch, J. Rumbaugh, I. Jacobson, The Unified Modeling Language. User Guide.
  • M. Fowler, UML Distilled.
  • C. Larman, Applying UML and Patterns.

Significato del corso

Visto retrospettivamente, questo corso è rappresentativo del modo in cui ho inteso insegnare negli ultimi anni: non come semplice trasmissione di tecnologie transitorie, ma come formazione di un pensiero ingegneristico sul software. Combina elementi classici di software engineering con tecniche UML e con una visione più ampia, vicina alla systems engineering, del processo di sviluppo.

In fondo, Software Development Methods non è soltanto un corso sui diagrammi o sull’orientamento agli oggetti. È un corso sull’ordine che deve essere introdotto in un processo complesso, sul passaggio controllato dalla realtà al modello e dal modello alla soluzione software.

Risorse

Nel contesto degli altri corsi