SlideShare a Scribd company logo
HTTP://WWW.BERTADANILO.NAME
Tecniche di analisi dei
requisiti e modelli software.
Le tabelle decisionali, i grafi e flow-chart, le
macchine a stati finiti, le reti di Petri ed il Test
Combinatoriale nel processo di creazione del
software.
Danilo Berta
26/11/2014
[Versione 1.2]
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 2 di 146
Contenuti
Introduzione ...................................................................................................................................................... 6
Capitolo 1 - Tabelle Decisionali ......................................................................................................................... 8
Definizione di tabella decisionale.................................................................................................................. 9
Logic Friday.................................................................................................................................................. 15
Care or don’t care ?................................................................................................................................. 18
Esempio # 1 – il modulo di registrazione utente......................................................................................... 23
Tabelle funzionali......................................................................................................................................... 27
Riduzione della tabella funzionale in decisionale.................................................................................... 27
Il caso degenere della funzione............................................................................................................... 29
Esempio # 2 – la scuola guida...................................................................................................................... 31
Esempio #3 - un caso un po’ complesso...................................................................................................... 34
Riduzione delle tabelle di decisione........................................................................................................ 38
Capitolo 2 – Grafi e flow chart......................................................................................................................... 44
Definizione di grafo ..................................................................................................................................... 45
Caratteristiche di un grafo........................................................................................................................... 47
Definizione di vertici adiacenti ................................................................................................................ 47
Definizione di grado di un vertice............................................................................................................ 48
Definizione di cammino in un grafo......................................................................................................... 49
Definizione di ciclo in un grafo ................................................................................................................ 50
Rappresentazioni matriciali di un grafo....................................................................................................... 51
Matrice delle adiacenze........................................................................................................................... 51
Matrice d’incidenza................................................................................................................................. 52
Definizione di flow chart.............................................................................................................................. 53
Simboli grafici utilizzati............................................................................................................................ 53
Un –semplice – esempio dal mondo reale .............................................................................................. 55
Definizione di complessità ciclomatica........................................................................................................ 57
Cammini elementari e complessità ciclomatica.......................................................................................... 60
Capitolo 3 – Automa a stati finiti..................................................................................................................... 65
Definizione di automa o macchina a stati finiti........................................................................................... 66
Esempio #4 – Le scuole medie inferiori....................................................................................................... 66
Riduzione di un ASF in tabella decisionale. ............................................................................................. 68
Esempio #4bis – vacanza o studio punitivo?............................................................................................... 71
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 3 di 146
Definizione formale di automa agli stati finiti in termini di tabella decisionale.......................................... 74
Capitolo 4 – Reti di Petri.................................................................................................................................. 75
Definizioni.................................................................................................................................................... 76
Dinamicità nelle reti di Petri: i token........................................................................................................... 78
Esempio # 5 – Cucire le … stringhe!............................................................................................................. 84
Valore semantico e definizioni formali........................................................................................................ 87
Descrizione operativa di una rete di Petri................................................................................................... 93
Combinazioni parziali distinte di N numeri interi........................................................................................ 95
Vasi, tubi e palline... .................................................................................................................................... 96
Algoritmo di soluzione del problema fondamentale per una rete di Petri............................................... 100
Passo # 1 – Aggiunta delle combinazioni distinte a ti,j........................................................................... 101
Passo # 2 – Riduzione dei valori nelle colonne con più valori negativi ................................................. 102
Passo # 3 – Calcolo della configurazione finale..................................................................................... 103
Calcolo delle successive configurazioni................................................................................................. 103
Un esempio più complesso.................................................................................................................... 107
Altro esempio: numero token maggiore della somma delle molteplicità del posto............................. 109
Ultimo esempio: più configurazioni finali.............................................................................................. 110
Reti di Petri binarie.................................................................................................................................... 112
Capitolo 5 –Test combinatoriale ................................................................................................................... 115
1-wise testing. ............................................................................................................................................... 117
2-wise testing o pairwise testing................................................................................................................... 118
n-wise testing con n>2.................................................................................................................................. 121
Combinatorial Testing Tools.......................................................................................................................... 122
Procedura di installazione ......................................................................................................................... 123
Procedura di configurazione...................................................................................................................... 125
Panoramica generale dei Combinatorial Testing Tools............................................................................. 126
Convenzioni lessicali e tipografiche........................................................................................................... 129
Tool di primo livello – script batch DOS .................................................................................................... 130
Come convenzione, il nome di tutti gli script batch segue lo schema: ................................................. 130
Tool runW.............................................................................................................................................. 130
Tool runCC e runsCC.............................................................................................................................. 130
Tools runT e runsT................................................................................................................................. 131
Tools runTS e runsTS ............................................................................................................................. 132
Tools runTSF e runsTSF.......................................................................................................................... 133
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 4 di 146
Tool runR ............................................................................................................................................... 134
Tool runC ............................................................................................................................................... 134
Tool di secondo livello – eseguibili............................................................................................................ 136
Eseguibili calcolacopertura.exe e calcolaCoperturaSlow.exe ............................................................... 136
Eseguibile Combinazioni_n_k................................................................................................................ 136
Eseguibili generaTestSet.exe e generaTestSetSlow.exe........................................................................ 137
Eseguibile ProdCart.exe......................................................................................................................... 138
Eseguibile reduceNple.exe .................................................................................................................... 139
Eseguibili di utility.................................................................................................................................. 140
Capitolo 6 – Quello che non viene detto....................................................................................................... 142
Un semplice caso … ................................................................................................................................... 143
E le specifiche? .......................................................................................................................................... 145
Nota conclusiva ............................................................................................................................................. 146
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 5 di 146
# Numero versione Data Pubblicazione Descrizione
2 1.1 29 marzo 2013 Aggiunti i seguenti paragrafi:
 Descrizione operativa di una rete di Petri.
 Combinazioni parziali distinte di N numeri interi.
 Vasi, tubi e palline...
 Algoritmo di soluzione del problema
fondamentale per una rete di Petri
 Passo # 1 – Aggiunta delle combinazioni distinte
a ti,j
 Passo # 2 – Riduzione dei valori nelle colonne
con più valori negativi
 Passo # 3 – Calcolo della configurazione finale.
 Calcolo delle successive configurazioni.
 Un esempio più complesso
 Altro esempio: numero token maggiore della
somma delle molteplicità del posto.
 Ultimo esempio: più configurazioni finali
 Reti di Petri binarie
1 1.0 18 marzo 2013 Versione iniziale
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 6 di 146
Introduzione
Nel linguaggio verbale (scritto e parlato) il verbo indica l’azione che è svolta dal soggetto. Nella lingua
italiana i tempi e modi dei verbi sono i seguenti:
Figura 1 – Schema dei tempi e modi dei verbi italiani
Nella tabella che segue riportiamo la descrizione dei modi verbali, copiata integralmente dalla pagina web
http://grammatica-italiana.dossier.net/grammatica-italiana-10.htm:
# Modo verbale Descrizione
1 Indicativo È il modo della realtà e della certezza ed esprime un fatto reale o supposto
come tale.
2 Infinito È uno dei modi indefiniti del verbo ed esprime genericamente l'idea del
verbo senza determinazione di persona e di numero.
3 Participio È così detto perché partecipa della funzione nominale come un aggettivo e si
usa in funzione attributiva, predicativa e verbale.
4 Gerundio Esprime un complemento di mezzo, di modo o di maniera, di coincidenza
(simultaneità), in genere un'azione secondaria rispetto alla principale.
5 Congiuntivo È il modo che esprime una azione possibile, incerta o desiderata.
6 Condizionale È il modo dell'incertezza e dell'irrealtà.
Tabella 1 – Descrizione dei modi dei verbi nella lingua italiana
Non vogliamo tenere una lezione di grammatica. Vogliamo semplicemente evidenziare che, per esprimere
un concetto, la lingua italiana (ma anche altri idiomi, in modi diversi) permette costrutti raffinati e ricchi di
decorazioni. Ora, riducendosi all’osso, osserviamo che i modi verbali possono essere ridotti in due grandi
classi:
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 7 di 146
1. ASSOLUTA, quando – indipendentemente dal tempo passato, presente o futuro – si vuole
esprimere una azione CERTA.
2. CONDIZIONALE, quando – indipendentemente dal tempo passato, presente o futuro – si vuole
esprimere una azione che avrà luogo SE SI VERIFICANO DETERMINATE CONDIZIONI.
Un software è costruito con due elementi di base (1
):
1. Istruzioni
2. Costrutti condizionali (singoli o multipli)
Le istruzioni sono elementi fondamentali che sono sempre eseguiti, mentre i costrutti condizionali (if, iif,
switch, case, etc) permettono l’esecuzione delle istruzioni quando è verificata una o più condizioni. Il
confronto con le classi Assoluta e Condizionale è immediato.
Quando si ha a che fare con la progettazione di un sistema software, ci si trova a dover gestire dei requisiti
espressi in linguaggio naturale e posti nella forma:
“Se accade questo e quest’altro, fai quest’ azione; altrimenti se occorre la condizione A oppure la B, fai una
seconda azione”.
Semplificando, abbiamo a che fare con dei costrutti che richiedono che, dato il verificarsi di certe
condizioni, devono essere svolte certe azioni. Le condizioni possono essere (e in genere lo sono) molto
complesse e lo stesso vale per le azioni che devono essere svolte. In altre parole dobbiamo – nell’analisi dei
requisiti – sfrondare la complessità del linguaggio verbale, fondato su sei modi verbali e su una dozzina di
tempi, in due classi: ASSOLUTO (si fa) o CONDIZIONALE (si fa a condizione che).
Le azioni possono essere descritte come sottorequisiti (per i quali valgono comunque la logica condizioni →
azioni e come tali vanno analizzati), oppure possono essere considerati come algoritmi o funzioni, oppure
ancora possono essere delle altre condizioni (ad esempio, se x è divisibile per 2 – condizione – allora x è pari
, che può essere interpretato come una nuova condizione).
Analizzare un requisito significa innanzi tutto individuare azioni e condizioni e quindi correlare questi due
elementi tra di loro.
Le tabelle decisionali possono essere utilizzate per descrivere i requisiti sotto forma di condizioni e di azioni.
1
Si dovrebbe tenere conto anche dei costrutti ciclici (for, do-while, while, etc..), ma tali costrutti non fanno altro che
eseguire più volte istruzioni e condizioni.
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 8 di 146
Capitolo 1 - Tabelle Decisionali
TTAABBEELLLLEE DDEECCIISSIIOONNAALLII
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 9 di 146
Definizione di tabella decisionale
Quanto riportato in Tabella 2 rappresenta una tabella decisionale :
Condizioni 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
A – Condizione # 1 T T F F T T F F T T F F T T F F
B - Condizione # 2 T F T F T F T F T F T F T F T F
C - Condizione # 3 T T T T F F F F T T T T F F F F
…. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
N - Condizione # N T .. .. .. .. .. .. .. .. .. .. .. .. .. .. F
Azioni
F0: Azione # 1 1 1 1 1 1 1 1 1 1
F1: Azione # 2 1 1 1 1 1 1 1 1 1
… .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
F(N-1) : Azione # N+1 1 1 1 1 1 1 1 1 1
Tabella 2 – Struttura di Tabella Decisionale
La prima colonna è divisa in due parti: la sezione “alta” contiene le condizioni booleane, una per ogni riga.
La sezione “bassa” contiene le azioni che devono essere eseguite, qualora siano verificate le corrispondenti
azioni. Le colonne sono numerate per maggior chiarezza, ma non si è obbligati a farlo; la numerazione parte
da 0, cosa che potrebbe sembrare un po’ strana; nel prossimo capitolo capiremo il perché.
Chiariamo ora la modalità di lettura della tabella decisionale e consideriamo la colonna # 0. La colonna # 0
può essere interpretata con la seguente espressione:
Quando	(A	è	vera)	e	(B	è	vera)	e	(C	è	vera)	…	e	(N	è	vera)	allora	(Eseguo	F0)	e	(Eseguo	F1) e	(Eseguo	FN)	
Analogamente, per la colonna # 6 si ha:
Quando	(A	è	falsa)	e	(B	è	vera)	e	(C	è	falsa)	…		allora (Eseguo	F1)	…	
Con il linguaggio booleano, possiamo scrivere:
Colonna	#	0:	(A=True)	AND	(B=True)	AND	(C=True)	→	(F0	=	True)	AND	(F1	=	True)	AND	(FN		=	True)	
Colonna	#	6:	(A=False)	AND	(B=True)	AND	(C=False)	→	(F1	=	True)		
Ricordiamo che:
a) Una condizione booleana (o semplicemente condizione) può sempre e solo assumere uno dei due
valori TRUE o FALSE, indicati anche come T o F oppure ancora 1 o 0;
b) Le condizioni booleane che compaiono nella stessa colonna sono in AND;
c) Le azioni che compaiono nella stessa colonna sono in AND;
d) Le condizioni booleane sono da considerarsi indipendenti tra di loro.
Chiariamo che cosa s’intende per condizione booleana indipendente o dipendente con un esempio.
Consideriamo le seguenti affermazioni:
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 10 di 146
1. Avere i capelli biondi
2. Avere gli occhi scuri
Una persona può avere gli occhi scuri o chiari indipendentemente dal colore dei capelli. Se considero le due
affermazioni sopra come condizioni, posso scrivere la seguente tabella:
Condizione # 1: Avere i capelli biondi Condizione # 2: Avere gli occhi scuri
TRUE TRUE
TRUE FALSE
FALSE TRUE
FALSE FALSE
Tabella 3 – Condizioni indipendenti.
Tutte le possibili combinazioni (C1,C2) di valori TRUE e FALSE sono ammissibili; non vi sono vincoli tra le due
condizioni. Le condizioni booleane C1 e C2 sono in questo caso indipendenti.
Consideriamo invece le seguenti affermazioni concernenti uno stesso individuo:
1. Essere maggiorenne
2. Avere un’età inferiore a 18 anni.
Considerando le due affermazioni sopra come condizioni, abbiamo la seguente tabella:
Condizione # 1: Essere maggiorenne Condizione # 2: Età inferiore a 18 anni
TRUE TRUE
TRUE FALSE
FALSE TRUE
FALSE FALSE
Tabella 4 – Condizioni dipendenti, primo esempio
E’ ovvio che è impossibile che entrambe le condizioni siano TRUE per uno stesso individuo; e non è neanche
possibile che siano entrambi FALSE; se l’una e vera, l’altra deve necessariamente essere falsa. In questo
caso, la relazione tra le due condizioni C1 e C2 è evidente: C1 = NOT (C2) oppure la duale: C2 = NOT (C1). La
tabella sopra riportata la chiameremo “tabella di dipendenza” e le condizioni booleane C1 e C2 sono in
questo caso dipendenti, nel senso che:
a) Specificate alcune, si possono conoscere le altre, in modo univoco per almeno alcuni valori.
b) Esistono delle combinazioni delle condizioni che non sono permesse.
Un ragionamento analogo si può fare per più di due variabili booleane.
Nel seguito, data una condizione C, indicheremo con l’apice la condizione negata, ossia: C’= NOT (C).
Per fare un altro esempio di condizioni dipendenti consideriamo il seguente mini-requisito. Supponiamo
che in un form di registrazione a un sito web vi sia un campo e-mail in cui inserire la propria e-mail; è
richiesto che: “L’indirizzo di e-mail non è obbligatorio, ma se inserito la mail deve essere formalmente
valida”. Leggendolo vengono in mente le seguenti due condizioni:
1. Indirizzo di mail vuoto
2. Indirizzo di mail valido
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 11 di 146
Possiamo costruire la seguente tabella della verità:
# A: Indirizzo di mail vuoto B: Indirizzo di mail valido
1 True True
2 True False
3 False True
4 False False
Tabella 5 – Condizioni dipendenti, secondo esempio
Ora, se il campo e-mail è vuoto, non può essere valido; la combinazione #1 (TRUE, TRUE) non ha senso, ma
è accettata perché il campo è facoltativo. La combinazione #2, che avrebbe senso da un punto di vista
“tecnico” (se l’indirizzo di mail è vuoto, non è valido per definizione: un indirizzo di e-mail = “” non è
sicuramente tecnicamente valido!) deve essere escluso perché in contraddizione con la combinazione # 1
(l’indirizzo di mail non valorizzato è accettato). Se l’indirizzo di e-mail non è vuoto, allora contiene una
stringa alfanumerica, che può essere una mail formalmente valida (pippo@miamail.com) – e siamo nel caso
#3 (FALSE, TRUE) – oppure non essere una mail valida (uyhiuy89iuoj@) – e siamo nel caso #4 (FALSE,
FALSE).
Le due condizioni A e B sono tra di loro dipendenti, in quanto:
a) Nel caso si fissi A = FALSE, la condizione B può assumere entrambi i valori TRUE o FALSE.
b) La combinazione # 1 (TRUE,TRUE) è permessa.
c) La combinazione #2 (TRUE,FALSE) è proibita.
Consideriamo ancora il seguente caso di condizioni dipendenti. Consideriamo una variabile X che può
assumere uno dei tre numeri interi {1,2,3}. Se X=1 ovviamente non può valere 2 e neppure 3. Al posto della
variabile X consideriamo le tre condizioni:
1. A: X = 1
2. B: X = 2
3. C: X = 3
Le tre condizioni sono dipendenti. Vale la seguente tabella di dipendenza:
# A: X = 1 B: X = 2 C: X = 3
1 TRUE FALSE FALSE
2 FALSE TRUE FALSE
3 FALSE FALSE TRUE
4 TRUE TRUE TRUE
5 TRUE FALSE TRUE
6 FALSE TRUE TRUE
7 TRUE TRUE FALSE
8 FALSE FALSE FALSE
Tabella 6 –Condizioni dipendenti, terzo esempio
Solo le combinazioni (TRUE,FALSE,FALSE), (FALSE, TRUE, FALSE) e (FALSE,FALSE,TRUE) sono valide; in altri
termini solo una condizione alla volta è TRUE. La condizione #4 (TRUE,TRUE,TRUE) è evidentemente
impossibile in quanto la variabile X non può contemporaneamente assumere tutte e tre i valori {1,2,3}. Un
ragionamento analogo vale per le combinazioni #5 → #8. Anche la combinazione (FALSE,FALSE,FALSE) non
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 12 di 146
è valida, perché la variabile X deve (obbligatoriamente) assumere un valore; nel caso non ci fosse questo
obbligo, la combinazione #8 dovrebbe essere considerata valida.
Dalla tabella sopra, considerando solo i casi validi, si possono scrivere le seguenti equazioni booleane, che
definiscono la dipendenza delle condizioni A,B,C tra di loro(2
):
 (A=TRUE) AND (B=FALSE) AND (C=FALSE) = A
 (A=FALSE) AND (B=TRUE) AND (C=FALSE) = B
 (A=FALSE) AND (B=FALSE) AND (C=TRUE) = C
Nel caso in cui dovesse essere presa in considerazione la riga #8, quindi dando la possibilità alla variabile X
di non assumere nessun valore, si deve anche considerare l’equazione:
 (A=FALSE) AND (B=FALSE) AND (C=FALSE) = FALSE
In casi in cui una variabile può assumere N valori distinti, si può genericamente dire che è possibile derivare
N condizioni dipendenti (A,B,C,…,N) , essendo valide le N equazioni booleane di dipendenza seguenti:
(A=FALSE) AND (B=FALSE) AND (C=FALSE)…AND (K=TRUE) AND … AND (N=FALSE) = K
per tutte le condizioni K = A,B,..,N. Si deve considerare anche l’equazione:
(A=FALSE) AND (B=FALSE) AND (C=FALSE)…AND (K=FALSE) AND … AND (N=FALSE) = FALSE
se si suppone che la variabile possa non assumere nessuno degli N valori.
Un caso particolare è quello di una variabile X che possa assumere uno ed un sol valore, poniamo X=1. In
questo caso, l’unica condizione che si può derivare è A: X=1 che è sempre TRUE. In pratica abbiamo una
variabile binaria assoluta o auto-vincolata in cui la tabella di vincolo è la seguente:
# A: X = 1
1 TRUE
2 FALSE
Tabella 7 – variabile binaria auto-vincolata
Continuando nella lettura della tabella decisionale, consideriamo il seguente esempio di tabella decisionale:
Condizioni 0 1 2 3
A – Condizione # 1 T T F F
B - Condizione # 2 T F T F
Azioni
F0: Azione # 1 1 1 1
F1: Azione # 2 1 1 1
Tabella 8 – Tabella decisionale con 2 condizioni e 2 azioni
2
Dire infatti (A=TRUE) AND (B=FALSE) AND (C=FALSE) è come dire se (x=1) e (x≠2) e (x≠3), quanto vale x? Ovviamente
x=1. Stesso ragionamento per le altre due condizioni.
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 13 di 146
La tabella ha due condizioni A e B e due azioni F0 ed F1. Leggendo le colonne, come abbiamo mostrato
prima, abbiamo:
# Relazione Colonna Relazione Azione - Condizione
1 Colonna 0 F0 = (A = True) AND (B = True)
2 Colonna 0 F1 = (A = True) AND (B = True)
3 Colonna 1 F1 = (A = True) AND (B = False)
4 Colonna 2 F0 = (A = False) AND (B = True)
5 Colonna 3 F0 = (A = False) AND (B = False)
6 Colonna 3 F1 = (A = False) AND (B = False)
Tabella 9 – Tabella esplicativa della decisionale (prima forma)
Per semplificare la scrittura conveniamo che:
1. Quando scriviamo la condizione A è da intendersi A = True
2. Quando scriviamo la condizione A’ ( = A negata) è da intendersi A = False
3. Sostituiamo all’operatore AND il simbolo · che può anche essere tralasciato; in pratica:
(A AND B) ≡ (A· B) ≡ AB
4. Sostituiamo all’operatore OR il simbolo + ; in pratica:
(A OR B) ≡ (A + B)
La tabella sopra si riscrive più semplicemente:
# Relazione Colonna Relazione Azione - Condizione
1 Colonna 0 F0 = AB
2 Colonna 0 F1 = AB
3 Colonna 1 F1 = AB’
4 Colonna 2 F0 = A’B
5 Colonna 3 F0 = A’B’
6 Colonna 3 F1 = A’B’
Tabella 10 – Tabella esplicativa della decisionale (seconda forma)
Raggruppando insieme le azioni F0 e F1:
 F0 = A B + A' B + A' B';
 F1 = A B + A B' + A' B';
Ci poniamo la seguente domanda: esiste un metodo che mi permette di ridurre al minimo le espressioni
trovate per F0 ed F1 ? Si potrebbe pensare – visto l’esempio sopra – che la domanda sia “oziosa” perché le
due espressioni non sono poi così complicate. Per rispondere all’obiezione, supponiamo di dover
implementare uno spezzone di codice che, controllando le condizioni A e B, esegua le azioni F0 o F1. Il
codice è quello sotto riportato:
if((A=true AND B=true) OR (A=false AND B=true) OR (A=false AND B=false)){
print "Sto eseguendo F0";}
if((A=true AND B=true) OR (A=true AND B=false) OR (A=false AND B=false)){
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 14 di 146
print "Sto eseguendo F1";}
Vediamo ora se riusciamo a ridurre le espressioni trovate per F0 ed F1. Con un po’ di algebra booleana:
 F0 = A B + A' B + A' B' = AB + A’ (B + B’) = AB + A’ = (A’)’ B + A’ = A’ + (A’)’B = A' + B;
 F1 = A B + A B' + A' B' = AB + B’ (A + A’) = AB + B’ = A(B’)’ + B’ = B’ + A(B’)’ = B’ + A = A + B'
