La Progettazione del Software
Definizioni IEEE
Metodologie di progettazione
Principi di progettazione
Tecniche di progettazione (top down e bottom up)
Moduli e criteri di modularizzazione: coesione ed
accoppiamento, indipendenza Funzionale
Notazione e specifica di progetto: GDN e TDN
Anna Rita Fasolino- Ingegneria del Software La Progettazione
1
La fase di Progettazione
IEEE Std 610.12-1990
Anna Rita Fasolino- Ingegneria del Software La Progettazione
2
1
Anna Rita Fasolino- Ingegneria del Software La Progettazione
3
Anna Rita Fasolino- Ingegneria del Software La Progettazione
4
2
La progettazione
– l’insieme delle attività che, a partire dalla specifica dei
requisiti del sistema software, producono un modello del
sistema da realizzare (una soluzione al problema...)
– da un modello del dominio applicativo ad un modello
della soluzione da attuare
– mappare” i requisiti specificati su elementi che dovranno
essere fisicamente realizzati
– individuazione e specificazione degli elementi da
realizzare, delle relazioni tra tali componenti, e di come
realizzarli
– il tutto sempre in accordo ai requisiti software specificati
nella fase di analisi
5
Anna Rita Fasolino- Ingegneria del Software La Progettazione
Requisiti Software
Low Level
Design
High Level Design
Anna Rita Fasolino- Ingegneria del Software La Progettazione
6
3
Livelli di progettazione
• High level design (o progetto architetturale)
– identificazione e specifica delle componenti strutturali del
sistema e delle loro inter-connessioni
• Low level design (o progetto di dettaglio )
– decisione su come la specifica delle componenti sarà
realizzata (descrizione dettagliata della logica di
elaborazione)
• Data design
– definizione delle strutture logiche dei dati
Anna Rita Fasolino- Ingegneria del Software La Progettazione
7
La fase di progettazione
• Input alla fase di progettazione:
– la specifica del sistema da realizzare (quanto più completa,
consistente, non ambigua)
• Output della fase:
– progetto architetturale
– progetto di dettaglio
– Progetto dei dati
• Terminazione ed uscita dalla fase:
– verifica del progetto rispetto alla specifica
– valutazione ed approvazione della sua qualità
Anna Rita Fasolino- Ingegneria del Software La Progettazione
8
4
Fasi di un processo di design
Requirements
specification
Design acti
vities
Architectur
al
design
Abstract
specification
Interface
design
Component
design
Data
structur
e
design
Algorithm
design
System
architectur
e
Softwar e
specification
Interface
specification
Component
specification
Data
structur
e
specification
Algorithm
specification
Design pr
oducts
Anna Rita Fasolino- Ingegneria del Software La Progettazione
9
Fasi di un processo di design
• Architectural design
Definizione dei componenti (sottosistemi) software e loro relazioni
• Abstract specification
Specifica di alto livello dei componenti
• Interface design
Definizione e specifica delle interfacce dei componenti
• Component design
Specifica dettagliata dei singoli componenti
• Data structure design
Progettazione delle strutture dati atte a contenere i dati del
problema
• Algorithm design
Progettazione degli algoritmi per le funzioni del problema
Anna Rita Fasolino- Ingegneria del Software La Progettazione
10
5
Design quality
Design quality is an elusive concept
• Un “buon” design può essere il più efficiente, il più
economico, il più manutenibile, il più affidabile, etc.
• Gli attributi riguardano anche la manutenibilità del
progetto
• Caratteristiche di qualità sono ugualmente applicabili a
progettazione function-oriented e object-oriented
Anna Rita Fasolino- Ingegneria del Software La Progettazione
11
Design goals
Design for change
• anticipare i cambiamenti plausibili
• non concentrarsi sulle necessità di oggi, ma pensare
alla possibile evoluzione
• ma anche ... non fare assunzioni che si sa che
domani si riveleranno false
» es., the Y2K problem
Component family
• pensare ad un componente (es. programma) come ad
un membro di una famiglia
Anna Rita Fasolino- Ingegneria del Software La Progettazione
12
6
Design for change
Semplici esempi:
• Cambiamenti negli algoritmi
da bubblesort a quicksort
• Cambiamenti nelle strutture dati
17% dei costi di manutenzione
• Cambiamenti nella “underlying abstract machine”
Periferiche hardware, OS, DBMS, …
new releases, portability problems
• Cambiamneti nell’ambiente (es., EURO)
• Cambiamenti dovuti alla strategia di sviluppo
evolutionary prototype
Anna Rita Fasolino- Ingegneria del Software La Progettazione
13
Component family
Pensare ad un componente e a tutte le sue varianti come un
membro di una famiglia
• l’obiettivo è di progettare l’intera famiglia, non ogni singolo
individuo della famiglia separatamente
Esempio di component family: Un sistema a supporto di
prenotazioni
• per un hotel:
prenota stanze, ristorante, spazio per conferenze, …
apparecchiature (video beams, overhead projectors, …)
• per una università:
molte funzionalità sono simili, alcune sono diverse (es., facilities
possono essere gratis o meno)
Anna Rita Fasolino- Ingegneria del Software La Progettazione
14
7
A parità di specifica dei requisiti sono possibili differenti soluzioni
progettuali
Scegliere quella che consentirà di realizzare il sistema con il più elevato
livello di qualità, rispetto ai requisiti
In particolare, i componenti dovrebbero essere progettati in modo da
essere:
• facilmente costruibili
• facilmente collaudabili
• facilmente comprensibili
• facilmente correggibili
• facilmente modificabili
• affidabili
• corrette
• ……….
Uso di principi e metodologie di progettazione
– definiscono un approccio sistematico alla definizione del
progetto, attraverso l'applicazione di tecniche e linee guida
Anna Rita Fasolino- Ingegneria del Software La Progettazione
15
Principi di progettazione
• Perché i principi?
– La progettazione è un’attività estremamente creativa, non
riducibile ad un insieme di passi da seguire
– I principi di riferimento guidano verso il raggiungimento degli
obiettivi di qualità per il progetto
– Correttezza, Verificabilità, Completezza, Tracciabilità,
Semplicità del progetto conducono verso...
– Manutenibilità, Modificabilità, Comprensibilità, Riusabilità del
software
• alcuni principi: Decomposizione, Raffinamento,
Astrazione, Information Hiding, Modularità,
Anticipazione del cambiamento..
Anna Rita Fasolino- Ingegneria del Software La Progettazione
16
8
Decomposizione
•
Decomporre il Sistema in sottosistemi, gestibili separatamente, per
dominarne la complessità
•
P= problema, C=complessità di P, E=sforzo per la risoluzione di P
Dati 2 problemi P1 e P2
se C(P1) > C(P2), allora E(P1)> E(P2)
ma è stato dimostrato che C(P1+P2)> C(P1) + C(P2),
e quindi si ha che E(P1+P2)> E(P1) + E(P2)
La scomposizione introduce Costo
il problema della
comunicazione fra le varie
parti, il che aggiunge
complessità per
l’interfacciamento.
Costo totale
Costo
interfacciamento
Costo modulo
Numero di moduli
Anna Rita Fasolino- Ingegneria del Software La Progettazione
17
Raffinamento
• Gli elementi individuati con la decomposizione sono
ulteriormente decomposti per passi successivi
• …. generazione di strutture gerarchiche
Anna Rita Fasolino- Ingegneria del Software La Progettazione
18
9
Astrazione
• Permette di concentrarsi su un problema ad un
determinato livello di astrazione, senza perdersi in
dettagli irrilevanti
• Permette di descrivere un componente tramite il suo
comportamento esterno senza preoccuparsi dei
dettagli interni che lo producono
• E’ fondamentale nel partizionamento, giacché
consente di individuare le componenti del sistema e
le modalità di interazione
Anna Rita Fasolino- Ingegneria del Software La Progettazione
19
Forme di astrazione
• funzionale:
– completa definizione di una funzionalità indipendentemente
dall’algoritmo che la implementa
• di dati:
– completa definizione di un dato o un tipo di dato in base alle
operazioni che su di esso possono essere fatte, senza
definirne una struttura concreta
• di controllo:
– completa definizione di un meccanismo di controllo senza
indicarne i dettagli interni, ad esempio semafori per
sincronizzare processi concorrenti
Anna Rita Fasolino- Ingegneria del Software La Progettazione
20
10
Information Hiding
• consiste nel rendere invisibili i dettagli interni di un
modulo, e nel rendere inaccessibili, a componenti
che non ne necessitano, i dettagli di strutture dati e
strutture procedurali.
Anna Rita Fasolino- Ingegneria del Software La Progettazione
21
Modularità
•
E’ una conseguenza del principio di decomposizione: il progetto
deve essere modulare, con moduli ben definiti, facilmente
gestibili e con interfacce ben definite
•
….. architettura del software è vista come l’organizzazione della
struttura modulare, cioè moduli + relazioni fra di essi
– ogni modulo implementa un’astrazione, potenzialmente
riusabile nello stesso o in altri sistemi;
– ogni astrazione ha un unico e ben definito scopo;
Anna Rita Fasolino- Ingegneria del Software La Progettazione
22
11
Modulo
• Un modulo è un’entità SW identificata da un nome
che:
– contiene istruzioni, strutture dati, controllo
– può essere incluso in un altro modulo
– può usare un altro modulo.
– In termini di costrutti di programmazione : una macro, un
programma, un sottoprogramma, un processo, un package
•
…. considereremo il modulo come un contenitore per esprimere
astrazioni (funzionali, di strutture dati, di controllo)
Anna Rita Fasolino- Ingegneria del Software La Progettazione
23
Tecniche di progettazione
• Approccio Top- down
– si parte con l’identificazione dei principali componenti del
sistema, i quali vengono decomposti in componenti di più
basso livello, iterando finché viene raggiunto il desiderato
livello di dettaglio (Step-wise Refinement)
• Approccio Bottom-up
– si parte progettando i componenti basilari di basso livello e si
procede con i componenti di più alto livello che utilizzano i
primi.
– Si procede dunque per livelli di astrazione (layers of
abstraction)
Anna Rita Fasolino- Ingegneria del Software La Progettazione
24
12
Decomposizione funzionale
• Ciascun modulo implementa una specifica
funzionalità dei requisiti (o sub-funzionalità) ed ha
una interfaccia semplice verso gli altri moduli
(indipendenza funzionale)
– Minimizzare il numero e la complessità delle interconnessioni fra moduli
– Massimizzare la forza interna di un modulo intesa come
contributo alla funzionalità dato da ciascun modulo
• Criteri per la modularizzazione: Coesione ed
Accoppiamento
25
Anna Rita Fasolino- Ingegneria del Software La Progettazione
Coesione
•
Esprime il grado di correlazione fra gli elementi all’interno di un
modulo.
– Un modulo coesivo esegue un singolo compito e richiede poca
interazione con le procedure eseguite in altre parti del software
•
coesione ⇒ un modulo deve esprimere 1 sola astrazione
•
(1 funzione, 1 oggetto, 1 tipo astratto, 1 oggetto generico, 1 tipo
astratto generico, 1 politica, 1 controllo)
•
Spettro di coesione
•
•
•
•
•
•
•
Casuale
Logica
Temporale
Procedurale
Comunicazionale
Sequenziale
Funzionale
Anna Rita Fasolino- Ingegneria del Software La Progettazione
-
+
26
13
Spettro di Coesione
•
•
•
•
•
•
•
coesione casuale: un modulo svolge attività poco correlate fra loro;
coesione logica: un modulo svolge attività logicamente correlate fra loro
(trattamento errori, stampa risultati,…);
coesione temporale: un modulo svolge attività che devono essere
eseguite in uno stesso intervallo di tempo (inizializzazione,
terminazione,…);
coesione procedurale: un modulo svolge attività correlate da eseguirsi in
uno specifico ordine;
coesione comunicazionale: un modulo svolge attività che si riferiscono
ad un insieme di dati comune;
coesione sequenziale: un modulo svolge attività per cui l’output di
un’attività è l’input della successiva;
coesione funzionale: un modulo svolge un’unica attività e nessun’altra
aggiuntiva, tutti gli elementi del modulo sono strettamente correlati e
contribuiscono alla realizzazione dell’attività
Anna Rita Fasolino- Ingegneria del Software La Progettazione
27
RICONOSCIMENTO DELLA COESIONE
•
Una regola empirica per determinare la coesione è la seguente:
• descrivere la funzione del modulo con una frase:
• se la frase è composta, contiene virgole o più di un verbo, il
modulo probabilmente svolge più di una funzione; (sequenziale
- comunicazionale - logica)
• se la frase fa riferimento al tempo ( prima, dopo, quando, alla
fine, …) probabilmente coesione sequenziale, temporale o
procedurale;
• se la parte predicativa non ha, dopo il verbo, un singolo oggetto
specifico, probabilmente coesione comunicazionale o logica
(ad es. “stampa tutti i dati”, … ma “stampa tutti i dati della
fattura” ha coesione funzionale);
• parole come inizializza, pulisci, implicano coesione temporale
Anna Rita Fasolino- Ingegneria del Software La Progettazione
28
14
RICONOSCIMENTO DELLA COESIONE
Nel modulo si riconosce una funzione
del dominio di applicazione ?
no
s i
cosa lega le
attività nel modulo
funzionale
N e s s u n o d e i d u e
Flusso di controllo
Flusso dei dati
E’ importante
la sequenza ?
n o
Temporale
E’ importante
la sequenza ?
si
no
Procedurale
C o m u n i c a z i o n .
Le attività
appartengono
alla stessa
categoria ?
si
Sequenz.
no
Casuale
si
Logico
Anna Rita Fasolino- Ingegneria del Software La Progettazione
29
Accoppiamento
• Esprime la forza di inter-connessione fra moduli
– maggiori connessioni implicano maggiore dipendenza fra
moduli, ossia maggiore conoscenza di un modulo richiesta
per comprendere un altro modulo (implicazioni su
comprensibilità e manutenibilità del modulo)
• Minimizzare l’accoppiamento, semplificando:
– tipo di connessione (solo connessioni attraverso l’interfaccia,
non patologiche)
– complessità dell’interfaccia (numero e tipo di parametri)
– tipo di flusso di informazioni fra moduli (dati / controlli)
Anna Rita Fasolino- Ingegneria del Software La Progettazione
30
15
Spettro di accoppiamento
•
•
•
•
•
•
•
nessun accoppiamento diretto;
accoppiamento per dati: lista di parametri costituiti da dati
semplice;
accoppiamento per strutture: struttura dati passata tramite
interfaccia;
accoppiamento per controllo: passaggio di flag condizionanti
l’esecuzione in un altro modulo;
accoppiamento esterno: associazione ad elementi esterni (ad es.
I/O a specifici dispositivi);
accoppiamento per aree comuni: condivisione di aree dati
comuni;
accoppiamento per contenuto: un modulo usa e modifica dati o
informazioni di controllo propri di un altro modulo.
Anna Rita Fasolino- Ingegneria del Software La Progettazione
31
Obiettivi della progettazione modulare
• massimizzare la coesione interna: per migliorare la
comprensibilità del modulo e la sua modificabilità;
• minimizzare il grado di accoppiamento fra i moduli:
per migliorare la comprensibilità di ciascun modulo.
• Con riferimento all’astrazione, un lasco
accoppiamento ⇒ un’astrazione implementata in un
modulo deve essere largamente indipendente da
ogni altra astrazione
Anna Rita Fasolino- Ingegneria del Software La Progettazione
32
16
Relazioni fra moduli
Relazione USA:
due moduli mi ed mj sono in tale relazione (mi USA mj ) se, affinché il modulo
mi risulti corretto rispetto alle sue specifiche, è necessaria anche la corretta
esecuzione di mj : ovvero mi necessita di qualche cosa implementata in mj .
costituzione di gerarchie (relazione USA
priva di cicli)
A
B
D
C
E
F
Livelli: livello 0 per moduli senza archi
entranti; livello i se il cammino di massima
lunghezza congiungendoli a moduli a livello
0 ha lunghezza i.
mi ha un’astrazione maggiore di mj se ha un
livello minore.
Anna Rita Fasolino- Ingegneria del Software La Progettazione
33
Relazione USA
Due estremi:
• ciascun modulo usa tutti gli altri: accoppiamento elevato;
• nessun modulo usa un altro (sistema complessivo formato da moduli totalmente
isolati, non interagenti tra loro): può nascondere gravi difetti di duplicazione di
intere parti, ad esempio funzionalità comuni a più moduli distribuite tra essi e
non raggruppate.
Per una buona progettazione:
• un modulo dovrebbe fare un uso limitato delle risorse messe a disposizione
dagli altri
• un modulo dovrebbe essere usato da più altri (buona fattorizzazione delle
risorse che sono usate da altri)
Attenzione: la realizzazione fisica di una relazione USA fra moduli non sempre
ha luogo tramite chiamate a procedura, ma anche mediante accessi ad
informazioni condivise, scambio di messaggi.
Anna Rita Fasolino- Ingegneria del Software La Progettazione
34
17
Relazione COMPONENTE_DI
deriva dalla scomposizione, raffinamento, di moduli in sottomoduli;
dà luogo ad una gerarchia, rappresentabile graficamente.
A
A1
A2
A3
COMPONENTE_DI
Anna Rita Fasolino- Ingegneria del Software La Progettazione
35
N.B.
fra tutti i moduli di una relazione COMPONENTE_DI, solo quelli
che non hanno alcun altro modulo componente hanno un’esistenza
fisica effettiva nel sistema SW finale
I moduli intermedi sono contenitori logici di moduli.
Essi sono dovuti al fatto che è impossibile in un unico passo
giungere alla comprensione di tutti e soli i moduli reali.
Fanno comunque parte della documentazione del progetto
Anna Rita Fasolino- Ingegneria del Software La Progettazione
36
18
Se un modulo mi scomposto in sottomoduli m(i) era in relazione
USA con altri moduli, vanno ridefiniti (ridistubuiti) i
collegamenti delle relazioni USA sui moduli m(i).
Con riferimento all’esempio presedente:
COMPONENTE_DI
USA
A
A1
A2
A3
B
B1
A1
A2
A3
F
B
C
C
B2
C1
B1
C2
D
B2
F
E
37
Anna Rita Fasolino- Ingegneria del Software La Progettazione
Notazioni grafiche del Design (GDN)
esprimono la struttura gerarchica e
le relazioni tra i moduli
M
B
B1
D
C
B2
E
C1
A
C2
F
B
B1
D
Anna Rita Fasolino- Ingegneria del Software La Progettazione
C
B2
C1
E
C2
F
38
19
Una Notazione Testuale dei Moduli (TDN)
module <nome_modulo>
uses <lista_nomi_moduli_usati>
exports <lista_risorse_esportate>
--eventuali commenti sulle risorse esportate
--vincoli su come possono essere usate dai clienti;
implementation
is composed of <lista_ nomi_moduli_componenti>
--descrizione ad alto livello di astrazione della implementazione
end <nome_modulo>
39
Anna Rita Fasolino- Ingegneria del Software La Progettazione
Esempio
moduleY
module X
R
T
A
B
module Z
C
Risorse richieste da moduli client
Anna Rita Fasolino- Ingegneria del Software La Progettazione
40
20
Esempio
module X
uses Y, Z
exports var A : integer;
type B : array (1. .10) of real;
procedure C ( D: in out B; E: in integer; F: in real);
--eventuali commenti su chi sono A, B, e C, con eventuali
--vincoli su come possono essere usati dai clienti;
--p.es., elementi di tipo B trasferiti a C devono essere
--inizializzati dal cliente e non devono contenere tutti 0
implementation
is composed of R, T
--se necessario, fornire commenti su come realizzato
--nell’es., come è scomposto in moduli di più basso livello
;
end X
Anna Rita Fasolino- Ingegneria del Software La Progettazione
41
Esempio
module R
uses Y
exports var K : record . . . end;
type B : array (1. .10) of real;
procedure C (D: in out B; E: in integer; F: in real);
implementation
...
end R
module T
uses Y, Z, R
exports var A : integer;
implementation
...
end T
Anna Rita Fasolino- Ingegneria del Software La Progettazione
42
21
Il Progetto dei dati
•
In questa fase vengono scelte le rappresentazioni logiche più
opportune dei dati (struttura dei dati) identificati nella fase di specifica
dei requisiti, che siano più vicine a quelle che saranno utilizzate in fase
di codifica
• ad esempio si decide di utilizzare liste, stacks, archivi, … senza
specificare come poi saranno implementati
•
•
•
•
•
Alcune linee guida...
usare metodi di analisi sistematici: rappresentare la struttura dei dati e
le relazioni tra di essi, considerare strutture alternative e valutarne
l’impatto sul software
astrazione sui dati: identificare tutte le strutture dati e le relative
operazioni su di esse
sviluppare un dizionario dei dati: indicare esplicitamente le relazioni tra
i dati ed i vincoli esistenti sugli elementi di una struttura dati
information hiding e pensare al riuso
Anna Rita Fasolino- Ingegneria del Software La Progettazione
43
La Progettazione di dettaglio
•
•
Scopo di questa fase, detta anche di progetto procedurale, è
di fissare il come debbano essere realizzate le componenti di
progetto specificate. Richiede la definizione di:
•
dettagli algoritmici,
•
rappresentazioni reali dei dati,
•
relazioni tra funzioni e strutture dati,
•
packaging del software: cioè come mettere insieme in moduli
funzioni e strutture dati.
Diversi tipi di notazione:
•
flow-chart o linguaggio naturale strutturato
•
pseudocodice (PDL)
•
diagrammi a scatole
•
tabelle di decisione
Anna Rita Fasolino- Ingegneria del Software La Progettazione
44
22
La documentazione di Progetto
1. Ambito
1.1 Obiettivi del sistema
1.2 Requisiti principali del Sw
1.3
Vincoli e limitazioni progettuali
2. Progetto dei dati
2.1 Oggetti-dato e strutture dati
2.2 File e Basi di dati
2.2.1 Struttura dei file esterni
2.2.2 Struttutra logica
2.2.2.1 Descrizione dei record logici
2.2.2.2 Metodo di accesso
2.3 Riferimenti incrociati file-dati
3. Progetto architetturale
rappresentazione grafica della struttura
3.1 Descrizione della struttura modulare
3.2 Descrizione del flusso dati e di controllo
4. Progetto delle interfacce
4.1 Specifica dell’interfaccia uomo -macchina
4.2 Regole di progettazione dell’interfaccia uomo macchina
4.3 Progetto delle interfacce esterne
4.3.1 Interfacce verso i dati esterni
4.3.2 Interfacce verso sistemi e dispositivi
esterni
4.4 Regole di progettazione dell’interfacce esterne
Anna Rita Fasolino- Ingegneria del Software La Progettazione
5. Progetto procedurale
Per ogni modulo
5.1 Descrizione informale
5.2 Descrizione delle interfacce
5.3 Descrizione del linguaggio del progetto
5.4 Moduli utilizzati
5.5 Descrizione strutture dati interne
5.6 Descrizione del progetto di dettaglio
5.7 Commenti/restrizioni/limitazioni
rappresentazione in TDN
6. Indice dei requisiti (con riferimenti incrociati)
6.1 preparazione al testing
6.1.1 Linee guida
6.1.2 Strategia di integrazione
7. Considerazioni specifiche
8. Note particolari
9. Appendici
45
23