Software Development Methods
Corso tenuto presso la Facoltà di Ingegneria in Lingue Straniere (FILS), nell’ambito della specializzazione Information Engineering. Il titolo ufficiale e il materiale del corso erano in lingua inglese; questa pagina lo presenta in italiano per integrarlo coerentemente nell’insieme del mio sito.
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.