Avendo considerato che:
1. Data una qualunque condizione booleana X si ha che: X + X’ = 1 (TRUE). Quindi A + A’ = 1 e B + B’ = 1
2. Data una qualunque condizione booleana X si ha: (X’)’ = X; quindi (A’)’ = A e (B’)’ = B.
3. Date due condizioni booleane X ed Y vale la proprietà commutativa: X + Y = Y + X
4. Il teorema dell’assorbimento del complemento mi dice che, date due qualunque condizioni
booleane A e B vale la relazione: A + A’B = A + B .
Non preoccupatevi troppo se non riuscite a seguire nel dettaglio i passaggi; la difficoltà sta nell’eseguire i
conti usando l’algebra booleana, ma l’espressione ridotta è molto più semplice rispetto l’originale e il
nostro codice diventa molto più comprensibile:
if((A=false AND B=true)){
print "Sto eseguendo F0";}
if((A=true AND B=false)){
print "Sto eseguendo F1";}
Ora, a livello pratico e operativo, nel lavoro di tutti i giorni, non è pensabile eseguire dei calcoli con l’algebra
booleana, che – nei problemi reali – sono molto più complessi rispetto a quelli appena mostrati; l’unico
sistema è di utilizzare un software adatto allo scopo. Il software che utilizzeremo si chiama Logic Friday e
sarà l’oggetto del prossimo capitolo.
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 15 di 146
Logic Friday
Il presente capitolo non vuole essere un manuale esaustivo di utilizzo del software Logic Friday, ma fornire
solo le informazioni di base utili per compiere le operazioni di minimizzazione delle tabelle decisionali.
Esiste per altro un ottimo “help on line” e l’interfaccia è semplice e intuitiva da utilizzare.
Per prima cosa si scarichi il software (gratuito alla data di stesura del presente manuale) dal sito
http://www.sontrak.com/ e lo si installi sulla propria macchina; il software gira solo in ambienti Windows.
Una volta lanciato, appare la schermata seguente:
Figura 2 – Videata principale di Logic Friday.
Click con il mouse su File →New→Truth Table ed appare la seguente videata:
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 16 di 146
Figura 3 – Scelta degli input ed output della Truth Table.
Selezionare in numero di valori d’input (sono le condizioni) e il numero di valori di output (sono le azioni)
corretti per il problema in analisi. Ad esempio, nel caso visto nel paragrafo precedente (Tabella 8) abbiamo
due input A e B (condizioni) e due output F0 e F1 (azioni). Premendo OK, il software presenta la seguente
videata:
Figura 4 – Esempio di Truth Table.
Il software prepara la tabella con tutte le possibili combinazioni dei valori delle condizioni (che sono
considerate indipendenti) e tale tabella (in nero a sinistra) non è modificabile.
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 17 di 146
Cliccando gli zeri in blu in corrispondenza dell’incrocio tra le combinazioni delle condizioni A e B e le azioni
F0 e F1, il valore cambia in modo ciclico da 0 → 1 → X. In pratica non abbiamo altro che la nostra tabella
decisionale, ma vista in forma trasposta. Il valore X sta per “don’t care” (“non importa” in inglese) e
capiremo meglio di cosa si tratta tra un po’.
Ricordiamo che Logic Friday usa la notazione 1 per TRUE e 0 per FALSE, mentre nelle tabelle sul presente
documento usiamo direttamente TRUE e FALSE; inoltre noi non inseriamo il valore 0 nella parte in basso
delle tabelle riservata alle azioni per non appesantire troppo.
Provando a inserire i valori della Tabella 8 abbiamo:
Figura 5 – Esempio di Truth Table compilata.
Premendo invio (oppure la voce di menù Truthtable→Submit) il software mostra le equazioni per F0 ed F1
che ha dedotto dai valori inseriti nella tabella (lato destro sotto la scritta “Entered by truthtable”):
Figura 6 – Equazioni delle azioni equivalenti ai valori inseriti nella Truth Table.
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 18 di 146
A questo punto se clicchi su Operation → Minimize… e compare la seguente videata di scelta:
Figura 7 – Selezione delle modalità di ottimizzazione dei calcoli di minimizzazione
Manteniamo le opzioni che sono selezionate di default e premiamo OK. Otteniamo la seguente schermata:
Figura 8 – Equazioni minimizzate
Abbiamo ottenuto così le equazioni minimizzate nel riquadro di destra sotto la scritta “Minimized”.
Care or don’t care ?
Consideriamo il seguente (semplice) requisito: “La pagina di login ad un sito web richiede l’inserimento di
user, password e codice captcha. Perché il login abbia successo, login e password devono appartenere ad
uno stesso utente (registrato in una tabella anagrafica) ed il codice capcha deve essere uguale a quello
proposto a video”.
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 19 di 146
Figura 9 – Pagina di Login
Abbiamo tre variabili binarie indipendenti: user, password e codice captca.
Le condizioni sono:
 A: utente inserito uguale a U presente sul database.
 B: password inserita uguale a quella dell’utente U.
 C: codice captcha uguale a quello mostrato a video.
Le azioni sono:
 F0: Messaggio di errore.
 F1: Login effettuato
Ora, perché sia possibile eseguire il login (azione F1), le tre condizioni devono essere tutte TRUE. Negli altri
casi,quando almeno una condizione è falsa, viene sempre inviato il messaggio di errore. La tabella
decisionale è la seguente:
Condizioni 0 1 2 3
A – utente = U T F d.c. d.c
B – Password = U T d.c. F d.c
C – Codice = codice a video T d.c d.c F
Azioni
F0: messaggio errore 1 1 1
F1: login effettuato 1
Tabella 11 – Tabella decisionale per Login Form con don’t care
Abbiamo utilizzato d.c. (acronimo per “don’t care”) per le condizioni ininfluenti sull’azione da
intraprendere. In pratica, la colonna #2 ci dice che, qualunque valore assuma la condizione B o C, è
sufficiente che la condizione A sia FALSE perché sia prodotto il messaggio di errore F0. In altri termini, i
“don’t care” sono le condizioni che sono ininfluenti sulle le azioni da intraprendere.
La Tabella 11 scritta in forma “ridotta” – utilizzando i don’t care – può essere sviluppata in forma estesa,
sostituendo i d.c. con le combinazioni dei valori TRUE e FALSE; si ottiene:
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 20 di 146
Condizioni 0 1.1 1.2 1.3 1.4 2.1 2.2 2.3 2.4 3.1 3.2 3.3 3.4
A – utente = U T F F F F T T F F T T F F
B – Password = U T T T F F F F F F T F T F
C – Codice = codice a video T T F T F T F T F F F F F
Azioni
F0: messaggio errore 1 1 1 1 1 1 1 1 1 1 1 1
F1: login effettuato 1
Tabella 12 – Tabella decisionale per Login Form sviluppata in forma estesa.
Nella Tabella 12 abbiamo indicato con 1.1, 1.2, 1.3 ed 1,4 lo sviluppo della colonna 1 della Tabella 11 e così
via per la colonna 2 e 3.
Notiamo che la Tabella 12 ha delle colonne duplicate: colonne 1.4, 2.4 e 3.4 per la combinazione (FALSE,
FALSE, FALSE), 1.3 e 2.3 per la combinazione (FALSE, FALSE, TRUE), colonne 1.2 e 3.3 per la combinazione
(FALSE, TRUE, FALSE) e colonne 2.2 e 3.2 per la combinazione (TRUE,FALSE, FALSE). Eliminando le
ridondanze, si ottiene:
Condizioni 0 1.1 2.1 2.2 2.3 3.1 3.3 3.4
A – utente = U T F T T F T F F
B – Password = U T T F F F T T F
C – Codice = codice a video T T T F T F F F
Azioni
F0: messaggio errore 1 1 1 1 1 1 1
F1: login effettuato 1
Tabella 13 – Tabella decisionale per Login Form senza ridondanze.
Quest’ultima è la tabella decisionale sviluppata e senza ridondanze (le colonne sono 8 = 23
).
Utilizzando i d.c. si semplifica e si riducono di molto le dimensioni della tabella condizionale; occorre però
fare attenzione che in alcuni casi potreste trovarvi con degli errori. Consideriamo ad esempio la seguente
generica tabella (derivante da un qualche requisito che non staremo a specificare):
Condizioni 0 1 2 3
A T T d.c. d.c
B T d.c. T d.c
C F d.c d.c T
Azioni
F0 1 1 1
F1 1
Tabella 14 – Tabella decisionale con don’t care NON corretti
Se sviluppiamo la Tabella 14 otteniamo la seguente:
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 21 di 146
Condizioni 0 1 2 3 4 5 6 7 8 9 10 11 12
A T T T T T T F T F T F T F
B T T F T F T T T T T T F F
C F T T F F T T F F T T T T
Azioni
F0 1 1 1 1 1 1 1 1 1 1 1 1
F1 1
Tabella 15 – Tabella decisionale con don’t care NON corretti in forma sviluppata
Vediamo che la colonna #0 e la colonna #7 sono in contraddizione; la #0 dice che per la combinazione
(TRUE, TRUE, FALSE) si verifica l’azione F1 mentre la colonna #7 la stessa combinazione è associata
all’azione F0. Ci sono quindi due possibilità: o la cosa non ha senso e il requisito rappresentato nella tabella
è errato, oppure entrambe le azioni si verificano se la condizione (TRUE, TRUE, FALSE) è verificata, cosa che
si può verificare se e solo se le due azioni sono compatibili tra di loro. Gli altri casi di pari colori fanno
riferimento alla stessa azione, ma sono ridondanti e vanno eliminati, come abbiamo fatto poc’anzi. La
morale è che è possibile usare i d.c. , ma occorre fare molta attenzione a non commettere errori logici;
eventuali errori logici si evidenziano solo sviluppando completamente la tabella.
Usare i d.c. in una tabella condizionale può essere utile per capire “al volo” le relazioni che legano le
condizioni e le azioni. Ad esempio, nel caso della Tabella 11, è abbastanza immediato capire che:
 F0 = A’ + B’ + C’
 F1 = ABC
Consideriamo F0; la colonna 1 dice che se A=FALSE, per qualunque valore di B e C si ha F0=1. Allora F0
dipende solo da A’ (A negato) e non dipende da B e C (o dalle loro negazioni). Dove compare d.c. la
condizione non deve comparire nella equazione che definisce l’azione in funzione delle condizioni (3
).
In Logic Friday non è possibile inserire manualmente i valori d.c. nell’input; è però possibile importare
tabelle con valori d.c. (indicati nel tool con la X). Si veda a questo scopo l’help in linea alla voce “Importing a
truth table”.
Logic Friday permette di inserire i d.c. nelle azioni. In pratica è possibile dire che non interessa, per una data
combinazione di input, se l’azione di output viene eseguita o no. Ma che senso ha ?
Logic Friday è un tool che è principalmente utilizzato per la progettazione di circuiti logici digitali; nei
circuiti, le condizioni sono interpretabili come segnali di corrente (TRUE = passa corrente e FALSE = non
passa corrente) mentre le azioni sono interpretabili come dei circuiti elettronici digitali che elaborano i
segnali di corrente in input producendo in output un segnale di corrente (TRUE) o non producendolo
(FALSE). Ora, possono esistere dei casi in cui, per alcuni segnali di input, non si ha alcun interesse a sapere
se il segnale di corrente in output c’è o no (semplicemente, tale segnale non ha importanza nell’economia
globale del circuito che si sta progettando).
3
Provate a inserire la Tabella 13 in Logic Friday e verificate che restituisce lo stesso risultato una volta che si sono
minimizzate le equazioni
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 22 di 146
E’ ovvio che, nel nostro caso, usando Logic Friday come ausilio alla definizione dei requisiti utente, le azioni
hanno il significato di operazioni che devono o non devono essere eseguite e quindi non ha nessun senso
dire che “non mi interessa se un’azione viene eseguita o no”; quindi noi non useremo mai i d.c. sulle azioni.
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 23 di 146
Esempio # 1 – il modulo di registrazione utente
Consideriamo un modulo di registrazione di un utente. Il modulo, e relativo codice che implementa la
funzionalità “Inserisci nuovo utente”, contiene i seguenti campi:
1. Nome utente, obbligatorio
2. E-mail formalmente valida, obbligatoria
3. Password, obbligatoria e tale da possedere almeno un carattere alfabetico minuscolo, uno
maiuscolo, uno numerico e deve essere lunga almeno 8 caratteri.
4. Conferma password: in tale campo deve essere reinserita la password, uguale a quella che è stata
inserita nel campo “Password”.
Figura 10 – Esempio di form per l’inserimento di un nuovo utente.
Le azioni che possono essere svolte sono:
I. F0: Errore, non sono stati inseriti i campi obbligatori.
II. F1: Errore, e-mail non formalmente valida.
III. F2: Errore, la password non rispetta le regole di sicurezza.
IV. F3: Errore, campo password e conferma password differenti.
V. F4: Successo, utente correttamente registrato!
Tutte le azioni pertinenti, in funzione dei dati di input inseriti, sono scatenate alla pressione del pulsante
“Registra”. Le condizioni che possono essere estratte dalle variabili di cui ai punti 1→ 4 sono le seguen :
A. Stringa nome utente inserita non vuota
B. E-mail inserita valida
C. Password inserita valida
D. Password = Conferma Password
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 24 di 146
Le azioni sono esattamente quelle indicate nei punti I→IV. La tabella decisionale che segue definisce il
comportamento della funzionalità “Inserisci nuovo utente”.
Condizioni
A - Stringa nome utente inserita non vuota T T F F T T F F T T F F T T F F
B - E-mail inserita valida T F T F T F T F T F T F T F T F
C - Password inserita valida T T T T F F F F T T T T F F F F
D - Password = Conferma Password T T T T T T T T F F F F F F F F
Azioni
F0: Errore, non sono stati inseriti i campi obbligatori. X X X X X X X X
F1: Errore, e-mail non formalmente valida. X X X X X X X X
F2: Errore, la password non rispetta le regole di sicurezza. X X X X X X X X
F3: Errore, campo password e conferma password differenti. X X X X X X X X
F4: Successo, utente correttamente registrato! X
Tabella 16 – Tabella decisionale per form registrazione utente
Ora, per com’è stato costruito il problema, è abbastanza evidente notare che per ogni condizione non
verificata è associata uno specifico errore; in particolare:
Condizione non verificata Errore associato
A - Stringa nome utente inserita non vuota F0: Errore, non sono stati inseriti i campi obbligatori.
B - E-mail inserita valida F1: Errore, e-mail non formalmente valida.
C - Password inserita valida F2: Errore, la password non rispetta le regole di sicurezza.
D - Password = Conferma Password F3: Errore, campo password e conferma password differenti.
Tabella 17 – Tabella condizione-errore per form registrazione utente
E’ quindi immediato in questo caso trovare la relazione tra le azioni F0→F4 alle condizioni A →D. Sono le
seguenti (4
):
 F0 = A’
 F1=B’
 F2=C’
 F3=D’
 F4 = A·B·C·D
In particolare, la F4 (utente correttamente registrato) deve essere attivata solo qualora tutte le condizioni
A, B, C e D siano verificate.
Eseguendo lo stesso calcolo con Logic Friday , otteniamo lo stesso risultato (ovviamente!). Si veda la figura
sotto nella quale è mostrata la matrice iniziale:
4
Si provi ad effettuare la verifica riscrivendo la tabella condizionale con i don’t care.
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 25 di 146
Figura 11 – Truth Table Logic Friday
L’immagine che segue riporta il valore minimizzato calcolato dal software:
Figura 12 – Equazioni minimizzate
Si noterà che le espressioni “originali” delle azioni F0→F4 inserite mediante la tabella sono in pratica
ingestibili, mentre la loro espressione minimizzata è trattabile e può tranquillamente essere direttamente
utilizzata nella logica del programma che implementa la funzionalità “Inserisci nuovo utente”.
Riportiamo, a puro titolo di completezza, l’espressione originale e quella minimizzata da Logic Friday:
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 26 di 146
Originale:
 F0 = A' B' C' D' + A' B' C' D + A' B' C D' + A' B' C D + A' B C' D' + A' B
C' D + A' B C D' + A' B C D;
 F1 = A' B' C' D' + A' B' C' D + A' B' C D' + A' B' C D + A B' C' D' + A B'
C' D + A B' C D' + A B' C D;
 F2 = A' B' C' D' + A' B' C' D + A' B C' D' + A' B C' D + A B' C' D' + A B'
C' D + A B C' D' + A B C' D;
 F3 = A' B' C' D' + A' B' C D' + A' B C' D' + A' B C D' + A B' C' D' + A B'
C D' + A B C' D' + A B C D';
 F4 = A B C D;
Minimizzata:
 F0 = A' ;
 F1 = B' ;
 F2 = C' ;
 F3 = D';
 F4 = A B C D;
Esercizio: provare a rieseguire il calcolo, supponendo di avere solo i seguenti errori:
i. F0: Campi obbligatori non inseriti o formalmente non validi.
ii. F1: Password non valida o campo conferma password non correttamente valorizzato.
Alcune volte, per rendere difficile la vita agli hacker, la descrizione degli errori di inserimento è volutamente
generica (o, almeno, questa è la scusa che si da quando la descrizione dell’errore è molto generica). Il
calcolo “a mano” della dipendenza di F0 ed F1 dalle condizioni A →D non è più tanto semplice.
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 27 di 146
Tabelle funzionali
Consideriamo un requisito descritto nel modo che segue; si abbiano le tre variabili:
 X che può assumere solo il valore x1.
 Y che può assumere uno dei due valori {y1, y2}
 Z che può assumere uno dei tre valori {z1, z2, z3}.
Secondo i valori che le variabili X, Y e Z assumono, può verificarsi un’azione F0 e/o F1. In altri termini,
possiamo scrivere la seguente tabella:
Variabili
X x1 x1 x1 x1 x1 x1
Y y1 y1 y1 y2 y2 y2
Z z1 z2 z3 z1 z2 z3
Azioni
F0 X X X X
F1 X X X X
Tabella 18 – Tabella funzionale
La tabella sopra riportata rappresenta la descrizione funzionale del requisito in analisi; la possiamo anche
chiamare tabella funzionale o tabella variabili-azioni, in modo da distinguerla da una tabella decisionale, o
tabella condizioni-azioni. La tabella funzionale può essere generalizzata a un numero qualsiasi di variabili,
potendo ciascuna assumere un numero finito e maggiore o uguale a uno di valori.
Una tabella funzionale è molto simile a una tabella decisionale; ciò che le distingue è che la funzionale
lavora con variabili, quella decisionale con condizioni (che altro non sono che variabili booleane). Una
tabella funzionale non è ulteriormente riducibile; in altri termini, una volta scritte le equazioni:
F0 = x1y1z1 + x1y1z3 + x1y2z1 + x1y2z3
F1= x1y1z2 + x1y1z3 + x1y2z2 + x1y2z3
non è più possibile ridurle ulteriormente. Ricordiamo cha abbiamo usato la solita notazione per cui: x1y1z1 ≡
(x1)AND (y1) AND (z1) e che x1y1z1 + x1y1z3 ≡ [(x1)AND (y1) AND (z1)] OR [(x1)AND (y1) AND (z3)]
Domanda: non è possibile ridurre una tabella funzionale in una condizionale equivalente e quindi, su di
essa, utilizzare le tecniche di minimizzazione viste nei capitoli precedenti? La risposta è affermativa e sarà
l’oggetto del prossimo paragrafo.
Riduzione della tabella funzionale in decisionale
Se, nella Tabella 18 al posto delle variabili X, Y e Z si considerano le seguenti condizioni:
 A: x=x1
 B: y=y1
 C: z=z1
 D: z=z2
 E: z=z3
è immediatamente possibile ricondurre la Tabella 18 alla seguente tabella decisionale equivalente:
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 28 di 146
Condizioni
A T T T T T T
B T T T F F F
C T F F T F F
D F T F F T F
E F F T F F T
F
Azioni
F0 X X X X
F1 X X X X
Tabella 19 – Tabella decisionale equivalente alla tabella funzionale
Analizziamo una condizione alla volta per capire come l’abbiamo dedotta.
1) La variabile X può assumere il solo valore x1. Ciò equivale a dire che X=x1 è una condizione sempre
verificata e quindi uguale a TRUE. Non può neanche mai essere FALSE, poiché per definizione
abbiamo deciso che X può solo e soltanto valere x1. Abbiamo trasformato la variabile X in una
condizione A che è di tipo assoluto o auto-vincolata, nel senso descritto nel paragrafo “Definizione
di tabella decisionale”.
2) La variabile Y può solo e soltanto assumere uno dei due valori y1 e y2. Se vale y1 non può essere
uguale a y2 e viceversa. Quindi se la condizione B: y=y1 è TRUE allora y=y1; quando è FALSE non può
che essere univocamente y=y2. E’ possibile anche usare la condizione duale B’:y=y2, per la quale
valgono ragionamenti analoghi. La condizione B è una classica condizione binaria indipendente, nel
senso descritto nel paragrafo “Definizione di tabella decisionale”.
3) La variabile Z può assumere solo uno tra i tre possibili valori z1, z2, z3. Le tre condizioni C: z=z1, D:
z=z2, E: z=z3 sono tra di loro dipendenti e ricordando quanto già discusso sempre nel paragrafo
“Definizione di tabella decisionale”, per esse vale la seguente tabella di vincolo:
# C: Z = x1 D: Z= z2 E: Z = z3
1 TRUE FALSE FALSE
2 FALSE TRUE FALSE
3 FALSE FALSE TRUE
4 TRUE TRUE TRUE
5 TRUE FALSE TRUE
6 FALSE TRUE TRUE
7 TRUE TRUE FALSE
8 FALSE FALSE FALSE
Tabella 20 – Tabella di vincolo
C, D ed E sono condizioni booleane dipendenti; il vincolo tra le condizioni è esprimibile nella forma:
 CD’E’ = C
 C’DE’ = D
 C’D’E = E
Una volta che una tabella funzionale è stata ridotta a una tabella decisionale, è possibile applicare a essa i
metodi di riduzione noti, discussi nei paragrafi precedenti.
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 29 di 146
Il caso degenere della funzione
Consideriamo la seguente tabella funzionale:
Variabili
X x1 x1 x1 x1 x1 x1
Y y1 y1 y1 y2 y2 y2
Z z1 z2 z3 z1 z2 z3
Azioni
F0 X
F1 X
F2 X
F3 X
F4 X
F5 X
Tabella 21 – Tabella funzionale degenere (funzione)
La differenza tra la Tabella 18 e Tabella 21 è che in quest’ultima vi sono tante azioni quante sono le
combinazioni dei valori delle variabili X, Y e Z. In pratica, ogni azione è univocamente determinata da una
specifica combinazione (tripletta) di valori delle variabili X, Y e Z. Siamo forse più abituati a vedere la tabella
in forma trasposta, ossia:
X Y Z Azione
x1 y1 z1 F0
x1 y1 z2 F1
x1 y1 z3 F2
x1 y2 z1 F3
x1 y2 z2 F4
x1 y2 z3 F5
Tabella 22 – funzione
Quest’ultima tabella non è altro che la “classica” funzione matematica in tre variabili (X,Y,Z), in cui al posto
della ordinata numerica abbiamo delle azioni F0→F5. La tabella decisionale equivalente della Tabella 21 è
la Tabella 23.
Condizioni
A T T T T T T
B T T T F F F
C T F F T F F
D F T F F T F
E F F T F F T
Azioni
F0 X
F1 X
F2 X
F3 X
F4 X
F5 X
Tabella 23 – Tabella decisionale per la funzione (equivalente alla funzionale)
E’ evidente che in questo caso è immediato dedurre l’equazione delle azioni F0 →F5, che sono:
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 30 di 146
 F0 = ABCD’E’ = ABC
 F1 = ABC’DE’ = ABD
 F2 = ABC’D’E = ABE
 F3 = AB’CD’E’ = AB’C
 F4 = AB’C’DE’ = AB’D
 F5 = AB’C’D’E = AB’E
Avendo tenuto conto dei vincoli di dipendenza tra A, B e C. Tali espressioni sono già ridotte nella forma
minimizzata; in pratica, il caso in cui la descrizione funzionale del requisito si riduca ad una funzione, il
passaggio dalla tabella funzionale a quella decisionale è poco utile, o almeno, non dice nulla di più di quello
che si poteva dedurre direttamente dalla Tabella 21( o la sua equivalente Tabella 22).
E’ però interessante notare che la tabella funzionale ingloba, come caso particolare, la funzione
propriamente detta. Terminiamo dicendo che:
a) Una tabella funzionale è sempre riducibile a una tabella decisionale equivalente (ed anche possibile
l’inverso, ma in genere è poco utile)
b) Riducendo una tabella funzionale in decisionale, è possibile utilizzare le regole dell’algebra
booleana (a mano o mediante l’ausilio di tool di calcolo come Logic Friday) per minimizzare le
equazioni che esprimono le azioni in funzione delle condizioni.
c) La funzione classicamente intesa è deducibile come caso particolare della tabella funzionale.
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 31 di 146
Esempio # 2 – la scuola guida
Consideriamo il seguente requisito:
Una persona con età minore di 14 anni (esclusi) non può prendere alcuna patente di guida. Se la persona ha
un’età compresa tra 14 anni (inclusa) e 18 anni (esclusi) può prendere la sola patente categoria A. Se la
persona ha un’età superiore a 18 anni (compresi) può scegliere se prendere la patente categoria A o
categoria B (una esclude l’altra). In tutti i casi, è possibile conseguire la patente se si superano con successo
la visita attitudinale e l’esame di guida.
L’analisi del requisito, mostra che si può distinguere tre categorie di età, che rappresentano tre condizioni:
 A : età < 14
 B : 14 <= età < 18
 C : età >= 18
Si devono anche considerare le seguenti due condizioni:
 D: superamento della visita attitudinale
 E: superamento esame di guida
Le azioni in questo caso sono due (mutualmente esclusive):
 F0 – Conseguimento patente categoria A
 F1 – Conseguimento patente categoria B
Tutte queste informazioni possono essere raccolte nella seguente tabella:
Condizioni
Colonna # 1 2 3 4 5 6 7 8 9 10 11 12
A : età < 14 T T T T F F F F F F F F
B : 14 <= età < 18 F F F F T T T T F F F F
C : età >= 18 F F F F F F F F T T T T
D : superamento della visita attitudinale T T F F T T F F T T F F
E : superamento esame di guida F T T F F T T F F T T F
Azioni
F0 – Conseguimento patente categoria A X X
F1 – Conseguimento patente categoria B X
Tabella 24 – Tabella decisionale conseguimento patente
Notiamo che, nei blocchi di diverso colore, non compaiono tutte le combinazioni delle condizioni A, B e C,
poiché tali condizioni sono mutualmente esclusive; in altre parole, se una persona ha meno di 14 anni non
può averne più di 18. Le uniche combinazioni valide delle condizioni A, B e C sono quindi {(TRUE, FALSE,
FALSE),(FALSE,TRUE, FALSE),(FALSE, FALSE, TRUE)}. In pratica, queste condizioni sono dipendenti tra di loro
e determinate arbitrariamente due condizioni, la terza è automaticamente determinata. La tabella si limita
quindi a considerare solo 12 delle 32 = 25
combinazioni possibili.
In questo caso, è semplice verificare che le azioni sono intraprese se sono verificate le seguenti condizioni:
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 32 di 146
F0 = (B AND D AND E) OR (C AND D AND E) = B·D·E + C·D·E = (B + C) ·D·E
F1 = (C AND D AND E) =C·D·E
Utilizzando il software Logic Friday, abbiamo nella matrice tutte e 32 le combinazioni; andremo ad inserire
il valore 1 alle funzioni F0 e F1 solo per le combinazioni riportate nella tabella sopra, ossia (F,T,F,T,T) =
(0,1,0,1,1) = riga 11 della truth table Logic Friday e (F,F,T,T,T) = (0,0,1,1,1) = riga 7 della truth table Logic
Friday.
Figura 13 – Truth Table del problema in analisi.
Se procediamo con la minimizzazione della tabella, il software ci fornisce il seguente risultato:
F0 = A' B C' D E + A' B' C D E;
F1 = A' B' C D E;
Ora, i risultati da noi ricavati e quelli ottenuti dal software sembrano diversi, come vediamo nella tabella
che segue:
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 33 di 146
Funzioni Ricavata senza software Ricavato con il Software
F0 B·D·E + C·D·E A' B C' D E + A' B' C D E
F1 C·D·E A' B' C D E
Tabella 25 – comparazione dei risultati
Ricordiamoci che, come visto poco fa, le condizioni A, B e C sono dipendenti tra di loro, vale la seguente
funzione logica:
A B C Risultato
TRUE FALSE FALSE A (True)
FALSE TRUE FALSE B (True)
FALSE FALSE TRUE C (True)
Tutte le altre possibili combinazioni non hanno senso !
Tabella 26 – Tabella di vincolo A, B e C
In termini semplici, prendiamo la prima riga, nella quale abbiamo: AB’C’ = (età < 14 anni) AND (non 14 <=
età < 18) AND (non età >=18) = (età < 14 anni). A parole, se ha meno di 14 anni e non ha una età compresa
tra 14 anni e 18 anni e se non ha una età maggiore di 18 anni, che età ha ? Ovviamente ha meno di 14
anni….
Da quest’ultima tabella, vediamo che:
 A' B C' = B
 A' B' C = C
I due risultati sono quindi perfettamente equivalenti.
Facciamo notare che la colonna # 10 dice che nella condizione A’B’CDE (a parole, se sono maggiorenne e se
ho superato la visita attitudinale e l’esame di guida), si verificano sia l’azione F0 che F1, cosa che sembra in
contraddizione con il requisito che la patente categoria A o categoria B sono mutualmente esclusive. In
realtà la tabella va letta al contrario: le azioni sono gli output, le condizioni sono gli input. Quindi: F0 =
A’B’CDE + <altri termini> ed F1 = A’B’CDE + <altri termini>; a parole, posso prendere la patente categoria A
(oppure categoria B, a mia scelta) se sono maggiorenne e se ho superato la visita attitudinale e l’esame di
guida.
Nel caso generale, la morale è la seguente: se ho delle condizioni booleane tra di loro dipendenti, il risultato
minimizzato ottenuto dal software Logic Friday può essere ulteriormente ridotto tenendo conto della
dipendenza funzionale tra le condizioni dipendenti. Detto in altri termini, Logic Friday considera sempre le
condizioni come indipendenti tra di loro ed eventuali dipendenze vanno “gestite a mano”.
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 34 di 146
Esempio #3 - un caso un po’ complesso.
Consideriamo il seguente requisito:
“Se una persona di sesso maschile e maggiorenne è disoccupata, gli viene dato un assegno mensile di 700
Euro; se però ha un reddito annuale inferiore di 20.000 euro, gli viene dato in aggiunta un assegno di 300
euro; se il reddito annuale è superiore a 40.000 euro, vengono scalati 200 euro all’assegno principale. Se la
persona è minorenne, l’assegno è di 500 euro mensili. Se una persona ha un’occupazione, gli sono scalati
300 euro forfait di tasse per ciascun mese. Se la persona è di sesso femminile, gli è corrisposto un assegno
di 500 euro mensili, ridotti a 300 se il reddito annuale supera i 40.000 euro; se la donna ha dei figli, gli è
dato in aggiunta un assegno di 100 euro per figlio, fino a un massimo di 500 euro.”
Iniziamo con l’analisi del requisito. Per prima cosa individuiamo le condizioni booleane dipendenti e
indipendenti. Le condizioni booleane indipendenti sono:
 Essere maggiorenne (avere un’età superiore o inferiore a 18 anni)
 Sesso (essere maschio o femmina)
 Essere disoccupato (non avere un’occupazione o avercela)
La condizione booleana dipendente è:
 Reddito annuo. Le classi di reddito annuo individuabili sono:
o Minore di 20.000 euro (escluso)
o Da 20.000 euro (incluso) a 40.000 euro (incluso)
o Superiore a 40.000 euro (escluso)
Per ciascuna classe di reddito annuo, riscriviamo il requisito valido solo per quella classe. Si avranno quindi
tre requisiti, uno per ciascuna classe di reddito annuo, diversi – magari di poco – l’uno dall’altro. In pratica,
invece di considerare tutte le variabili indipendenti e dipendenti, dividiamo il requisito in sottorequisiti
validi ciascuno solo per un valore della variabile booleana dipendente (la classe di reddito). E’ questa una
modalità che viene comodo usare quando il requisito è complesso e/o contiene molte variabili dipendenti,
che andrebbero ad aumentare pesantemente le dimensioni delle tabelle decisionali.
1. Classe # 1 – Reddito annuo < 20.000 euro (limite escluso)
a. Se la persona è minorenne, l’assegno è di 500 euro mensili.
b. Se una persona ha un’occupazione, gli sono scalati 300 euro forfait di tasse per ciascun mese.
c. A una persona di sesso maschile, maggiorenne e disoccupata, gli è fornito un assegno mensile
standard di 700 Euro aumentato di un importo pari a 300 euro.
d. Se la persona è di sesso femminile, gli è corrisposto un assegno di 500 euro mensili. Se la donna
ha dei figli, è dato in aggiunta un assegno di 100 euro per figlio, fino a un massimo di 500 euro.
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 35 di 146
2. Classe # 2 – Reddito annuo compreso tra 20.000 euro (incluso) e 40.000 euro (incluso)
a. Se la persona è minorenne, l’assegno è di 500 euro mensili.
b. Se una persona ha un’occupazione, gli sono scalati 300 euro forfait di tasse per ciascun mese.
c. A una persona di sesso maschile, maggiorenne e disoccupata, gli è fornito un assegno mensile
standard di 700 Euro.
d. Se la persona è di sesso femminile, gli è corrisposto un assegno di 500 euro mensili. Se la donna
ha dei figli, è dato in aggiunta un assegno di 100 euro per figlio, fino a un massimo di 500 euro.
3. Classe # 3 – Reddito annuo compreso superiore a 40.000 euro (escluso)
a. Se la persona è minorenne, l’assegno è di 500 euro mensili.
b. Se una persona ha un’occupazione, gli sono scalati 300 euro forfait di tasse per ciascun mese.
c. A una persona di sesso maschile, maggiorenne e disoccupata, gli è fornito un assegno mensile
standard di 700 Euro diminuito di un importo pari a 200 euro.
d. Se la persona è di sesso femminile, gli è corrisposto sempre e comunque un assegno di 300
euro mensili. Se la donna ha dei figli, è dato in aggiunta un assegno di 100 euro per figlio, fino a
un massimo di 500 euro.
Si nota subito che i requisiti ( a ) e ( b ) – derivati dal requisiti principale - sono comuni per tutte e tre le
classi.
Creiamo ora le tre tabelle di decisione per i tre casi.
Classe # 1 – Reddito annuo < 20.000 euro (limite escluso)
Condizioni
Minorenne T T F F T T F F
Occupata T F T F T F T F
Maschio T T T T F F F F
Azioni
Assegno minorenne (500 euro) X X X X
Assegno standard (700 euro) X
Incremento assegno standard (300 euro) X
Decremento assegno standard (200 euro)
Assegno donna e figli (funzione numero figli e reddito) X X X X
Tasse scalate (300 euro) X X X X
Tabella 27 – Tabella decisionale Classe di reddito # 1
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 36 di 146
Classe # 2 – Reddito annuo compreso tra 20.000 euro (incluso) e 40.000 euro (incluso)
Condizioni
Minorenne T T F F T T F F
Occupata T F T F T F T F
Maschio T T T T F F F F
Azioni
Assegno minorenne (500 euro) X X X X
Assegno standard (700 euro) X
Incremento assegno standard (300 euro)
Decremento assegno standard (200 euro)
Assegno donna e figli (funzione numero figli e reddito) X X X X
Tasse scalate (300 euro) X X X X
Tabella 28 – Tabella decisionale Classe di reddito # 2
Classe # 3 – Reddito annuo compreso superiore a 40.000 euro (escluso)
Condizioni
Minorenne T T F F T T F F
Occupata T F T F T F T F
Maschio T T T T F F F F
Azioni
Assegno minorenne (500 euro) X X X X
Assegno standard (700 euro) X
Incremento assegno standard (300 euro)
Decremento assegno standard (200 euro) X
Assegno donna e figli (funzione numero figli e reddito) X X X X
Tasse scalate (300 euro) X X X X
Tabella 29 – Tabella decisionale Classe di reddito # 3
A stesso colore corrisponde stesso requisito. In particolare:
 Requisito (a) : arancione
 Requisito (b): giallo
 Requisito (c): grigio
 Requisito (d): rosa
Guardando le tre tabelle notiamo che:
1. La principale differenza sta nel requisito (c); secondo la classe di reddito, è percepito l’assegno
standard oppure lo stesso assegno incrementato o decrementato.
2. Che l’assegno alla donna con figli, dipende nello stesso modo dal numero di figli per tutte e tre le
classi di reddito, ma l’importo iniziale è diverso. In altri termini:
a. Per le prime due classi di reddito l’assegno alla donna si calcola con la formula: (500 +
numero_figli*100) se 0<= numero_figli <= 5; se numero_figli > 5 ==> 500 + 500 = 1000 Euro.
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 37 di 146
b. Per la terza classe di reddito l’assegno alla donna si calcola con la formula: (300 +
numero_figli*100) se 0<= numero_figli <= 5; se numero_figli > 5 ==> 300 + 500 = 800 Euro.
Sono quindi funzioni uguali per le prime due classi di reddito, ma diversa per la terza classe.
3. Notiamo che se la donna è minorenne prende sia i 500 euro per il fatto di essere minorenne, sia i
500 per il fatto di essere donna. Mhhh… sorge il dubbio che ci sia un errore nel requisito. Non è
che, nel requisito iniziale, la frase: “Se la persona è di sesso femminile, gli è corrisposto un assegno
di 500 euro mensili, ridotti a 300 se il reddito annuale supera i 40.000 euro; se la donna ha dei figli,
gli è dato in aggiunta un assegno di 100 euro per figlio, fino a un massimo di 500 euro” vada
sostituita con la frase: ”Se la persona è di sesso femminile e maggiorenne, gli è corrisposto un
assegno di 500 euro mensili, ridotti a 300 se il reddito annuale supera i 40.000 euro; se la donna ha
dei figli, gli è dato in aggiunta un assegno di 100 euro per figlio, fino a un massimo di 500 euro”. In
altri termini, probabilmente colui il quale ha specificato il requisito, ha dato “per scontato” che nel
caso del sesso femminile, ci si riferisse alla donna maggiorenne? E se è così, che succede se la
donna minorenne ha dei figli? A lei non gli diamo i 100 euro per figlio?
L’osservazione riportata nel punto (III) non ha lo scopo di fare politica di welfare, ma di dimostrare come sia
possibile – e anche facile – commettere errori durante la definizione dei requisiti, errori che possono
essere scoperti se si esegue un’analisi del requisito con una metodologia ben definita come quella ivi
presentata.
Supponiamo allora di aver ridiscusso il requisito con l’utente che l’ha emesso originariamente, il quale ha
ammesso di aver dimenticato di specificare che la donna cui fa riferimento il requisito (d) è maggiorenne.
Le tre tabelle di decisione diventano le seguenti (è stato indicato con bordo rosso le caselle dove sono state
cancellate le X).
Classe # 1 – Reddito annuo < 20.000 euro (limite escluso) – Tabella corretta
Condizioni
A - Minorenne T T F F T T F F
B - Occupata T F T F T F T F
C - Maschio T T T T F F F F
Azioni
F0 - Assegno minorenne (500 euro) X X X X
F1 - Assegno standard (700 euro) X
F2 - Incremento assegno standard (300 euro) X
F3 - Decremento assegno standard (200 euro)
F4 - Assegno donna e figli (funzione numero figli e reddito) X X
F5 - Tasse scalate (300 euro) X X X X
Tabella 30 – Tabella decisionale Classe di reddito # 1 – tabella corretta
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 38 di 146
Classe # 2 – Reddito annuo compreso tra 20.000 euro (incluso) e 40.000 euro (incluso) – Tabella corretta
Condizioni
A - Minorenne T T F F T T F F
B - Occupata T F T F T F T F
C - Maschio T T T T F F F F
Azioni
F0 - Assegno minorenne (500 euro) X X X X
F1 - Assegno standard (700 euro) X
F2 - Incremento assegno standard (300 euro)
F3 - Decremento assegno standard (200 euro)
F4 - Assegno donna e figli (funzione numero figli e reddito) X X
F5 - Tasse scalate (300 euro) X X X X
Tabella 31 – Tabella decisionale Classe di reddito # 2 – tabella corretta
Classe # 3 – Reddito annuo compreso superiore a 40.000 euro (escluso) – Tabella corretta
Condizioni
A - Minorenne T T F F T T F F
B - Occupata T F T F T F T F
C - Maschio T T T T F F F F
Azioni
F0 - Assegno minorenne (500 euro) X X X X
F1 - Assegno standard (700 euro) X
F2 - Incremento assegno standard (300 euro)
F3 - Decremento assegno standard (200 euro) X
F4 - Assegno donna e figli (funzione numero figli e reddito) X X
F5 - Tasse scalate (300 euro) X X X X
Tabella 32 – Tabella decisionale Classe di reddito # 3 – tabella corretta
Riduzione delle tabelle di decisione
Utilizziamo il software Logic Friday – di cui abbiamo parlato brevemente nella prima parte - per ridurre le
tre tabelle di decisione. Il risultato che otteniamo è il seguente:
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 39 di 146
Classe # 1 – Reddito annuo < 20.000 euro (limite escluso)
Figura 14 – Truth Table per classe di reddito # 1
Figura 15 – equazioni minimizzate per classe di reddito # 1
La “tabella minimizzata” (condizioni booleane elementari) è allora la seguente:
F0 = A;
F1 = A' B' C;
F2 = A' B' C;
F3 = 0;
F4 = A' C';
F5 = B;
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 40 di 146
Classe # 2 – Reddito annuo compreso tra 20.000 euro (incluso) e 40.000 euro (incluso)
Figura 16 – Truth Table per classe di reddito # 2
Figura 17 – equazioni minimizzate per classe di reddito # 2
La “tabella minimizzata” (condizioni booleane elementari) è allora la seguente:
F0 = A;
F1 = A' B' C;
F2 = 0;
F3 = 0;
F4 = A' C';
F5 = B;
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 41 di 146
Classe # 3 – Reddito annuo compreso superiore a 40.000 euro (escluso)
Figura 18 – Truth Table per classe di reddito # 3
Figura 19 – equazioni minimizzate per classe di reddito # 3
La “tabella minimizzata” (condizioni booleane elementari) è allora la seguente:
F0 = A;
F1 = A' B' C;
F2 = 0;
F3 = A' B' C;
F4 = A' C';
F5 = B;
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 42 di 146
Conviene a questo punto creare una tabella riassuntiva che mette a confronto i tre risultati ottenuti.
Tenendo conto che:
 A - Minorenne
 B - Occupata
 C - Maschio
E che :
 F0 - Assegno minorenne (500 euro)
 F1 - Assegno standard (700 euro)
 F2 - Incremento assegno standard (300 euro)
 F3 - Decremento assegno standard (200 euro)
 F4 - Assegno donna e figli (funzione numero figli e reddito)
 F5 - Tasse scalate (300 euro)
Abbiamo:
Azioni
Condizioni di applicabilità per le classi di reddito
Classe # 1 Classe #2 Classe # 3
F0 - Assegno
minorenne (500 euro
Minorenne Minorenne Minorenne
F1 - Assegno standard
(700 euro)
Maggiorenne, non
occupato, maschio
Maggiorenne, non
occupato, maschio
Maggiorenne, non
occupato, maschio
F2 - Incremento
assegno standard (300
euro)
Maggiorenne, non
occupato, maschio
/ /
F3 - Decremento
assegno standard (200
euro)
/ / Maggiorenne, non
occupato, maschio
F4 - Assegno donna e
figli (funzione numero
figli e reddito) (*)
Maggiorenne,femmina Maggiorenne,femmina Maggiorenne,femmina
F5 - Tasse scalate (300
euro)
Occupato Occupato Occupato
Tabella 33 – condizioni di applicabilità per le classi di reddito
(*) NOTA
 Per le prime due classi di reddito l’assegno alla donna si calcola con la formula: (500 +
numero_figli*100) se 0<= numero_figli <= 5; se numero_figli > 5 ==> 500 + 500 = 1000 Euro.
 Per la terza classe di reddito l’assegno alla donna si calcola con la formula: (300 +
numero_figli*100) se 0<= numero_figli <= 5; se numero_figli > 5 ==> 300 + 500 = 800 Euro.
Rimane sempre da chiarire il caso della donna minorenne con figli, che può essere lasciato come “Change
Request” da lasciare da analizzare al lettore.
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 43 di 146
Nella tabella, le condizioni riportate sono quelle che devono valere tutte contemporaneamente affinché sia
applicabile l’azione. In altri termini, per la classe 1, affinché si possa applicare l’azione F1 (Assegno
standard di 700 euro) deve valere la condizione (Maggiorenne) AND (Non occupato) AND (Maschio).
A parole, possiamo riformulare il requisito iniziale in questo modo (che è a questo punto più chiaro e
comunque inequivocabile):
a) Se la persona è minorenne, è erogato un assegno di 500 euro/mese.
b) Se la persona è maggiorenne, disoccupato, maschio è erogato l’assegno standard di 700
euro/mese.
c) Se la persona è maggiorenne, disoccupato, maschio e guadagna meno di 20.000 euro/anno (limite
escluso) l’assegno standard è incrementato di 300 euro/mese.
d) Se la persona è maggiorenne, disoccupato, maschio e guadagna più di 40.000 euro/anno (limite
escluso) l’assegno standard è decrementato di 200 euro/mese.
e) Se la persona è maggiorenne e di sesso femminile percepisce un assegno calcolato nel seguente
modo:
a. Se il reddito annuo è minore di 40.000 euro (limite incluso): Importo assegno = (500 +
numero_figli*100) se 0<= numero_figli <= 5; se numero_figli > 5 ==> 500 + 500 = 1000 Euro.
b. Se il reddito annuo è superiore a 40.000 euro (limite escluso): Importo assegno = (300 +
numero_figli*100) se 0<= numero_figli <= 5; se numero_figli > 5 ==> 300 + 500 = 800 Euro.
f) Se la persona è occupata, le tasse sono scalate di 300 euro/mese.
Ora, la tabella è – a mio avviso – comunque più chiara del requisito scritto, e – nella pratica – è spesso
sufficiente fermarsi alla tabella, senza riscrivere nuovamente il requisito.
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 44 di 146
Capitolo 2 – Grafi e flow chart
GGRRAAFFII EE FFLLOOWW CCHHAARRTT
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 45 di 146
Definizione di grafo
La pagina di wikipedia http://it.wikipedia.org/wiki/Grafo pesenta le caratteristiche fondamentali relative a
quell’oggetto matematico chiamato grafo, a partire – ovviamente – dalla sua definizione.
“Un grafo è un insieme di elementi detti nodi o vertici collegati fra loro da archi o lati. Più formalmente, si
dice grafo una coppia ordinata G = (V, E) di insiemi, con V insieme dei nodi (dall’inglese Vertex)ed E insieme
degli archi (dall’inglese Edge), tali che gli elementi di E siano coppie di elementi di V”.
Un grafo è suscettibile di una rappresentazione grafica nella quale - in genere - i vertici V sono
rappresentati da delle circonferenze, eventualmente etichettate (con lettere o numeri) mentre gli archi
sono linee di congiunzione dei vertici. Nella figura che segue, sono rappresentati tre esempi di grafi, di cui il
primo è un grafo semplice e gli altri due sono grafi orientati.
Figura 20 – esempi di grafi semplici e orientati.
Sempre da wikipedia, stessa pagina già citata:
“Un grafo orientato D (o digrafo, grafo diretto) è un insieme D = (V, A), dove V è l'insieme dei vertici di D e A
è l'insieme degli archi orientati di D. Un arco si dice orientato quando è caratterizzato da una direzione. In
particolare, è composto di una "testa" (rappresentata solitamente dalla punta di una freccia), che
raggiunge un vertice in entrata, e una "coda", che lo lascia in uscita.”
Nel caso dei grafi in Figura 20 la “testa” del digrafo # 1 è V1, mentre la coda è V8. Nel caso del digrafo # 2,
anche se sembra identico al primo, la testa e la coda sono differenti e riuscire a capirlo graficamente non è
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 46 di 146
immediato come nel primo caso (si notino le frecce rosse orientate in senso opposto rispetto al digrafo # 1).
Rimaneggiandolo un po’ dal punto di vista grafico si ottiene la figura che segue:
Figura 21 – grafo # 2 rimaneggiato; le teste sono V4 e V6 e la coda è V5.
Si nota che il “mostro” di Figura 21 ha ben due teste (V6 e V4) una sola coda. In pratica il digrafo ha 2
possibili punti di ingresso ed un unico punto in uscita. Possiamo allora definire meglio che cosa s’intende
per testa e coda di un grafo, rispetto alla definizione data da wikipedia:
a) La testa di un digrafo è rappresentata da uno o più nodi aventi solo archi in uscita.
b) La coda di un digrafo è rappresentata da uno o più nodi aventi solo archi in ingresso.
Il concetto di arco in ingresso o in uscita da un nodo dovrebbe essere evidente, ma preferiamo fornire una
definizione “formale”:
 Un arco A è in ingresso verso un nodo V se la freccia dell’arco A punta a V (→ V).
 Un arco A è in uscita dal nodo V se la freccia dell’arco A punta al di fuori di V (V →).
Si noti anche che nella definizione della pagina precedente di grafo orientato abbiamo usato la scrittura D =
(V, A) e non D = (V, E), usando la lettera A per arco orientato e la lettera E per arco semplice usata nella
definizione generale di grafo.
Per esclusione, in un grafo semplice è un insieme di vertici e di archi in cui la connessione tra il nodo N1 e N2
ha lo stesso identico significato che la connessione tra N2 e N1. Nella pratica, un grafico semplice non
contiene archi orientati, cosa che graficamente è rappresentato da linee semplici senza di frecce.
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 47 di 146
Caratteristiche di un grafo
Considerando che la teoria matematica dei grafi occupa interi volumi, in questa sede analizzeremo solo e
soltanto i concetti e le caratteristiche di un grafo che hanno in qualche modo attinenza con l’informatica e –
in particolare – con il software test. Iniziamo con alcune definizioni:
Definizione di vertici adiacenti
La definizione di vertici adiacenti è leggermente differente a seconda se si considera un grafo o un digrafo.
a) Dati due vertici V1 e V2 appartenenti a un grafo semplice, si dice che V1 è adiacente a V2 se esiste un
arco che collega V1 e V2. In questo caso la relazione di adiacenza è simmetrica: V1 è adiacente a V2 e
V2 è adiacente a V1.
b) Dati due vertici V1 e V2 appartenenti a un digrafo, si dice che V1 è adiacente a V2 se esiste un arco
orientato da V1 e V2 (V1 →V2). In questo caso, la relazione di adiacenza non è simmetrica: quindi V1
è adiacente a V2 ma V2 non è detto sia adiacente a V1 (lo è solo se esiste – in aggiunta – un arco da
V2 a V1.
Figura 22 – nodi adiacenti per grafo e digrafo.
Nel caso di digrafo la definizione di adiacenza di due vertici porta con sé il concetto di raggiungibilità di un
vertice a partire da un altro. Se l’arco ha una freccia uscente da V1 ed entrante in V2, possiamo pensare alla
freccia come ad un “senso unico” che permette di passare – in un solo passo - da V1 a V2, ma che non può
essere percorsa in senso inverso (da V2 a V1). Nel caso di grafo semplice non esiste senso unico ed è
possibile percorrere l’arco che congiunge i due vertici in entrambi i sensi.
Ad esempio, per i due grafi di Figura 35 la situazione è la seguente:
 Grafo semplice:
 V1 è adiacente a V3; V3 è adiacente a V1
 V3 è adiacente a V4; V4 è adiacente a V3
 V1 è adiacente a V2; V2 è adiacente a V1
 V3 è adiacente a V2; V2 è adiacente a V3
 V4 non è adiacente né a V2 né a V1
 Digrafo:
 V1 è adiacente a V3 (V1 →V3); V3 non è adiacente a V1
 V3 è adiacente a V4 (V3 →V4); V4 non è adiacente a V3
 V1 è adiacente a V2 (V1 →V2); V2 non è adiacente a V1
 V3 è adiacente a V2 (V3 →V2); V2 non è adiacente a V3
 V4 non è adiacente né a V2 né a V1
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 48 di 146
Definizione di grado di un vertice
La definizione di grado di un vertice è – anche in questo caso – leggermente differente a seconda se si
considera un grafo o un digrafo.
a) In un grafo semplice il grado di un vertice V è pari al numero di archi incidenti sul suo vertice.
b) In un digrafo, si definisce per un vertice V:
a. Grado entrante: è un numero pari al numero di archi entranti nel vertice V (→ V)
b. Grado uscente: è un numero pari al numero di archi uscenti dal vertice V (V →)
c. Grado = Grado entrante – Grado uscente
Figura 23 – grado di un nodo per grafo e digrafo.
Per i due grafi di Figura 23 la situazione nel nodo V è la seguente:
 Grafo semplice:
 Vha grado 4
 Digrafo:
 Vha grado entrante 1
 Vha grado uscente 3
 V ha grado = 1-3 = -2
Ne consegue che, nel caso di un grafo semplice, il grado è sempre positivo (o, al limite, zero se è isolato,
come nel caso del vertice V0, ossia non ha né archi entranti né archi uscenti); nel caso di un digrafo, il grado
complessivo può essere positivo o negativo o nullo (quest’ultimo caso se il nodo ha tanti archi entranti
quanti archi uscenti, oppure il nodo è isolato come V0).
Alla luce di questa definizione, possiamo definire un criterio per capire se un nodo è di testa, di coda o
“normale” (né di testa, né di coda) di un digrafo. Riprendiamo le definizioni:
a) La testa di un digrafo è rappresentata da uno o più nodi aventi solo archi in uscita.
b) La coda di un digrafo è rappresentata da uno o più nodi aventi solo archi in ingresso.
I criteri sono i seguenti:
a) Un nodo è la testa di un digrafo se il grado entrante è nullo.
b) Un nodo è la coda di un grafo se il grado uscente è nullo.
Si provi a trovare la (le) testa e la(le) code dei grafi di Figura 22.
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 49 di 146
Definizione di cammino in un grafo
Un cammino da un vertice P (partenza) a un vertice A (arrivo) è definito da una sequenza (P, V2, V3,…Vk, A)
di vertici adiacenti in cui il primo vertice è P e l’ultimo è V.
Dati due vertici P e V, possono esistere più cammini che li connettono. Si noti che la sequenza di vertici è
adiacente nel senso che P è adiacente a V2, V2 è adiacente a V3, …, Vk è adiacente ad A.
Ad esempio, nel caso dei grafi di Figura 22, per il grafo semplice esistono due cammini da V1 a V4, che sono:
(V1, V3, V4) e (V1, V2, V3, V4). Per il digrafo esiste un solo cammino da V1 a V4 che è: (V1, V3, V4). Si noti anche
che solo nel caso del grafo semplice esiste anche il cammino inverso da V4 a V1, cosa che non esiste nel caso
del digrafo, poiché non è possibile percorrere il grafo in senso opposto a quello definito dalle frecce.
Si definisce la lunghezza di un cammino il suo numero di archi. Un cammino di N vertici ha sempre
lunghezza N-1.
Si definisce cammino hamiltoniano un cammino all’interno di un grafo che visita ciascun vertice una ed
una sola volta. Ovviamente, non tutti i grafici possiedono un cammino hamiltoniano; ad esempio, per i
grafici di Figura 22 solo il grafo semplice possiede un cammino ha miltoniano, che è (V1, V2, V3, V4), mentre il
digrafo non possiede cammini hamiltoniani.
Si definisce cammino euleriano un cammino all’interno di un grafo che visita ciascun arco una ed una sola
volta. Non tutti i grafici hanno un cammino euleriano. Un cammino ha miltoniano non è detto che sia anche
euleriano. Ad esempio, per il grafo semplice di Figura 22 , il cammino hamiltoniano (V1, V2, V3, V4), non è un
cammino euleriano, in quanto (l’arco V1→V3) non è compreso nel cammino.
La differenza tra le due definizioni è che il cammino hamiltoniano visita ciascun vertice una ed una sola
volta, mentre quello euleriano visita ciascun arco una ed una sola volta (vedasi ad esempio il problema dei
ponti di Königsberg,che hanno dato poi origine alla definizione di cammino euleriano).
E’ possibile con un criterio semplice decidere se un grafo ha un cammino euleriano: deve essere connesso e
ciascun vertice deve avere grado pari.
Un grafo per il quale è valido il Teorema di Ore è hamiltoniano. Tale teorema recita: “Sia G n grafo semplice
connesso con N vertici, con n ≥ 3. Se deg(v) + deg(w) ≥ n per ciascuna coppia di vertici non adiacenti v e w ,
allora G è hamiltoniano”. Con deg(v) si indica il grado del generico vertice v, come definito
precedentemente.
Nel campo del software test possono rivestire importanza sia i cammini euleriani sia quelli hamiltoniani
(anche se, nella realtà, sono molto difficili da trovare). Un programma software che sia riconducibile a un
grafo euleriano è testabile con un solo caso di test (almeno nella teoria) con una copertura garantita dei
percorsi (edge) pari al 100%. Un programma software che sia riconducibile a un grafo hamiltoniano è
testabile con un solo caso di test (almeno nella teoria) con una copertura garantita delle condizioni (vertici)
pari al 100%.
Nella pratica, il fatto che il grafo che si riferisce a un programma sia euleriano o hamiltoniano dà degli
elementi importanti per cercare di ridurre al minimo il numero di casi di test massimizzando la copertura
dei percorsi o delle condizioni.
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 50 di 146
Definizione di ciclo in un grafo
Il ciclo di un grafo è un cammino in cui P coincide con A, ossia il punto di partenza coincide con il punto di
arrivo.
Figura 24 – cicli per grafo e digrafo.
Per i grafi di Figura 33, il grafo semplice ha un ciclo (V2, V3, V2) e un altro ciclo simmetrico (V3, V2, V3).
Il digrafo # 1 non ha cicli, anche se si potrebbe (erroneamente !) pensare che (V2, V3, V2) sia un ciclo: non
può essere un ciclo perché V2 è adiacente a V3 ma V3 non è adiacente a V2 (si noti il verso delle frecce che
vanno entrambe da V2 a V3).
Il digrafo # 2 ha invece il ciclo (V2, V3, V2) ed anche il ciclo (V3, V2, V3) poiché V2 è adiacente a V3 e V3 è
adiacente a V2 (si noti il senso delle frecce, in particolare della freccia color rosso che è invertita rispetto al
digrafo # 1).
Si noti che dato un ciclo se ne hanno infiniti; posso continuare a “girare” sul cammino ciclico anche
all’infinito. Dato, infatti, il ciclo (V2, V3, V2) allora anche (V2, V3, V2, V3, V2) è un ciclo, come anche (V2, V3, V2,
V3, V2, V3, V2), etc. Per convenzione, nel seguito un ciclo sarà definito come un cammino con vertici estremi
coincidenti e percorso una sola volta.
Figura 25 – ciclo degenere (loop)
Un ciclo degenere è quello che ha solo due nodi. Ad esempio, il ciclo (V0, V0) in Figura 25 è un ciclo
degenere. Tale ciclo degenere è meglio conosciuto con il nome di loop.
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 51 di 146
Rappresentazioni matriciali di un grafo
La rappresentazione grafica di un grafo o di un digrafo è sicuramente utile e permette di visualizzare “a
colpo d’occhio” la struttura complessiva del grafo; tuttavia, non è sempre quella più conveniente per
calcolare le varie proprietà dell’oggetto. Il grafo (digrafo) è suscettibile due rappresentazione, in forma
matriciale. Nel seguito considereremo solo e soltanto i digrafi, poiché sono gli unici tipi che interessano in
campo informatico per i nostri scopi.
Nel seguito, considereremo il grafo orientato di Figura 22, che ricopiamo di seguito per comodità:
La prima forma è la matrice delle adiacenze, la seconda è la matrice d’incidenza. Tratteremo solo la prima,
fornendo per la seconda solo la definizione.
Matrice delle adiacenze
Anche in questo caso, la definizione su wikipedia calza a pennello:
“Dato un qualsiasi grafo, la sua matrice delle adiacenze è costituita da una matrice binaria quadrata che ha
come indici di righe e colonne i nomi dei vertici del grafo. Nel posto (i,j) della matrice si trova un 1 se e solo
se esiste nel grafo un arco che va dal vertice i al vertice j, altrimenti si trova uno 0”.
Nel caso del digrafo in Figura 22 la matrice delle adiacenze è la seguente:
0 1 1 0
0 0 0 0
1 2 3 4
1
2
3 0 1 0
0 0 04
1
0
V V V V
V
V
V
V
La prima riga e la prima colonna (in rosso) non fanno parte della matrice, ma sono state inserite per
facilitare il riferimento delle righe e delle colonne ai relativi nodi. Ad esempio, la riga 1 si legge:
 Il nodo 1 (V1) non è connesso con il nodo 1 (V1) ; non ci sono loop.
 Il nodo 1 (V1) è connesso al nodo 2 (V2): V1→V2
 Il nodo 1 (V1) è connesso al nodo 3 (V3): V1→V3
 Il nodo 1 (V1) non è connesso con il nodo 4 (V4)
La lettura è sempre riga su colonna. La semplice matrice, senza eseguire alcun tipo di calcolo, permette
immediatamente di capire alcune proprietà del grafo.
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 52 di 146
R1 - Numero di nodi e di vertici del grafo:
Il numero dei nodi è – banalmente – pari al numero di righe o di colonne della matrice (per definizione della
matrice di adiacenza). Il numero dei vertici è pari alla somma dei valori 1 su tutta la matrice. Nel nostro
esempio ci sono 4 nodi e (1+1+1+1) = 4 vertici.
R2 - Grado entrante e grado uscente:
 La somma dei valori di una singola riga è pari al grado uscente del nodo cui la riga corrisponde.
 La somma dei valori di una singola colonna è pari al grado entrante del nodo cui la riga corrisponde.
Ad esempio:
 il nodo V1 ha grado uscente 2 e grado entrante 0 (e quindi è una testa del digrafo);
 il nodo V2 ha grado uscente 0 (e quindi è una coda del digrafo) e grado entrante 2.
 il nodo V3 ha grado uscente 2 e grado entrante 1.
 il nodo V3 ha grado uscente 0 (e quindi è un’altra coda del digrafo) e grado entrante 1
R3 - Nodi di testa e di coda:
 Le righe con tutti i valori a zero rappresentano nodi di coda.
 Le colonne con tutti i valori a zero rappresentano nodi di testa.
Tale regola deriva immediatamente dalla R2.
Nel nostro esempio, V2 e V4 sono delle code del digrafo, mentre V1 è una testa (l’unica) del digrafo (come
visto nella regola precedente).
Per completezza, diciamo che con la matrice delle adiacenze è possibile calcolare il numero di cammini da
un nodo i ad un nodo j che attraversano N nodi. A tale scopo è sufficiente calcolare la potenza N-ma della
matrice e prendere il numero che compare nella posizione (i,j). Tale proprietà, sebbene molto interessante,
è – in genere – poco utile ai nostri fini.
Ci sono altre proprietà interessanti della matrice di adiacenza di un grafo, la cui trattazione – per poter
essere compresa - deve essere posposta al paragrafo “Definizione di complessità ciclomatica”
Matrice d’incidenza
La definizione di matrice d’incidenza è la seguente:
“Dato un qualsiasi grafo, la sua matrice d’incidenza è costituita da una matrice rettangolare che ha come
indici di righe i nomi dei vertici del grafo e come indice di colonne i nomi degli archi. Nel posto (i,j) della
matrice si trova:
 Il valore +1 se e solo se l’arco j è collegato al nodo i ed è entrante rispetto ad i
 Il valore -1 se e solo se l’arco j è collegato al nodo i ed è uscente rispetto ad i
 Il valore 0 se e solo se l’arco j non è collegato al nodo i“
Non diamo altri dettagli su questo modo di rappresentare un grafo, poiché non interessa ai nostri scopi e
rischierebbe solo di appesantire la trattazione e creare confusioni.
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 53 di 146
Definizione di flow chart
La pagina http://it.wikipedia.org/wiki/Diagramma_di_flusso di wikipedia fornisce una buona definizione di
flow-chart, che riprendiamo di seguito:
“Quello dei diagrammi di flusso (in inglese flow chart) è un linguaggio di modellazione grafico per
rappresentare il flusso di controllo di algoritmi, procedure, istruzioni operative (in senso lato).
Esso consente di descrivere in modo schematico:
 le operazioni da compiere, rappresentate mediante sagome convenzionali (come rettangoli, rombi,
esagoni, parallelogrammi, rettangoli smussati...) all'interno delle quali un'indicazione testuale
descrive l'attività da svolgere
 la sequenza nella quale le operazioni devono essere compiute, rappresentate con frecce di
collegamento.
Per questa loro connotazione topologica i diagrammi di flusso possono essere ricondotti alla classe più
ampia dei diagrammi a blocchi, che a loro volta rientrano nell'ancora più vasta categoria delle mappe
concettuali, utilizzate soprattutto per la descrizione e la rappresentazione delle informazioni e della
conoscenza.”
Da evidenziare che, mentre il grafo (digrafo) è un oggetto matematico con proprietà e teoremi associati, il
flow-chart è un linguaggio puramente grafico di modellazione. Volendo essere formali è possibile
acquistare in rete la norma ISO che definisce il simbolismo standard applicabile ai flow-chart; la norma è la
ISO 5807:1985 - Information processing: Documentation symbols and conventions for data, program and
system flowcharts, program network charts and system resources charts.
Un flow-chart è in genere utilizzato per rappresentare graficamente il flusso di un programma o di una
componente software, motivo per cui i simboli in essi utilizzati sono molto specifici e tecnici (esistono
simboli per database, dati ad accesso sequenziale, documenti, etc..). Tuttavia è possibile utilizzare un flow-
chart in modo più “light” per descrivere un generico processo – o sequenza di processi e/o azioni –
interconnesse tra di loro, utilizzando un insieme ridotto di simboli. Tale insieme ridotto è comunque
utilizzabile anche per descrivere il flusso di un componente software, se si accetta di non scendere troppo
in particolari che –almeno ad una prima analisi – possono essere trascurati. Ad esempio, se si vuole
descrivere un software avendo in mente il test del medesimo è – in genere – possibile prescindere da
dettagli quali la tipologia di storage, il supporto di memoria ad accesso diretto, sapere se un processo è pre-
definito e così via e focalizzare l’attenzione su tre elementi di base: processi (o azioni), cicli e condizioni.
Nel seguito non prenderemo quindi in considerazione la normativa ISO; così facendo, l’insieme di simboli
che da utilizzare si riduce sensibilmente, con il vantaggio che i flow chart creati sono più semplici da
interpretare.
Simboli grafici utilizzati
A partire da un insieme base di simboli, è possibile costruire dei simboli composti che rappresentano
costrutti particolarmente importanti e fortemente utilizzati nella programmazione software.
I simboli, sia di base che composti, sono i seguenti:
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 54 di 146
# Simbolo Nome Descrizione
1
Punto d’inizio o fine
del flow-chart.
2
Processo o azione Una serie di istruzioni da eseguire
in sequenza o un programma
complesso eventualmente
descrivibile mediante altro
diagramma di flusso.
3
Istruzione
decisionale
semplice
Corrisponde al controllo IF
standard:
IF(Condizione)
Action(s)…
END IF
4
Ciclo ripetuto
(condizione valutata
prima
dell’esecuzione
dell’azione)
Ciclo con controllo della
condizione a monte della
condizione:
While(Condizione)
Action(s)…
Do
For(int <=N)
Action(s)…
End For
5
Ciclo ripetuto
(condizione valutata
dopo l’esecuzione
dell’azione).
Ciclo con controllo della
condizione a valle della
condizione:
Do
Action(s)
While(Condizione)
6
Controllo N volte
condizionale
Corrisponde al controllo CASE:
CASE A
A=1
Action 1
A=2
Action 2
….
Else
Action default
END CASE
In altri linguaggi, l’istruzione è
SWITCH
Tabella 34 – simboli utilizzabili all’interno di un flow-chart
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 55 di 146
Un –semplice – esempio dal mondo reale
A titolo di esempio, vediamo il grafo di un semplice programma in C++ che effettua lo “split” di una stringa
su un carattere. Ad esempio, data la stringa “adamo,eva,giardino” la funzione split(“adamo,eva,giardino”)
ritorna un array di tre parole [adamo, eva, giardino].
Figura 26 – flow-chart della funzione “split” scritta in C++
Il codice in C++ corrispondente è il seguente:
Berta Danilo - http://www.bertadanilo.name/
Tecniche di analisi dei requisiti e modelli software. Pagina 56 di 146
void split(string str, string separator, vector<string>& results){
unsigned int found;
found = str.find_first_of(separator);
while(found != string::npos){
if(found > 0){
results.push_back(str.substr(0,found));
}
str = str.substr(found+1);
found = str.find_first_of(separator);
}
if(str.length() > 0){
results.push_back(str);
}
}
Se non conoscete il C++ , vi suggeriamo di non perdere tempo sui dettagli del programma.
La funzione è stata analizzata utilizzando un programma che dal codice crea il flow-chart corrispondente,
effettuando così un’operazione cosiddetta di “Reverse Engineering”.
Come si vede, la notazione utilizzata è differente da quella da noi proposta in Tabella 34. Se si vuole è
possibile ridisegnare il grafico secondo la nostra notazione, ma preferiamo non farlo: è assolutamente
normale – a secondo del tool che si usa – avere a che fare con notazioni differenti. La cosa non sarà
piacevole, ma è purtroppo la realtà, e a essa occorre abituarsi.
La notazione che abbiamo proposto può essere utilizzata quando si deve progettare – su carta – un
software o un processo (anche non software), ma non è detto che esista un tool che permetta di eseguire il
“Reverse Engineering” usando proprio la notazione che noi vogliamo.
Se vogliamo riassumere:
a) In fase di progettazione possiamo usare la notazione proposta, la qual cosa ci può semplificare il
calcolo della complessità del programma in analisi.
b) In fase di “Reverse Engineering” siamo costretti ad usare la notazione che ci propone il tool
utilizzato (a meno che non eseguiamo il “reverse” a mano…) e dobbiamo quindi abituarci alla
notazione da quest’ultimo proposta.
Il fatto che la notazione proposta semplifica il calcolo della complessità a ora non è così scontato, ma lo
chiariremo dopo aver definito – nel prossimo paragrafo – il concetto di complessità ciclomatica.
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software
Tecniche di analisi dei requisiti e modelli software

More Related Content

What's hot

Progettare artefatti cognitivi
Progettare artefatti cognitiviProgettare artefatti cognitivi
Progettare artefatti cognitivi
Stefano Bussolon
 
Dispensa Interazione Uomo Macchina
Dispensa Interazione Uomo MacchinaDispensa Interazione Uomo Macchina
Dispensa Interazione Uomo Macchina
Stefano Bussolon
 
Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...
Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...
Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...maik_o
 
Dispensa di analisi dei dati
Dispensa di analisi dei datiDispensa di analisi dei dati
Dispensa di analisi dei datiStefano Bussolon
 
Sviluppo Joomla! - Guida per principianti
Sviluppo Joomla! - Guida per principiantiSviluppo Joomla! - Guida per principianti
Sviluppo Joomla! - Guida per principianti
Luca Mengoni
 
Alfabeto per la creazione d'impresa
Alfabeto per la creazione d'impresaAlfabeto per la creazione d'impresa
Alfabeto per la creazione d'impresa
fatamago
 
Abstract Domenico Brigante
Abstract   Domenico BriganteAbstract   Domenico Brigante
Abstract Domenico Brigante
dox82
 
Manuale sicurezza lavoro
Manuale sicurezza lavoroManuale sicurezza lavoro
Manuale sicurezza lavoro
portale consulenti
 
Progetto Tecnologia Meccanica II
Progetto Tecnologia Meccanica IIProgetto Tecnologia Meccanica II
Progetto Tecnologia Meccanica II
PieroEro
 
Progetto per lo sviluppo di un sistema di gestione della conoscenza per il pr...
Progetto per lo sviluppo di un sistema di gestione della conoscenza per il pr...Progetto per lo sviluppo di un sistema di gestione della conoscenza per il pr...
Progetto per lo sviluppo di un sistema di gestione della conoscenza per il pr...
Nicola Cerami
 
Applicazioni intelligenzaartificiale
Applicazioni intelligenzaartificialeApplicazioni intelligenzaartificiale
Applicazioni intelligenzaartificiale
Antonella79
 
Piano Nazionale Scuola Digitale (risorse integrative)
Piano Nazionale Scuola Digitale (risorse integrative)Piano Nazionale Scuola Digitale (risorse integrative)
Piano Nazionale Scuola Digitale (risorse integrative)
Ministry of Public Education
 
Tecniche di Test-driven development in ambito sicurezza informatica e rilevaz...
Tecniche di Test-driven development in ambito sicurezza informatica e rilevaz...Tecniche di Test-driven development in ambito sicurezza informatica e rilevaz...
Tecniche di Test-driven development in ambito sicurezza informatica e rilevaz...fcecutti
 
Tesi Triennale - X509 e PGP
Tesi Triennale - X509 e PGPTesi Triennale - X509 e PGP
Tesi Triennale - X509 e PGP
Fabio Pustetto
 
Joseki : un server per interrogare risorse RDF attraverso un interfaccia Web
Joseki : un server per interrogare risorse RDF attraverso un interfaccia WebJoseki : un server per interrogare risorse RDF attraverso un interfaccia Web
Joseki : un server per interrogare risorse RDF attraverso un interfaccia WebCyclope86
 
Orchestrazione delle risorse umane nel BPM
Orchestrazione delle risorse umane nel BPMOrchestrazione delle risorse umane nel BPM
Orchestrazione delle risorse umane nel BPMMichele Filannino
 
Un componente NER Multi-language per il TermExtractor
Un componente NER Multi-language per il TermExtractorUn componente NER Multi-language per il TermExtractor
Un componente NER Multi-language per il TermExtractor
skasof
 

What's hot (20)

Progettare artefatti cognitivi
Progettare artefatti cognitiviProgettare artefatti cognitivi
Progettare artefatti cognitivi
 
Dispensa Interazione Uomo Macchina
Dispensa Interazione Uomo MacchinaDispensa Interazione Uomo Macchina
Dispensa Interazione Uomo Macchina
 
Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...
Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...
Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...
 
Dispensa di analisi dei dati
Dispensa di analisi dei datiDispensa di analisi dei dati
Dispensa di analisi dei dati
 
Sviluppo Joomla! - Guida per principianti
Sviluppo Joomla! - Guida per principiantiSviluppo Joomla! - Guida per principianti
Sviluppo Joomla! - Guida per principianti
 
Alfabeto per la creazione d'impresa
Alfabeto per la creazione d'impresaAlfabeto per la creazione d'impresa
Alfabeto per la creazione d'impresa
 
Monitoraggio di rete con nagios
Monitoraggio di rete con nagiosMonitoraggio di rete con nagios
Monitoraggio di rete con nagios
 
Abstract Domenico Brigante
Abstract   Domenico BriganteAbstract   Domenico Brigante
Abstract Domenico Brigante
 
Manuale sicurezza lavoro
Manuale sicurezza lavoroManuale sicurezza lavoro
Manuale sicurezza lavoro
 
Tesi
TesiTesi
Tesi
 
Progetto Tecnologia Meccanica II
Progetto Tecnologia Meccanica IIProgetto Tecnologia Meccanica II
Progetto Tecnologia Meccanica II
 
Progetto per lo sviluppo di un sistema di gestione della conoscenza per il pr...
Progetto per lo sviluppo di un sistema di gestione della conoscenza per il pr...Progetto per lo sviluppo di un sistema di gestione della conoscenza per il pr...
Progetto per lo sviluppo di un sistema di gestione della conoscenza per il pr...
 
Applicazioni intelligenzaartificiale
Applicazioni intelligenzaartificialeApplicazioni intelligenzaartificiale
Applicazioni intelligenzaartificiale
 
Piano Nazionale Scuola Digitale (risorse integrative)
Piano Nazionale Scuola Digitale (risorse integrative)Piano Nazionale Scuola Digitale (risorse integrative)
Piano Nazionale Scuola Digitale (risorse integrative)
 
Tecniche di Test-driven development in ambito sicurezza informatica e rilevaz...
Tecniche di Test-driven development in ambito sicurezza informatica e rilevaz...Tecniche di Test-driven development in ambito sicurezza informatica e rilevaz...
Tecniche di Test-driven development in ambito sicurezza informatica e rilevaz...
 
Tesi Triennale - X509 e PGP
Tesi Triennale - X509 e PGPTesi Triennale - X509 e PGP
Tesi Triennale - X509 e PGP
 
Fiba 2012 regolamento italiano. parquet per-palestre
Fiba 2012 regolamento italiano. parquet per-palestreFiba 2012 regolamento italiano. parquet per-palestre
Fiba 2012 regolamento italiano. parquet per-palestre
 
Joseki : un server per interrogare risorse RDF attraverso un interfaccia Web
Joseki : un server per interrogare risorse RDF attraverso un interfaccia WebJoseki : un server per interrogare risorse RDF attraverso un interfaccia Web
Joseki : un server per interrogare risorse RDF attraverso un interfaccia Web
 
Orchestrazione delle risorse umane nel BPM
Orchestrazione delle risorse umane nel BPMOrchestrazione delle risorse umane nel BPM
Orchestrazione delle risorse umane nel BPM
 
Un componente NER Multi-language per il TermExtractor
Un componente NER Multi-language per il TermExtractorUn componente NER Multi-language per il TermExtractor
Un componente NER Multi-language per il TermExtractor
 

Similar to Tecniche di analisi dei requisiti e modelli software

Sviluppo Di Portali Tramite La Tecnologia Sharepoint
Sviluppo Di Portali Tramite La Tecnologia SharepointSviluppo Di Portali Tramite La Tecnologia Sharepoint
Sviluppo Di Portali Tramite La Tecnologia Sharepoint
Denis Tomada
 
Profilazione utente in ambienti virtualizzati
Profilazione utente in ambienti virtualizzatiProfilazione utente in ambienti virtualizzati
Profilazione utente in ambienti virtualizzati
Pietro Corona
 
Imparare asp.net 107
Imparare asp.net 107Imparare asp.net 107
Imparare asp.net 107
Pi Libri
 
GaPiL - Guida alla Programmazione in Linux
GaPiL - Guida alla Programmazione in LinuxGaPiL - Guida alla Programmazione in Linux
GaPiL - Guida alla Programmazione in Linux
AmmLibera AL
 
Linee guida nazionali per la valorizzazione del patrimonio informativo pubbli...
Linee guida nazionali per la valorizzazione del patrimonio informativo pubbli...Linee guida nazionali per la valorizzazione del patrimonio informativo pubbli...
Linee guida nazionali per la valorizzazione del patrimonio informativo pubbli...
AmmLibera AL
 
Imparare c n.104
Imparare c  n.104Imparare c  n.104
Imparare c n.104Pi Libri
 
Inoltro di pacchetti ip in sistemi linux
Inoltro di pacchetti ip in sistemi linuxInoltro di pacchetti ip in sistemi linux
Inoltro di pacchetti ip in sistemi linuxCe.Se.N.A. Security
 
Openfisca Managing Tool: a tool to manage fiscal sistems
Openfisca Managing Tool: a tool to manage fiscal sistemsOpenfisca Managing Tool: a tool to manage fiscal sistems
Openfisca Managing Tool: a tool to manage fiscal sistems
Lorenzo Stacchio
 
Tecniche per la rilevazione e correzione di errori nell'elaborazione automati...
Tecniche per la rilevazione e correzione di errori nell'elaborazione automati...Tecniche per la rilevazione e correzione di errori nell'elaborazione automati...
Tecniche per la rilevazione e correzione di errori nell'elaborazione automati...
Matteo Gazzin
 
Regole applicative_dm_5_maggio_2011_25_06_2012_rev3
Regole applicative_dm_5_maggio_2011_25_06_2012_rev3Regole applicative_dm_5_maggio_2011_25_06_2012_rev3
Regole applicative_dm_5_maggio_2011_25_06_2012_rev3
energymanager
 
Validation and analysis of mobility models
Validation and analysis of mobility modelsValidation and analysis of mobility models
Validation and analysis of mobility modelsUmberto Griffo
 
Motorola solutions ap6532 installation guide italian (part no. 72 e-149368-...
Motorola solutions ap6532 installation guide   italian (part no. 72 e-149368-...Motorola solutions ap6532 installation guide   italian (part no. 72 e-149368-...
Motorola solutions ap6532 installation guide italian (part no. 72 e-149368-...Advantec Distribution
 
Motorola solutions ap6532 installation guide italian (part no. 72 e-149368-...
Motorola solutions ap6532 installation guide   italian (part no. 72 e-149368-...Motorola solutions ap6532 installation guide   italian (part no. 72 e-149368-...
Motorola solutions ap6532 installation guide italian (part no. 72 e-149368-...Advantec Distribution
 
Anomaly detection in network traffic flows with big data analysis techniques
Anomaly detection in network traffic flows with big data analysis techniques Anomaly detection in network traffic flows with big data analysis techniques
Anomaly detection in network traffic flows with big data analysis techniques
Maurizio Cacace
 

Similar to Tecniche di analisi dei requisiti e modelli software (20)

Sviluppo Di Portali Tramite La Tecnologia Sharepoint
Sviluppo Di Portali Tramite La Tecnologia SharepointSviluppo Di Portali Tramite La Tecnologia Sharepoint
Sviluppo Di Portali Tramite La Tecnologia Sharepoint
 
Profilazione utente in ambienti virtualizzati
Profilazione utente in ambienti virtualizzatiProfilazione utente in ambienti virtualizzati
Profilazione utente in ambienti virtualizzati
 
Imparare asp.net 107
Imparare asp.net 107Imparare asp.net 107
Imparare asp.net 107
 
Tesi Tamiazzo09
Tesi Tamiazzo09Tesi Tamiazzo09
Tesi Tamiazzo09
 
GaPiL - Guida alla Programmazione in Linux
GaPiL - Guida alla Programmazione in LinuxGaPiL - Guida alla Programmazione in Linux
GaPiL - Guida alla Programmazione in Linux
 
Linee guida nazionali per la valorizzazione del patrimonio informativo pubbli...
Linee guida nazionali per la valorizzazione del patrimonio informativo pubbli...Linee guida nazionali per la valorizzazione del patrimonio informativo pubbli...
Linee guida nazionali per la valorizzazione del patrimonio informativo pubbli...
 
Guida di dreamweaver cs5
Guida di dreamweaver cs5Guida di dreamweaver cs5
Guida di dreamweaver cs5
 
Imparare c n.104
Imparare c  n.104Imparare c  n.104
Imparare c n.104
 
repairpdf_Oy51nCFX
repairpdf_Oy51nCFXrepairpdf_Oy51nCFX
repairpdf_Oy51nCFX
 
Inoltro di pacchetti ip in sistemi linux
Inoltro di pacchetti ip in sistemi linuxInoltro di pacchetti ip in sistemi linux
Inoltro di pacchetti ip in sistemi linux
 
Openfisca Managing Tool: a tool to manage fiscal sistems
Openfisca Managing Tool: a tool to manage fiscal sistemsOpenfisca Managing Tool: a tool to manage fiscal sistems
Openfisca Managing Tool: a tool to manage fiscal sistems
 
Tecniche per la rilevazione e correzione di errori nell'elaborazione automati...
Tecniche per la rilevazione e correzione di errori nell'elaborazione automati...Tecniche per la rilevazione e correzione di errori nell'elaborazione automati...
Tecniche per la rilevazione e correzione di errori nell'elaborazione automati...
 
Sat howto
Sat howtoSat howto
Sat howto
 
Regole applicative_dm_5_maggio_2011_25_06_2012_rev3
Regole applicative_dm_5_maggio_2011_25_06_2012_rev3Regole applicative_dm_5_maggio_2011_25_06_2012_rev3
Regole applicative_dm_5_maggio_2011_25_06_2012_rev3
 
Validation and analysis of mobility models
Validation and analysis of mobility modelsValidation and analysis of mobility models
Validation and analysis of mobility models
 
Ap6532 manuale di installazione
Ap6532 manuale di installazioneAp6532 manuale di installazione
Ap6532 manuale di installazione
 
Ap6532 manuale di installazione
Ap6532 manuale di installazioneAp6532 manuale di installazione
Ap6532 manuale di installazione
 
Motorola solutions ap6532 installation guide italian (part no. 72 e-149368-...
Motorola solutions ap6532 installation guide   italian (part no. 72 e-149368-...Motorola solutions ap6532 installation guide   italian (part no. 72 e-149368-...
Motorola solutions ap6532 installation guide italian (part no. 72 e-149368-...
 
Motorola solutions ap6532 installation guide italian (part no. 72 e-149368-...
Motorola solutions ap6532 installation guide   italian (part no. 72 e-149368-...Motorola solutions ap6532 installation guide   italian (part no. 72 e-149368-...
Motorola solutions ap6532 installation guide italian (part no. 72 e-149368-...
 
Anomaly detection in network traffic flows with big data analysis techniques
Anomaly detection in network traffic flows with big data analysis techniques Anomaly detection in network traffic flows with big data analysis techniques
Anomaly detection in network traffic flows with big data analysis techniques
 

Tecniche di analisi dei requisiti e modelli software

  • 1. HTTP://WWW.BERTADANILO.NAME Tecniche di analisi dei requisiti e modelli software. Le tabelle decisionali, i grafi e flow-chart, le macchine a stati finiti, le reti di Petri ed il Test Combinatoriale nel processo di creazione del software. Danilo Berta 26/11/2014 [Versione 1.2]
  • 2. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 2 di 146 Contenuti Introduzione ...................................................................................................................................................... 6 Capitolo 1 - Tabelle Decisionali ......................................................................................................................... 8 Definizione di tabella decisionale.................................................................................................................. 9 Logic Friday.................................................................................................................................................. 15 Care or don’t care ?................................................................................................................................. 18 Esempio # 1 – il modulo di registrazione utente......................................................................................... 23 Tabelle funzionali......................................................................................................................................... 27 Riduzione della tabella funzionale in decisionale.................................................................................... 27 Il caso degenere della funzione............................................................................................................... 29 Esempio # 2 – la scuola guida...................................................................................................................... 31 Esempio #3 - un caso un po’ complesso...................................................................................................... 34 Riduzione delle tabelle di decisione........................................................................................................ 38 Capitolo 2 – Grafi e flow chart......................................................................................................................... 44 Definizione di grafo ..................................................................................................................................... 45 Caratteristiche di un grafo........................................................................................................................... 47 Definizione di vertici adiacenti ................................................................................................................ 47 Definizione di grado di un vertice............................................................................................................ 48 Definizione di cammino in un grafo......................................................................................................... 49 Definizione di ciclo in un grafo ................................................................................................................ 50 Rappresentazioni matriciali di un grafo....................................................................................................... 51 Matrice delle adiacenze........................................................................................................................... 51 Matrice d’incidenza................................................................................................................................. 52 Definizione di flow chart.............................................................................................................................. 53 Simboli grafici utilizzati............................................................................................................................ 53 Un –semplice – esempio dal mondo reale .............................................................................................. 55 Definizione di complessità ciclomatica........................................................................................................ 57 Cammini elementari e complessità ciclomatica.......................................................................................... 60 Capitolo 3 – Automa a stati finiti..................................................................................................................... 65 Definizione di automa o macchina a stati finiti........................................................................................... 66 Esempio #4 – Le scuole medie inferiori....................................................................................................... 66 Riduzione di un ASF in tabella decisionale. ............................................................................................. 68 Esempio #4bis – vacanza o studio punitivo?............................................................................................... 71
  • 3. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 3 di 146 Definizione formale di automa agli stati finiti in termini di tabella decisionale.......................................... 74 Capitolo 4 – Reti di Petri.................................................................................................................................. 75 Definizioni.................................................................................................................................................... 76 Dinamicità nelle reti di Petri: i token........................................................................................................... 78 Esempio # 5 – Cucire le … stringhe!............................................................................................................. 84 Valore semantico e definizioni formali........................................................................................................ 87 Descrizione operativa di una rete di Petri................................................................................................... 93 Combinazioni parziali distinte di N numeri interi........................................................................................ 95 Vasi, tubi e palline... .................................................................................................................................... 96 Algoritmo di soluzione del problema fondamentale per una rete di Petri............................................... 100 Passo # 1 – Aggiunta delle combinazioni distinte a ti,j........................................................................... 101 Passo # 2 – Riduzione dei valori nelle colonne con più valori negativi ................................................. 102 Passo # 3 – Calcolo della configurazione finale..................................................................................... 103 Calcolo delle successive configurazioni................................................................................................. 103 Un esempio più complesso.................................................................................................................... 107 Altro esempio: numero token maggiore della somma delle molteplicità del posto............................. 109 Ultimo esempio: più configurazioni finali.............................................................................................. 110 Reti di Petri binarie.................................................................................................................................... 112 Capitolo 5 –Test combinatoriale ................................................................................................................... 115 1-wise testing. ............................................................................................................................................... 117 2-wise testing o pairwise testing................................................................................................................... 118 n-wise testing con n>2.................................................................................................................................. 121 Combinatorial Testing Tools.......................................................................................................................... 122 Procedura di installazione ......................................................................................................................... 123 Procedura di configurazione...................................................................................................................... 125 Panoramica generale dei Combinatorial Testing Tools............................................................................. 126 Convenzioni lessicali e tipografiche........................................................................................................... 129 Tool di primo livello – script batch DOS .................................................................................................... 130 Come convenzione, il nome di tutti gli script batch segue lo schema: ................................................. 130 Tool runW.............................................................................................................................................. 130 Tool runCC e runsCC.............................................................................................................................. 130 Tools runT e runsT................................................................................................................................. 131 Tools runTS e runsTS ............................................................................................................................. 132 Tools runTSF e runsTSF.......................................................................................................................... 133
  • 4. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 4 di 146 Tool runR ............................................................................................................................................... 134 Tool runC ............................................................................................................................................... 134 Tool di secondo livello – eseguibili............................................................................................................ 136 Eseguibili calcolacopertura.exe e calcolaCoperturaSlow.exe ............................................................... 136 Eseguibile Combinazioni_n_k................................................................................................................ 136 Eseguibili generaTestSet.exe e generaTestSetSlow.exe........................................................................ 137 Eseguibile ProdCart.exe......................................................................................................................... 138 Eseguibile reduceNple.exe .................................................................................................................... 139 Eseguibili di utility.................................................................................................................................. 140 Capitolo 6 – Quello che non viene detto....................................................................................................... 142 Un semplice caso … ................................................................................................................................... 143 E le specifiche? .......................................................................................................................................... 145 Nota conclusiva ............................................................................................................................................. 146
  • 5. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 5 di 146 # Numero versione Data Pubblicazione Descrizione 2 1.1 29 marzo 2013 Aggiunti i seguenti paragrafi:  Descrizione operativa di una rete di Petri.  Combinazioni parziali distinte di N numeri interi.  Vasi, tubi e palline...  Algoritmo di soluzione del problema fondamentale per una rete di Petri  Passo # 1 – Aggiunta delle combinazioni distinte a ti,j  Passo # 2 – Riduzione dei valori nelle colonne con più valori negativi  Passo # 3 – Calcolo della configurazione finale.  Calcolo delle successive configurazioni.  Un esempio più complesso  Altro esempio: numero token maggiore della somma delle molteplicità del posto.  Ultimo esempio: più configurazioni finali  Reti di Petri binarie 1 1.0 18 marzo 2013 Versione iniziale
  • 6. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 6 di 146 Introduzione Nel linguaggio verbale (scritto e parlato) il verbo indica l’azione che è svolta dal soggetto. Nella lingua italiana i tempi e modi dei verbi sono i seguenti: Figura 1 – Schema dei tempi e modi dei verbi italiani Nella tabella che segue riportiamo la descrizione dei modi verbali, copiata integralmente dalla pagina web http://grammatica-italiana.dossier.net/grammatica-italiana-10.htm: # Modo verbale Descrizione 1 Indicativo È il modo della realtà e della certezza ed esprime un fatto reale o supposto come tale. 2 Infinito È uno dei modi indefiniti del verbo ed esprime genericamente l'idea del verbo senza determinazione di persona e di numero. 3 Participio È così detto perché partecipa della funzione nominale come un aggettivo e si usa in funzione attributiva, predicativa e verbale. 4 Gerundio Esprime un complemento di mezzo, di modo o di maniera, di coincidenza (simultaneità), in genere un'azione secondaria rispetto alla principale. 5 Congiuntivo È il modo che esprime una azione possibile, incerta o desiderata. 6 Condizionale È il modo dell'incertezza e dell'irrealtà. Tabella 1 – Descrizione dei modi dei verbi nella lingua italiana Non vogliamo tenere una lezione di grammatica. Vogliamo semplicemente evidenziare che, per esprimere un concetto, la lingua italiana (ma anche altri idiomi, in modi diversi) permette costrutti raffinati e ricchi di decorazioni. Ora, riducendosi all’osso, osserviamo che i modi verbali possono essere ridotti in due grandi classi:
  • 7. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 7 di 146 1. ASSOLUTA, quando – indipendentemente dal tempo passato, presente o futuro – si vuole esprimere una azione CERTA. 2. CONDIZIONALE, quando – indipendentemente dal tempo passato, presente o futuro – si vuole esprimere una azione che avrà luogo SE SI VERIFICANO DETERMINATE CONDIZIONI. Un software è costruito con due elementi di base (1 ): 1. Istruzioni 2. Costrutti condizionali (singoli o multipli) Le istruzioni sono elementi fondamentali che sono sempre eseguiti, mentre i costrutti condizionali (if, iif, switch, case, etc) permettono l’esecuzione delle istruzioni quando è verificata una o più condizioni. Il confronto con le classi Assoluta e Condizionale è immediato. Quando si ha a che fare con la progettazione di un sistema software, ci si trova a dover gestire dei requisiti espressi in linguaggio naturale e posti nella forma: “Se accade questo e quest’altro, fai quest’ azione; altrimenti se occorre la condizione A oppure la B, fai una seconda azione”. Semplificando, abbiamo a che fare con dei costrutti che richiedono che, dato il verificarsi di certe condizioni, devono essere svolte certe azioni. Le condizioni possono essere (e in genere lo sono) molto complesse e lo stesso vale per le azioni che devono essere svolte. In altre parole dobbiamo – nell’analisi dei requisiti – sfrondare la complessità del linguaggio verbale, fondato su sei modi verbali e su una dozzina di tempi, in due classi: ASSOLUTO (si fa) o CONDIZIONALE (si fa a condizione che). Le azioni possono essere descritte come sottorequisiti (per i quali valgono comunque la logica condizioni → azioni e come tali vanno analizzati), oppure possono essere considerati come algoritmi o funzioni, oppure ancora possono essere delle altre condizioni (ad esempio, se x è divisibile per 2 – condizione – allora x è pari , che può essere interpretato come una nuova condizione). Analizzare un requisito significa innanzi tutto individuare azioni e condizioni e quindi correlare questi due elementi tra di loro. Le tabelle decisionali possono essere utilizzate per descrivere i requisiti sotto forma di condizioni e di azioni. 1 Si dovrebbe tenere conto anche dei costrutti ciclici (for, do-while, while, etc..), ma tali costrutti non fanno altro che eseguire più volte istruzioni e condizioni.
  • 8. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 8 di 146 Capitolo 1 - Tabelle Decisionali TTAABBEELLLLEE DDEECCIISSIIOONNAALLII
  • 9. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 9 di 146 Definizione di tabella decisionale Quanto riportato in Tabella 2 rappresenta una tabella decisionale : Condizioni 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 A – Condizione # 1 T T F F T T F F T T F F T T F F B - Condizione # 2 T F T F T F T F T F T F T F T F C - Condizione # 3 T T T T F F F F T T T T F F F F …. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. N - Condizione # N T .. .. .. .. .. .. .. .. .. .. .. .. .. .. F Azioni F0: Azione # 1 1 1 1 1 1 1 1 1 1 F1: Azione # 2 1 1 1 1 1 1 1 1 1 … .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. F(N-1) : Azione # N+1 1 1 1 1 1 1 1 1 1 Tabella 2 – Struttura di Tabella Decisionale La prima colonna è divisa in due parti: la sezione “alta” contiene le condizioni booleane, una per ogni riga. La sezione “bassa” contiene le azioni che devono essere eseguite, qualora siano verificate le corrispondenti azioni. Le colonne sono numerate per maggior chiarezza, ma non si è obbligati a farlo; la numerazione parte da 0, cosa che potrebbe sembrare un po’ strana; nel prossimo capitolo capiremo il perché. Chiariamo ora la modalità di lettura della tabella decisionale e consideriamo la colonna # 0. La colonna # 0 può essere interpretata con la seguente espressione: Quando (A è vera) e (B è vera) e (C è vera) … e (N è vera) allora (Eseguo F0) e (Eseguo F1) e (Eseguo FN) Analogamente, per la colonna # 6 si ha: Quando (A è falsa) e (B è vera) e (C è falsa) … allora (Eseguo F1) … Con il linguaggio booleano, possiamo scrivere: Colonna # 0: (A=True) AND (B=True) AND (C=True) → (F0 = True) AND (F1 = True) AND (FN = True) Colonna # 6: (A=False) AND (B=True) AND (C=False) → (F1 = True) Ricordiamo che: a) Una condizione booleana (o semplicemente condizione) può sempre e solo assumere uno dei due valori TRUE o FALSE, indicati anche come T o F oppure ancora 1 o 0; b) Le condizioni booleane che compaiono nella stessa colonna sono in AND; c) Le azioni che compaiono nella stessa colonna sono in AND; d) Le condizioni booleane sono da considerarsi indipendenti tra di loro. Chiariamo che cosa s’intende per condizione booleana indipendente o dipendente con un esempio. Consideriamo le seguenti affermazioni:
  • 10. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 10 di 146 1. Avere i capelli biondi 2. Avere gli occhi scuri Una persona può avere gli occhi scuri o chiari indipendentemente dal colore dei capelli. Se considero le due affermazioni sopra come condizioni, posso scrivere la seguente tabella: Condizione # 1: Avere i capelli biondi Condizione # 2: Avere gli occhi scuri TRUE TRUE TRUE FALSE FALSE TRUE FALSE FALSE Tabella 3 – Condizioni indipendenti. Tutte le possibili combinazioni (C1,C2) di valori TRUE e FALSE sono ammissibili; non vi sono vincoli tra le due condizioni. Le condizioni booleane C1 e C2 sono in questo caso indipendenti. Consideriamo invece le seguenti affermazioni concernenti uno stesso individuo: 1. Essere maggiorenne 2. Avere un’età inferiore a 18 anni. Considerando le due affermazioni sopra come condizioni, abbiamo la seguente tabella: Condizione # 1: Essere maggiorenne Condizione # 2: Età inferiore a 18 anni TRUE TRUE TRUE FALSE FALSE TRUE FALSE FALSE Tabella 4 – Condizioni dipendenti, primo esempio E’ ovvio che è impossibile che entrambe le condizioni siano TRUE per uno stesso individuo; e non è neanche possibile che siano entrambi FALSE; se l’una e vera, l’altra deve necessariamente essere falsa. In questo caso, la relazione tra le due condizioni C1 e C2 è evidente: C1 = NOT (C2) oppure la duale: C2 = NOT (C1). La tabella sopra riportata la chiameremo “tabella di dipendenza” e le condizioni booleane C1 e C2 sono in questo caso dipendenti, nel senso che: a) Specificate alcune, si possono conoscere le altre, in modo univoco per almeno alcuni valori. b) Esistono delle combinazioni delle condizioni che non sono permesse. Un ragionamento analogo si può fare per più di due variabili booleane. Nel seguito, data una condizione C, indicheremo con l’apice la condizione negata, ossia: C’= NOT (C). Per fare un altro esempio di condizioni dipendenti consideriamo il seguente mini-requisito. Supponiamo che in un form di registrazione a un sito web vi sia un campo e-mail in cui inserire la propria e-mail; è richiesto che: “L’indirizzo di e-mail non è obbligatorio, ma se inserito la mail deve essere formalmente valida”. Leggendolo vengono in mente le seguenti due condizioni: 1. Indirizzo di mail vuoto 2. Indirizzo di mail valido
  • 11. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 11 di 146 Possiamo costruire la seguente tabella della verità: # A: Indirizzo di mail vuoto B: Indirizzo di mail valido 1 True True 2 True False 3 False True 4 False False Tabella 5 – Condizioni dipendenti, secondo esempio Ora, se il campo e-mail è vuoto, non può essere valido; la combinazione #1 (TRUE, TRUE) non ha senso, ma è accettata perché il campo è facoltativo. La combinazione #2, che avrebbe senso da un punto di vista “tecnico” (se l’indirizzo di mail è vuoto, non è valido per definizione: un indirizzo di e-mail = “” non è sicuramente tecnicamente valido!) deve essere escluso perché in contraddizione con la combinazione # 1 (l’indirizzo di mail non valorizzato è accettato). Se l’indirizzo di e-mail non è vuoto, allora contiene una stringa alfanumerica, che può essere una mail formalmente valida (pippo@miamail.com) – e siamo nel caso #3 (FALSE, TRUE) – oppure non essere una mail valida (uyhiuy89iuoj@) – e siamo nel caso #4 (FALSE, FALSE). Le due condizioni A e B sono tra di loro dipendenti, in quanto: a) Nel caso si fissi A = FALSE, la condizione B può assumere entrambi i valori TRUE o FALSE. b) La combinazione # 1 (TRUE,TRUE) è permessa. c) La combinazione #2 (TRUE,FALSE) è proibita. Consideriamo ancora il seguente caso di condizioni dipendenti. Consideriamo una variabile X che può assumere uno dei tre numeri interi {1,2,3}. Se X=1 ovviamente non può valere 2 e neppure 3. Al posto della variabile X consideriamo le tre condizioni: 1. A: X = 1 2. B: X = 2 3. C: X = 3 Le tre condizioni sono dipendenti. Vale la seguente tabella di dipendenza: # A: X = 1 B: X = 2 C: X = 3 1 TRUE FALSE FALSE 2 FALSE TRUE FALSE 3 FALSE FALSE TRUE 4 TRUE TRUE TRUE 5 TRUE FALSE TRUE 6 FALSE TRUE TRUE 7 TRUE TRUE FALSE 8 FALSE FALSE FALSE Tabella 6 –Condizioni dipendenti, terzo esempio Solo le combinazioni (TRUE,FALSE,FALSE), (FALSE, TRUE, FALSE) e (FALSE,FALSE,TRUE) sono valide; in altri termini solo una condizione alla volta è TRUE. La condizione #4 (TRUE,TRUE,TRUE) è evidentemente impossibile in quanto la variabile X non può contemporaneamente assumere tutte e tre i valori {1,2,3}. Un ragionamento analogo vale per le combinazioni #5 → #8. Anche la combinazione (FALSE,FALSE,FALSE) non
  • 12. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 12 di 146 è valida, perché la variabile X deve (obbligatoriamente) assumere un valore; nel caso non ci fosse questo obbligo, la combinazione #8 dovrebbe essere considerata valida. Dalla tabella sopra, considerando solo i casi validi, si possono scrivere le seguenti equazioni booleane, che definiscono la dipendenza delle condizioni A,B,C tra di loro(2 ):  (A=TRUE) AND (B=FALSE) AND (C=FALSE) = A  (A=FALSE) AND (B=TRUE) AND (C=FALSE) = B  (A=FALSE) AND (B=FALSE) AND (C=TRUE) = C Nel caso in cui dovesse essere presa in considerazione la riga #8, quindi dando la possibilità alla variabile X di non assumere nessun valore, si deve anche considerare l’equazione:  (A=FALSE) AND (B=FALSE) AND (C=FALSE) = FALSE In casi in cui una variabile può assumere N valori distinti, si può genericamente dire che è possibile derivare N condizioni dipendenti (A,B,C,…,N) , essendo valide le N equazioni booleane di dipendenza seguenti: (A=FALSE) AND (B=FALSE) AND (C=FALSE)…AND (K=TRUE) AND … AND (N=FALSE) = K per tutte le condizioni K = A,B,..,N. Si deve considerare anche l’equazione: (A=FALSE) AND (B=FALSE) AND (C=FALSE)…AND (K=FALSE) AND … AND (N=FALSE) = FALSE se si suppone che la variabile possa non assumere nessuno degli N valori. Un caso particolare è quello di una variabile X che possa assumere uno ed un sol valore, poniamo X=1. In questo caso, l’unica condizione che si può derivare è A: X=1 che è sempre TRUE. In pratica abbiamo una variabile binaria assoluta o auto-vincolata in cui la tabella di vincolo è la seguente: # A: X = 1 1 TRUE 2 FALSE Tabella 7 – variabile binaria auto-vincolata Continuando nella lettura della tabella decisionale, consideriamo il seguente esempio di tabella decisionale: Condizioni 0 1 2 3 A – Condizione # 1 T T F F B - Condizione # 2 T F T F Azioni F0: Azione # 1 1 1 1 F1: Azione # 2 1 1 1 Tabella 8 – Tabella decisionale con 2 condizioni e 2 azioni 2 Dire infatti (A=TRUE) AND (B=FALSE) AND (C=FALSE) è come dire se (x=1) e (x≠2) e (x≠3), quanto vale x? Ovviamente x=1. Stesso ragionamento per le altre due condizioni.
  • 13. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 13 di 146 La tabella ha due condizioni A e B e due azioni F0 ed F1. Leggendo le colonne, come abbiamo mostrato prima, abbiamo: # Relazione Colonna Relazione Azione - Condizione 1 Colonna 0 F0 = (A = True) AND (B = True) 2 Colonna 0 F1 = (A = True) AND (B = True) 3 Colonna 1 F1 = (A = True) AND (B = False) 4 Colonna 2 F0 = (A = False) AND (B = True) 5 Colonna 3 F0 = (A = False) AND (B = False) 6 Colonna 3 F1 = (A = False) AND (B = False) Tabella 9 – Tabella esplicativa della decisionale (prima forma) Per semplificare la scrittura conveniamo che: 1. Quando scriviamo la condizione A è da intendersi A = True 2. Quando scriviamo la condizione A’ ( = A negata) è da intendersi A = False 3. Sostituiamo all’operatore AND il simbolo · che può anche essere tralasciato; in pratica: (A AND B) ≡ (A· B) ≡ AB 4. Sostituiamo all’operatore OR il simbolo + ; in pratica: (A OR B) ≡ (A + B) La tabella sopra si riscrive più semplicemente: # Relazione Colonna Relazione Azione - Condizione 1 Colonna 0 F0 = AB 2 Colonna 0 F1 = AB 3 Colonna 1 F1 = AB’ 4 Colonna 2 F0 = A’B 5 Colonna 3 F0 = A’B’ 6 Colonna 3 F1 = A’B’ Tabella 10 – Tabella esplicativa della decisionale (seconda forma) Raggruppando insieme le azioni F0 e F1:  F0 = A B + A' B + A' B';  F1 = A B + A B' + A' B'; Ci poniamo la seguente domanda: esiste un metodo che mi permette di ridurre al minimo le espressioni trovate per F0 ed F1 ? Si potrebbe pensare – visto l’esempio sopra – che la domanda sia “oziosa” perché le due espressioni non sono poi così complicate. Per rispondere all’obiezione, supponiamo di dover implementare uno spezzone di codice che, controllando le condizioni A e B, esegua le azioni F0 o F1. Il codice è quello sotto riportato: if((A=true AND B=true) OR (A=false AND B=true) OR (A=false AND B=false)){ print "Sto eseguendo F0";} if((A=true AND B=true) OR (A=true AND B=false) OR (A=false AND B=false)){
  • 14. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 14 di 146 print "Sto eseguendo F1";} Vediamo ora se riusciamo a ridurre le espressioni trovate per F0 ed F1. Con un po’ di algebra booleana:  F0 = A B + A' B + A' B' = AB + A’ (B + B’) = AB + A’ = (A’)’ B + A’ = A’ + (A’)’B = A' + B;  F1 = A B + A B' + A' B' = AB + B’ (A + A’) = AB + B’ = A(B’)’ + B’ = B’ + A(B’)’ = B’ + A = A + B' Avendo considerato che: 1. Data una qualunque condizione booleana X si ha che: X + X’ = 1 (TRUE). Quindi A + A’ = 1 e B + B’ = 1 2. Data una qualunque condizione booleana X si ha: (X’)’ = X; quindi (A’)’ = A e (B’)’ = B. 3. Date due condizioni booleane X ed Y vale la proprietà commutativa: X + Y = Y + X 4. Il teorema dell’assorbimento del complemento mi dice che, date due qualunque condizioni booleane A e B vale la relazione: A + A’B = A + B . Non preoccupatevi troppo se non riuscite a seguire nel dettaglio i passaggi; la difficoltà sta nell’eseguire i conti usando l’algebra booleana, ma l’espressione ridotta è molto più semplice rispetto l’originale e il nostro codice diventa molto più comprensibile: if((A=false AND B=true)){ print "Sto eseguendo F0";} if((A=true AND B=false)){ print "Sto eseguendo F1";} Ora, a livello pratico e operativo, nel lavoro di tutti i giorni, non è pensabile eseguire dei calcoli con l’algebra booleana, che – nei problemi reali – sono molto più complessi rispetto a quelli appena mostrati; l’unico sistema è di utilizzare un software adatto allo scopo. Il software che utilizzeremo si chiama Logic Friday e sarà l’oggetto del prossimo capitolo.
  • 15. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 15 di 146 Logic Friday Il presente capitolo non vuole essere un manuale esaustivo di utilizzo del software Logic Friday, ma fornire solo le informazioni di base utili per compiere le operazioni di minimizzazione delle tabelle decisionali. Esiste per altro un ottimo “help on line” e l’interfaccia è semplice e intuitiva da utilizzare. Per prima cosa si scarichi il software (gratuito alla data di stesura del presente manuale) dal sito http://www.sontrak.com/ e lo si installi sulla propria macchina; il software gira solo in ambienti Windows. Una volta lanciato, appare la schermata seguente: Figura 2 – Videata principale di Logic Friday. Click con il mouse su File →New→Truth Table ed appare la seguente videata:
  • 16. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 16 di 146 Figura 3 – Scelta degli input ed output della Truth Table. Selezionare in numero di valori d’input (sono le condizioni) e il numero di valori di output (sono le azioni) corretti per il problema in analisi. Ad esempio, nel caso visto nel paragrafo precedente (Tabella 8) abbiamo due input A e B (condizioni) e due output F0 e F1 (azioni). Premendo OK, il software presenta la seguente videata: Figura 4 – Esempio di Truth Table. Il software prepara la tabella con tutte le possibili combinazioni dei valori delle condizioni (che sono considerate indipendenti) e tale tabella (in nero a sinistra) non è modificabile.
  • 17. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 17 di 146 Cliccando gli zeri in blu in corrispondenza dell’incrocio tra le combinazioni delle condizioni A e B e le azioni F0 e F1, il valore cambia in modo ciclico da 0 → 1 → X. In pratica non abbiamo altro che la nostra tabella decisionale, ma vista in forma trasposta. Il valore X sta per “don’t care” (“non importa” in inglese) e capiremo meglio di cosa si tratta tra un po’. Ricordiamo che Logic Friday usa la notazione 1 per TRUE e 0 per FALSE, mentre nelle tabelle sul presente documento usiamo direttamente TRUE e FALSE; inoltre noi non inseriamo il valore 0 nella parte in basso delle tabelle riservata alle azioni per non appesantire troppo. Provando a inserire i valori della Tabella 8 abbiamo: Figura 5 – Esempio di Truth Table compilata. Premendo invio (oppure la voce di menù Truthtable→Submit) il software mostra le equazioni per F0 ed F1 che ha dedotto dai valori inseriti nella tabella (lato destro sotto la scritta “Entered by truthtable”): Figura 6 – Equazioni delle azioni equivalenti ai valori inseriti nella Truth Table.
  • 18. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 18 di 146 A questo punto se clicchi su Operation → Minimize… e compare la seguente videata di scelta: Figura 7 – Selezione delle modalità di ottimizzazione dei calcoli di minimizzazione Manteniamo le opzioni che sono selezionate di default e premiamo OK. Otteniamo la seguente schermata: Figura 8 – Equazioni minimizzate Abbiamo ottenuto così le equazioni minimizzate nel riquadro di destra sotto la scritta “Minimized”. Care or don’t care ? Consideriamo il seguente (semplice) requisito: “La pagina di login ad un sito web richiede l’inserimento di user, password e codice captcha. Perché il login abbia successo, login e password devono appartenere ad uno stesso utente (registrato in una tabella anagrafica) ed il codice capcha deve essere uguale a quello proposto a video”.
  • 19. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 19 di 146 Figura 9 – Pagina di Login Abbiamo tre variabili binarie indipendenti: user, password e codice captca. Le condizioni sono:  A: utente inserito uguale a U presente sul database.  B: password inserita uguale a quella dell’utente U.  C: codice captcha uguale a quello mostrato a video. Le azioni sono:  F0: Messaggio di errore.  F1: Login effettuato Ora, perché sia possibile eseguire il login (azione F1), le tre condizioni devono essere tutte TRUE. Negli altri casi,quando almeno una condizione è falsa, viene sempre inviato il messaggio di errore. La tabella decisionale è la seguente: Condizioni 0 1 2 3 A – utente = U T F d.c. d.c B – Password = U T d.c. F d.c C – Codice = codice a video T d.c d.c F Azioni F0: messaggio errore 1 1 1 F1: login effettuato 1 Tabella 11 – Tabella decisionale per Login Form con don’t care Abbiamo utilizzato d.c. (acronimo per “don’t care”) per le condizioni ininfluenti sull’azione da intraprendere. In pratica, la colonna #2 ci dice che, qualunque valore assuma la condizione B o C, è sufficiente che la condizione A sia FALSE perché sia prodotto il messaggio di errore F0. In altri termini, i “don’t care” sono le condizioni che sono ininfluenti sulle le azioni da intraprendere. La Tabella 11 scritta in forma “ridotta” – utilizzando i don’t care – può essere sviluppata in forma estesa, sostituendo i d.c. con le combinazioni dei valori TRUE e FALSE; si ottiene:
  • 20. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 20 di 146 Condizioni 0 1.1 1.2 1.3 1.4 2.1 2.2 2.3 2.4 3.1 3.2 3.3 3.4 A – utente = U T F F F F T T F F T T F F B – Password = U T T T F F F F F F T F T F C – Codice = codice a video T T F T F T F T F F F F F Azioni F0: messaggio errore 1 1 1 1 1 1 1 1 1 1 1 1 F1: login effettuato 1 Tabella 12 – Tabella decisionale per Login Form sviluppata in forma estesa. Nella Tabella 12 abbiamo indicato con 1.1, 1.2, 1.3 ed 1,4 lo sviluppo della colonna 1 della Tabella 11 e così via per la colonna 2 e 3. Notiamo che la Tabella 12 ha delle colonne duplicate: colonne 1.4, 2.4 e 3.4 per la combinazione (FALSE, FALSE, FALSE), 1.3 e 2.3 per la combinazione (FALSE, FALSE, TRUE), colonne 1.2 e 3.3 per la combinazione (FALSE, TRUE, FALSE) e colonne 2.2 e 3.2 per la combinazione (TRUE,FALSE, FALSE). Eliminando le ridondanze, si ottiene: Condizioni 0 1.1 2.1 2.2 2.3 3.1 3.3 3.4 A – utente = U T F T T F T F F B – Password = U T T F F F T T F C – Codice = codice a video T T T F T F F F Azioni F0: messaggio errore 1 1 1 1 1 1 1 F1: login effettuato 1 Tabella 13 – Tabella decisionale per Login Form senza ridondanze. Quest’ultima è la tabella decisionale sviluppata e senza ridondanze (le colonne sono 8 = 23 ). Utilizzando i d.c. si semplifica e si riducono di molto le dimensioni della tabella condizionale; occorre però fare attenzione che in alcuni casi potreste trovarvi con degli errori. Consideriamo ad esempio la seguente generica tabella (derivante da un qualche requisito che non staremo a specificare): Condizioni 0 1 2 3 A T T d.c. d.c B T d.c. T d.c C F d.c d.c T Azioni F0 1 1 1 F1 1 Tabella 14 – Tabella decisionale con don’t care NON corretti Se sviluppiamo la Tabella 14 otteniamo la seguente:
  • 21. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 21 di 146 Condizioni 0 1 2 3 4 5 6 7 8 9 10 11 12 A T T T T T T F T F T F T F B T T F T F T T T T T T F F C F T T F F T T F F T T T T Azioni F0 1 1 1 1 1 1 1 1 1 1 1 1 F1 1 Tabella 15 – Tabella decisionale con don’t care NON corretti in forma sviluppata Vediamo che la colonna #0 e la colonna #7 sono in contraddizione; la #0 dice che per la combinazione (TRUE, TRUE, FALSE) si verifica l’azione F1 mentre la colonna #7 la stessa combinazione è associata all’azione F0. Ci sono quindi due possibilità: o la cosa non ha senso e il requisito rappresentato nella tabella è errato, oppure entrambe le azioni si verificano se la condizione (TRUE, TRUE, FALSE) è verificata, cosa che si può verificare se e solo se le due azioni sono compatibili tra di loro. Gli altri casi di pari colori fanno riferimento alla stessa azione, ma sono ridondanti e vanno eliminati, come abbiamo fatto poc’anzi. La morale è che è possibile usare i d.c. , ma occorre fare molta attenzione a non commettere errori logici; eventuali errori logici si evidenziano solo sviluppando completamente la tabella. Usare i d.c. in una tabella condizionale può essere utile per capire “al volo” le relazioni che legano le condizioni e le azioni. Ad esempio, nel caso della Tabella 11, è abbastanza immediato capire che:  F0 = A’ + B’ + C’  F1 = ABC Consideriamo F0; la colonna 1 dice che se A=FALSE, per qualunque valore di B e C si ha F0=1. Allora F0 dipende solo da A’ (A negato) e non dipende da B e C (o dalle loro negazioni). Dove compare d.c. la condizione non deve comparire nella equazione che definisce l’azione in funzione delle condizioni (3 ). In Logic Friday non è possibile inserire manualmente i valori d.c. nell’input; è però possibile importare tabelle con valori d.c. (indicati nel tool con la X). Si veda a questo scopo l’help in linea alla voce “Importing a truth table”. Logic Friday permette di inserire i d.c. nelle azioni. In pratica è possibile dire che non interessa, per una data combinazione di input, se l’azione di output viene eseguita o no. Ma che senso ha ? Logic Friday è un tool che è principalmente utilizzato per la progettazione di circuiti logici digitali; nei circuiti, le condizioni sono interpretabili come segnali di corrente (TRUE = passa corrente e FALSE = non passa corrente) mentre le azioni sono interpretabili come dei circuiti elettronici digitali che elaborano i segnali di corrente in input producendo in output un segnale di corrente (TRUE) o non producendolo (FALSE). Ora, possono esistere dei casi in cui, per alcuni segnali di input, non si ha alcun interesse a sapere se il segnale di corrente in output c’è o no (semplicemente, tale segnale non ha importanza nell’economia globale del circuito che si sta progettando). 3 Provate a inserire la Tabella 13 in Logic Friday e verificate che restituisce lo stesso risultato una volta che si sono minimizzate le equazioni
  • 22. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 22 di 146 E’ ovvio che, nel nostro caso, usando Logic Friday come ausilio alla definizione dei requisiti utente, le azioni hanno il significato di operazioni che devono o non devono essere eseguite e quindi non ha nessun senso dire che “non mi interessa se un’azione viene eseguita o no”; quindi noi non useremo mai i d.c. sulle azioni.
  • 23. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 23 di 146 Esempio # 1 – il modulo di registrazione utente Consideriamo un modulo di registrazione di un utente. Il modulo, e relativo codice che implementa la funzionalità “Inserisci nuovo utente”, contiene i seguenti campi: 1. Nome utente, obbligatorio 2. E-mail formalmente valida, obbligatoria 3. Password, obbligatoria e tale da possedere almeno un carattere alfabetico minuscolo, uno maiuscolo, uno numerico e deve essere lunga almeno 8 caratteri. 4. Conferma password: in tale campo deve essere reinserita la password, uguale a quella che è stata inserita nel campo “Password”. Figura 10 – Esempio di form per l’inserimento di un nuovo utente. Le azioni che possono essere svolte sono: I. F0: Errore, non sono stati inseriti i campi obbligatori. II. F1: Errore, e-mail non formalmente valida. III. F2: Errore, la password non rispetta le regole di sicurezza. IV. F3: Errore, campo password e conferma password differenti. V. F4: Successo, utente correttamente registrato! Tutte le azioni pertinenti, in funzione dei dati di input inseriti, sono scatenate alla pressione del pulsante “Registra”. Le condizioni che possono essere estratte dalle variabili di cui ai punti 1→ 4 sono le seguen : A. Stringa nome utente inserita non vuota B. E-mail inserita valida C. Password inserita valida D. Password = Conferma Password
  • 24. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 24 di 146 Le azioni sono esattamente quelle indicate nei punti I→IV. La tabella decisionale che segue definisce il comportamento della funzionalità “Inserisci nuovo utente”. Condizioni A - Stringa nome utente inserita non vuota T T F F T T F F T T F F T T F F B - E-mail inserita valida T F T F T F T F T F T F T F T F C - Password inserita valida T T T T F F F F T T T T F F F F D - Password = Conferma Password T T T T T T T T F F F F F F F F Azioni F0: Errore, non sono stati inseriti i campi obbligatori. X X X X X X X X F1: Errore, e-mail non formalmente valida. X X X X X X X X F2: Errore, la password non rispetta le regole di sicurezza. X X X X X X X X F3: Errore, campo password e conferma password differenti. X X X X X X X X F4: Successo, utente correttamente registrato! X Tabella 16 – Tabella decisionale per form registrazione utente Ora, per com’è stato costruito il problema, è abbastanza evidente notare che per ogni condizione non verificata è associata uno specifico errore; in particolare: Condizione non verificata Errore associato A - Stringa nome utente inserita non vuota F0: Errore, non sono stati inseriti i campi obbligatori. B - E-mail inserita valida F1: Errore, e-mail non formalmente valida. C - Password inserita valida F2: Errore, la password non rispetta le regole di sicurezza. D - Password = Conferma Password F3: Errore, campo password e conferma password differenti. Tabella 17 – Tabella condizione-errore per form registrazione utente E’ quindi immediato in questo caso trovare la relazione tra le azioni F0→F4 alle condizioni A →D. Sono le seguenti (4 ):  F0 = A’  F1=B’  F2=C’  F3=D’  F4 = A·B·C·D In particolare, la F4 (utente correttamente registrato) deve essere attivata solo qualora tutte le condizioni A, B, C e D siano verificate. Eseguendo lo stesso calcolo con Logic Friday , otteniamo lo stesso risultato (ovviamente!). Si veda la figura sotto nella quale è mostrata la matrice iniziale: 4 Si provi ad effettuare la verifica riscrivendo la tabella condizionale con i don’t care.
  • 25. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 25 di 146 Figura 11 – Truth Table Logic Friday L’immagine che segue riporta il valore minimizzato calcolato dal software: Figura 12 – Equazioni minimizzate Si noterà che le espressioni “originali” delle azioni F0→F4 inserite mediante la tabella sono in pratica ingestibili, mentre la loro espressione minimizzata è trattabile e può tranquillamente essere direttamente utilizzata nella logica del programma che implementa la funzionalità “Inserisci nuovo utente”. Riportiamo, a puro titolo di completezza, l’espressione originale e quella minimizzata da Logic Friday:
  • 26. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 26 di 146 Originale:  F0 = A' B' C' D' + A' B' C' D + A' B' C D' + A' B' C D + A' B C' D' + A' B C' D + A' B C D' + A' B C D;  F1 = A' B' C' D' + A' B' C' D + A' B' C D' + A' B' C D + A B' C' D' + A B' C' D + A B' C D' + A B' C D;  F2 = A' B' C' D' + A' B' C' D + A' B C' D' + A' B C' D + A B' C' D' + A B' C' D + A B C' D' + A B C' D;  F3 = A' B' C' D' + A' B' C D' + A' B C' D' + A' B C D' + A B' C' D' + A B' C D' + A B C' D' + A B C D';  F4 = A B C D; Minimizzata:  F0 = A' ;  F1 = B' ;  F2 = C' ;  F3 = D';  F4 = A B C D; Esercizio: provare a rieseguire il calcolo, supponendo di avere solo i seguenti errori: i. F0: Campi obbligatori non inseriti o formalmente non validi. ii. F1: Password non valida o campo conferma password non correttamente valorizzato. Alcune volte, per rendere difficile la vita agli hacker, la descrizione degli errori di inserimento è volutamente generica (o, almeno, questa è la scusa che si da quando la descrizione dell’errore è molto generica). Il calcolo “a mano” della dipendenza di F0 ed F1 dalle condizioni A →D non è più tanto semplice.
  • 27. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 27 di 146 Tabelle funzionali Consideriamo un requisito descritto nel modo che segue; si abbiano le tre variabili:  X che può assumere solo il valore x1.  Y che può assumere uno dei due valori {y1, y2}  Z che può assumere uno dei tre valori {z1, z2, z3}. Secondo i valori che le variabili X, Y e Z assumono, può verificarsi un’azione F0 e/o F1. In altri termini, possiamo scrivere la seguente tabella: Variabili X x1 x1 x1 x1 x1 x1 Y y1 y1 y1 y2 y2 y2 Z z1 z2 z3 z1 z2 z3 Azioni F0 X X X X F1 X X X X Tabella 18 – Tabella funzionale La tabella sopra riportata rappresenta la descrizione funzionale del requisito in analisi; la possiamo anche chiamare tabella funzionale o tabella variabili-azioni, in modo da distinguerla da una tabella decisionale, o tabella condizioni-azioni. La tabella funzionale può essere generalizzata a un numero qualsiasi di variabili, potendo ciascuna assumere un numero finito e maggiore o uguale a uno di valori. Una tabella funzionale è molto simile a una tabella decisionale; ciò che le distingue è che la funzionale lavora con variabili, quella decisionale con condizioni (che altro non sono che variabili booleane). Una tabella funzionale non è ulteriormente riducibile; in altri termini, una volta scritte le equazioni: F0 = x1y1z1 + x1y1z3 + x1y2z1 + x1y2z3 F1= x1y1z2 + x1y1z3 + x1y2z2 + x1y2z3 non è più possibile ridurle ulteriormente. Ricordiamo cha abbiamo usato la solita notazione per cui: x1y1z1 ≡ (x1)AND (y1) AND (z1) e che x1y1z1 + x1y1z3 ≡ [(x1)AND (y1) AND (z1)] OR [(x1)AND (y1) AND (z3)] Domanda: non è possibile ridurre una tabella funzionale in una condizionale equivalente e quindi, su di essa, utilizzare le tecniche di minimizzazione viste nei capitoli precedenti? La risposta è affermativa e sarà l’oggetto del prossimo paragrafo. Riduzione della tabella funzionale in decisionale Se, nella Tabella 18 al posto delle variabili X, Y e Z si considerano le seguenti condizioni:  A: x=x1  B: y=y1  C: z=z1  D: z=z2  E: z=z3 è immediatamente possibile ricondurre la Tabella 18 alla seguente tabella decisionale equivalente:
  • 28. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 28 di 146 Condizioni A T T T T T T B T T T F F F C T F F T F F D F T F F T F E F F T F F T F Azioni F0 X X X X F1 X X X X Tabella 19 – Tabella decisionale equivalente alla tabella funzionale Analizziamo una condizione alla volta per capire come l’abbiamo dedotta. 1) La variabile X può assumere il solo valore x1. Ciò equivale a dire che X=x1 è una condizione sempre verificata e quindi uguale a TRUE. Non può neanche mai essere FALSE, poiché per definizione abbiamo deciso che X può solo e soltanto valere x1. Abbiamo trasformato la variabile X in una condizione A che è di tipo assoluto o auto-vincolata, nel senso descritto nel paragrafo “Definizione di tabella decisionale”. 2) La variabile Y può solo e soltanto assumere uno dei due valori y1 e y2. Se vale y1 non può essere uguale a y2 e viceversa. Quindi se la condizione B: y=y1 è TRUE allora y=y1; quando è FALSE non può che essere univocamente y=y2. E’ possibile anche usare la condizione duale B’:y=y2, per la quale valgono ragionamenti analoghi. La condizione B è una classica condizione binaria indipendente, nel senso descritto nel paragrafo “Definizione di tabella decisionale”. 3) La variabile Z può assumere solo uno tra i tre possibili valori z1, z2, z3. Le tre condizioni C: z=z1, D: z=z2, E: z=z3 sono tra di loro dipendenti e ricordando quanto già discusso sempre nel paragrafo “Definizione di tabella decisionale”, per esse vale la seguente tabella di vincolo: # C: Z = x1 D: Z= z2 E: Z = z3 1 TRUE FALSE FALSE 2 FALSE TRUE FALSE 3 FALSE FALSE TRUE 4 TRUE TRUE TRUE 5 TRUE FALSE TRUE 6 FALSE TRUE TRUE 7 TRUE TRUE FALSE 8 FALSE FALSE FALSE Tabella 20 – Tabella di vincolo C, D ed E sono condizioni booleane dipendenti; il vincolo tra le condizioni è esprimibile nella forma:  CD’E’ = C  C’DE’ = D  C’D’E = E Una volta che una tabella funzionale è stata ridotta a una tabella decisionale, è possibile applicare a essa i metodi di riduzione noti, discussi nei paragrafi precedenti.
  • 29. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 29 di 146 Il caso degenere della funzione Consideriamo la seguente tabella funzionale: Variabili X x1 x1 x1 x1 x1 x1 Y y1 y1 y1 y2 y2 y2 Z z1 z2 z3 z1 z2 z3 Azioni F0 X F1 X F2 X F3 X F4 X F5 X Tabella 21 – Tabella funzionale degenere (funzione) La differenza tra la Tabella 18 e Tabella 21 è che in quest’ultima vi sono tante azioni quante sono le combinazioni dei valori delle variabili X, Y e Z. In pratica, ogni azione è univocamente determinata da una specifica combinazione (tripletta) di valori delle variabili X, Y e Z. Siamo forse più abituati a vedere la tabella in forma trasposta, ossia: X Y Z Azione x1 y1 z1 F0 x1 y1 z2 F1 x1 y1 z3 F2 x1 y2 z1 F3 x1 y2 z2 F4 x1 y2 z3 F5 Tabella 22 – funzione Quest’ultima tabella non è altro che la “classica” funzione matematica in tre variabili (X,Y,Z), in cui al posto della ordinata numerica abbiamo delle azioni F0→F5. La tabella decisionale equivalente della Tabella 21 è la Tabella 23. Condizioni A T T T T T T B T T T F F F C T F F T F F D F T F F T F E F F T F F T Azioni F0 X F1 X F2 X F3 X F4 X F5 X Tabella 23 – Tabella decisionale per la funzione (equivalente alla funzionale) E’ evidente che in questo caso è immediato dedurre l’equazione delle azioni F0 →F5, che sono:
  • 30. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 30 di 146  F0 = ABCD’E’ = ABC  F1 = ABC’DE’ = ABD  F2 = ABC’D’E = ABE  F3 = AB’CD’E’ = AB’C  F4 = AB’C’DE’ = AB’D  F5 = AB’C’D’E = AB’E Avendo tenuto conto dei vincoli di dipendenza tra A, B e C. Tali espressioni sono già ridotte nella forma minimizzata; in pratica, il caso in cui la descrizione funzionale del requisito si riduca ad una funzione, il passaggio dalla tabella funzionale a quella decisionale è poco utile, o almeno, non dice nulla di più di quello che si poteva dedurre direttamente dalla Tabella 21( o la sua equivalente Tabella 22). E’ però interessante notare che la tabella funzionale ingloba, come caso particolare, la funzione propriamente detta. Terminiamo dicendo che: a) Una tabella funzionale è sempre riducibile a una tabella decisionale equivalente (ed anche possibile l’inverso, ma in genere è poco utile) b) Riducendo una tabella funzionale in decisionale, è possibile utilizzare le regole dell’algebra booleana (a mano o mediante l’ausilio di tool di calcolo come Logic Friday) per minimizzare le equazioni che esprimono le azioni in funzione delle condizioni. c) La funzione classicamente intesa è deducibile come caso particolare della tabella funzionale.
  • 31. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 31 di 146 Esempio # 2 – la scuola guida Consideriamo il seguente requisito: Una persona con età minore di 14 anni (esclusi) non può prendere alcuna patente di guida. Se la persona ha un’età compresa tra 14 anni (inclusa) e 18 anni (esclusi) può prendere la sola patente categoria A. Se la persona ha un’età superiore a 18 anni (compresi) può scegliere se prendere la patente categoria A o categoria B (una esclude l’altra). In tutti i casi, è possibile conseguire la patente se si superano con successo la visita attitudinale e l’esame di guida. L’analisi del requisito, mostra che si può distinguere tre categorie di età, che rappresentano tre condizioni:  A : età < 14  B : 14 <= età < 18  C : età >= 18 Si devono anche considerare le seguenti due condizioni:  D: superamento della visita attitudinale  E: superamento esame di guida Le azioni in questo caso sono due (mutualmente esclusive):  F0 – Conseguimento patente categoria A  F1 – Conseguimento patente categoria B Tutte queste informazioni possono essere raccolte nella seguente tabella: Condizioni Colonna # 1 2 3 4 5 6 7 8 9 10 11 12 A : età < 14 T T T T F F F F F F F F B : 14 <= età < 18 F F F F T T T T F F F F C : età >= 18 F F F F F F F F T T T T D : superamento della visita attitudinale T T F F T T F F T T F F E : superamento esame di guida F T T F F T T F F T T F Azioni F0 – Conseguimento patente categoria A X X F1 – Conseguimento patente categoria B X Tabella 24 – Tabella decisionale conseguimento patente Notiamo che, nei blocchi di diverso colore, non compaiono tutte le combinazioni delle condizioni A, B e C, poiché tali condizioni sono mutualmente esclusive; in altre parole, se una persona ha meno di 14 anni non può averne più di 18. Le uniche combinazioni valide delle condizioni A, B e C sono quindi {(TRUE, FALSE, FALSE),(FALSE,TRUE, FALSE),(FALSE, FALSE, TRUE)}. In pratica, queste condizioni sono dipendenti tra di loro e determinate arbitrariamente due condizioni, la terza è automaticamente determinata. La tabella si limita quindi a considerare solo 12 delle 32 = 25 combinazioni possibili. In questo caso, è semplice verificare che le azioni sono intraprese se sono verificate le seguenti condizioni:
  • 32. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 32 di 146 F0 = (B AND D AND E) OR (C AND D AND E) = B·D·E + C·D·E = (B + C) ·D·E F1 = (C AND D AND E) =C·D·E Utilizzando il software Logic Friday, abbiamo nella matrice tutte e 32 le combinazioni; andremo ad inserire il valore 1 alle funzioni F0 e F1 solo per le combinazioni riportate nella tabella sopra, ossia (F,T,F,T,T) = (0,1,0,1,1) = riga 11 della truth table Logic Friday e (F,F,T,T,T) = (0,0,1,1,1) = riga 7 della truth table Logic Friday. Figura 13 – Truth Table del problema in analisi. Se procediamo con la minimizzazione della tabella, il software ci fornisce il seguente risultato: F0 = A' B C' D E + A' B' C D E; F1 = A' B' C D E; Ora, i risultati da noi ricavati e quelli ottenuti dal software sembrano diversi, come vediamo nella tabella che segue:
  • 33. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 33 di 146 Funzioni Ricavata senza software Ricavato con il Software F0 B·D·E + C·D·E A' B C' D E + A' B' C D E F1 C·D·E A' B' C D E Tabella 25 – comparazione dei risultati Ricordiamoci che, come visto poco fa, le condizioni A, B e C sono dipendenti tra di loro, vale la seguente funzione logica: A B C Risultato TRUE FALSE FALSE A (True) FALSE TRUE FALSE B (True) FALSE FALSE TRUE C (True) Tutte le altre possibili combinazioni non hanno senso ! Tabella 26 – Tabella di vincolo A, B e C In termini semplici, prendiamo la prima riga, nella quale abbiamo: AB’C’ = (età < 14 anni) AND (non 14 <= età < 18) AND (non età >=18) = (età < 14 anni). A parole, se ha meno di 14 anni e non ha una età compresa tra 14 anni e 18 anni e se non ha una età maggiore di 18 anni, che età ha ? Ovviamente ha meno di 14 anni…. Da quest’ultima tabella, vediamo che:  A' B C' = B  A' B' C = C I due risultati sono quindi perfettamente equivalenti. Facciamo notare che la colonna # 10 dice che nella condizione A’B’CDE (a parole, se sono maggiorenne e se ho superato la visita attitudinale e l’esame di guida), si verificano sia l’azione F0 che F1, cosa che sembra in contraddizione con il requisito che la patente categoria A o categoria B sono mutualmente esclusive. In realtà la tabella va letta al contrario: le azioni sono gli output, le condizioni sono gli input. Quindi: F0 = A’B’CDE + <altri termini> ed F1 = A’B’CDE + <altri termini>; a parole, posso prendere la patente categoria A (oppure categoria B, a mia scelta) se sono maggiorenne e se ho superato la visita attitudinale e l’esame di guida. Nel caso generale, la morale è la seguente: se ho delle condizioni booleane tra di loro dipendenti, il risultato minimizzato ottenuto dal software Logic Friday può essere ulteriormente ridotto tenendo conto della dipendenza funzionale tra le condizioni dipendenti. Detto in altri termini, Logic Friday considera sempre le condizioni come indipendenti tra di loro ed eventuali dipendenze vanno “gestite a mano”.
  • 34. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 34 di 146 Esempio #3 - un caso un po’ complesso. Consideriamo il seguente requisito: “Se una persona di sesso maschile e maggiorenne è disoccupata, gli viene dato un assegno mensile di 700 Euro; se però ha un reddito annuale inferiore di 20.000 euro, gli viene dato in aggiunta un assegno di 300 euro; se il reddito annuale è superiore a 40.000 euro, vengono scalati 200 euro all’assegno principale. Se la persona è minorenne, l’assegno è di 500 euro mensili. Se una persona ha un’occupazione, gli sono scalati 300 euro forfait di tasse per ciascun mese. Se la persona è di sesso femminile, gli è corrisposto un assegno di 500 euro mensili, ridotti a 300 se il reddito annuale supera i 40.000 euro; se la donna ha dei figli, gli è dato in aggiunta un assegno di 100 euro per figlio, fino a un massimo di 500 euro.” Iniziamo con l’analisi del requisito. Per prima cosa individuiamo le condizioni booleane dipendenti e indipendenti. Le condizioni booleane indipendenti sono:  Essere maggiorenne (avere un’età superiore o inferiore a 18 anni)  Sesso (essere maschio o femmina)  Essere disoccupato (non avere un’occupazione o avercela) La condizione booleana dipendente è:  Reddito annuo. Le classi di reddito annuo individuabili sono: o Minore di 20.000 euro (escluso) o Da 20.000 euro (incluso) a 40.000 euro (incluso) o Superiore a 40.000 euro (escluso) Per ciascuna classe di reddito annuo, riscriviamo il requisito valido solo per quella classe. Si avranno quindi tre requisiti, uno per ciascuna classe di reddito annuo, diversi – magari di poco – l’uno dall’altro. In pratica, invece di considerare tutte le variabili indipendenti e dipendenti, dividiamo il requisito in sottorequisiti validi ciascuno solo per un valore della variabile booleana dipendente (la classe di reddito). E’ questa una modalità che viene comodo usare quando il requisito è complesso e/o contiene molte variabili dipendenti, che andrebbero ad aumentare pesantemente le dimensioni delle tabelle decisionali. 1. Classe # 1 – Reddito annuo < 20.000 euro (limite escluso) a. Se la persona è minorenne, l’assegno è di 500 euro mensili. b. Se una persona ha un’occupazione, gli sono scalati 300 euro forfait di tasse per ciascun mese. c. A una persona di sesso maschile, maggiorenne e disoccupata, gli è fornito un assegno mensile standard di 700 Euro aumentato di un importo pari a 300 euro. d. Se la persona è di sesso femminile, gli è corrisposto un assegno di 500 euro mensili. Se la donna ha dei figli, è dato in aggiunta un assegno di 100 euro per figlio, fino a un massimo di 500 euro.
  • 35. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 35 di 146 2. Classe # 2 – Reddito annuo compreso tra 20.000 euro (incluso) e 40.000 euro (incluso) a. Se la persona è minorenne, l’assegno è di 500 euro mensili. b. Se una persona ha un’occupazione, gli sono scalati 300 euro forfait di tasse per ciascun mese. c. A una persona di sesso maschile, maggiorenne e disoccupata, gli è fornito un assegno mensile standard di 700 Euro. d. Se la persona è di sesso femminile, gli è corrisposto un assegno di 500 euro mensili. Se la donna ha dei figli, è dato in aggiunta un assegno di 100 euro per figlio, fino a un massimo di 500 euro. 3. Classe # 3 – Reddito annuo compreso superiore a 40.000 euro (escluso) a. Se la persona è minorenne, l’assegno è di 500 euro mensili. b. Se una persona ha un’occupazione, gli sono scalati 300 euro forfait di tasse per ciascun mese. c. A una persona di sesso maschile, maggiorenne e disoccupata, gli è fornito un assegno mensile standard di 700 Euro diminuito di un importo pari a 200 euro. d. Se la persona è di sesso femminile, gli è corrisposto sempre e comunque un assegno di 300 euro mensili. Se la donna ha dei figli, è dato in aggiunta un assegno di 100 euro per figlio, fino a un massimo di 500 euro. Si nota subito che i requisiti ( a ) e ( b ) – derivati dal requisiti principale - sono comuni per tutte e tre le classi. Creiamo ora le tre tabelle di decisione per i tre casi. Classe # 1 – Reddito annuo < 20.000 euro (limite escluso) Condizioni Minorenne T T F F T T F F Occupata T F T F T F T F Maschio T T T T F F F F Azioni Assegno minorenne (500 euro) X X X X Assegno standard (700 euro) X Incremento assegno standard (300 euro) X Decremento assegno standard (200 euro) Assegno donna e figli (funzione numero figli e reddito) X X X X Tasse scalate (300 euro) X X X X Tabella 27 – Tabella decisionale Classe di reddito # 1
  • 36. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 36 di 146 Classe # 2 – Reddito annuo compreso tra 20.000 euro (incluso) e 40.000 euro (incluso) Condizioni Minorenne T T F F T T F F Occupata T F T F T F T F Maschio T T T T F F F F Azioni Assegno minorenne (500 euro) X X X X Assegno standard (700 euro) X Incremento assegno standard (300 euro) Decremento assegno standard (200 euro) Assegno donna e figli (funzione numero figli e reddito) X X X X Tasse scalate (300 euro) X X X X Tabella 28 – Tabella decisionale Classe di reddito # 2 Classe # 3 – Reddito annuo compreso superiore a 40.000 euro (escluso) Condizioni Minorenne T T F F T T F F Occupata T F T F T F T F Maschio T T T T F F F F Azioni Assegno minorenne (500 euro) X X X X Assegno standard (700 euro) X Incremento assegno standard (300 euro) Decremento assegno standard (200 euro) X Assegno donna e figli (funzione numero figli e reddito) X X X X Tasse scalate (300 euro) X X X X Tabella 29 – Tabella decisionale Classe di reddito # 3 A stesso colore corrisponde stesso requisito. In particolare:  Requisito (a) : arancione  Requisito (b): giallo  Requisito (c): grigio  Requisito (d): rosa Guardando le tre tabelle notiamo che: 1. La principale differenza sta nel requisito (c); secondo la classe di reddito, è percepito l’assegno standard oppure lo stesso assegno incrementato o decrementato. 2. Che l’assegno alla donna con figli, dipende nello stesso modo dal numero di figli per tutte e tre le classi di reddito, ma l’importo iniziale è diverso. In altri termini: a. Per le prime due classi di reddito l’assegno alla donna si calcola con la formula: (500 + numero_figli*100) se 0<= numero_figli <= 5; se numero_figli > 5 ==> 500 + 500 = 1000 Euro.
  • 37. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 37 di 146 b. Per la terza classe di reddito l’assegno alla donna si calcola con la formula: (300 + numero_figli*100) se 0<= numero_figli <= 5; se numero_figli > 5 ==> 300 + 500 = 800 Euro. Sono quindi funzioni uguali per le prime due classi di reddito, ma diversa per la terza classe. 3. Notiamo che se la donna è minorenne prende sia i 500 euro per il fatto di essere minorenne, sia i 500 per il fatto di essere donna. Mhhh… sorge il dubbio che ci sia un errore nel requisito. Non è che, nel requisito iniziale, la frase: “Se la persona è di sesso femminile, gli è corrisposto un assegno di 500 euro mensili, ridotti a 300 se il reddito annuale supera i 40.000 euro; se la donna ha dei figli, gli è dato in aggiunta un assegno di 100 euro per figlio, fino a un massimo di 500 euro” vada sostituita con la frase: ”Se la persona è di sesso femminile e maggiorenne, gli è corrisposto un assegno di 500 euro mensili, ridotti a 300 se il reddito annuale supera i 40.000 euro; se la donna ha dei figli, gli è dato in aggiunta un assegno di 100 euro per figlio, fino a un massimo di 500 euro”. In altri termini, probabilmente colui il quale ha specificato il requisito, ha dato “per scontato” che nel caso del sesso femminile, ci si riferisse alla donna maggiorenne? E se è così, che succede se la donna minorenne ha dei figli? A lei non gli diamo i 100 euro per figlio? L’osservazione riportata nel punto (III) non ha lo scopo di fare politica di welfare, ma di dimostrare come sia possibile – e anche facile – commettere errori durante la definizione dei requisiti, errori che possono essere scoperti se si esegue un’analisi del requisito con una metodologia ben definita come quella ivi presentata. Supponiamo allora di aver ridiscusso il requisito con l’utente che l’ha emesso originariamente, il quale ha ammesso di aver dimenticato di specificare che la donna cui fa riferimento il requisito (d) è maggiorenne. Le tre tabelle di decisione diventano le seguenti (è stato indicato con bordo rosso le caselle dove sono state cancellate le X). Classe # 1 – Reddito annuo < 20.000 euro (limite escluso) – Tabella corretta Condizioni A - Minorenne T T F F T T F F B - Occupata T F T F T F T F C - Maschio T T T T F F F F Azioni F0 - Assegno minorenne (500 euro) X X X X F1 - Assegno standard (700 euro) X F2 - Incremento assegno standard (300 euro) X F3 - Decremento assegno standard (200 euro) F4 - Assegno donna e figli (funzione numero figli e reddito) X X F5 - Tasse scalate (300 euro) X X X X Tabella 30 – Tabella decisionale Classe di reddito # 1 – tabella corretta
  • 38. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 38 di 146 Classe # 2 – Reddito annuo compreso tra 20.000 euro (incluso) e 40.000 euro (incluso) – Tabella corretta Condizioni A - Minorenne T T F F T T F F B - Occupata T F T F T F T F C - Maschio T T T T F F F F Azioni F0 - Assegno minorenne (500 euro) X X X X F1 - Assegno standard (700 euro) X F2 - Incremento assegno standard (300 euro) F3 - Decremento assegno standard (200 euro) F4 - Assegno donna e figli (funzione numero figli e reddito) X X F5 - Tasse scalate (300 euro) X X X X Tabella 31 – Tabella decisionale Classe di reddito # 2 – tabella corretta Classe # 3 – Reddito annuo compreso superiore a 40.000 euro (escluso) – Tabella corretta Condizioni A - Minorenne T T F F T T F F B - Occupata T F T F T F T F C - Maschio T T T T F F F F Azioni F0 - Assegno minorenne (500 euro) X X X X F1 - Assegno standard (700 euro) X F2 - Incremento assegno standard (300 euro) F3 - Decremento assegno standard (200 euro) X F4 - Assegno donna e figli (funzione numero figli e reddito) X X F5 - Tasse scalate (300 euro) X X X X Tabella 32 – Tabella decisionale Classe di reddito # 3 – tabella corretta Riduzione delle tabelle di decisione Utilizziamo il software Logic Friday – di cui abbiamo parlato brevemente nella prima parte - per ridurre le tre tabelle di decisione. Il risultato che otteniamo è il seguente:
  • 39. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 39 di 146 Classe # 1 – Reddito annuo < 20.000 euro (limite escluso) Figura 14 – Truth Table per classe di reddito # 1 Figura 15 – equazioni minimizzate per classe di reddito # 1 La “tabella minimizzata” (condizioni booleane elementari) è allora la seguente: F0 = A; F1 = A' B' C; F2 = A' B' C; F3 = 0; F4 = A' C'; F5 = B;
  • 40. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 40 di 146 Classe # 2 – Reddito annuo compreso tra 20.000 euro (incluso) e 40.000 euro (incluso) Figura 16 – Truth Table per classe di reddito # 2 Figura 17 – equazioni minimizzate per classe di reddito # 2 La “tabella minimizzata” (condizioni booleane elementari) è allora la seguente: F0 = A; F1 = A' B' C; F2 = 0; F3 = 0; F4 = A' C'; F5 = B;
  • 41. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 41 di 146 Classe # 3 – Reddito annuo compreso superiore a 40.000 euro (escluso) Figura 18 – Truth Table per classe di reddito # 3 Figura 19 – equazioni minimizzate per classe di reddito # 3 La “tabella minimizzata” (condizioni booleane elementari) è allora la seguente: F0 = A; F1 = A' B' C; F2 = 0; F3 = A' B' C; F4 = A' C'; F5 = B;
  • 42. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 42 di 146 Conviene a questo punto creare una tabella riassuntiva che mette a confronto i tre risultati ottenuti. Tenendo conto che:  A - Minorenne  B - Occupata  C - Maschio E che :  F0 - Assegno minorenne (500 euro)  F1 - Assegno standard (700 euro)  F2 - Incremento assegno standard (300 euro)  F3 - Decremento assegno standard (200 euro)  F4 - Assegno donna e figli (funzione numero figli e reddito)  F5 - Tasse scalate (300 euro) Abbiamo: Azioni Condizioni di applicabilità per le classi di reddito Classe # 1 Classe #2 Classe # 3 F0 - Assegno minorenne (500 euro Minorenne Minorenne Minorenne F1 - Assegno standard (700 euro) Maggiorenne, non occupato, maschio Maggiorenne, non occupato, maschio Maggiorenne, non occupato, maschio F2 - Incremento assegno standard (300 euro) Maggiorenne, non occupato, maschio / / F3 - Decremento assegno standard (200 euro) / / Maggiorenne, non occupato, maschio F4 - Assegno donna e figli (funzione numero figli e reddito) (*) Maggiorenne,femmina Maggiorenne,femmina Maggiorenne,femmina F5 - Tasse scalate (300 euro) Occupato Occupato Occupato Tabella 33 – condizioni di applicabilità per le classi di reddito (*) NOTA  Per le prime due classi di reddito l’assegno alla donna si calcola con la formula: (500 + numero_figli*100) se 0<= numero_figli <= 5; se numero_figli > 5 ==> 500 + 500 = 1000 Euro.  Per la terza classe di reddito l’assegno alla donna si calcola con la formula: (300 + numero_figli*100) se 0<= numero_figli <= 5; se numero_figli > 5 ==> 300 + 500 = 800 Euro. Rimane sempre da chiarire il caso della donna minorenne con figli, che può essere lasciato come “Change Request” da lasciare da analizzare al lettore.
  • 43. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 43 di 146 Nella tabella, le condizioni riportate sono quelle che devono valere tutte contemporaneamente affinché sia applicabile l’azione. In altri termini, per la classe 1, affinché si possa applicare l’azione F1 (Assegno standard di 700 euro) deve valere la condizione (Maggiorenne) AND (Non occupato) AND (Maschio). A parole, possiamo riformulare il requisito iniziale in questo modo (che è a questo punto più chiaro e comunque inequivocabile): a) Se la persona è minorenne, è erogato un assegno di 500 euro/mese. b) Se la persona è maggiorenne, disoccupato, maschio è erogato l’assegno standard di 700 euro/mese. c) Se la persona è maggiorenne, disoccupato, maschio e guadagna meno di 20.000 euro/anno (limite escluso) l’assegno standard è incrementato di 300 euro/mese. d) Se la persona è maggiorenne, disoccupato, maschio e guadagna più di 40.000 euro/anno (limite escluso) l’assegno standard è decrementato di 200 euro/mese. e) Se la persona è maggiorenne e di sesso femminile percepisce un assegno calcolato nel seguente modo: a. Se il reddito annuo è minore di 40.000 euro (limite incluso): Importo assegno = (500 + numero_figli*100) se 0<= numero_figli <= 5; se numero_figli > 5 ==> 500 + 500 = 1000 Euro. b. Se il reddito annuo è superiore a 40.000 euro (limite escluso): Importo assegno = (300 + numero_figli*100) se 0<= numero_figli <= 5; se numero_figli > 5 ==> 300 + 500 = 800 Euro. f) Se la persona è occupata, le tasse sono scalate di 300 euro/mese. Ora, la tabella è – a mio avviso – comunque più chiara del requisito scritto, e – nella pratica – è spesso sufficiente fermarsi alla tabella, senza riscrivere nuovamente il requisito.
  • 44. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 44 di 146 Capitolo 2 – Grafi e flow chart GGRRAAFFII EE FFLLOOWW CCHHAARRTT
  • 45. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 45 di 146 Definizione di grafo La pagina di wikipedia http://it.wikipedia.org/wiki/Grafo pesenta le caratteristiche fondamentali relative a quell’oggetto matematico chiamato grafo, a partire – ovviamente – dalla sua definizione. “Un grafo è un insieme di elementi detti nodi o vertici collegati fra loro da archi o lati. Più formalmente, si dice grafo una coppia ordinata G = (V, E) di insiemi, con V insieme dei nodi (dall’inglese Vertex)ed E insieme degli archi (dall’inglese Edge), tali che gli elementi di E siano coppie di elementi di V”. Un grafo è suscettibile di una rappresentazione grafica nella quale - in genere - i vertici V sono rappresentati da delle circonferenze, eventualmente etichettate (con lettere o numeri) mentre gli archi sono linee di congiunzione dei vertici. Nella figura che segue, sono rappresentati tre esempi di grafi, di cui il primo è un grafo semplice e gli altri due sono grafi orientati. Figura 20 – esempi di grafi semplici e orientati. Sempre da wikipedia, stessa pagina già citata: “Un grafo orientato D (o digrafo, grafo diretto) è un insieme D = (V, A), dove V è l'insieme dei vertici di D e A è l'insieme degli archi orientati di D. Un arco si dice orientato quando è caratterizzato da una direzione. In particolare, è composto di una "testa" (rappresentata solitamente dalla punta di una freccia), che raggiunge un vertice in entrata, e una "coda", che lo lascia in uscita.” Nel caso dei grafi in Figura 20 la “testa” del digrafo # 1 è V1, mentre la coda è V8. Nel caso del digrafo # 2, anche se sembra identico al primo, la testa e la coda sono differenti e riuscire a capirlo graficamente non è
  • 46. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 46 di 146 immediato come nel primo caso (si notino le frecce rosse orientate in senso opposto rispetto al digrafo # 1). Rimaneggiandolo un po’ dal punto di vista grafico si ottiene la figura che segue: Figura 21 – grafo # 2 rimaneggiato; le teste sono V4 e V6 e la coda è V5. Si nota che il “mostro” di Figura 21 ha ben due teste (V6 e V4) una sola coda. In pratica il digrafo ha 2 possibili punti di ingresso ed un unico punto in uscita. Possiamo allora definire meglio che cosa s’intende per testa e coda di un grafo, rispetto alla definizione data da wikipedia: a) La testa di un digrafo è rappresentata da uno o più nodi aventi solo archi in uscita. b) La coda di un digrafo è rappresentata da uno o più nodi aventi solo archi in ingresso. Il concetto di arco in ingresso o in uscita da un nodo dovrebbe essere evidente, ma preferiamo fornire una definizione “formale”:  Un arco A è in ingresso verso un nodo V se la freccia dell’arco A punta a V (→ V).  Un arco A è in uscita dal nodo V se la freccia dell’arco A punta al di fuori di V (V →). Si noti anche che nella definizione della pagina precedente di grafo orientato abbiamo usato la scrittura D = (V, A) e non D = (V, E), usando la lettera A per arco orientato e la lettera E per arco semplice usata nella definizione generale di grafo. Per esclusione, in un grafo semplice è un insieme di vertici e di archi in cui la connessione tra il nodo N1 e N2 ha lo stesso identico significato che la connessione tra N2 e N1. Nella pratica, un grafico semplice non contiene archi orientati, cosa che graficamente è rappresentato da linee semplici senza di frecce.
  • 47. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 47 di 146 Caratteristiche di un grafo Considerando che la teoria matematica dei grafi occupa interi volumi, in questa sede analizzeremo solo e soltanto i concetti e le caratteristiche di un grafo che hanno in qualche modo attinenza con l’informatica e – in particolare – con il software test. Iniziamo con alcune definizioni: Definizione di vertici adiacenti La definizione di vertici adiacenti è leggermente differente a seconda se si considera un grafo o un digrafo. a) Dati due vertici V1 e V2 appartenenti a un grafo semplice, si dice che V1 è adiacente a V2 se esiste un arco che collega V1 e V2. In questo caso la relazione di adiacenza è simmetrica: V1 è adiacente a V2 e V2 è adiacente a V1. b) Dati due vertici V1 e V2 appartenenti a un digrafo, si dice che V1 è adiacente a V2 se esiste un arco orientato da V1 e V2 (V1 →V2). In questo caso, la relazione di adiacenza non è simmetrica: quindi V1 è adiacente a V2 ma V2 non è detto sia adiacente a V1 (lo è solo se esiste – in aggiunta – un arco da V2 a V1. Figura 22 – nodi adiacenti per grafo e digrafo. Nel caso di digrafo la definizione di adiacenza di due vertici porta con sé il concetto di raggiungibilità di un vertice a partire da un altro. Se l’arco ha una freccia uscente da V1 ed entrante in V2, possiamo pensare alla freccia come ad un “senso unico” che permette di passare – in un solo passo - da V1 a V2, ma che non può essere percorsa in senso inverso (da V2 a V1). Nel caso di grafo semplice non esiste senso unico ed è possibile percorrere l’arco che congiunge i due vertici in entrambi i sensi. Ad esempio, per i due grafi di Figura 35 la situazione è la seguente:  Grafo semplice:  V1 è adiacente a V3; V3 è adiacente a V1  V3 è adiacente a V4; V4 è adiacente a V3  V1 è adiacente a V2; V2 è adiacente a V1  V3 è adiacente a V2; V2 è adiacente a V3  V4 non è adiacente né a V2 né a V1  Digrafo:  V1 è adiacente a V3 (V1 →V3); V3 non è adiacente a V1  V3 è adiacente a V4 (V3 →V4); V4 non è adiacente a V3  V1 è adiacente a V2 (V1 →V2); V2 non è adiacente a V1  V3 è adiacente a V2 (V3 →V2); V2 non è adiacente a V3  V4 non è adiacente né a V2 né a V1
  • 48. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 48 di 146 Definizione di grado di un vertice La definizione di grado di un vertice è – anche in questo caso – leggermente differente a seconda se si considera un grafo o un digrafo. a) In un grafo semplice il grado di un vertice V è pari al numero di archi incidenti sul suo vertice. b) In un digrafo, si definisce per un vertice V: a. Grado entrante: è un numero pari al numero di archi entranti nel vertice V (→ V) b. Grado uscente: è un numero pari al numero di archi uscenti dal vertice V (V →) c. Grado = Grado entrante – Grado uscente Figura 23 – grado di un nodo per grafo e digrafo. Per i due grafi di Figura 23 la situazione nel nodo V è la seguente:  Grafo semplice:  Vha grado 4  Digrafo:  Vha grado entrante 1  Vha grado uscente 3  V ha grado = 1-3 = -2 Ne consegue che, nel caso di un grafo semplice, il grado è sempre positivo (o, al limite, zero se è isolato, come nel caso del vertice V0, ossia non ha né archi entranti né archi uscenti); nel caso di un digrafo, il grado complessivo può essere positivo o negativo o nullo (quest’ultimo caso se il nodo ha tanti archi entranti quanti archi uscenti, oppure il nodo è isolato come V0). Alla luce di questa definizione, possiamo definire un criterio per capire se un nodo è di testa, di coda o “normale” (né di testa, né di coda) di un digrafo. Riprendiamo le definizioni: a) La testa di un digrafo è rappresentata da uno o più nodi aventi solo archi in uscita. b) La coda di un digrafo è rappresentata da uno o più nodi aventi solo archi in ingresso. I criteri sono i seguenti: a) Un nodo è la testa di un digrafo se il grado entrante è nullo. b) Un nodo è la coda di un grafo se il grado uscente è nullo. Si provi a trovare la (le) testa e la(le) code dei grafi di Figura 22.
  • 49. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 49 di 146 Definizione di cammino in un grafo Un cammino da un vertice P (partenza) a un vertice A (arrivo) è definito da una sequenza (P, V2, V3,…Vk, A) di vertici adiacenti in cui il primo vertice è P e l’ultimo è V. Dati due vertici P e V, possono esistere più cammini che li connettono. Si noti che la sequenza di vertici è adiacente nel senso che P è adiacente a V2, V2 è adiacente a V3, …, Vk è adiacente ad A. Ad esempio, nel caso dei grafi di Figura 22, per il grafo semplice esistono due cammini da V1 a V4, che sono: (V1, V3, V4) e (V1, V2, V3, V4). Per il digrafo esiste un solo cammino da V1 a V4 che è: (V1, V3, V4). Si noti anche che solo nel caso del grafo semplice esiste anche il cammino inverso da V4 a V1, cosa che non esiste nel caso del digrafo, poiché non è possibile percorrere il grafo in senso opposto a quello definito dalle frecce. Si definisce la lunghezza di un cammino il suo numero di archi. Un cammino di N vertici ha sempre lunghezza N-1. Si definisce cammino hamiltoniano un cammino all’interno di un grafo che visita ciascun vertice una ed una sola volta. Ovviamente, non tutti i grafici possiedono un cammino hamiltoniano; ad esempio, per i grafici di Figura 22 solo il grafo semplice possiede un cammino ha miltoniano, che è (V1, V2, V3, V4), mentre il digrafo non possiede cammini hamiltoniani. Si definisce cammino euleriano un cammino all’interno di un grafo che visita ciascun arco una ed una sola volta. Non tutti i grafici hanno un cammino euleriano. Un cammino ha miltoniano non è detto che sia anche euleriano. Ad esempio, per il grafo semplice di Figura 22 , il cammino hamiltoniano (V1, V2, V3, V4), non è un cammino euleriano, in quanto (l’arco V1→V3) non è compreso nel cammino. La differenza tra le due definizioni è che il cammino hamiltoniano visita ciascun vertice una ed una sola volta, mentre quello euleriano visita ciascun arco una ed una sola volta (vedasi ad esempio il problema dei ponti di Königsberg,che hanno dato poi origine alla definizione di cammino euleriano). E’ possibile con un criterio semplice decidere se un grafo ha un cammino euleriano: deve essere connesso e ciascun vertice deve avere grado pari. Un grafo per il quale è valido il Teorema di Ore è hamiltoniano. Tale teorema recita: “Sia G n grafo semplice connesso con N vertici, con n ≥ 3. Se deg(v) + deg(w) ≥ n per ciascuna coppia di vertici non adiacenti v e w , allora G è hamiltoniano”. Con deg(v) si indica il grado del generico vertice v, come definito precedentemente. Nel campo del software test possono rivestire importanza sia i cammini euleriani sia quelli hamiltoniani (anche se, nella realtà, sono molto difficili da trovare). Un programma software che sia riconducibile a un grafo euleriano è testabile con un solo caso di test (almeno nella teoria) con una copertura garantita dei percorsi (edge) pari al 100%. Un programma software che sia riconducibile a un grafo hamiltoniano è testabile con un solo caso di test (almeno nella teoria) con una copertura garantita delle condizioni (vertici) pari al 100%. Nella pratica, il fatto che il grafo che si riferisce a un programma sia euleriano o hamiltoniano dà degli elementi importanti per cercare di ridurre al minimo il numero di casi di test massimizzando la copertura dei percorsi o delle condizioni.
  • 50. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 50 di 146 Definizione di ciclo in un grafo Il ciclo di un grafo è un cammino in cui P coincide con A, ossia il punto di partenza coincide con il punto di arrivo. Figura 24 – cicli per grafo e digrafo. Per i grafi di Figura 33, il grafo semplice ha un ciclo (V2, V3, V2) e un altro ciclo simmetrico (V3, V2, V3). Il digrafo # 1 non ha cicli, anche se si potrebbe (erroneamente !) pensare che (V2, V3, V2) sia un ciclo: non può essere un ciclo perché V2 è adiacente a V3 ma V3 non è adiacente a V2 (si noti il verso delle frecce che vanno entrambe da V2 a V3). Il digrafo # 2 ha invece il ciclo (V2, V3, V2) ed anche il ciclo (V3, V2, V3) poiché V2 è adiacente a V3 e V3 è adiacente a V2 (si noti il senso delle frecce, in particolare della freccia color rosso che è invertita rispetto al digrafo # 1). Si noti che dato un ciclo se ne hanno infiniti; posso continuare a “girare” sul cammino ciclico anche all’infinito. Dato, infatti, il ciclo (V2, V3, V2) allora anche (V2, V3, V2, V3, V2) è un ciclo, come anche (V2, V3, V2, V3, V2, V3, V2), etc. Per convenzione, nel seguito un ciclo sarà definito come un cammino con vertici estremi coincidenti e percorso una sola volta. Figura 25 – ciclo degenere (loop) Un ciclo degenere è quello che ha solo due nodi. Ad esempio, il ciclo (V0, V0) in Figura 25 è un ciclo degenere. Tale ciclo degenere è meglio conosciuto con il nome di loop.
  • 51. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 51 di 146 Rappresentazioni matriciali di un grafo La rappresentazione grafica di un grafo o di un digrafo è sicuramente utile e permette di visualizzare “a colpo d’occhio” la struttura complessiva del grafo; tuttavia, non è sempre quella più conveniente per calcolare le varie proprietà dell’oggetto. Il grafo (digrafo) è suscettibile due rappresentazione, in forma matriciale. Nel seguito considereremo solo e soltanto i digrafi, poiché sono gli unici tipi che interessano in campo informatico per i nostri scopi. Nel seguito, considereremo il grafo orientato di Figura 22, che ricopiamo di seguito per comodità: La prima forma è la matrice delle adiacenze, la seconda è la matrice d’incidenza. Tratteremo solo la prima, fornendo per la seconda solo la definizione. Matrice delle adiacenze Anche in questo caso, la definizione su wikipedia calza a pennello: “Dato un qualsiasi grafo, la sua matrice delle adiacenze è costituita da una matrice binaria quadrata che ha come indici di righe e colonne i nomi dei vertici del grafo. Nel posto (i,j) della matrice si trova un 1 se e solo se esiste nel grafo un arco che va dal vertice i al vertice j, altrimenti si trova uno 0”. Nel caso del digrafo in Figura 22 la matrice delle adiacenze è la seguente: 0 1 1 0 0 0 0 0 1 2 3 4 1 2 3 0 1 0 0 0 04 1 0 V V V V V V V V La prima riga e la prima colonna (in rosso) non fanno parte della matrice, ma sono state inserite per facilitare il riferimento delle righe e delle colonne ai relativi nodi. Ad esempio, la riga 1 si legge:  Il nodo 1 (V1) non è connesso con il nodo 1 (V1) ; non ci sono loop.  Il nodo 1 (V1) è connesso al nodo 2 (V2): V1→V2  Il nodo 1 (V1) è connesso al nodo 3 (V3): V1→V3  Il nodo 1 (V1) non è connesso con il nodo 4 (V4) La lettura è sempre riga su colonna. La semplice matrice, senza eseguire alcun tipo di calcolo, permette immediatamente di capire alcune proprietà del grafo.
  • 52. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 52 di 146 R1 - Numero di nodi e di vertici del grafo: Il numero dei nodi è – banalmente – pari al numero di righe o di colonne della matrice (per definizione della matrice di adiacenza). Il numero dei vertici è pari alla somma dei valori 1 su tutta la matrice. Nel nostro esempio ci sono 4 nodi e (1+1+1+1) = 4 vertici. R2 - Grado entrante e grado uscente:  La somma dei valori di una singola riga è pari al grado uscente del nodo cui la riga corrisponde.  La somma dei valori di una singola colonna è pari al grado entrante del nodo cui la riga corrisponde. Ad esempio:  il nodo V1 ha grado uscente 2 e grado entrante 0 (e quindi è una testa del digrafo);  il nodo V2 ha grado uscente 0 (e quindi è una coda del digrafo) e grado entrante 2.  il nodo V3 ha grado uscente 2 e grado entrante 1.  il nodo V3 ha grado uscente 0 (e quindi è un’altra coda del digrafo) e grado entrante 1 R3 - Nodi di testa e di coda:  Le righe con tutti i valori a zero rappresentano nodi di coda.  Le colonne con tutti i valori a zero rappresentano nodi di testa. Tale regola deriva immediatamente dalla R2. Nel nostro esempio, V2 e V4 sono delle code del digrafo, mentre V1 è una testa (l’unica) del digrafo (come visto nella regola precedente). Per completezza, diciamo che con la matrice delle adiacenze è possibile calcolare il numero di cammini da un nodo i ad un nodo j che attraversano N nodi. A tale scopo è sufficiente calcolare la potenza N-ma della matrice e prendere il numero che compare nella posizione (i,j). Tale proprietà, sebbene molto interessante, è – in genere – poco utile ai nostri fini. Ci sono altre proprietà interessanti della matrice di adiacenza di un grafo, la cui trattazione – per poter essere compresa - deve essere posposta al paragrafo “Definizione di complessità ciclomatica” Matrice d’incidenza La definizione di matrice d’incidenza è la seguente: “Dato un qualsiasi grafo, la sua matrice d’incidenza è costituita da una matrice rettangolare che ha come indici di righe i nomi dei vertici del grafo e come indice di colonne i nomi degli archi. Nel posto (i,j) della matrice si trova:  Il valore +1 se e solo se l’arco j è collegato al nodo i ed è entrante rispetto ad i  Il valore -1 se e solo se l’arco j è collegato al nodo i ed è uscente rispetto ad i  Il valore 0 se e solo se l’arco j non è collegato al nodo i“ Non diamo altri dettagli su questo modo di rappresentare un grafo, poiché non interessa ai nostri scopi e rischierebbe solo di appesantire la trattazione e creare confusioni.
  • 53. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 53 di 146 Definizione di flow chart La pagina http://it.wikipedia.org/wiki/Diagramma_di_flusso di wikipedia fornisce una buona definizione di flow-chart, che riprendiamo di seguito: “Quello dei diagrammi di flusso (in inglese flow chart) è un linguaggio di modellazione grafico per rappresentare il flusso di controllo di algoritmi, procedure, istruzioni operative (in senso lato). Esso consente di descrivere in modo schematico:  le operazioni da compiere, rappresentate mediante sagome convenzionali (come rettangoli, rombi, esagoni, parallelogrammi, rettangoli smussati...) all'interno delle quali un'indicazione testuale descrive l'attività da svolgere  la sequenza nella quale le operazioni devono essere compiute, rappresentate con frecce di collegamento. Per questa loro connotazione topologica i diagrammi di flusso possono essere ricondotti alla classe più ampia dei diagrammi a blocchi, che a loro volta rientrano nell'ancora più vasta categoria delle mappe concettuali, utilizzate soprattutto per la descrizione e la rappresentazione delle informazioni e della conoscenza.” Da evidenziare che, mentre il grafo (digrafo) è un oggetto matematico con proprietà e teoremi associati, il flow-chart è un linguaggio puramente grafico di modellazione. Volendo essere formali è possibile acquistare in rete la norma ISO che definisce il simbolismo standard applicabile ai flow-chart; la norma è la ISO 5807:1985 - Information processing: Documentation symbols and conventions for data, program and system flowcharts, program network charts and system resources charts. Un flow-chart è in genere utilizzato per rappresentare graficamente il flusso di un programma o di una componente software, motivo per cui i simboli in essi utilizzati sono molto specifici e tecnici (esistono simboli per database, dati ad accesso sequenziale, documenti, etc..). Tuttavia è possibile utilizzare un flow- chart in modo più “light” per descrivere un generico processo – o sequenza di processi e/o azioni – interconnesse tra di loro, utilizzando un insieme ridotto di simboli. Tale insieme ridotto è comunque utilizzabile anche per descrivere il flusso di un componente software, se si accetta di non scendere troppo in particolari che –almeno ad una prima analisi – possono essere trascurati. Ad esempio, se si vuole descrivere un software avendo in mente il test del medesimo è – in genere – possibile prescindere da dettagli quali la tipologia di storage, il supporto di memoria ad accesso diretto, sapere se un processo è pre- definito e così via e focalizzare l’attenzione su tre elementi di base: processi (o azioni), cicli e condizioni. Nel seguito non prenderemo quindi in considerazione la normativa ISO; così facendo, l’insieme di simboli che da utilizzare si riduce sensibilmente, con il vantaggio che i flow chart creati sono più semplici da interpretare. Simboli grafici utilizzati A partire da un insieme base di simboli, è possibile costruire dei simboli composti che rappresentano costrutti particolarmente importanti e fortemente utilizzati nella programmazione software. I simboli, sia di base che composti, sono i seguenti:
  • 54. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 54 di 146 # Simbolo Nome Descrizione 1 Punto d’inizio o fine del flow-chart. 2 Processo o azione Una serie di istruzioni da eseguire in sequenza o un programma complesso eventualmente descrivibile mediante altro diagramma di flusso. 3 Istruzione decisionale semplice Corrisponde al controllo IF standard: IF(Condizione) Action(s)… END IF 4 Ciclo ripetuto (condizione valutata prima dell’esecuzione dell’azione) Ciclo con controllo della condizione a monte della condizione: While(Condizione) Action(s)… Do For(int <=N) Action(s)… End For 5 Ciclo ripetuto (condizione valutata dopo l’esecuzione dell’azione). Ciclo con controllo della condizione a valle della condizione: Do Action(s) While(Condizione) 6 Controllo N volte condizionale Corrisponde al controllo CASE: CASE A A=1 Action 1 A=2 Action 2 …. Else Action default END CASE In altri linguaggi, l’istruzione è SWITCH Tabella 34 – simboli utilizzabili all’interno di un flow-chart
  • 55. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 55 di 146 Un –semplice – esempio dal mondo reale A titolo di esempio, vediamo il grafo di un semplice programma in C++ che effettua lo “split” di una stringa su un carattere. Ad esempio, data la stringa “adamo,eva,giardino” la funzione split(“adamo,eva,giardino”) ritorna un array di tre parole [adamo, eva, giardino]. Figura 26 – flow-chart della funzione “split” scritta in C++ Il codice in C++ corrispondente è il seguente:
  • 56. Berta Danilo - http://www.bertadanilo.name/ Tecniche di analisi dei requisiti e modelli software. Pagina 56 di 146 void split(string str, string separator, vector<string>& results){ unsigned int found; found = str.find_first_of(separator); while(found != string::npos){ if(found > 0){ results.push_back(str.substr(0,found)); } str = str.substr(found+1); found = str.find_first_of(separator); } if(str.length() > 0){ results.push_back(str); } } Se non conoscete il C++ , vi suggeriamo di non perdere tempo sui dettagli del programma. La funzione è stata analizzata utilizzando un programma che dal codice crea il flow-chart corrispondente, effettuando così un’operazione cosiddetta di “Reverse Engineering”. Come si vede, la notazione utilizzata è differente da quella da noi proposta in Tabella 34. Se si vuole è possibile ridisegnare il grafico secondo la nostra notazione, ma preferiamo non farlo: è assolutamente normale – a secondo del tool che si usa – avere a che fare con notazioni differenti. La cosa non sarà piacevole, ma è purtroppo la realtà, e a essa occorre abituarsi. La notazione che abbiamo proposto può essere utilizzata quando si deve progettare – su carta – un software o un processo (anche non software), ma non è detto che esista un tool che permetta di eseguire il “Reverse Engineering” usando proprio la notazione che noi vogliamo. Se vogliamo riassumere: a) In fase di progettazione possiamo usare la notazione proposta, la qual cosa ci può semplificare il calcolo della complessità del programma in analisi. b) In fase di “Reverse Engineering” siamo costretti ad usare la notazione che ci propone il tool utilizzato (a meno che non eseguiamo il “reverse” a mano…) e dobbiamo quindi abituarci alla notazione da quest’ultimo proposta. Il fatto che la notazione proposta semplifica il calcolo della complessità a ora non è così scontato, ma lo chiariremo dopo aver definito – nel prossimo paragrafo – il concetto di complessità ciclomatica.