Sei sulla pagina 1di 144

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 e le reti di Petri nella descrizione dei requisiti e nel processo di creazione del software.
Danilo Berta 18/03/2013

[Versione 1.2]

Berta Danilo - http://www.bertadanilo.name/

Contenuti
Introduzione ................................................................................................................................................ 6 Capitolo 1 - Tabelle Decisionali .................................................................................................................... 8 Definizione di tabella decisionale ............................................................................................................. 9 Logic Friday .............................................................................................................................................15 Care or dont care ? .............................................................................................................................18 Esempio # 1 il modulo di registrazione utente ......................................................................................22 Tabelle funzionali ....................................................................................................................................26 Riduzione della tabella funzionale in decisionale .................................................................................26 Il caso degenere della funzione ...........................................................................................................28 Esempio # 2 la scuola guida ..................................................................................................................30 Esempio #3 - un caso un po complesso. .................................................................................................33 Riduzione delle tabelle di decisione.....................................................................................................37 Capitolo 2 Grafi e flow chart.....................................................................................................................43 Definizione di grafo .................................................................................................................................44 Caratteristiche di un grafo.......................................................................................................................46 Definizione di vertici adiacenti ............................................................................................................46 Definizione di grado di un vertice ........................................................................................................47 Definizione di cammino in un grafo .....................................................................................................48 Definizione di ciclo in un grafo.............................................................................................................49 Rappresentazioni matriciali di un grafo ...................................................................................................50 Matrice delle adiacenze ......................................................................................................................50 Matrice dincidenza .............................................................................................................................51 Definizione di flow chart .........................................................................................................................52 Simboli grafici utilizzati........................................................................................................................52 Un semplice esempio dal mondo reale ...........................................................................................54 Definizione di complessit ciclomatica ....................................................................................................56 Cammini elementari e complessit ciclomatica .......................................................................................59 Capitolo 3 Automa a stati finiti .................................................................................................................64 Definizione di automa o macchina a stati finiti ........................................................................................65 Esempio #4 Le scuole medie inferiori ...................................................................................................65 Riduzione di un ASF in tabella decisionale. ..........................................................................................67 Esempio #4bis vacanza o studio punitivo? ............................................................................................70 Tecniche di analisi dei requisiti e modelli software. Pagina 2 di 144

Berta Danilo - http://www.bertadanilo.name/ Definizione formale di automa agli stati finiti in termini di tabella decisionale. ........................................73 Capitolo 4 Reti di Petri .............................................................................................................................74 Definizioni...............................................................................................................................................75 Dinamicit nelle reti di Petri: i token. ......................................................................................................77 Esempio # 5 Cucire le stringhe! .........................................................................................................83 Valore semantico e definizioni formali ....................................................................................................86 Descrizione operativa di una rete di Petri. ...............................................................................................92 Combinazioni parziali distinte di N numeri interi. ....................................................................................94 Vasi, tubi e palline... ................................................................................................................................95 Algoritmo di soluzione del problema fondamentale per una rete di Petri ................................................99 Passo # 1 Aggiunta delle combinazioni distinte a ti,j ........................................................................100 Passo # 2 Riduzione dei valori nelle colonne con pi valori negativi ................................................100 Passo # 3 Calcolo della configurazione finale. .................................................................................101 Calcolo delle successive configurazioni. .............................................................................................102 Un esempio pi complesso................................................................................................................106 Altro esempio: numero token maggiore della somma delle molteplicit del posto. ...........................108 Ultimo esempio: pi configurazioni finali...........................................................................................109 Reti di Petri binarie ...............................................................................................................................111 Capitolo 5 Test combinatoriale ...............................................................................................................114 1-wise testing. ..........................................................................................................................................116 2-wise testing o pairwise testing ...............................................................................................................117 n-wise testing con n>2 .............................................................................................................................120 Wise crunch tools .....................................................................................................................................121 Procedura di installazione .....................................................................................................................122 Procedura di configurazione .................................................................................................................124 Panoramica generale dei WiseCrunchTools ...........................................................................................125 Convenzioni lessicali e tipografiche .......................................................................................................128 Tool di primo livello script batch DOS .................................................................................................129 Come convenzione, il nome di tutti gli script batch segue lo schema: ................................................129 Tool runW .........................................................................................................................................129 Tool runCC e runsCC..........................................................................................................................129 Tools runT e runsT.............................................................................................................................130 Tools runTS e runsTS .........................................................................................................................131 Tools runTSF e runsTSF......................................................................................................................132 Tecniche di analisi dei requisiti e modelli software. Pagina 3 di 144

Berta Danilo - http://www.bertadanilo.name/ Tool runR ..........................................................................................................................................133 Tool runC ..........................................................................................................................................133 Tool di secondo livello eseguibili ........................................................................................................135 Eseguibili calcolacopertura.exe e calcolaCoperturaSlow.exe..............................................................135 Eseguibile Combinazioni_n_k ............................................................................................................135 Eseguibili generaTestSet.exe e generaTestSetSlow.exe .....................................................................136 Eseguibile ProdCart.exe.....................................................................................................................137 Eseguibile reduceNple.exe ................................................................................................................138 Eseguibili di utility .............................................................................................................................139 Interfacce di unapplicazione software ......................................................................................................141 Nota conclusiva ........................................................................................................................................144

Tecniche di analisi dei requisiti e modelli software.

Pagina 4 di 144

Berta Danilo - http://www.bertadanilo.name/

# Numero versione 2 1.1

Data Pubblicazione 29 marzo 2013

Descrizione 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

Tecniche di analisi dei requisiti e modelli software.

Pagina 5 di 144

Berta Danilo - http://www.bertadanilo.name/

Introduzione
Nel linguaggio verbale (scritto e parlato) il verbo indica lazione 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: # 1 2 3 4 5 6 Modo verbale Indicativo Descrizione il modo della realt e della certezza ed esprime un fatto reale o supposto come tale. Infinito uno dei modi indefiniti del verbo ed esprime genericamente l'idea del verbo senza determinazione di persona e di numero. Participio cos detto perch partecipa della funzione nominale come un aggettivo e si usa in funzione attributiva, predicativa e verbale. Gerundio Esprime un complemento di mezzo, di modo o di maniera, di coincidenza (simultaneit), in genere un'azione secondaria rispetto alla principale. Congiuntivo il modo che esprime una azione possibile, incerta o desiderata. 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 allosso, osserviamo che i modi verbali possono essere ridotti in due grandi classi:

Tecniche di analisi dei requisiti e modelli software.

Pagina 6 di 144

Berta Danilo - http://www.bertadanilo.name/ 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 lesecuzione 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 questaltro, 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 nellanalisi 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.

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.

Tecniche di analisi dei requisiti e modelli software.

Pagina 7 di 144

Berta Danilo - http://www.bertadanilo.name/

Capitolo 1 - Tabelle Decisionali

TABELLE DECISIONALI

Tecniche di analisi dei requisiti e modelli software.

Pagina 8 di 144

Berta Danilo - http://www.bertadanilo.name/

Definizione di tabella decisionale


Quanto riportato in Tabella 2 rappresenta una tabella decisionale : Condizioni A Condizione # 1 B - Condizione # 2 C - Condizione # 3 . N - Condizione # N Azioni F0: Azione # 1 F1: Azione # 2 F(N-1) : Azione # N+1 0 T T T .. T 1 T F T .. .. 2 F T T .. .. 3 F F T .. .. 4 T T F .. .. 5 T F F .. .. 6 F T F .. .. 7 F F F .. .. 8 T T T .. .. 9 T F T .. .. 10 F T T .. .. 11 F F T .. .. 1 1 .. 1 12 T T F .. .. 13 T F F .. .. 14 F T F .. .. 1 .. 1 1 .. 1 .. 1 15 F F F .. F 1 1 .. 1

1 1 1 1 1 1 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, quando sono verificate le corrispondenti azioni . Nella nostra tabella, le colonne sono numerate per maggior chiarezza, ma non vi nessun obbligo di numerarle; la nostra 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 sintende per condizione booleana indipendente o dipendente con un esempio. Consideriamo le seguenti affermazioni: Tecniche di analisi dei requisiti e modelli software. Pagina 9 di 144

Berta Danilo - http://www.bertadanilo.name/ 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 sempre 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 unet inferiore a 18 anni. Considerando le due affermazioni sopra come condizioni, possiamo scrivere 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 luna e vera, laltra 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 lapice 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: Lindirizzo 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

Tecniche di analisi dei requisiti e modelli software.

Pagina 10 di 144

Berta Danilo - http://www.bertadanilo.name/ Possiamo costruire la seguente tabella della verit: # 1 2 3 4 A: Indirizzo di mail vuoto B: Indirizzo di mail valido True True True False False True 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. Ha senso la combinazione #2; se lindirizzo di mail vuoto, non valido per definizione (un indirizzo di e-mail = non sicuramente formalmente valido!). Se lindirizzo 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 A pu assumere entrambi i valori TRUE o FALSE (e lo stesso dicasi se B = FALSE). Il fatto per che fissato A = TRUE la B pu essere solo FALSE ovvero fissata B = TRUE, la condizione A pu essere solo FALSE, sufficiente per dire che esiste una relazione tra A e B, che sono tra di loro dipendenti. b) La combinazione #1 (TRUE,TRUE) 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 valida, perch la variabile X deve (obbligatoriamente) assumere un valore; nel caso non ci fosse questo obbligo, la combinazione #8 dovrebbe essere considerata valida. Tecniche di analisi dei requisiti e modelli software. Pagina 11 di 144

Berta Danilo - http://www.bertadanilo.name/ 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 lequazione: (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 lequazione: (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, lunica 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

La tabella ha due condizioni A e B e due azioni F0 ed F1. Leggendo le colonne, come abbiamo mostrato prima, abbiamo:
2

Dire infatti (A=TRUE) AND (B=FALSE) AND (C=FALSE) come dire se (x=1) e (x2) e (x3), quanto vale x? Ovviamente x=1. Stesso ragionamento per le altre due condizioni.

Tecniche di analisi dei requisiti e modelli software.

Pagina 12 di 144

Berta Danilo - http://www.bertadanilo.name/ # 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 alloperatore AND il simbolo che pu anche essere tralasciato; in pratica: (A AND B) (A B) AB 4. Sostituiamo alloperatore 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 = AB 5 Colonna 3 F0 = AB 6 Colonna 3 F1 = AB 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 lesempio sopra che la domanda sia oziosa perch le due espressioni non sono poi cos complicate. Per rispondere allobiezione, 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)){ print "Sto eseguendo F1";}

Vediamo ora se riusciamo a ridurre le espressioni trovate per F0 ed F1. Con un po di algebra booleana: Tecniche di analisi dei requisiti e modelli software. Pagina 13 di 144

Berta Danilo - http://www.bertadanilo.name/ 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. 2. 3. 4. Data una qualunque condizione booleana X si ha che: X + X = 1 (TRUE). Quindi A + A = 1 e B + B = 1 Data una qualunque condizione booleana X si ha: (X) = X; quindi (A) = A e (B) = B. Date due condizioni booleane X ed Y vale la propriet commutativa: X + Y = Y + X Il teorema dellassorbimento del complemento mi dice che, date due qualunque condizioni booleane A e B vale la relazione: A + AB = A + B .

Non preoccupatevi troppo se non riuscite a seguire nel dettaglio i passaggi; la difficolt sta nelleseguire i conti usando lalgebra booleana, ma lespressione ridotta molto pi semplice rispetto loriginale 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 di mettersi a fare dei calcoli con lalgebra booleana, che in genere nei problemi reali sono molto pi complessi rispetto a quelli appena mostrati; lunico sistema di utilizzare un software adatto allo scopo. Il software che utilizzeremo si chiama Logic Friday e sar loggetto del prossimo capitolo.

Tecniche di analisi dei requisiti e modelli software.

Pagina 14 di 144

Berta Danilo - http://www.bertadanilo.name/

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 linterfaccia 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 NewTruth Table ed appare la seguente videata:

Tecniche di analisi dei requisiti e modelli software.

Pagina 15 di 144

Berta Danilo - http://www.bertadanilo.name/

Figura 3 Scelta degli input ed output della Truth Table. Selezionare in numero di valori di 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.

Tecniche di analisi dei requisiti e modelli software.

Pagina 16 di 144

Berta Danilo - http://www.bertadanilo.name/ Cliccando gli zeri in blu in corrispondenza dellincrocio 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 dont 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 ad inserire i valori della Tabella 8 abbiamo:

Figura 5 Esempio di Truth Table compilata. Premendo invio (oppure la voce di men TruthtableSubmit) 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.

Tecniche di analisi dei requisiti e modelli software.

Pagina 17 di 144

Berta Danilo - http://www.bertadanilo.name/ 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 dont care ?

Consideriamo il seguente (semplice) requisito: La pagina di login ad un sito web richiede linserimento 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.

Tecniche di analisi dei requisiti e modelli software.

Pagina 18 di 144

Berta Danilo - http://www.bertadanilo.name/

Figura 9 Pagina di Login Abbiamo tre variabili binarie indipendenti: user, password e codice captca. Le condizioni sono: A: utente inserito uguale ad un utente U presente sul database. B: password inserita uguale a quella dellutente 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 dont care Abbiamo utilizzato d.c. (acronimo per dont care) per le condizioni ininfluenti sullazione 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 dont care sono le condizioni che sono ininfluenti sulle le azioni da intraprendere. La Tabella 11 scritta in forma ridotta utilizzando i dont care pu essere sviluppata in forma estesa, sostituendo i d.c. con le combinazioni dei valori TRUE e FALSE; si ottiene:

Tecniche di analisi dei requisiti e modelli software.

Pagina 19 di 144

Berta Danilo - http://www.bertadanilo.name/ Condizioni 0 1.1 1.2 1.3 1.4 2.1 2.2 2.3 2.4 3.1 3.2 3.3 A utente = U T F F F F T T F F T T F B Password = U T T T F F F F F F T F T C Codice = codice a video T T F T F T F T F F F F Azioni F0: messaggio errore 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. 3.4 F F F 1

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 T T F T F F A utente = U T F F F F T T F B Password = U T T T F T F F F C Codice = codice a video T T Azioni 1 1 1 1 1 1 F0: messaggio errore 1 F1: login effettuato 1 Tabella 13 Tabella decisionale per Login Form senza ridondanze. Questultima 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 dont care NON corretti

Se sviluppiamo la Tabella 14 otteniamo la seguente:

Tecniche di analisi dei requisiti e modelli software.

Pagina 20 di 144

Berta Danilo - http://www.bertadanilo.name/ 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 dont 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 lazione F1 mentre la colonna #7 la stessa combinazione associata allazione F0. Non ha senso, la tabella errata. Gli altri casi di pari colore fanno riferimento alla stessa azione, ma sono ridondanti e vanno eliminati, come abbiamo fatto pocanzi. La morale che possibile usare i d.c. , ma occorre fare molta attenzione a non fare errori logici; eventuali errori logici saltano fuori 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 2 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 lazione in funzione delle condizioni (3). In Logic Friday non possibile inserire manualmente i valori d.c. nellinput; per possibile importare tabelle con valori d.c. (indicati nel tool con la X). Si veda a questo scopo lhelp 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 lazione 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 nelleconomia globale del circuito che si sta progettando). 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 unazione viene eseguita o no; quindi noi non useremo mai i d.c. sulle azioni.

Provate a inserire la Tabella 13 in Logic Friday e verificate che restituisce lo stesso risultato una volta che si sono minimizzate le equazioni

Tecniche di analisi dei requisiti e modelli software.

Pagina 21 di 144

Berta Danilo - http://www.bertadanilo.name/

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 linserimento di un nuovo utente. Le azioni che possono essere svolte sono: I. II. III. IV. V. F0: Errore, non sono stati inseriti i campi obbligatori. F1: Errore, e-mail non formalmente valida. F2: Errore, la password non rispetta le regole di sicurezza. F3: Errore, campo password e conferma password differenti. 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. B. C. D. Stringa nome utente inserita non vuota E-mail inserita valida Password inserita valida Password = Conferma Password

Tecniche di analisi dei requisiti e modelli software.

Pagina 22 di 144

Berta Danilo - http://www.bertadanilo.name/ Le azioni sono esattamente quelle indicate nei punti IIV. La tabella decisionale che segue denisce il comportamento della funzionalit Inserisci nuovo utente. Condizioni A - Stringa nome utente inserita non vuota B - E-mail inserita valida C - Password inserita valida D - Password = Conferma Password

T T T T

T F T T

F T T T

F F T T

T T F T

T F F T

F T F T

F F F T

T T T F

T F T F

F T T F

F F T F

T T F F

T F F F

F T 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 F0F4 alle condizioni A D. Sono le seguenti (4): F0 = A F1=B F2=C F3=D F4 = ABCD

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:

Si provi ad effettuare la verifica riscrivendo la tabella condizionale con i dont care.

Tecniche di analisi dei requisiti e modelli software.

Pagina 23 di 144

Berta Danilo - http://www.bertadanilo.name/

Figura 11 Truth Table Logic Friday Limmagine che segue riporta il valore minimizzato calcolato dal software:

Figura 12 Equazioni minimizzate

Si noter che le espressioni originali delle azioni F0F4 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, lespressione originale e quella minimizzata da Logic Friday:

Tecniche di analisi dei requisiti e modelli software.

Pagina 24 di 144

Berta Danilo - http://www.bertadanilo.name/

Originale:
F0 = C' D F1 = C' D F2 = C' D F3 = C D' F4 = A' B' C' + A' B C A' B' C' + A B' C A' B' C' + A B C' A' B' C' + A B C' A B C D; D' D' D' D' D' D' D' 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' A B C D'; + A' B' C D' + A' B' C D + A' B C' D' + A' B + A' B' C D' + A' B' C D + A B' C' D' + A B' + A' B C' D' + A' B C' D + A B' C' D' + A B' + A' B C' D' + A' B C D' + A B' C' D' + A B'

Minimizzata:
F0 F1 F2 F3 F4 = = = = = A' ; B' ; C' ; D'; A B C D;

Esercizio: provare a rieseguire il calcolo, supponendo di avere solo i seguenti errori: i. ii. F0: Campi obbligatori non inseriti o formalmente non validi. 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 dellerrore molto generica). Il calcolo a mano della dipendenza di F0 ed F1 dalle condizioni A D non pi tanto semplice.

Tecniche di analisi dei requisiti e modelli software.

Pagina 25 di 144

Berta Danilo - http://www.bertadanilo.name/

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 unazione F0 e/o F1. In altri termini, possiamo scrivere la seguente tabella: X Y Z F0 F1 x1 y1 z1 X x1 y1 z2 x1 y1 z3 x1 y2 z1 x1 y2 z2 x1 y2 z3 X X

Variabili

Azioni

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 + z1y2z3 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 tabella condizionale equivalente e quindi, su di essa, utilizzare le tecniche di minimizzazione viste nei capitoli precedenti ? La risposta affermativa e sar loggetto 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: Tecniche di analisi dei requisiti e modelli software. Pagina 26 di 144

Berta Danilo - http://www.bertadanilo.name/ A B Condizioni C D E Azioni T T T F F T T F T F T T F F T T F T F F T F F T F T F F F T

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 labbiamo 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 valere 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: CDE = C CDE = D CDE = E

Una volta che una tabella funzionale stata ridotta a una tabella decisionale, possibile applicare ad essa i metodi di riduzione noti, discussi nei paragrafi precedenti.

Tecniche di analisi dei requisiti e modelli software.

Pagina 27 di 144

Berta Danilo - http://www.bertadanilo.name/ Il caso degenere della funzione

Consideriamo la seguente tabella funzionale: X Y Z x1 y1 z1 x1 y1 z2 x1 y1 z3 x1 y2 z1 x1 y2 z2 x1 y2 z3

Variabili

Azioni

F0 X F1 X F2 X F3 X F4 X F5 Tabella 21 Tabella funzionale degenere (funzione)

La differenza tra la Tabella 18 ed Tabella 21 che in questultima 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 Questultima tabella non altro che la classica funzione matematica in tre variabili (X,Y,Z), in cui al posto della ordinata numerica abbiamo delle azioni F0F5. La tabella decisionale equivalente della Tabella 21 la Tabella 23. A B Condizioni C D E T T T F F T T F T F T T F F T T F T F F T F F T F T F F F T

F0 X F1 X F2 X Azioni F3 X F4 X F5 X Tabella 23 Tabella decisionale per la funzione (equivalente alla funzionale) E evidente che in questo caso immediato dedurre lequazione delle azioni F0 F5, che sono: Tecniche di analisi dei requisiti e modelli software. Pagina 28 di 144

Berta Danilo - http://www.bertadanilo.name/ F0 = ABCDE F1 = ABCDE F2 = ABCDE F3 = ABCDE F4 = ABCDE F5 = ABCDE

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 dalla Tabella 21( o la sua equivalente Tabella 22). E per interessante notare che la descrizione 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 linverso, ma in genere poco utile) b) Riducendo una tabella funzionale in decisionale, possibile utilizzare le regole dellalgebra booleana (a mano o mediante lausilio 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.

Tecniche di analisi dei requisiti e modelli software.

Pagina 29 di 144

Berta Danilo - http://www.bertadanilo.name/

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 unet compresa tra 14 anni (inclusa) e 18 anni (esclusi) pu prendere la sola patente categoria A. Se la persona ha unet superiore a 18 anni (compresi) pu scegliere se prendere la patente categoria A o categoria B (una esclude laltra). In tutti i casi, possibile conseguire la patente se si superano con successo la visita attitudinale e lesame di guida. Lanalisi 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 2 F0 Conseguimento patente categoria A F1 Conseguimento patente categoria B

Tutte queste informazioni possono essere raccolte nella seguente tabella: Condizioni A : et < 14 T T T T F F F F B : 14 <= et < 18 F F F F T T T T C : et >= 18 F F F F F F F F D : superamento della visita attitudinale T T F F T T F F E : superamento esame di guida F T T F F T T F Azioni F0 Conseguimento patente categoria A X F1 Conseguimento patente categoria B Tabella 24 Tabella decisionale conseguimento patente

F F T T F

F F T T T X X

F F T F T

F F T F F

Notiamo che, nei blocchi di diverso colore, non compaiono tutte le combinazioni delle condizioni A, B e C, in quanto 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, C 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:

Tecniche di analisi dei requisiti e modelli software.

Pagina 30 di 144

Berta Danilo - http://www.bertadanilo.name/ F0 = (B AND D AND E) OR (C AND D AND E) = BDE + CDE = (B + C) DE F1 = (C AND D AND E) =CDE 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 ricavati dal software sembrano diversi, come vediamo nella tabella che segue:

Tecniche di analisi dei requisiti e modelli software.

Pagina 31 di 144

Berta Danilo - http://www.bertadanilo.name/ Funzioni F0 F1 Ricavata senza software Ricavato con il Software BDE + CDE A' B C' D E + A' B' C D E CDE 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 TRUE FALSE FALSE B C FALSE FALSE TRUE FALSE FALSE TRUE Tutte le altre possibili combinazioni non hanno senso ! Tabella 26 Tabella di vincolo A, B e C Risultato A (True) B (True) C (True)

In termini semplici, prendiamo la prima riga, nella quale abbiamo: ABC = (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 una questultima tabella, vediamo che: A' B C' = B A' B' C = C

I due risultati sono quindi perfettamente equivalenti. 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.

Tecniche di analisi dei requisiti e modelli software.

Pagina 32 di 144

Berta Danilo - http://www.bertadanilo.name/

Esempio #3 - un caso un po complesso.


Consideriamo il seguente requisito: Se una persona di sesso maschile e maggiorenne risulta 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 allassegno principale. Se la persona minorenne, lassegno di 500 euro mensili. Se una persona ha unoccupazione, 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 lanalisi del requisito. Per prima cosa individuiamo le condizioni booleane dipendenti ed indipendenti. Le condizioni booleane indipendenti sono: Essere maggiorenne (avere unet superiore o inferiore a 18 anni) Sesso (essere maschio o femmina) Essere disoccupato (non avere unoccupazione 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 luno dallaltro. 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, lassegno di 500 euro mensili. b. Se una persona ha unoccupazione, 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, gli dato in aggiunta un assegno di 100 euro per figlio, fino a un massimo di 500 euro.

Tecniche di analisi dei requisiti e modelli software.

Pagina 33 di 144

Berta Danilo - http://www.bertadanilo.name/ 2. Classe # 2 Reddito annuo compreso tra 20.000 euro (incluso) e 40.000 euro (incluso) a. Se la persona minorenne, lassegno di 500 euro mensili. b. Se una persona ha unoccupazione, 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, gli 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, lassegno di 500 euro mensili. b. Se una persona ha unoccupazione, 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, gli dato in aggiunta un assegno di 100 euro per figlio, fino a un massimo di 500 euro. Ad una breve analisi, notiamo 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 Occupata Maschio Azioni Assegno minorenne (500 euro) Assegno standard (700 euro) Incremento assegno standard (300 euro) Decremento assegno standard (200 euro) Assegno donna e figli (funzione numero figli e reddito) Tasse scalate (300 euro) X X Tabella 27 Tabella decisionale Classe di reddito # 1 X X X X X X X X X X X X T T T T F T F T T F F T T T F T F F F T F F F F

Tecniche di analisi dei requisiti e modelli software.

Pagina 34 di 144

Berta Danilo - http://www.bertadanilo.name/ Classe # 2 Reddito annuo compreso tra 20.000 euro (incluso) e 40.000 euro (incluso) Condizioni Minorenne Occupata Maschio Azioni Assegno minorenne (500 euro) Assegno standard (700 euro) Incremento assegno standard (300 euro) Decremento assegno standard (200 euro) Assegno donna e figli (funzione numero figli e reddito) Tasse scalate (300 euro)

T T T X

T F T X

F T T

F F T

T T F X

T F F X

F T F

F F F

X X Tabella 28 Tabella decisionale Classe di reddito # 2

X X

X X

Classe # 3 Reddito annuo compreso superiore a 40.000 euro (escluso) Condizioni Minorenne T T F Occupata T F T Maschio T T T Azioni Assegno minorenne (500 euro) X X Assegno standard (700 euro) Incremento assegno standard (300 euro) Decremento assegno standard (200 euro) Assegno donna e figli (funzione numero figli e reddito) Tasse scalate (300 euro) 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

F F T

T T F X

T F F X

F T F

F F F

X X X X X X X X

Guardando le tre tabelle notiamo che: 1. La principale differenza sta nel requisito (c); secondo la classe di reddito, percepito lassegno standard oppure lo stesso assegno incrementato o decrementato. 2. Che lassegno alla donna con figli, dipende nello stesso modo dal numero di figli per tutte e tre le classi di reddito, ma limporto iniziale diverso. In altri termini: a. Per le prime due classi di reddito lassegno alla donna si calcola con la formula: (500 + numero_figli*100) se 0<= numero_figli <= 5; se numero_figli > 5 ==> 500 + 500 = 1000 Euro. Tecniche di analisi dei requisiti e modelli software. Pagina 35 di 144

Berta Danilo - http://www.bertadanilo.name/ b. Per la terza classe di reddito lassegno 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 ad 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 ad 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? Losservazione 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 unanalisi del requisito con una metodologia ben definita come quella ivi presentata. Supponiamo allora di aver ridiscusso il requisito con lutente che lha 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 B - Occupata C - Maschio Azioni 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) X X X Tabella 30 Tabella decisionale Classe di reddito # 1 tabella corretta

T T T X

T F T X

F T T

F F T

T T F X

T F F X

F T F

F F F

X X X X X

Tecniche di analisi dei requisiti e modelli software.

Pagina 36 di 144

Berta Danilo - http://www.bertadanilo.name/ Classe # 2 Reddito annuo compreso tra 20.000 euro (incluso) e 40.000 euro (incluso) Tabella corretta Condizioni A - Minorenne B - Occupata C - Maschio Azioni 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) X X X Tabella 31 Tabella decisionale Classe di reddito # 2 tabella corretta

T T T X

T F T X

F T T

F F T

T T F X

T F F X

F T F

F F F

X X

Classe # 3 Reddito annuo compreso superiore a 40.000 euro (escluso) Tabella corretta Condizioni A - Minorenne B - Occupata C - Maschio Azioni 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) X X X Tabella 32 Tabella decisionale Classe di reddito # 3 tabella corretta

T T T X

T F T X

F T T

F F T

T T F X

T F F X

F T F

F F F

X X X X X

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:

Tecniche di analisi dei requisiti e modelli software.

Pagina 37 di 144

Berta Danilo - http://www.bertadanilo.name/ 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 F1 F2 F3 F4 F5 = = = = = = A; A' B' C; A' B' C; 0; A' C'; B;

Tecniche di analisi dei requisiti e modelli software.

Pagina 38 di 144

Berta Danilo - http://www.bertadanilo.name/ 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 F1 F2 F3 F4 F5 = = = = = = A; A' B' C; 0; 0; A' C'; B;

Tecniche di analisi dei requisiti e modelli software.

Pagina 39 di 144

Berta Danilo - http://www.bertadanilo.name/ 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 F1 F2 F3 F4 F5 = = = = = = A; A' B' C; 0; A' B' C; A' C'; B;

Tecniche di analisi dei requisiti e modelli software.

Pagina 40 di 144

Berta Danilo - http://www.bertadanilo.name/ Conviene a questo punto creare una tabella riassuntiva che mette a confronto i tre risultati ottenuti. Tenendo conto che: 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) A - Minorenne B - Occupata C - Maschio

Abbiamo: Azioni 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) Condizioni di applicabilit per le classi di reddito Classe # 1 Classe #2 Minorenne Minorenne Maggiorenne, non occupato, maschio Maggiorenne, non occupato, maschio / Maggiorenne, non occupato, maschio /

Classe # 3 Minorenne Maggiorenne, non occupato, maschio /

Maggiorenne, non occupato, maschio Maggiorenne,femmina

Maggiorenne,femmina

Maggiorenne,femmina

Occupato

Occupato

Occupato

Tabella 33 condizioni di applicabilit per le classi di reddito (*) NOTA Per le prime due classi di reddito lassegno 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 lassegno alla donna si calcola con la formula: (300 + numero_figli*100) se 0<= numero_figli <= 5; se numero_figli > 5 ==> 300 + 500 = 800 Euro.

Nella tabella, le condizioni riportate sono quelle che devono valere tutte contemporaneamente affinch sia applicabile lazione. In altri termini, per la classe 1, affinch si possa applicare lazione 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): Tecniche di analisi dei requisiti e modelli software. Pagina 41 di 144

Berta Danilo - http://www.bertadanilo.name/ a) Se la persona minorenne, viene erogato un assegno di 500 euro/mese. b) Se la persona maggiorenne, disoccupato, maschio erogato lassegno standard di 700 euro/mese. c) Se la persona maggiorenne, disoccupato, maschio e guadagna meno di 20.000 euro/anno (limite escluso) lassegno standard incrementato di 300 euro/mese. d) Se la persona maggiorenne, disoccupato, maschio e guadagna pi di 40.000 euro/anno (limite escluso) lassegno 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): Import assegno = (500 + numero_figli*100) se 0<= numero_figli <= 5; se numero_figli > 5 ==> 500 + 500 = 1000 Euro. b. Se il reddito annuo superiore di 40.000 euro (limite escluso): Import 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 vengono 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.

Tecniche di analisi dei requisiti e modelli software.

Pagina 42 di 144

Berta Danilo - http://www.bertadanilo.name/

Capitolo 2 Grafi e flow chart

GRAFI E FLOW CHART

Tecniche di analisi dei requisiti e modelli software.

Pagina 43 di 144

Berta Danilo - http://www.bertadanilo.name/

Definizione di grafo
La pagina di wikipedia http://it.wikipedia.org/wiki/Grafo pesenta le caratteristiche fondamentali relative a quelloggetto 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 (dallinglese Vertex)ed E insieme degli archi (dallinglese 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 Tecniche di analisi dei requisiti e modelli software. Pagina 44 di 144

Berta Danilo - http://www.bertadanilo.name/ 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 sintende 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 dellarco A punta a V ( V). Un arco A in uscita dal nodo V se la freccia dellarco 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.

Tecniche di analisi dei requisiti e modelli software.

Pagina 45 di 144

Berta Danilo - http://www.bertadanilo.name/

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 linformatica 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 larco 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 larco 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 Pagina 46 di 144

Tecniche di analisi dei requisiti e modelli software.

Berta Danilo - http://www.bertadanilo.name/ 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: V ha grado 4 Digrafo: V ha grado entrante 1 V ha 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 (questultimo 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.

Tecniche di analisi dei requisiti e modelli software.

Pagina 47 di 144

Berta Danilo - http://www.bertadanilo.name/ 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 lultimo 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 allinterno 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 allinterno 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 (larco V1V3) 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 Knigsberg,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.

Tecniche di analisi dei requisiti e modelli software.

Pagina 48 di 144

Berta Danilo - http://www.bertadanilo.name/ 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 allinfinito. 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.

Tecniche di analisi dei requisiti e modelli software.

Pagina 49 di 144

Berta Danilo - http://www.bertadanilo.name/

Rappresentazioni matriciali di un grafo


La rappresentazione grafica di un grafo o di un digrafo sicuramente utile e permette di visualizzare a colpo docchio la struttura complessiva del grafo; tuttavia, non sempre quella pi conveniente per calcolare le varie propriet delloggetto. 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 dincidenza. 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:

V1 V 2 V 3 V 4 V1 0 1 1 0 V2 V3 V4 0 0 0 0 1 0 0 0 0 0 1 0

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): V1V2 Il nodo 1 (V1) connesso al nodo 3 (V3): V1V3 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. Tecniche di analisi dei requisiti e modelli software. Pagina 50 di 144

Berta Danilo - http://www.bertadanilo.name/ 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 unaltra 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 (lunica) 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 dincidenza La definizione di matrice dincidenza la seguente: Dato un qualsiasi grafo, la sua matrice dincidenza 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 larco j collegato al nodo i ed entrante rispetto ad i Il valore -1 se e solo se larco j collegato al nodo i ed uscente rispetto ad i Il valore 0 se e solo se larco 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.

Tecniche di analisi dei requisiti e modelli software.

Pagina 51 di 144

Berta Danilo - http://www.bertadanilo.name/

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 flowchart 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 predefinito e cos via e focalizzare lattenzione su tre elementi di base: processi (o azioni), cicli e condizioni. Nel seguito non prenderemo quindi in considerazione la normativa ISO; cos facendo, linsieme 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: Tecniche di analisi dei requisiti e modelli software. Pagina 52 di 144

Berta Danilo - http://www.bertadanilo.name/ # 1 Simbolo Nome Punto dinizio o fine del flow-chart. Processo o azione 2 Descrizione

Istruzione decisionale semplice

Ciclo ripetuto (condizione valutata prima dellesecuzione dellazione)

Ciclo ripetuto (condizione valutata dopo lesecuzione dellazione). 5

Una serie di istruzioni da eseguire in sequenza o un programma complesso eventualmente descrivibile mediante altro diagramma di flusso. Corrisponde al controllo IF standard: IF(Condizione) Action(s) END IF Ciclo con controllo della condizione a monte della condizione: While(Condizione) Action(s) Do For(int <=N) Action(s) End For Ciclo con controllo della condizione a valle della condizione: Do Action(s) While(Condizione)

Corrisponde al controllo CASE: CASE A A=1 Action 1 A=2 Action 2 . Else Action default END CASE In altri linguaggi, listruzione SWITCH Tabella 34 simboli utilizzabili allinterno di un flow-chart

Controllo N volte condizionale

Tecniche di analisi dei requisiti e modelli software.

Pagina 53 di 144

Berta Danilo - http://www.bertadanilo.name/ 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:

Tecniche di analisi dei requisiti e modelli software.

Pagina 54 di 144

Berta Danilo - http://www.bertadanilo.name/

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 unoperazione 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 questultimo 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.

Pagina 55 di 144

Berta Danilo - http://www.bertadanilo.name/

Definizione di complessit ciclomatica


La complessit ciclomatica una metrica software sviluppata da Thomas J. McCabe nel 1976 ed utilizzata per misurare la complessit di un programma. E quindi un concetto che si applica ai grafi che derivano da routine software, ma non pu dirsi un concetto nato nel campo della teoria matematica dei digrafi, anche se a questi si applica. Il valore della complessit ciclomatica pu anche essere proficuamente utilizzato per valutare la complessit di programmi descritti da un flow-chart. Esistono differenti formule che permettono il calcolo della complessit ciclomatica, sia per grafi sia per flow-chart: Formula standard (si applica ad un grafo G):

v(G ) = e n + 2 p
Dove: v(G) = complessit ciclomatica del grafo G e = numero di archi del grafo n = numero di nodi del grafo p = numero di componenti connesse (= numero di nodi in uscita)

In questa formula si suppone che il punto di uscita del grafo non sia connesso allindietro con il punto dingresso del grafo stesso. Nel caso in cui il punto di uscita del grafo sia connesso allindietro con il punto dingresso del grafo stesso (si parla di grafo fortemente connesso), la formula diventa:

v(G ) = e n + p
Alcuni esempi che vedremo tra breve serviranno a chiarire le idee. Numero di regioni (si applica ad un grafo)

v(G ) =
Dove: v(G) = complessit ciclomatica del grafo G = numero di regioni chiuse del grafo

In questa formula si suppone che il punto di uscita del grafo sia connesso allindietro con il punto dingresso del grafo stesso. Nel caso in cui il punto di uscita del grafo non sia connesso allindietro con il punto dingresso del grafo stesso (si parla di grafo fortemente connesso), la formula diventa:

v(G ) = + 1

Tecniche di analisi dei requisiti e modelli software.

Pagina 56 di 144

Berta Danilo - http://www.bertadanilo.name/ Numero di predicati (si applica ad un flow-chart)

v(G ) = + 1
Dove: v(G) = complessit ciclomatica del grafo G = numero di punti decisionali semplici o predicati (es. IF, FOR, WHILE, DO, etc.) del programma

Il caso di un costrutto CASE con N possibilit conta come (N-1) punti decisionali semplici. Ad esempio, un CASE con 5 possibilit conta come 4 cicli IF (o meglio, come 3 cicli IF ed un IF-THEN). Si noti che un costrutto IF-THEN pu essere considerato come un CASE con N=2, quindi conta esattamente come un ciclo IF semplice. Nel caso in cui un programma abbia un solo punto di ingresso e pi punti di uscita, la complessit ciclomatica pu essere calcolata con la formula seguente:

v(G ) = e + 2
Dove: v(G) = complessit ciclomatica del grafo G = numero di punti decisionali semplici o predicati (es. IF, FOR, WHILE, DO, etc.) del programma e = numero di punti di uscita

Nel caso in cui e=1, ci si riduce alla formula precedente.

Ricapitoliamo le varie formule nella tabella che segue. Modalit di calcolo della complessit ciclomatica Formula standard Numero di regioni Numero di predicati semplici I nodi di uscita e dingresso sono: Non connessi

Connessi

v(G ) = e n + p v(G ) =

v(G ) = e n + 2 p v(G ) = + 1

v(G ) = e + 2 (se e=1 v(G ) = + 1 )

Tabella 35 modalit di calcolo della complessit ciclomatica Dove: v(G) = complessit ciclomatica del grafo G e = numero di archi del grafo n = numero di nodi del grafo p = numero di componenti connesse (= numero di nodi in uscita) = numero di punti decisionali semplici o predicati (es. IF, FOR, WHILE, DO, etc.) del programma; il caso di un costrutto CASE con N possibilit conta come (N-1) punti decisionali semplici. e = numero di punti di uscita del programma

Tecniche di analisi dei requisiti e modelli software.

Pagina 57 di 144

Berta Danilo - http://www.bertadanilo.name/ Veniamo ad alcuni esempi. Consideriamo ad esempio il grafo in Figura 27 tratto dal testo Software testing techniques di Boris Bezier, pag 115, che nel seguito chiameremo con il nome di grafo di Bezier. Usando la formula standard tale grafo possiede: e = numero di archi del grafo = 13 n = numero di nodi del grafo = 10 p = numero di componenti connesse = 1

da cui si ricava v(G) = 5. Se si contano il numero di regioni connesse chiuse, considerando anche la regione derivante dalla chiusura (fittizia, indicata con linea tratteggiata) del nodo di ingresso 1 con il nodo di uscita 2, abbiamo: Prima regione chiusa: (3,4,8,7,3) Seconda regione chiusa: (4,5,9,8,4) Terza regione chiusa: (5,6,10,9,5) Quarta regione chiusa: (7,8,9,10,7) Quinta regione chiusa: (1,2,1)

Figura 27 grafo di Bezier In pratica le regioni connesse chiuse sono quelle contornate da archi formanti un perimetro chiuso. Chiariamo cosa si intende per numero di componenti connesse. Consideriamo il grafo che segue, in Figura 28. Tale grafo composto da 2 grafi distinti, o per essere pi corretti formalmente da 2 componenti tra di loro reciprocamente non connesse: il grafo con nodi (1,2,3,4) non connesso con il grafo con i nodi (10,20,30,40). In questo caso si ha p=2 e la formula della complessit ciclomatica indica che, in casi come questi, la complessit ciclomatica totale la somma delle complessit ciclomatiche delle singole componenti. Tecniche di analisi dei requisiti e modelli software. Pagina 58 di 144

Berta Danilo - http://www.bertadanilo.name/

Figura 28 grafo con numero di componenti connesse p= 2 Il calcolo della complessit ciclomatica del grafo con nodi (1,2,3,4) pari a 5-4+2 = 3 (usiamo la formula v(G ) = e n + 2 p ); anche considerando il numero di regioni connesse si ha 2 +1 = 3 (usiamo la formula

v(G ) = + 1 ).
Il grafo con nodi (10,20,30,40) ha una complessit ciclomatica = 4-4+2 = 2 (usiamo sempre la formula v(G ) = e n + 2 p ); anche in questo caso, evidente che esiste una sola regione connessa ed usando la formula v(G ) = + 1 otteniamo lo stesso valore 2 della complessit ciclomatica. Quindi la complessit ciclomatica totale = 3+2 = 5. Usando ora la formula v(G ) = e n + 2 p con p=2, e quindi calcolando la complessit ciclomatica del grafo composto abbiamo: e=9 archi n=8 nodi p=2 parti connesse

da cui si ottiene v(G) = 9-8+2*2 = 5, ossia lo stesso risultato che si ottiene sommando le complessit ciclomatiche delle due componenti.

Cammini elementari e complessit ciclomatica


Al lato pratico, la complessit ciclomatica v(G) definisce il numero massimo di cammini distinti dal nodo di ingresso al (ai) nodo(i) di uscita che il grafo G possiede. Per elencare il numero massimo di cammini di un grafo si procede nel seguente modo: si parta dal nodo di testa de grafo e si seguano tutti i cammini in uscita al nodo, trascrivendo il percorso in una struttura ad albero. Tanto per capire, vediamo un caso pratico, considerando il primo digrafo in Figura 28. Partiamo dal nodo # 1, connesso al nodo # 2 e numero 3. Segniamo la coppia [1-2] e [1-3] alla stessa altezza allinterno del nostro albero (vedi Figura 29). Prendiamo adesso prima il nodo # 2 e poi il nodo # 3 ed eseguiamo la stessa operazione Il nodo # 2 la coda e non porta pi da nessuna parte; il nodo # 3 collegato al #4 e al # 2, quindi scriviamo sulla riga successiva sotto la coppia [1-3] la coppia [3-2] e [3-4]. Tecniche di analisi dei requisiti e modelli software. Pagina 59 di 144

Berta Danilo - http://www.bertadanilo.name/ Per finire, consideriamo il nodo # 4 collegato al nodo # 2 e scriviamo la coppia [4-2] di sotto la coppia [3-4]. A questo punto, tutti i nodi e relativi archi orientati sono stati considerati; tutti i cammini sono quindi stati definiti.

Figura 29 grafo di Figura 28 e relativo albero dei cammini visualizzati affiancati Linterpretazione, specie in un caso cos semplice, immediata: esistono 3 possibili cammini che collegano il nodo #1 (testa) con il nodo # 2 (coda) che sono leggibili in verticale, partendo dallalto, nellalbero dei cammini associato al digrafo e costruito con il procedimento sopra descritto. I cammini sono (1,2), (1,3,3,2), (1,3,3,4,4,2). Sostituendo le coppie di numeri uguali affiancate con un unico valore - quindi (3,3) diventa 3 si hanno i seguenti cammini:(1,2), (1,3,2) e (1,3,4,2). Il numero di cammini trovati coincide con il valore della complessit ciclomatica del grafo. Vediamo ora il caso un po pi complesso del grafo di Bezier. Lalbero che si ottiene applicando il procedimento sopra descritto quello riportato in Figura 30. Iniziamo con lalbero a sinistra etichettato Albero Cammini Base. Tale struttura mostra 5 cammini (pari al numero delle foglie in verde dellalbero) che sono i seguenti (come prima, eliminiamo i numeri doppi) 1. 2. 3. 4. 5. Cammino # 1 : (1,4,5,6,2) Cammino # 2 : (1,4,5,6,10,9) Cammino # 3 : (1,4,5,6,10,7) Cammino # 4 : (1,4,8,9,5) Cammino # 5 : (1,4,8,7,3)

Questi sono i cammini base, nella letteratura anche chiamati linearmente indipendenti (METTERE NOTA). Notiamo che tali cammini non terminano tutti nel nodo di coda del digrafo (il nodo # 2); anzi, solo il primo cammino termina al nodo # 2; tutti gli altri cammini terminano in un qualche nodo intermedio del grafo. Se siamo interessati come di solito capita - ai cammini che partono dal nodo di testa e terminano in quello di coda, dobbiamo estendere i cammini fino ad arrivare al nodo # 2. A tale scopo, basta tornare verso lalto dellalberatura e sostituire al nodo terminale del cammino un percorso cha va da tale nodo al nodo di coda # 2. Ad esempio, per il secondo cammino (1,4,5,6,10,9) si sostituisca al nodo finale #9 il cammino (9-5) preso dal quarto cammino, quindi al 5 finale si sostituisca il cammino (5,6,2) preso dal primo cammino, ottenendo in definitiva (1,4,5,6,10,9,9,5,5,6,2) = (1,4,5,6,10,9,5,6,2). E cos via per tutti gli altri cammini. Il calcolo dei cammini completi, una volta capito il meccanismo, pi semplice a farsi che a dirsi !

Tecniche di analisi dei requisiti e modelli software.

Pagina 60 di 144

Berta Danilo - http://www.bertadanilo.name/

Figura 30 albero dei cammini di base e completo per il grafo di Bezier Si noti che non esiste un solo modo per completare i cammini partendo dai cammini di base. Ad esempio, il secondo cammino poteva anche completarsi come (1,4,5,6,10,9,5,6,10,9,5,6,2). In pratica, potevamo eseguire il cammino ciclico (5,6,10,9,5) per due volte prima di chiudere sul (6,2). Ovviamente lo potevamo ripetere N volte. In questi casi conviene usare (con Bezier) la notazione [1,4,(5,6,10,9,5)*,6,2] indicando con il simbolo * dopo la parentesi: (5,6,10,9,5)* che (5,6,10,9,5) un ciclo che pu essere ripetuto N volte. Anche per gli altri cammini vale un ragionamento analogo. Si provi per esercizio a calcolare tutti i cammini ciclici che portano dal nodo #1 di testa al nodo #2 di coda, che compaiono nel digrafo di Bezier.

Tecniche di analisi dei requisiti e modelli software.

Pagina 61 di 144

Berta Danilo - http://www.bertadanilo.name/ Allinizio abbiamo parlato di numero massimo di cammini; vediamo ora di capire perch si parla di numero massimo e non semplicemente di numero di cammini. Consideriamo il grafo che segue, in Figura 31.

Figura 31 Il grafo ha complessit ciclomatica pari a 3, ma per coprire tutti i cammini sono sufficienti i due seguenti percorsi: (a,c) e (b,d) oppure (a,d) e (b,c).

Figura 31 grafo copribile con soli due cammini ma con complessit ciclomatica = 3 Se calcoliamo lalbero dei cammini, dobbiamo contare tutti gli archi che escono da ciascun nodo. Quindi dal nodo #1 escono due archi verso in nodo # 2; dal nodo #2 escono due archi dal nodo #3. Lalbero il seguente:

Figura 32 albero del grafo Si noti che il percoso 2-3( c ) gi stato coperto dalla prima parte dellalbero (a sinistra) e quindi pu essere eliminato dalla seconda parte (in rosso) ; ragionamento simmetrico si poteva fare per il percorso 2-3(d). Lesempio mostra che lalbero dei cammini trova quattro cammini,che sono (a,d), (a,c), (b,d) e (b,c). Quindi: Tecniche di analisi dei requisiti e modelli software. Pagina 62 di 144

Berta Danilo - http://www.bertadanilo.name/ La complessit ciclomatica dice che ci sono 3 cammini indipendenti Il grafo percorribile con due cammini (a,c) e (b,d) oppure (a,d) e (b,c) Lalbero associato al grafo trova 3 cammini (a,d), (a,c), (b,d) oppure (a,d), (a,c), (b,c)

Che cosa se ne deduce? Si deduce che il numero minimo di percorsi dal nodo 1 al nodo 3 che garantisce la copertura di tutti i cammini del grafo due; tali percorsi possono essere scelti considerando due tra le quattro combinazioni espresse nellalbero dei percorsi associato al grafo, che sono (a,d), (a,c) , (b,d) e (b,c). Il tre percorsi cui fa riferimento la complessit ciclomatica, sono uno dei seguenti (equivalenti tra di loro): Percoso # 1: (a,d), (a,c) e [(b,d) oppure (b,c)] Percorso # 2: (b,d), (b,c) e [(a,d) oppure (a,c)]

Questo sta a indicare che la complessit ciclomatica esprime il numero massimo di percorsi (che in questo caso tre) che garantiscono la copertura di tutti i cammini del grafo. Questo non significa che non esista un numero minore di percorsi (eventualmente un numero minimo) che copra tutti i cammini del grafo. Da quanto sopra, si pu far derivare il vero significato con il quale deve essere interpretata la complessit ciclomatica: 1. La complessit ciclomatica un numero che specifica un valore di riferimento( una metrica) ma non definisce la modalit di determinazione dei percorsi allinterno del grafo. 2. Una modalit per estrarre i cammini indipendenti pu essere quella proposta della riduzione del grafo ad albero, ma non detto non se ne possano trovare delle altre. 3. La complessit ciclomatica indica un numero che maggiore o uguale al numero minimo di percorsi allinterno di un grafo che garantiscono la copertura di tutti i cammini del grafo. Quindi, possibile che esista un numero di percorsi minore della complessit ciclomatica che garantisce la copertura. In definitiva, la complessit ciclomatica fornisce un valore che fornisce una stima del numero di test che devono essere eseguiti, per essere certi di coprire tutti i cammini allinterno del grafo; ne consegue che sedato un grafo - il numero di test progettato per il codice che il grafo rappresenta significativamente minore della complessit ciclomatica, dobbiamo prendere in considerazione la possibilit di incrementare il numero dei test.

Tecniche di analisi dei requisiti e modelli software.

Pagina 63 di 144

Berta Danilo - http://www.bertadanilo.name/

Capitolo 3 Automa a stati finiti

AUTOMA A STATI FINITI

Tecniche di analisi dei requisiti e modelli software.

Pagina 64 di 144

Berta Danilo - http://www.bertadanilo.name/

Definizione di automa o macchina a stati finiti


La pagina http://it.wikipedia.org/wiki/Automa_a_stati_finiti di Wikipedia fornisce la seguente definizione di automa a stati finiti:

Un automa a stati finiti (ASF) un sistema dinamico, invariante e discreto nell'avanzamento e nelle interazioni, nel quale gli insiemi dei possibili valori di ingresso, uscita e stato sono insiemi finiti.

Dinamico significa che il sistema evolve nel tempo passando da uno stato all'altro in funzione dei segnali d'ingresso e dello stato precedente. Invariante: a parit di condizioni iniziali il comportamento del sistema sempre lo stesso. Discreto: le variabili d'ingresso, di stato, d'uscita, possono assumere solo valori discreti.

Il testo di Paul E. Wood Jr.(Lincoln Laboratory MIT) dal titolo Switching Theory (1968) alla pagina 171, inizio del capitolo Sequential Network al paragrafo 2 fornisce la seguente definizione:

Definition 5-1: A sequential machine M is specified by the 6-tuple M = (X,Z,S,f,g,s), where X is the set of all input states , and S is the set of all internal states s. If the symbols , , and denote the input, output, and internal states at time (that is precedes ), then s1 is the initial state and the output function f and the next state function g can be defined by Eqs. (5-1) and (5-2), respectively:
(5-1) (5-2) = ( ,si) = ( ,si)

Le definizioni sono formalmente perfette, ma ad una prima lettura non sono facili da comprendersi (ma se li leggete bene perdono molto di quellaura misteriosa che sembrano avere ad una lettura frettolosa). Per capire che cosa sia, nella pratica, un automa o macchina a stati finiti (nel seguito ASF) vediamo un caso pratico e torniamo un po indietro, a quando frequentavamo le scuole medie inferiori.

Esempio #4 Le scuole medie inferiori


E ben noto che uno studente, per passare dalla classe prima media alla seconda media, deve aver frequentato per tutto lanno la prima media e che i professori lo promuovano nello scrutinio di fine anno (senza che lo studente debba dare un esame di ammissione). Stessa cosa per il passaggio dalla seconda media alla terza media. Per il passaggio dalla terza media alle scuole superiori, occorre oltre alla promozione da parte dei professori, anche il superamento dellesame finale da parte dellalunno. Nel caso in cui i professori non promuovono o lo studente non supera lesame finale, si rimane nella stessa classe. Quello descritto un processo che descrive le modalit di frequentazione delle scuole medie inferiori.

Tecniche di analisi dei requisiti e modelli software.

Pagina 65 di 144

Berta Danilo - http://www.bertadanilo.name/ Possiamo dire che la classe in cui lo studente si trova (prima, seconda o terza media) rappresenta lo stato dello studente. Il dizionario Sabatini-Coletti fornisce la seguente definizione di stato: Condizione, modo di essere o di trovarsi e tale definizione ben si adatta ai nostri scopi. Quindi, il passare dalla prima alla seconda classe significa cambiare di stato. Il processo che porta lo studente dalla prima classe al termine della terza (considerando eventuali bocciature intermedie) si pu rappresentare con il grafico seguente:

Figura 33 Automa a stati finiti relativo al processo frequenza scuola media inferiore I cerchi rappresentano gli stati (le classi), le frecce con numeri dispari rappresentano le bocciature mentre quelle con numeri pari le promozioni e relativo passaggio alla classe successiva. Ovviamente uno studente non pu essere contemporaneamente in due classi (non pu quindi avere due stati)5. Possiamo adesso riformulare la definizione di ASF nel seguente modo:

Un automa o macchina a stati finiti un sistema dinamico descritto da: a) Una variabile detta stato che pu assumere N valori distinti e univoci; in altre parole, la variabile non pu mai assumere due o pi valori contemporaneamente. b) Una serie di condizioni che, secondo una certa logica definita, attivano delle azioni che fanno transitare il sistema da uno stato allaltro. Diamo anche la seguente definizione: Definizione di soluzione un ASF: risolvere un automa agli stati finiti, occorre saper dire dato uno stato di partenza qual lo stato finale dellautoma. Significa anche saper dire quali sono le azioni eventuali che sono intraprese con il cambiamento di stato (ovviamente diverse dal cambiamento di stato stesso). Nel caso del nostro scolaro che frequenta le scuole medie inferiori: La variabile di stato assume valore: 1 (prima classe), 2 (seconda classe) e 3 (terza classe). Le condizioni sono: essere promosso (o la duale essere bocciato) e superare lesame finale (o non superarlo) Le azioni sono di passare da una classe allaltra o di rimanere nella stessa classe (azioni che fanno cambiare lo stato dello studente).

Ebbene si! Ci sono delle scuole di recupero che permettono di frequentare anche pi di una classe contemporaneamente; noi siamo tradizionalisti e ci manteniamo al caso standard.

Tecniche di analisi dei requisiti e modelli software.

Pagina 66 di 144

Berta Danilo - http://www.bertadanilo.name/

Una domanda sorge spontanea: poich parliamo di condizioni e di azioni, possibile descrivere un ASF in termini di tabelle decisionali ? Certo che possibile!

Riduzione di un ASF in tabella decisionale.

Consideriamo la seguente tabella decisionale:


# Colonna: A:Classe=1 B:Classe=2 Condizioni C:Classe=3 D: Promosso scrutinio E: Esame superato 1 2 3 4 T T F F F F T T F F F F T F T F d.c. d.c. d.c. d.c. 5 F F T T T 6 F F T T F 7 F F T F d.c.

Azioni

F0: vai in prima 1 F1: vai in seconda 1 1 F2: vai in terza 1 F3: vai alle superiori 1 Tabella 36 tabella decisionale per esempio #4

Le condizioni A, B e C derivano dalla variabile di stato (uguale alla classe frequentata) e sono dipendenti con la solita tabella di vincolo:
# A: S = 1 B: S=2 C: S=3 1 TRUE FALSE FALSE 2 FALSE TRUE FALSE 3 FALSE FALSE TRUE Le altre combinazioni non sono valide Tabella 37 Tabella vincolo condizioni A, B e C

Dalla quale derivano le seguenti (e solite) relazioni di vincolo: ABC = A ABC = B ABC = C

La condizione D rappresenta la promozione a fine anno (senza esame diretto da parte dello studente) mentre la condizione E lesame finale di terzo anno dello studente. Le azioni sono auto esplicative: ad esempio, lazione F0 indica il passaggio alla prima classe. Notate che abbiamo solo specificato la classe (lo stato) di arrivo e non quello di partenza; lo stato di partenza , infatti, indicato dalle condizioni A, B e C, che essendo dipendenti compaiono sempre in una delle triplette della Tabella 36. La Tabella 36 si legge nel solito modo; ad esempio, osservando la colonna #1 vediamo che nel caso in cui lo studente sia nella classe prima stato = 1 corrispondente alla tripletta (A,B,C) = (TRUE,FALSE,FALSE) e sia stato promosso allo scrutinio finale, indipendentemente dallesito
Tecniche di analisi dei requisiti e modelli software. Pagina 67 di 144

Berta Danilo - http://www.bertadanilo.name/

dellesame (che in prima non esiste), ammesso alla seconda classe (F1 = 1). Analoghe modalit di lettura per le altre colonne. Proviamo ora ad inserire la Tabella 36 in Logic Friday, usando la funzionalit di import (File Import Truth Table). La tabella va salvata su un file di testo riscritta nel seguente modo (fare riferimento allhelp in linea per i dettagli):
%Scuole medie prima versione A,B,C,D,E,,F0,F1,F2,F3 1,0,0,1,X,,0,1,0,0 1,0,0,0,X,,1,0,0,0 0,1,0,1,X,,0,0,1,0 0,1,0,0,X,,0,1,0,0 0,0,1,1,1,,0,0,0,1 0,0,1,1,0,,0,0,1,0 0,0,1,0,X,,0,0,1,0

Una volta che la tabella stata minimizzata, otteniamo:

Le azioni minimizzate sono: F0 = A B' C' D' ; F1 = A' B C' D' + A B' C' D ; F2 = A' B C' D + A' B' C D' + A' B' C E'; F3 = A' B' C D E;

Tenendo conto delle relazioni di vincolo tra le condizioni A, B e C, si ha: F0 = A D'; F1 = B D' + A D ; F2 = B D + C D' + C E'; F3 = C D E;
Pagina 68 di 144

Tecniche di analisi dei requisiti e modelli software.

Berta Danilo - http://www.bertadanilo.name/

Tenendo conto del significato delle condizioni e delle azioni, abbiamo: Equazione F0 = A D' F1 = B D' + A D F2 = B D + C D' + C E' F3 = C D E Descrizione Passi in prima se sei in prima e sei stato bocciato. Passi in seconda se sei in seconda e sei stato bocciato oppure sei in prima e sei stato promosso. Passi in terza se sei in seconda e sei stato promosso oppure sei in terza e sei stato bocciato oppure sei in terza e non hai superato l'esame finale. Passi alle superiori se sei in terza e sei stato promosso e hai superato l'esame finale.
Tabella 38 descrizione dei risultati ottenuti

Vista questultima descrizione, viene immediato pensare di interpretare le F0 F3 non tanto come azioni che fanno passare allo stato finale (la classe) 1,2,3 o 4 (corrispondente alla classe prima, seconda, terza o superiori), quanto direttamente come gli stati. In altri termini, considerare: F0 = S1 = 1 (prima classe); F1 = S2 = 2 (seconda classe); F2 = S3 = 3 (terza classe); F3 = S4 = 4 (superiori);

Ci significa avere lo stato presente sia nelle condizioni (dove viene interpretato come stato di partenza o iniziale e rappresentato dalle condizioni dipendenti A, B e C), sia nelle azioni dove non viene interpretato come azione vera e propria ma come stato di arrivo o finale). Le equazioni per F0 F3 possono allora riscriversi come: S1 = AD' S2 = BD' + AD S3 = BD + CD' + CE' S4 = CDE

Ma allora, nella parte destra delle equazioni, possiamo considerare le condizioni A, B e C come stati iniziali, e quindi: A = S1 B = S2 C = S3

In definitiva, le azioni riscritte in termini dei soli stati e delle condizioni C e D (che non sono stati) diventano: S1 = S1D' S2 = S2D' + S1D S3 = S2D + S3D' + S3E' S4 = S3DE
Pagina 69 di 144

Tecniche di analisi dei requisiti e modelli software.

Berta Danilo - http://www.bertadanilo.name/

Questultime equazioni legano gli stati di partenza (a destra) con quelli di arrivo (a sinistra) in funzione anche di altre condizioni (in questo caso C e D, ossia promozione ed esito esame finale) e rappresentano la soluzione dellASF. Facendo riferimento alla definizione data pocanzi e relativa alla soluzione dellASF, nel nostro esempio non ci sono azioni differenti dal cambiamento di stato stesso che sono svolte. Vedremo queste azioni nel prossimo esempio, un po pi complesso.

Esempio #4bis vacanza o studio punitivo?


Tanto per per capire che cosa siano queste altre azioni, supponiamo che, nel caso in cui il nostro studente sia promosso sia premiato con una vacanza estiva, nel caso in cui sia bocciato rimane a casa a studiare (ergo, non va in vacanza). La Tabella 36 modificata nella parte delle azioni, aggiungendo F4 (vai in vacanza):
# Colonna: A:Classe=1 B:Classe=2 Condizioni C:Classe=3 D: Promosso scrutinio E: Esame superato 1 2 3 4 T T F F F F T T F F F F T F T F d.c. d.c. d.c. d.c. 5 F F T T T 6 F F T T F 7 F F T F d.c.

Azioni

F0: vai in prima 1 F1: vai in seconda 1 1 F2: vai in terza 1 F3: vai alle superiori 1 F4: vai in vacanza 1 1 1 Tabella 39 tabella decisionale esempio 4-bis

Ovviamente lo studente va in vacanza solo se stato promosso (prima e seconda classe) ed stato promosso ed ha superato lesame finale quando in terza.

Lazione F4 differente dalle altre tre F0 F3; queste, infatti, fanno transitare allo stato (classe) successiva; la F4 fa qualcosa di diverso. Abbiamo visto pocanzi che le F0 F3 coincidono con lo stato finale del sistema. Da un punto di vista grafico, possiamo rappresentarlo in questo modo:

Tecniche di analisi dei requisiti e modelli software.

Pagina 70 di 144

Berta Danilo - http://www.bertadanilo.name/

Figura 34 Automa a stati finiti relativo al processo frequenza scuola media inferiore (con vacanze)

Il triangolo etichettato con Vacanza non uno stato; possiamo dire che lesito dellazione F4 (indicata in figura) e che le frecce # 7 che rappresentano lazione F4 partono dalle frecce che collegano due classi (frecce numerate pari). Possiamo sintetizzare il tutto nella seguente tabella: # Freccia 1 2,3 4,5 6 7 Azione corrispondente
F0: vai in prima (coincide con S1) F1: vai in seconda (coincide con S2) F2: vai in terza (coincide con S3) F3: vai alle superiori (coincide con S4) F4: vai in vacanza Tabella 40 tabella riassuntiva delle azioni

Aggiungendo F4 alla tabella da importare in Logic Friday, abbiamo:


%Scuole medie seconda versione A,B,C,D,E,,F0,F1,F2,F3,F4 1,0,0,1,X,,0,1,0,0,1 1,0,0,0,X,,1,0,0,0,0 0,1,0,1,X,,0,0,1,0,1 0,1,0,0,X,,0,1,0,0,0 0,0,1,1,1,,0,0,0,1,1 0,0,1,1,0,,0,0,1,0,0 0,0,1,0,X,,0,0,1,0,0

Il risultato il seguente:

Tecniche di analisi dei requisiti e modelli software.

Pagina 71 di 144

Berta Danilo - http://www.bertadanilo.name/

Figura 35 Truth Table ed equazioni minimizzate.

Le azioni minimizzate sono: F0 = A B' C' D' ; F1 = A' B C' D' + A B' C' D ; F2 = A' B C' D + A' B' C D' + A' B' C E'; F3 = A' B' C D E; F4 = A' B' C D E + A B' C' D + A' B C' D ;

Tenendo conto delle relazioni di vincolo tra le condizioni A, B e C, si ha: F0 = A D'; F1 = B D' + A D ; F2 = B D + C D' + C E'; F3 = C D E F4 = CDE + AD + BD

Riscritte in funzione degli stati, si ha: S1 = S1D' S2 = S2D' + S1D S3 = S2D + S3D' + S3E' S4 = S3DE F4 = S3DE + S1D + S2D

Ovviamente F0 F3 non variano; la F4 si legge: Vai in vacanza se sei in terza e sei stato promosso e hai superato lesame finale oppure se sei in prima e sei stato promosso oppure se sei in seconda e sei stato promosso. Ovviamente la F4 dipende dagli stati, ma non li definisce; questa la differenza sostanziale tra F4 e F0 F3.
Tecniche di analisi dei requisiti e modelli software. Pagina 72 di 144

Berta Danilo - http://www.bertadanilo.name/

Definizione formale di automa agli stati finiti in termini di tabella decisionale.


Un automa o macchina agli stati finiti un sistema dinamico definito da: Una variabile di stato che pu assumere N distinti valori in modo univocamente determinato; assume un solo valore per volta. Una serie di condizioni che causano il variare dello stato dellautoma. Una serie di azioni (differenti dalle azioni responsabili del cambiamento di stato) che sono eseguite con il cambiamento di stato6.

Tale sistema descrivibile attraverso una tabella decisionale composta da: i. N condizioni dipendenti: A, B, ,K,..,N per le quali valgono le N relazioni di vincolo:
(A=FALSE) AND (B=FALSE) AND (C=FALSE)AND (K=TRUE) AND AND (N=FALSE) = K per tutte le condizioni K comprese tra A ed N.

ii. iii. iv.

R condizioni binarie (indipendenti o no), diverse da quelle al punto (i). N azioni F0 FN che coincidono con gli N sta dellautoma Q azioni F(N+1),..FQ diverse da quelle al punto (iii)

Utilizzando il metodo di minimizzazione delle equazioni per le tabelle decisionali, possibile esprimere gli N stati finali dellautoma di cui al punto (iii) in funzione degli N stati iniziali di cui al punto (i) e delle R condizioni binarie di cui al punto (ii) ed altres possibile esprimere le Q azioni - di cui al punto (iv) anche in questo caso in funzione degli N stati iniziali di cui la punto (i) e delle R condizioni binarie di cui al punto (ii).

In sintesi: un ASF utilizzato per modellare un fenomeno dinamico (processo) nel quale una variabile che descrive il fenomeno (processo) assume maggiore rilevanza rispetto alle altre variabili. Tale variabile chiamata stato del sistema e la dinamica del processo descritta in termini di variazioni dello stato. Il processo completamente risolvibile utilizzando il formalismo della tabella condizionale, nel quale lo stato appare riformulato sia come condizioni booleane dipendenti, sia come azione. Come esercizio, il lettore potr, se vuole, provare a modellare il processo di cambio della marcia di un autoveicolo dalla prima alla quarta, considerando come condizioni che permettono lo scalare delle marce, il numero di giri del motore e come azione, laumento della velocit del veicolo, tenendo conto che non possibile scalare di pi di una marcia per volta (se si passa dalla prima alla quarta probabile che la macchina si inchiodi in mezzo alla strada).

Dire con il cambiamento di stato sembra voler dare una dimensione temporale al sistema dinamico. Quello che si vuole significare che il cambiamento di stato e le azioni occorrono entrambi (e nel senso di AND logico), indipendentemente da quale delle due si verifichi prima su scala temporale. La dinamica, per un ASF, dettata dal variare dello stato e non dalla variabile temporale (a meno che le due cose non coincidano).

Tecniche di analisi dei requisiti e modelli software.

Pagina 73 di 144

Berta Danilo - http://www.bertadanilo.name/

Capitolo 4 Reti di Petri

RETI DI PETRI

Tecniche di analisi dei requisiti e modelli software.

Pagina 74 di 144

Berta Danilo - http://www.bertadanilo.name/

Definizioni
Wikipedia alla pagina http://it.wikipedia.org/wiki/Rete_di_Petri fornisce la seguente definizione della rete di Petri: Una rete di Petri (conosciuta anche come rete posto/transizione o rete P/T) una delle varie rappresentazioni matematiche di un sistema distribuito discreto. Come un linguaggio di modellazione, esso descrive la struttura di un sistema distribuito come un grafo bipartito con delle annotazioni. Ovvero, una rete di Petri ha dei nodi posti, dei nodi transizioni e degli archi diretti che connettono posti e transizioni . Carl Adam Petri (Lipsia, 12 luglio 1926 2 luglio 2010), fu un matematico ed informatico tedesco che invent tale formalismo nello svolgimento della tesi di dottorato dal titolo Kommunikation mit
Automaten (Comunicazione con gli automi), nella quale introduce la teoria sulle reti appunto dette di Petri, grazie alle quali si compiono passi in avanti nel campo della computazione parallela e distribuita e nel definire i moderni studi dei sistemi complessi e la gestione dei workflow

(fonte:

http://it.wikipedia.org/wiki/Carl_Adam_Petri ). Il volume di James L. Peterson (University of Austin Texas) dal titolo Petri Net Theory and modelling of systems fornisce al paragrafo 2.1 del secondo capitolo, la seguente: DEFINITION 2.1: A Petri net structure C, is a four-touple, C = (P,T,I,O). P = {p1, p2, , pn} is a finite set of places, n0. T = {t1, t2, , tm} is a finite set of transitions, m 0. The set of places and the set of transitions are disjoint, P T = . I: T P is the input function, a mapping from transitions to bags of places. O: T P is the output function, a mapping from transitions to bags of places. Ricordiamo che si definisce bag (in inglese borsa, contenitore) un set (insieme) per il quale sono ammessi elementi multipli. Ad esempio: {1,2,3} un insieme, mentre {1,2,3,2,1} un bag in quanto gli elementi 1 e 2 compaiono pi di una volta; un insieme quindi un caso particolare di bag. Per meglio comprendere di cosa stiamo parlando vedremo alcuni esempi, tenendo conto che non mia intenzione sviluppare nel dettaglio la teoria delle reti di Petri (cosa per la quale esistono ottimi libri) ma solo fornire alcune indicazioni generali per permettere al lettore, che non ha mai sentito parlare di questo strumento matematico, di leggere e interpretare una rete di Petri.

Le reti di Petri possono essere rappresentate graficamente nel modo che segue:

Tecniche di analisi dei requisiti e modelli software.

Pagina 75 di 144

Berta Danilo - http://www.bertadanilo.name/

Figura 36 Rete di Petri elementare

I cerchietti {p1, p2} sono i posti (in inglese place), t1 la transizione (in inglese transition) e le frecce che collegano posti e transizioni rappresentano dei flussi relazionali chiamati archi (in inglese arc). In particolare, p1 un input per la transizione t1, mentre p2 un output. Una transizione pu avere pi input e pi output. Ad esempio, nel grafico seguente, un po pi complesso:

Figura 37 Rete di Petri un po pi complessa.

La rappresentazione della rete di Petri in Figura 37 equivalente alle seguenti equazioni:

Tecniche di analisi dei requisiti e modelli software.

Pagina 76 di 144

Berta Danilo - http://www.bertadanilo.name/

(p2,p3,p5) = t1(p1) p5 = t2(p2,p3,p5) (p2,p3) = t3(p4) p4 = t4(p2)

Consideriamo la prima equazione: (p2,p3,p5) = t1(p1): tale espressione significa che i posti (p2,p3,p5) sono degli output della transizione t1 che ha come (unico) input p1. Una stessa transizione pu avere pi di un input e pi di un output. Le equazioni di cui sopra possono anche essere riscritte esplicitando, per ogni transizione, gli input e gli output: I(t1) = p1 I(t2) = p2,p3,p5 I(t3) = p4 I(t4) = p2 O(t1) = p2,p3,p5 O(t2) = p5 O(t3) = (p2, p3) O(t4) = p4

Per capire se un posto pi di una transizione tj un input o un output sufficiente osservare la direzione della freccia da pI a tj: se entrante nella transizione un input; se uscente dalla transizione, allora un output.

Dinamicit nelle reti di Petri: i token.


Tutto quanto stato raccontato sinora sicuramente molto interessante, da un punto di vista teorico, ma dal lato pratico, a che serve ? Consideriamo il seguente semplice processo relativo a una visita medica (della durata media di 15 minuti per paziente, ma che pu variare). I pazienti si presentano allo studio medico e attendono il loro turno in sala dattesa. Il medico, non appena termina una visita e quindi rimane libero chiama un paziente nella sala visite e lo visita. Cos via sino a che non terminato lorario di visita, oppure non ci sono pi pazienti oppure ancora il medico non pi disponibile. Il grafico in Figura 38 descrive tale processo facendo uso del formalismo delle reti di Petri. I pallini neri che vediamo allinterno dei posti p1, p2 e p3 sono i token (che in inglese significa gettone, marcatore). Tali token servono per fornire una dinamicit alla rete di Petri; nel nostro esempio, rappresentano: In p1 i pazienti presenti in sala daspetto (1 token = 1 paziente). In p2 il medico libero (pronto per eseguire una nuova visita). In p3 il fatto che siamo o non siamo nellorario di visita (se c il token, siamo nellorario di visita, altrimenti non lo siamo).

Tecniche di analisi dei requisiti e modelli software.

Pagina 77 di 144

Berta Danilo - http://www.bertadanilo.name/

Figura 38 Rete di Petri relativo al processo di visita medica configurazione iniziale

Le equazioni della rete in Figura 38 riguardano le sole transizioni t1 e t2 e si scrivono: (p2,p4) = t1(p1,p2,p3) p3 = t2()

Si noti che la transizione t2 non ha input e vedremo tra un attimo che cosa significa. Per capire come i token aiutino a rendere dinamica la rete di Petri, consideriamo la transizione t1 come un consumatore/produttore di token e seguiamo a passo a passo il movimento dei token. Il medico inizia la visita al paziente; vi un paziente in meno in sala daspetto (un token in meno in p1) e il medico non pi libero (sta visitando il paziente) e il grafico allora quello di Figura 39. Al termine della visita, che dura circa quindici minuti, il paziente che appena stato visitato si reca alluscita mentre il medico nuovamente libero e pronto per visitare un altro paziente. Il paziente visitato (token) si trova quindi in p4 mentre il medico ritorna in p2 e il grafico quello rappresentato in Figura 40. Durante i quindici minuti (circa) di visita (configurazione riportata in Figura 39) la transizione t1 congelata (in inglese si dice che la rete is dead, morta) poich non sono verificate tutte le condizioni affinch la transizione di attivi (il medico non libero, anche se ci sono pazienti e siamo in orario di visita). Per passare dalla configurazione iniziale in Figura 38 a quella finale (termine visita primo paziente) in Figura 40 la transizione t1 si attivata (in inglese fired) ed ha spostato un token da p1 a p4. Ha poi spostato il token da p2 per poi rimettervelo al termine della visita e infine ha consumato il token in p3; in questultimo caso, il token appena consumato stato rimpiazzato da un altro token proveniente dalla t2 (lorologio), poich si suppone che siamo ancora in orario di visita.
Tecniche di analisi dei requisiti e modelli software. Pagina 78 di 144

Berta Danilo - http://www.bertadanilo.name/

Figura 39 Rete di Petri relativo al processo di visita medica il medico sta visitando il paziente

Figura 40 Rete di Petri relativo al processo di visita medica termine visita al primo paziente

In altri termini, la transizione t2 attiva se siamo in orario di visita (nel qual caso avremo sempre un token in p3), non attiva se siamo fuori dellorario di visita (nel qual caso una volta che il token stato consumato da t1, non pi rimpiazzato da t2) Nellimmagine che segue, sono riportati la configurazione iniziale, intermedia e finale dei token, al fine simulare la dinamica dei token.

Tecniche di analisi dei requisiti e modelli software.

Pagina 79 di 144

Berta Danilo - http://www.bertadanilo.name/

Figura 41 Rete di Petri relativo al processo di visita medica configurazione iniziale, intermedia e primo passo

Le frecce rosse del grafico intermedio in Figura 41 cercano di dare il senso del movimento dei token. La transizione t2, che non ha input, attiva o non lo in dipendenza di una condizione esterna che non riportata nella rete di Petri, e costituisce quindi il confine della descrizione della rete; quello che sta fuori di questo confine non importante (in questo caso, non interessa com contato il tempo e/o come funziona un orologio), interessa solo leffetto. Si sar notato che i significati semantici dei token in p1, p2 e p3 sono differenti: i. ii. I token in p1 e p2 rappresentano degli elementi fisici (in questo caso addirittura delle persone, i pazienti, e il medico). Il token in p1 e p2 pu essere interpretato in due modi (equivalenti): a. Un elemento fisico di tempo allinterno del quale svolta la visita (i quindici famosi minuti, pi o meno). b. Un flag (o condizione) che ON (condizione verificata), quando c il token in p3.

Abbiamo detto in precedenza che la transizione pu essere vista come un consumatore di token; in effetti, questo vale sicuramente per tutti i token in p1, p2; per quelli in p3 vale solo se rimaniamo nellinterpretazione (ii.a); se consideriamo linterpretazione (i.b) il token rimane sino a quando non termina lorario di visita (e quindi non propriamente consumato, anche se possiamo usare questo termine anche nel caso in cui la transizione consumi zero token). Tutto questo discorso per dire che linterpretazione su cosa sono e cosa non sono i token, da un punto di vista semantico e/o significato fisico, dipende esclusivamente dal problema che si sta analizzando. Vedremo pi avanti altri esempi; ora continuiamo nellanalisi del nostro modellino di visita medica. Terminata la visita al primo paziente, siamo nella configurazione riportata in Figura 40; il medico libero, e pu visitare un nuovo paziente. La cosa si ripete sino a che tutti i pazienti sono stati visitati, ottenendo le configurazioni riportate nei grafici che seguono:

Tecniche di analisi dei requisiti e modelli software.

Pagina 80 di 144

Berta Danilo - http://www.bertadanilo.name/

Figura 42 Rete di Petri relativo al processo di visita medica tutte le configurazioni relative alle visite

La configurazione (A) quella di partenza (tutti e cinque i pazienti devono essere visitati), la (F) quella finale nella quale tutti i pazienti sono stati visitati. Nel mezzo ci sono le configurazioni intermedie, nelle quali alcuni pazienti sono stati visitati e altri sono in attesa; per esempio, nella configurazione (C) tre pazienti sono in attesa mentre che due sono stati visitati e sono in uscita. Abbiamo tre token nel posto p1 e due token nel posto p4. Tra la (A) e la (B) vi la configurazione riportata in Figura 39, che rappresenta il dottore che sta visitando il primo paziente. Tra la (B) e la (C), tra la (C) e la (D), e cos via sino alla fine vi sono configurazioni analoghe a quella di Figura 39 (non riportate), nelle quali varia il numero dei token in p1 (diminuiscono) ed in p4 (aumentano). Arrivati nella configurazione (F) la rete congelata; in pratica, se non ci sono pi pazienti, anche se siamo nellorario di visita e il medico disponibile, stiamo fermi. La configurazione (F) non per lunica nella quale la rete di Petri relativa al processo di visita medica congelata; la rete congelata quando almeno una delle seguenti condizioni verificata: 1. Non ci sono pazienti (zero token in p1) 2. Il medico non disponibile (zero token in p2) 3. Siamo fuori dellorario di visita (zero token in p3)

E ovvio che quando pi di una delle condizioni 1 3 verificata, la rete a maggior ragione congelata. Possiamo riassumere il tutto nella seguente tabella:

Tecniche di analisi dei requisiti e modelli software.

Pagina 81 di 144

Berta Danilo - http://www.bertadanilo.name/

# Colonna: Pazienti >=1 Condizioni Medico disponibile In orario di visita

1 T T T

2 T F T

3 F T T

4 F F T

5 T T F

6 T F F

7 F T F

8 F F F C

Condizioni Rete (Attiva/Congelata) A C C C C C C Tabella 41 Tabella riassuntive della condizione della rete di Petri

Lunico caso in cui la rete di Petri in analisi attiva (indicata con A) quando tutte le condizioni sono a TRUE. Quando almeno una condizione FALSE la rete congelata (indicata con C). Nella figura sotto, sono rappresentate graficamente le sette configurazioni 2 8 nelle quali la rete congelata.

Figura 43 Rete di Petri relativo al processo di visita medica tutte le configurazioni congelate

Tecniche di analisi dei requisiti e modelli software.

Pagina 82 di 144

Berta Danilo - http://www.bertadanilo.name/

I numeri tra parentesi si riferiscono alidentificativo della colonna delle combinazioni riportate in Tabella 41. Il lettore avr notato che il numero di token nei grafici della Figura 42 sempre uguale ed in questo caso pari a sette. Sarebbe completamente errato pensare che in una rete di Petri il numero di token si conservi! In questo caso particolare, vero che in numero di token rimane sempre uguale, ma non vero per il caso generale, applicabile a qualsiasi rete di Petri. Ma, anche nel nostro esempio di processo di visita medica, se guardiamo ai grafici di Figura 43, vediamo che il numero di token varia; gi questo basterebbe come controprova per dire che nel caso generale non vale la legge di conservazione del numero di token. Vediamo ora un secondo esempio che getta nuova luce sulle propriet delle reti di Petri.

Esempio # 5 Cucire le stringhe!


Consideriamo la seguente semplice macchina di Petri:

Figura 44 Rete di Petri che si riferisce a una transizione che unisce due stringhe.

Nel posto p1 abbiamo un certo numero di stringhe alfanumeriche in input, ad esempio: ltpVKbzr5s, HPpvNL3epB, E2l0K2nqa8, 1GIYhArdQ4. La transizione t1 non fa altro che prendere due stringhe e le unisce; ad esempio, prendendo le prime due stringhe riportate nella riga precedente, abbiamo: t1(ltpVKbzr5s, HPpvNL3epB) = ltpVKbzr5sHPpvNL3epB. La stringa prodotta quindi spostata in p2, che quindi contiene le stringhe concatenate. Nel nostro esempio abbiamo considerato stringhe di 10 caratteri, ma potete usare stringhe di lunghezza variabile, solo numeriche, etc.. Non ha importanza ai fini del nostro esempio. Indicando le stringhe con token, ed eliminando le stringhe dalle etichette dei posti, otteniamo il grafico equivalente a Figura 44 ma pi sobrio e gestibile:
Tecniche di analisi dei requisiti e modelli software. Pagina 83 di 144

Berta Danilo - http://www.bertadanilo.name/

Figura 45 Rete di Petri che si riferisce a una transizione che unisce due stringhe.

Lequazioni della rete una sola, avendo una sola transizione, ed : p2 = t1(p1)

Facciamo notare che il primo arco, quello che unisce p1 con t1 contiene il numero 2 come etichetta. Cosa significa ? Significa che attraverso quest arco possono passare solo e soltanto 2 token per volta. Questo significa che: Se in p1 c un solo token, la transizione non scatta; la rete congelata. Se in p1 ci sono due token, la transizione scatta una volta, consuma due token in p1 e produce un token in p2 e la rete si congela. Se in p1 ci sono tre token, la transizione scatta una volta, consuma due token in p1 e produce un token in p2; rimane un token in p1 e la rete si congela. Se in p2 ci sono quattro token, la transizione scatta una prima volta, consuma due token in p1 e produce un token in p2, scatta una seconda volta, consuma altri due token in p1 e produce un altro token in p2; resta zero token in p1 e la rete si congela.

Abbiamo capito il meccanismo; un solo token non sufficiente a far scattare la transizione t1. Se abbiamo un numero pari 2N di token in p1, la transizione t1 pu scattare 2N/2 = N volte, svuotando p1 e inserendo in p2 N token. Se abbiamo un numero dispari (2N+1) di token in p1, la transizione t1 scatta sempre 2N/2 = N volte, ma al termine rimane un solo token in p1 e N token in p2. Nel grafico che segue mostriamo le varie configurazioni nei casi in cui nella configurazione iniziale ci sia un numero pari (sei) o dispari (sette) di token in p1. Quanto sopra mostra che una rete di Petri pu avere degli archi, che collegano posti e transizioni con un peso diverso da uno. Il peso rappresenta il numero esatto di token che devono necessariamente passare attraverso larco e, di conseguenza, da unindicazione di quale deve
Tecniche di analisi dei requisiti e modelli software. Pagina 84 di 144

Berta Danilo - http://www.bertadanilo.name/

essere il numero minimo di token che devono essere presenti nel posto da cui parte larco. Si pensi allarco come un tubo; se il tubo ha peso uno (non indicato) pu passare un solo token ogni volta che scatta la transizione; se il peso ad esempio due possono passare due token ogni qualvolta la transizione scatta. Questo significa che nel posto da cui esce larco devono essere rispettivamente presenti almeno uno e due token.

Figura 46 Rete di Petri che si riferisce a una transizione che unisce due stringhe caso pari (6 token in p1)

Figura 47 Rete di Petri che si riferisce a una transizione che unisce due stringhe caso dipari (7 token in p1)

In alternativa il numero sullarco pu essere visto come molteplicit del posto di input rispetto alla transizione di cui input. In questo caso diciamo che p1 ha molteplicit 2 rispetto alla transizione t1. Uno stesso posto, nel caso in cui sia input per differenti transizioni , pu avere molteplicit diversa per ciascuna transizione. Le configurazioni nelle quali la rete di Petri del cucitore di stringhe congelata sono due: la prima quella in cui in p1 vi sono zero token e la seconda quella in cui in p1 vi un token. In tutti gli altri casi, la transizione t1 scatta almeno una volta (quando in p1 vi sono tre token); e questo indipendentemente da quanti siano i token che sono presenti in p2.

Tecniche di analisi dei requisiti e modelli software.

Pagina 85 di 144

Berta Danilo - http://www.bertadanilo.name/

Nel grafico di Figura 48 abbiamo indicato le due configurazioni che congelano la rete di Petri, inserendo anche un certo numero di token nel posto p2, per evidenziare quanto detto pocanzi.

Figura 48 Rete di Petri che si riferisce a una transizione che unisce due stringhe configurazioni congelate.

Valore semantico e definizioni formali

Veniamo ora ad alcune considerazioni riguardanti la differenza tra il valore semantico di un generico oggetto e la sua definizione formale; in questo caso gli oggetti che ci interessano sono i token, i posti e le transizioni che abbiamo visto essere tutti elementi di una rete di Petri. Negli esempi di cui sopra, siamo stati in grado data una configurazione di token allinterno di una rete di Petri di dedurre le configurazioni successive poich eravamo a conoscenza di che cosa i token rappresentassero. Nel primo esempio, i token in p1 rappresentano dei pazienti in attesa di visita, quello in p2 il medico libero, quello in p3 un generico periodo temporale nel quale svolgere la visita e quello in p4 il paziente in uscita. Nel secondo esempio, i token in p1 rappresentano delle stringhe e i token in p2 rappresentano delle stringhe derivate concatenando quelle contenute in p1. Conoscendo poi il processo della visita medica e di concatenazione delle stringhe, diventa possibile determinare data una configurazione di token quella successiva. Cos facendo abbiamo utilizzato il valore semantico (= significato fisico) associato ai token e i due processi sono stati descritti utilizzando un formalismo matematico (ma prettamente grafico) chiamato rete di Petri. Il formalismo matematico diventa per pi utile quando anzich considerare il valore semantico degli elementi si forniscono delle definizioni di tali elementi e delle regole per operare su di essi. In altre parole, diamo una definizione formale di rete di Petri e degli elementi che la compongono e delle regole per operare su tali elementi. Cos facendo possiamo operare sulla rete a prescindere dal significato semantico e definire le successive configurazioni della rete a partire da una data.

Tecniche di analisi dei requisiti e modelli software.

Pagina 86 di 144

Berta Danilo - http://www.bertadanilo.name/

Poi, se abbiamo la necessit di farlo, possiamo interpretare il risultato ottenuto da un punto di vista semantico. Definizione (di rete di Petri): Una rete di Petri composta di quattro parti: Un insieme di posti P = {p1, p2, , pn} con n>=0 che possono contenere un certo numero di token (da zero a infinito). I token sono rappresentati da pallini neri nella rappresentazione grafica della rete di Petri. Un insieme di transizioni T = {t1, t2, , tk} con k >=0 Una funzione di input I Una funzione di output O

Linsieme dei posti di input e delle transizioni sono disgiunti, i.e. P T = . La funzione di input e quella di output mettono in relazione le transizioni con i posti, nel seguente modo: la funzione di input I : T P mappa la transizione tj ad una insieme di posti di input {pa, pb, ..,pr} e si indica con

I (tj); la funzione di output O: T P mappa la transizione tj ad un insieme di posti di output {ps,


pt, ..,pz}, alcuni dei quali possono anche coincidere con i posti di input. Dalla definizione data deriva il seguente: Corollario I: Un posto pj un posto di input per la transizione tj se pi I (tj). Un posto pj un posto di output per la transizione tj se pi O (tj). Un posto pi pu essere un posto di input multiplo di molteplicit K per la stessa transizione ti, e scriviamo pi I K(ti). Un posto pi pu essere un posto di output multiplo di molteplicit R per la stessa transizione ti, e scriviamo pi O R(ti). Un posto pi pu contemporaneamente essere un posto di input (semplice o multiplo, con molteplicit differenti) per differenti transizioni ed essere un posto di output (semplice o multiplo, con molteplicit differenti) per altre transizioni . Pu anche essere contemporaneamente input ed output (semplice o multiplo) per la stessa transizione. La molteplicit del posto di input viene graficamente rappresentato dal peso dellarco che connette il posto con la transizione, come visto nel paragrafo Esempio # 5 Cucire le stringhe!. Il grafico sotto mostra il posto p1 con molteplicit uno (che non viene segnalata in quanto si ritiene che sia il caso standard), mentre il posto p2 ha molteplicit quattro (numerino a ridosso dellarco che connette p2 con t1).

Tecniche di analisi dei requisiti e modelli software.

Pagina 87 di 144

Berta Danilo - http://www.bertadanilo.name/

Figura 49 Il posto di input p1 ha molteplicit 1 (non segnata) e p2 ha molteplicit 4 (segnata).

Vedremo tra un po altri esempi. Definizione (di configurazione): la configurazione di una rete di Petri con posti P = {p1, p2, , pn} definita da un vettore con n elementi = {m1,m2,,mn}, con mj (j=1,2,,n) numeri interi positivi, zero incluso. Il vettore definisce, per ciascun posto pj, il numero di token presenti nel posto pj. Il concetto di token deve essere considerato come un concetto elementare, non ulteriormente definibile. La regola che segue fondamentale nella determinazione della sequenza delle configurazioni, nota quella di partenza. Regola di attivazione di una transizione (transition firing rule): Una transizione si attiva se e solo se, in ciascun dei suoi posti di input, sono presenti un numero di token pari almeno alla molteplicit del posto di input rispetto alla transizione considerata. Una transizione che si attivata genera nei posti di output un numero di token pari alla molteplicit del posto di output. Corollario II: Se un posto di input di una transizione ha zero token, la transizione non pu attivarsi. Definizione (di transizione congelata): nel caso in cui una transizione non possa attivarsi, si dice che la transizione congelata. Corollario III: Se tutte le transizioni di una rete di Petri sono congelate, allora la rete di Petri congelata e la configurazione statica. Definizione (di configurazione stazionaria): nel caso in cui in una rete di Petri una configurazione sia tale che la successiva attivazione di tutte le transizioni abilitate porti la rete nella stessa configurazione , si dice che la configurazione stazionaria. In pratica, se abbiamo una configurazione tale per cui tutte le transizioni sono congelate, la configurazione statica (nulla si muove); nel caso in cui alcune transizioni per quella configurazione sono attive, ma la configurazione che ne consegue dopo la loro attivazione la stessa di quella di partenza, la configurazione stazionaria (c del movimento di token, ma
Tecniche di analisi dei requisiti e modelli software. Pagina 88 di 144

Berta Danilo - http://www.bertadanilo.name/

sempre lo stesso). Ancora detto in altro modo: se la configurazione statica la rete di Petri congelata e viceversa; non cos se la configurazione stazionaria, in cui alcune al limite tutte le transizioni sono abilitate. Nella tabella che segue mostriamo un po di casi che servono a chiarire le definizioni date e che in qualche modo abbiamo gi visto negli esempi precedenti. # 1 Rappresentazione Grafica Descrizione I posti di input p1 e p2 hanno molteplicit 1 (frecce di connessione senza numero) ed entrambe hanno un token. La t1 attiva e quando scatta elimina i token da p1 e p2 e inserisce un token in p3. Dopo il primo giro la t1 congelata (non ci sono pi token in p1 e p2). La configurazione finale quindi statica. Il posto di input p1 ha molteplicit quattro, ma contiene solo tre token. Anche se p2 ha il numero di token corretto (pari a uno), la transizione t1 non attiva. La configurazione quindi statica.

Il posto p1 sia di input che di output per la transizione t1. La t1 attiva e quando scatta, porta via tre token da p1 (input di molteplicit tre) e inserisce un token sempre in p1 (output di molteplicit uno). A questo punto congelata, poich in p1 rimangono solo due token (e ce ne vanno almeno tre perch t1 scatti). La configurazione finale quindi statica. Il posto p1 di input sia per t1 che per t2 e contiene due token. Considerando che p1 di molteplicit uno sia per t1 che per t2 (ovvero, che ciascuna transizione consuma un token), entrambe sono attive. Il risultato che t2 aggiunge tre token in p2 (output di molteplicit tre per t2) mentre t1 aggiunge un token in p2 (output di molteplicit uno per t1), per un totale di quattro token in p2. Il posto p1 rimane vuoto, le transizioni sono congelate e la configurazione finale statica.
Pagina 89 di 144

Tecniche di analisi dei requisiti e modelli software.

Berta Danilo - http://www.bertadanilo.name/

l posto p1 di input sia per t1 che per t2 e contiene quattro token. Considerando che p1 di molteplicit tre per t1 e molteplicit cinque per t2, pu essere attiva solo t1 (ci sono quattro token, uno in pi di quanto serve per attivare la t1) . Il risultato che t1 aggiunge un token in p2 (output di molteplicit uno per t2) mentre t2 ferma. Il posto p1 rimane un solo token, insufficiente per far scattare t1 o t2 (o entrambi) e le transizioni sono congelate. La configurazione finale quindi statica. La configurazione = (2) stazionaria; entrambi le transizioni t1 e t2 sono attive. La t1 consuma 1 token da p1 e la t2 consuma 1 token da p1 e ne crea due sempre in p1. Alla fine la configurazione la stessa e le transizioni sono sempre abilitate.
Tabella 42 Reti di Petri - esempi di configurazione

Sino ad ora non abbiamo detto nulla riguardo quando le transizioni scattano, intendendo con questo stabilire lordine con cui le transizioni si attivano. Consideriamo ad esempio il #4 della tabella precedente. Il fatto che scatti prima t1 e poi t2 o viceversa o, ancora, entrambe contemporaneamente, nulla cambia sulla configurazione finale. In casi come questi possiamo convenire di farle scattare contemporaneamente (ma, ripeto, una convenzione). Consideriamo invece lesempio seguente:

Figura 50 Reti di Petri non decidibile

Il posto p1 un input di molteplicit uno sia per t1 che per t2 ed in p1 vi un solo token. Non possono scattare entrambi e se scatta prima la t1 abbiamo la seguente configurazione:

Tecniche di analisi dei requisiti e modelli software.

Pagina 90 di 144

Berta Danilo - http://www.bertadanilo.name/

Figura 51 Reti di Petri non decidibile prima possibilit (scatta t1)

Se scatta prima la t2, la configurazione diversa:

Figura 52 Reti di Petri non decidibile seconda possibilit (scatta t2)

In questi casi, non vi possibilit di decidere tra le due configurazioni finali e occorre veramente rifarsi al valore semantico dei token o decidere dufficio quali tra le due transizioni fare scattare e quindi quale tra le due configurazioni finali considerare.
Tenendo conto di tutto quanto detto sino ad ora, definiamo esattamente quello che il problema fondamentale da risolvere per una generica rete di Petri. Data una rete di Petri con posti P = {p1, p2, , pn} con n>=0, transizioni T = {t1, t2, , tk} con k>=0 ed una configurazione 0 = {m1,m2,,mn}, con mj (j=1,2,,n) numeri interi positivi, zero incluso, trovare

tutte le successive configurazioni r = {m1,r,m2,r,,mn,r} per r=1,2, che si presentano al termine dellattivazione di tutte transizioni stazionaria o statica, se esistono. T
(7)

, fermandosi qualora si presenti una configurazione

Si deve intendere che, ogni volta, tutte le transizioni sono attivate; una transizione congelata pu considerarsi attivata anche se non produce nessuna modifica nella configurazione. Quindi, al termine del primo giro, tutte le transizioni sono state attivate una volta, al termine del secondo giro tutte le transizioni sono state attivate due volte e cos via sono a non raggiungere una configurazione (se esiste) in cui tutte le transizioni sono congelate, la rete congelata e la configurazione statica. Oppure si arriva ad una o pi configurazioni che si ripetono periodicamente allinfinito e quindi stazionarie (e in questo caso sufficiente fermarsi quando si siano definite le/la configurazioni periodiche).

Tecniche di analisi dei requisiti e modelli software.

Pagina 91 di 144

Berta Danilo - http://www.bertadanilo.name/

In termini pi formali, possiamo scrivere: r = T (r-1); la configurazione r si ottiene a partire dalla configurazione r-1 applicando ad essa linsieme delle transizioni T. E ovvio che le transizioni che, nella configurazione r-1 sono congelate, non vengono attivate8 (si seguono le regole di attivazione di una transizione).

Descrizione operativa di una rete di Petri.


Le definizioni di cui al paragrafo precedente, pur essendo rigorosamente corrette, sono poco utili per la definizione di un metodo operativo per il calcolo delle configurazioni di una rete di Petri, data una configurazione iniziale. Forniamo ora una definizione operativa utile allo scopo. Una rete di Petri definita da una matrice R detta matrice della rete e da un vettore di configurazione . La matrice la seguente: p1 t1,1 t2,1 t3,1 tm,1 p2 t1,2 t2,2 t3,3 tm,2 p3 t1,3 t2,3 t3,3 tm,3 pn t1,n t2,n t3,n tm,n

t1 t2 t3 tm

Tabella 43 Tabella della Rete di Petri

Il vettore di configurazione il seguente: = {m1,m2,,mn}, con mj (j=1,2,,n) numeri interi positivi, zero incluso Le colonne della tabella R rappresentano i posti della rete di Petri, mentre le righe rappresentano le transizioni. Il coefficiente tij allincrocio della riga e della colonna rappresenta la molteplicit del posto pi rispetto alla transizione tj. Se il valore ti,j negativo, il posto pj di input rispetto alla transizione ti. Se il valore ti,j positivo, il posto pj di output rispetto alla transizione ti; nel caso il valore sia zero o non sia indicato, vuol dire che posto pj e transizione ti non sono tra di loro connessi. Il significato del vettore di configurazione ormai noto: lelemento mj del vettore rappresenta il numero di token presenti nel posto pj della rete di Petri. Ad esempio, nel caso della rete riportata nella Figura 53, la tabella R e il vettore di configurazione il seguente: p1 t1 t2 -3 p2 p3 p4
+1

p5 +5

-2 +1 -1 -4 = {5,6,1,0,0},

Tabella 44 Matrice R e configurazione per la rete di Petri in Figura 53

Si pu dire che lattivazione non produce cambiamenti nella configurazione finale.

Tecniche di analisi dei requisiti e modelli software.

Pagina 92 di 144

Berta Danilo - http://www.bertadanilo.name/

Figura 53 Reti di Petri da analizzare.

Ne caso in cui una stessa posizione p sia input e output per una stessa transizione t, sufficiente segnare nella matrice entrambi i valori, come coppia in parentesi. Ad esempio per la rete nella riga #6 della Tabella 42 la matrice ed il vettore di configurazione il seguente: p1 t1 t2 -1 (-1,2) = {2}

Tabella 45 Matrice R e configurazione per la rete di Petri #6 della Tabella 42.

A questo punto, definita la modalit operativa di rappresentazione di una rete di Petri, che quindi definita da una matrice ed un vettore, possiamo affrontare il problema del calcolo delle configurazioni a partire da una configurazione data. Prima per analizzeremo due problemini puramente matematici, che starebbero benissimo tra i quiz della Settimana Enigmistica da risolvere sotto lombrellone, ma che sono strettamente correlati con la soluzione del problema fondamentale per una rete di Petri.

Tecniche di analisi dei requisiti e modelli software.

Pagina 93 di 144

Berta Danilo - http://www.bertadanilo.name/

Combinazioni parziali distinte di N numeri interi.


Consideriamo K numeri interi {n1,n2,..., nk} e chiediamoci come fare per creare le combinazioni di tutti i K numeri presi: uno a uno, due a due, tre a tre, , kappa a kappa. In tali combinazioni lo stesso numero non pu apparire due volte e lordine della combinazione non importante, ma occorre considerarlo una volta sola; ad esempio la coppia (n1,n2) coincide con (n2,n1) e quindi basta considerarne una sola. Chiameremo tali combinazioni come combinazioni parziali distinte. Ad esempio, consideriamo i quattro numeri A = {1,2,3,4}. Le combinazioni dei numeri A presi uno a uno coincidono con i numeri stessi. Chiamiamo C1 = {1,2,3,4}. Le combinazioni dei numeri A presi due a due sono le seguenti coppie: C2 = {(1,2), (1,3), (1,4), (2,3), (2,4), (3,4)}. Le combinazioni dei numeri A presi tre a tre sono le seguenti terzine: C3 = {(1,2,3), (1,2,4), (2,3,4), (3,4,1)} Le combinazioni dei numeri A presi quattro a quattro la seguente e unica quaterna: C4 = {(1,2,3,4)}

Si nota che le combinazioni di K numeri presi uno a uno coincidono con i numeri stessi, mentre le combinazioni dei numeri presi K a K sempre una sola e consiste nella k-pla composta da tutti i numeri. Per trovare la regola generale, consideriamo la seguente espressione: (a1n1,a2n2,...,aknk) dove ai sono dei numeri che moltiplicano ni ma che possono solo valere 0 od 1. Allora, tutte le possibili combinazioni si trovano facendo variare ai su tutte le possibili combinazioni (i=1,2,,k) con la regola che se ai=0, lelemento non si scrive. In pratica, lespressione: (11,02,13,04) coincide con la coppia (1,3). Se ne deduce anche che tutte le combinazioni parziali distinte sono 2k. Per praticit possiamo considerare la matrice delle combinazioni, un po come facevamo per le tabelle decisionali. Ad esempio, nel caso dellesempio dei numeri A, lespressione da considerare la seguente: (a11,a22, a33,a44) e la matrice con tutte le combinazioni dei ai (i=1,2,3,4) la seguente: # 1 2 3 4 Num. 1 2 1 3 1 1 1 4 5 6 1 1 7 1 1 1 8 1 9 1 1 10 1 1 1 1 11 12 1 1 1 13 1 1 1 C3 14 1 1 1 15 1 1 1 16 1 1 1 1 C4

C1 C2 Tabella 46 Tabella delle combinazioni dei coefficienti ai.

Ciascun colore indica le combinazioni di elementi presi a numero fisso: C1: elementi presi uno ad uno (giallo) C2: elementi presi due a due (verde) C3: elementi presi tre a tre (azzurro) C4: elementi presi quattro a quattro (bianco)

Tecniche di analisi dei requisiti e modelli software.

Pagina 94 di 144

Berta Danilo - http://www.bertadanilo.name/ Notiamo che la colonna 1 coincide con nessuna combinazione che nel nostro caso non ci interessa. Quindi possiamo in generale dire che il numero di combinazioni parziali distinte che ci interessano di k numeri 2k-1. Scorrendo la colonna si trova la combinazione seguendo la regola prima accennata. Se nella casella compare il numero 1, consideriamo il numero nella prima colonna a sinistra, altrimenti non lo consideriamo. Ad esempio, la colonna 6 diventa la coppia (1,2), mentre la colonna 13 diventa la tripletta (1,2,4). Si faccia attenzione a com stata costruita la tabella delle combinazioni: Le combinazioni C1 hanno tutti 1 sulla diagonale. Le combinazioni C2 si ottengono fissando il primo 1 sulla prima riga e il secondo 1 a scalare di un posto sulla colonna sino ad arrivare allultima riga. Al che si ripete loperazione fissando il primo uno sulla seconda riga e cos via. Le combinazioni C3 si ottengono fissando la coppia di 1 sulle prime due righe e procedendo come per C2. Nella colonna # 15 , non ci sono pi abbastanza righe per scrivere tutti e tre i numeri 1, e allora si ricicla alla prima riga (e poi ci si ferma). Le combinazioni C4 lunica ad avere tutti 1 su tutte le righe e ve ne una sola.

Utilizzando la procedura descritta possibile, dati K numeri, creare tutte le combinazioni parziali distinte.

Vasi, tubi e palline...


Il nostro secondo giochetto il seguente. Supponiamo di avere unanfora nella quale sono contenute un certo numero di palline. Lanfora, nella parte inferiore, collegata a un certo numero di tubi con portate differenti. Per portata sintende il numero di palline che possono passare alla volta nel tubo; in particolare, se un tubo ha portata = 4 si deve intendere che solo e soltanto quattro palline alla volta possono passare; non ne possono passare di pi (cosa che intuitiva) ma non ne possono passare neanche di meno (cosa che contro-intuitiva).

Figura 54 Anfora con palline e tubi condizione iniziale. Tecniche di analisi dei requisiti e modelli software. Pagina 95 di 144

Berta Danilo - http://www.bertadanilo.name/ Nel nostro disegno di Figura 54, lanfora contiene 9 palline e ci sono tre tubi con portate rispettivamente di 2, 1 e 4 palline. Il sistema ha un congegno, azionato da un bottone, che ogni volta che premuto fa passare tante palline quante ne possono portare i tubi, in relazione anche al numero di palline presenti nel contenitore. Vediamo subito un esempio, basandoci sullanfora di Figura 54. Ad un primo azionamento del congegno, possono passare 7 palline, di cui 2 nel tubo di portata pari a 2, 1 nel tubo di portata pari a 1 e quattro nel tubo di portata pari a 4. Rimangono nellanfora 3 palline, come visualizzato in Figura 55.

Figura 55 Anfora con palline e tubi dopo il primo azionamento. Al secondo azionamento, abbiamo due possibilit: 1. Le due palline passano entrambi nel tubo con portata 2. Rimangono nellanfora zero palline 2. Una sola pallina passa nel tubo con portata uno. Rimane una pallina. Se occorre (1), non c possibilit di proseguire, poich tutte le palline sono terminate. Se accade (2), si potr fare scattare ancora una volta il meccanismo per fare cadere la pallina rimanente dal tubo di portata 1, dopodich si ferma tutto. La domanda generale, adesso che si capito il meccanismo del gioco, la seguente: data unanfora con un certo numero di palline e di tubi di varie portate, quante sono le possibili combinazioni di palline che possono cadere in un azionamento, saturando il maggior numero di tubi possibile? Abbiamo visto nellesempio che, se il numero delle palline nellanfora maggiore o uguale alla somma delle portate dei tubi, in un azionamento cadono un numero di palline pari alla somma delle portate dei tubi (primo azionamento del nostro esempio). Se il numero delle palline nellanfora strettamente minore della somma delle portate dei tubi, occorre considerare non solo le singole portate dei singoli tubi, ma anche tutte le possibili combinazioni delle portate dei tubi presi a due a due, a tre a tre, etc. In questo caso le combinazioni sono le somme delle portate e, in definitiva, ci ritroviamo a che fare con le combinazioni distinte di K numeri, dove i numeri in questo caso - rappresentano le portate dei tubi.

Tecniche di analisi dei requisiti e modelli software.

Pagina 96 di 144

Berta Danilo - http://www.bertadanilo.name/ Se la differenza tra il numero di palline nellanfora e queste portate combinate un numero di palline tale da non poter ulteriormente fluire attraverso i tubi rimanenti, allora abbiamo trovato la combinazione voluta. Meglio, come al solito, chiarire le cose con un esempio. Consideriamo la nostra solita anfora con sei palline. Sei minore della somma della portata dei tubi, che pari a sette.

Figura 56 Anfora con sei palline. Le combinazioni distinte di {1,2,4} sono : {1,2,4,(1,2),(1,4),(2,4),(1,2,4)}. Consideriamo la seguente tabella: Tubi utilizzati 1 2 4 (1,2) (1,4) (2,4) (1,2,4) Palline rimaste 6-1=5 6-2=4 6-4=2 6-(1+2)=3 6-(1+4)=1 6-(2+4)=0 6-(1+2+4)=-1 1 2 4 X V V V V X X X V X V X V X Tabella 47 Tabella delle combinazioni

X X

La tabella va letta come segue. Consideriamo la colonna in cui Tubi utilizzati = 1. Se utilizziamo solo un tubo, ci rimangono 5 palline. Ma le cinque palline possono ancora essere in parte assorbite dal tubo da 4 oppure in parte assorbite dal tubo da 2. Mettiamo una X sulla riga del tubo 1 (per dire che il tubo occupato) ed una V vicino al tubo da 2 e al tubo da 4 (per dire che almeno uno dei due potrebbe essere utilizzato). Quindi la combinazione con il solo tubo da 1 non massimizza la saturazione dei tubi. Per la colonna in cui Tubi utilizzati = (1,4), utilizziamo sia il tubo con portata 1 che quello con portata 4 e portiamo via in totale 5 palline. La pallina rimanente non pu scorrere nel tubo rimasto libero (che per potersi attivare devono essere presenti almeno due palline). Quindi, la combinazione satura il maggior numero possibile di tubi. Lo stesso dicasi con la combinazione (2,4). La combinazione (1,2,4) da escludere perch per essere attivata, ha bisogno di almeno 7 palline. Ma abbiamo gi visto che se il numero delle palline nellanfora maggiore o uguale alla somma delle portate, tutti i tubi sono saturati ed in un azionamento vengono portate via un numero di palline uguali alla somma delle portate dei tubi. Tecniche di analisi dei requisiti e modelli software. Pagina 97 di 144

Berta Danilo - http://www.bertadanilo.name/ Quindi, a livello pratico, le colonne della Tabella 47 nelle quali compaiono solo le X sono le combinazioni che saturano il maggior numero di tubi e sono la soluzione al problema generale che ci eravamo posti. La regola pu essere espressa cos:

1 - Se il numero di palline nellanfora maggiore o uguale alla somma della portata dei tubi, tutti i tubi sono saturati ed il numero di palline nellanfora dopo una attivazione pari alla differenza tra il numero di palline presenti inizialmente nellanfora e la somma della portata dei tubi. 2 - Se il numero di palline nellanfora strettamente minore della somma della portata dei tubi, date tutte le possibili combinazioni distinte delle portate dei tubi, le combinazioni per quali il numero di palline rimaste nellanfora strettamente minore del valore della portata di tutte le altre combinazioni sono quelle che saturano il maggior numero di tubi possibile. Alle regole sopra riportate, ci riferiremo nel seguito con il nome di regole di saturazione. Nel caso particolare in cui unanfora con P palline abbia un solo tubo di una certa portata Q, si hanno due casi: 1. Se PQ allora passano Q palline e rimangono P-Q palline nellanfora. 2. Se P<Q allora nessuna pallina passa e rimangono P palline nellanfora.

Figura 57 Anfora con un solo tubo.

Tecniche di analisi dei requisiti e modelli software.

Pagina 98 di 144

Berta Danilo - http://www.bertadanilo.name/

Algoritmo di soluzione del problema fondamentale per una rete di Petri


Consideriamo la seguente rete di Petri:

p1 t1 t2 t3 -2

p2 -1

p3

p4
+1 +4

p5

+1 -2 -1 -1 0 = {3,2,5,0,0}

+1

Tabella 48 Rete di Petri per lesempio #1 Le posizioni p1, p2, p3, p4 e p5 corrispondono alle nostre anfore, nelle quali le palline sono sostituite da token. I numeri negativi ti,j allinterno della matrice, in corrispondenza dellintersezione tra la riga della transizione e il posto corrispondono alla portata dei tubi collegati sul fondo dellanfora. Il valore 0,i

corrisponde al numero di token presenti in pi, ossia al numero di palline presenti nellanfora. In pratica, la rappresentazione anfora equivalente della nostra matrice R la seguente:

Figura 58 Rappresentazione dei posti in termini di anfore equivalenti. Tecniche di analisi dei requisiti e modelli software. Pagina 99 di 144

Berta Danilo - http://www.bertadanilo.name/ La rappresentazione anfora equivalente non tiene conto dei valori positivi di output, ma nemmeno ci interessa che lo faccia. Descriviamo passo per passo lalgoritmo di calcolo della configurazione. Passo # 1 Aggiunta delle combinazioni distinte a ti,j

Consideriamo la seguente tabella:

p1 t1 t2 t3 t1+ t2 t1+ t3 t2+ t3 t1+ t2 + t3 0 -2

p2 -1 -1 -2

p3 +1 -2 -1

p4
+1 +4

p5

+1

-3

0 Tabella 49 Tabella di calcolo configurazione passo # 1a

Abbiamo aggiunto alla colonna delle transizioni (la prima a sinistra) tutte le combinazioni distinte di ti,j (i=1,2,3 e j=1,2,3,4,5) e abbiamo calcolato la somma ove pertinente farlo. Per p1, avendo un solo valore negativo (un tubo), non ha senso calcolare le combinazioni t1+ t2, t1+ t3, , t1+ t2+t3. Per p2, che ha due

valori negativi (due tubi) in corrispondenza delle transizioni t1 e t3 ha senso calcolare solo t1+ t3 (in giallo); non ha senso calcolare t1+ t2+ t3 perch non c nessun numero negativo allincrocio tra t2 e p2 (in altri termini, p2 non un input di t2 ovvero il tubo t2 non c). Stesso ragionamento per p3. Per p4 e p5 non abbiamo valori negativi, quindi non c nulla da calcolare. A ben vedere potevamo anche non scrivere le righe corrispondenti a t1+ t2 e a t1+ t2+ t3, poich non abbiamo dei valori. Eliminiamo tali righe, ottenendo la tabella semplificata che segue. p1 t1 t2 t3 t1+ t3 t2+ t3 0 -2 p2 -1 -1 -2 p3 +1 -2 -1 -3 3
0 2 5 Tabella 50 Tabella di calcolo configurazione passo # 1b

p4
+1 +4

p5

+1

Passo # 2 Riduzione dei valori nelle colonne con pi valori negativi

Tecniche di analisi dei requisiti e modelli software.

Pagina 100 di 144

Berta Danilo - http://www.bertadanilo.name/ Consideriamo per ora solo le colonne con pi di un valore negativo (con almeno due, o pi valori negativi) ed applichiamo le regole di saturazione descritte nel paragrafo Vasi, tubi e palline... Visto che le uniche due colonne con pi di un valore sono quelle corrispondenti alle posizioni p2 e p3, abbiamo: Posizione p2: Configurazione iniziale 0,2 = 2 Transizioni Configurazione finale

t1(-1)
2-1=1 X V

t3(-1)
2-1=1 X V

t1+ t3(-2)
2-2=0 X X

t1(-1) t3(-1)

In p2 vi sono 2 token; la transizione t1 ne porta via uno e la t2 ne porta via un altro. Siano nel caso in cui 0,2

= t1,2 + t3,2 e, dalla tabella sopra, si vede che lunica colonna con sole X corrispondente a t1+ t3.
Posizione p3: Configurazione iniziale 0,3 = 5 Transizioni Configurazione finale

t2(-2)
5-2=3 X V

t3(-1)
5-1=4 V X

t2+ t3(-3)
5-3=2 X X

t2(-2) t3(-1)

In p3 vi sono 5 token; la transizione t2 ne porta via due e la t3 ne porta via un altro. Siano nel caso in cui

0,3 t2,3 + t3,3 e, dalla tabella sopra, si vede che lunica colonna con sole X corrispondente a t2+t3.
In entrambi i casi abbiamo trovato una sola combinazione possibile: (t1+t3) per p2 e (t2+t3) per p3. Tale combinazione lunica di cui dobbiamo tenere conto, e possiamo riscrivere la Tabella 50 come segue:

p1 t1 t2 t3 t1+ t3 t2+ t3 0 -2

p2 -1 -1 -2

p3 +1 -2 -1 -3

p4
+1 +4

p5

+1

0 Tabella 51 Tabella di calcolo configurazione passo # 2

Abbiamo segnato in colore verde i solo valori che devono essere considerati, nei passi successivi, nelle colonne p2 e p3. Passo # 3 Calcolo della configurazione finale.

Tecniche di analisi dei requisiti e modelli software.

Pagina 101 di 144

Berta Danilo - http://www.bertadanilo.name/ Nella Tabella 51 abbiamo, in ogni colonna, un solo valore negativo (consideriamo solo i valori nelle celle verdi, per le colonne con pi di un valore, ossia p2 e p3). Possiamo a questo sommare algebricamente i valori in colonna, quelli nelle righe delle transizioni con quelli nella riga della configurazione 0 ed

ottenere la nuova configurazione 1 = (1,0,3,5,1). p1 t1 t2 t3 t1+ t3 t2+ t3 0 1 -2 p2 -1 -1 -2 p3 +1 -2 -1 -3 3 3-2=1


0 0+1+4=5 Tabella 52 Tabella di calcolo configurazione passo # 3

p4
+1 +4

p5

+1

2 2-2=0

5 5-3+1=3

0 0+1=1

Notiamo che tutti i valori ottenuti sono positivi (o al pi nulli) e sono quindi accettabili. Non sarebbe infatti accettabile avere una configurazione con un numero negativo di token. Vedremo nei successivi esempi come bisogna procedere nel caso in cui si ottengano dei valori negativi.

Calcolo delle successive configurazioni.

Configurazione 2

Consideriamo ora la stessa rete di Petri nella configurazione 1 = (1,0,3,5,1) e calcoliamo la successiva

configurazione 2. La matrice di configurazione la seguente:

p1 t1 t2 t3 t1+ t3 t2+ t3 1 -2

p2 -1 -1 -2

p3 +1 -2 -1 -3

p4
+1 +4

p5

+1

5 Tabella 53 Tabella di calcolo configurazione 2. passo # 1

Come al solito, le uniche due colonne con pi di un valore sono quelle corrispondenti alle posizioni p2 e p3, abbiamo: Posizione p2: Configurazione iniziale 1,2 = 0 Tecniche di analisi dei requisiti e modelli software. Pagina 102 di 144

Berta Danilo - http://www.bertadanilo.name/ Transizioni Configurazione finale

t1(-1)
0-1=-1 / /

t3(-1)
0-1=-1 / /

t1+ t3(-2)
0-2=-2 / /

t1(-1) t3(-1)

In p2 vi sono 0 token; la transizione t1 e la t2 non ne possono portare via nessuno e la differenza un

valore negativo.
Posizione p3: Configurazione iniziale 1,3 = 3 Transizioni Configurazione finale

t2(-2)
3-2=1 X V

t3(-1)
3-1=2 V X

t2+ t3(-3)
3-3=0 X X

t2(-2) t3(-1)

In p3 vi sono 3 token; la transizione t2 ne porta via due e la t3 ne porta via un altro. Siano nel caso in cui

0,3= t2,3 + t3,3 e, dalla tabella sopra, si vede che lunica colonna con sole X quella corrispondente a t2+t3. Per p2 non esistono quindi combinazioni valide e visto che le transizioni t1 e t3 non possono lavorare, vuol dire che sono congelate; contrassegniamo la casella relativa nella tabella con colore rosso. La matrice in Tabella 53 diventa: p1 t1 t2 t3 t1+ t3 t2+ t3 1 2 -2 p2 -1 -1 -2 p3 +1 -2 -1 -3 1 1-2=-1
5 5+1+4=10 Tabella 54 Tabella di calcolo configurazione 2. passo # 2a

p4
+1 +4

p5

+1

0 0

3 3-3+1=0

1 1+1=2

Il colore rosso in una cella vuol dire che le non sono soddisfatte le condizioni affinch la corrispondente transizione possa scattare. Se la transizione non pu scattare, vuol anche dire che non pu produrre output ed il rosso della singola cella va quindi estesa a tutta la riga corrispondente. In pratica, la Tabella 54 si deve riscrivere come segue:

p1 t1 t2 -2

p2 -1

p3 +1 -2

p4
+1

p5

Tecniche di analisi dei requisiti e modelli software.

Pagina 103 di 144

Berta Danilo - http://www.bertadanilo.name/

t3 t1+ t3 t2+ t3 1 2 1 1

-1 -2

-1 -3

+4

+1

5 5+1+4=10 Tabella 55 Tabella di calcolo configurazione 2. passo # 2b

0 0

3 3-3+1=0

1 1+1=2

Ora, se la t1 e t3 sono congelate, non hanno senso le combinazioni in cui compaiono le transizioni t1 e t3. Quindi , le combinazioni t1+t3 e t2+t3 non hanno senso e le possiamo mettere in rosso. Quindi, la cella verde diventa rossa e nella colonna del p3 rimane solo pi il valore -2 della transizione t2. La tabella diventa, in definitiva:

p1 t1 t2 t3 t1+ t3 t2+ t3 1 2 -2

p2 -1 -1 -2

p3 +1 -2 -1 -3

p4
+1 +4

p5

+1

5 5+1=6 Tabella 56 Tabella di calcolo configurazione 2. passo # 2c

1 1

0 0

3 3-2=1

1 1

Ci siamo limitati a colorare di rosso la riga solo dove esistono valori, per non appesantire troppo. In pratica, la transizione t1 e t3 sono congelate. Lunica ancora viva la transizione t2. Facciamo a questo punto la somma algebrica dei valori in colonna, quelli nelle righe delle transizioni con quelli nella riga della configurazione 1, senza considerare i valori nelle celle rosse. Si ottiene la nuova

configurazione 2 = (1,0,1,6,1).

Tecniche di analisi dei requisiti e modelli software.

Pagina 104 di 144

Berta Danilo - http://www.bertadanilo.name/ Configurazione 3

Consideriamo ora la stessa rete di Petri nella configurazione 2 = (1,0,1,6,1) e calcoliamo la successiva

configurazione 3. La matrice di configurazione la seguente: p1 t1 t2 t3 t1+ t3 t2+ t3 2 -2 p2 -1 -1 -2 p3 +1 -2 -1 -3


6 Tabella 57 Tabella di calcolo configurazione 3. passo # 1

p4
+1 +4

p5

+1

Le uniche due colonne con pi di un valore sono quelle corrispondenti alle posizioni p2 e p3, abbiamo: Posizione p2: Configurazione iniziale 2,2 = 0 Transizioni Configurazione finale

t1(-1)
0-1=-1 / /

t3(-1)
0-1=-1 / /

t1+ t3(-2)
0-2=-2 / /

t1(-1) t3(-1)

In p2 vi sono 0 token; la transizione t1 e la t2 non ne possono portare via nessuno e la differenza un

valore negativo. Esattamente come visto prima


Posizione p3: Configurazione iniziale 2,3 = 1 Transizioni Configurazione finale

t2(-2)
1-2=-1 / /

t3(-1)
1-1=0

t2+ t3(-3)
1-3=-2 / /

t2(-2) t3(-1)

In p3 vi un token; la transizione t2 ne pu porta via come minimo due e la t3 ne porta via solo uno. Dalla

tabella sopra, si vede che lunica colonna con sole X quella corrispondente a t3. Le altre hanno
valori negativi e quindi corrispondono a celle rosse.

La matrice diventa:

Tecniche di analisi dei requisiti e modelli software.

Pagina 105 di 144

Berta Danilo - http://www.bertadanilo.name/

p1 t1 t2 t3 t1+ t3 t2+ t3 2 3 -2

p2 -1 -1 -2

p3 +1 -2 -1 -3

p4
+1 +4

p5

+1

6 6 Tabella 58 Tabella di calcolo configurazione 3. passo # 2

1 1

0 0

1 1

1 1

Notiamo che, anche se nella riduzione della colonna p3 abbiamo visto che la transizione t3 poteva essere attiva; essendo pero t3 congelata dallequivalente calcolo per p2, in definitiva congelata. Avendo tutta la tabella rossa la configurazione 3 = 2, ossia la 2 una configurazione statica e terminiamo il

calcolo delle successive configurazioni della rete di Petri.

Un esempio pi complesso Consideriamo la seguente rete di Petri in forma matriciale:

p1 t1 t2 t3 t1+ t2 t1+ t3 t2+ t3 t1+t2+ t3 0 -2 -3 -1 -5 -3 -4 -6 1

p2 +1 +1 +2

Tabella 59 Tabella di calcolo configurazione un altro esempio passo #1 Il posto p2 di input per tutte e tre le transizione e p2 un output per tutte e tre le transizioni con molteplicit diverse. Applicando la regola di saturazione a p1, che ha pi valori negativi, otteniamo: Transizioni t1(-2) t2(-3) t3(-1) t1+ t2(-5) t1+ t3(-3) t2+ t3(-4) t1+t2+ t3(-6) Configurazione finale 1-2=-1 1-3=-2 1-1=0 1-5=-4 1-3=-2 1-4=-3 1-6=-5

t1(-2) t2(-3) t3(-1)

/ / /

/ / /

/ / /

/ / /

/ / /

/ / /

Tecniche di analisi dei requisiti e modelli software.

Pagina 106 di 144

Berta Danilo - http://www.bertadanilo.name/ Come al solito, i valori negativi della configurazione finale sono esclusi. Lunica transizione attiva la t3 dove abbiamo solamente X (una in questo caso). Le transizioni t1 e t2 sono disabilitate e la Tabella 59 diventa:

p1 t1 t2 t3 t1+ t2 t1+ t3 t2+ t3 t1+t2+ t3 0 -2 -3 -1 -5 -3 -4 -6 1

p2 +1 +1 +2

Tabella 60 Tabella di calcolo configurazione un altro esempio passo #2

A questo punto, la somma algebrica sulle colonne fornisce come al solito la configurazione finale:

p1 t1 t2 t3 t1+ t2 t1+ t3 t2+ t3 t1+t2+ t3 0 1 -2 -3 -1 -5 -3 -4 -6 1 1-1=

p2 +1 +1 +2

0 0+2=2

Tabella 61 Tabella di calcolo configurazione un altro esempio configurazione finale La configurazione finale 1=(0,2), che anche come facile verificare visto lo zero al primo

elemento della configurazione, una configurazione statica.

Tecniche di analisi dei requisiti e modelli software.

Pagina 107 di 144

Berta Danilo - http://www.bertadanilo.name/ Altro esempio: numero token maggiore della somma delle molteplicit del posto. Consideriamo la stessa rete di Petri in forma matriciale, ma con diversa configurazione iniziale:

p1 t1 t2 t3 t1+ t2 t1+ t3 t2+ t3 t1+t2+ t3 0 -2 -3 -1 -5 -3 -4 -6 10

p2 +1 +1 +2

Tabella 62 Tabella di calcolo configurazione token>somma molteplicit passo #1 Il posto p2 di input per tutte e tre le transizione e p2 un output per tutte e tre le transizioni con molteplicit diverse. Applicando la regola di saturazione a p1, che ha pi valori negativi, otteniamo: Transizioni t1(-2) t2(-3) t3(-1) t1+ t2(-5) t1+ t3(-3) t2+ t3(-4) t1+t2+ t3(-6) Configurazione finale 10-2=8 10-3=7 10-1=9 10-5=5 10-3=7 10-4=6 10-6=4

t1(-2) t2(-3) t3(-1)

X V V

V X V

V V X

X X V

X V X

V X X

X X X

Dalla tabella si pu vedere come lunica colonna in cui compaiono solo X sia quella relativa a t1+t2+ t3;

tutte le transizioni sono quindi coinvolte e il calcolo della successiva configurazione diventa a questo punto banale: p1 t1 t2 t3 t1+ t2 t1+ t3 t2+ t3 t1+t2+ t3 0 1 -2 -3 -1 -5 -3 -4 -6 10 10-6=4 p2 +1 +1 +2

0 0+1+1+2=4

Tabella 63 Tabella di calcolo configurazione token>somma molteplicit passo #2 La nuova configurazione quindi 1 = (4,4). Ritroviamo esattamente quello che potevamo immediatamente dedurre sapendo che quando il numero di token maggiore o uguale alla somma delle molteplicit del posto, il numero di token rimanenti pari alla differenza tra i token presenti e la somma delle portate.

Tecniche di analisi dei requisiti e modelli software.

Pagina 108 di 144

Berta Danilo - http://www.bertadanilo.name/ Ultimo esempio: pi configurazioni finali Consideriamo la stessa rete di Petri in forma matriciale, ma con diversa configurazione iniziale 0 =(3,0):

p1 t1 t2 t3 t1+ t2 t1+ t3 t2+ t3 t1+t2+ t3 0 -2 -3 -1 -5 -3 -4 -6 3

p2 +1 +1 +2

Tabella 64 Tabella di calcolo configurazione pi configurazioni finali passo #1 Applicando la regola di saturazione a p1, che ha pi valori negativi, otteniamo: Transizioni t1(-2) t2(-3) t3(-1) t1+ t2(-5) t1+ t3(-3) t2+ t3(-4) t1+t2+ t3(-6) Configurazione finale 3-2=1 3-3=0 3-1=2 3-5=-2 3-3=0 3-4=-1 3-6=-3

t1(-2) t2(-3) t3(-1)

X X V

V X

/ / /

X X

/ / /

/ / /

In questo caso abbiamo due colonne in cui compaiono solo X: quella relativa alla transizione t2 e quella relativa alla transizione t1+t3. In questo caso la rete indecidibile, poich non si pu dire a priori dove i token passino, se da t2 oppure da t1+t3. In questo caso particolare, il numero finale di token in p2 uguale, poich da qualunque strada passino sempre tre token sono sottratti da p2. Ci possono per essere dei casi in cui il numero dei token rimanenti differente. E ovvio a questo punto poi che, se la t2 abilitata, siano disabilitate la t1 e t3 e viceversa. Se supponiamo abilitata t2 abbiamo:

p1 t1 t2 t3 t1+ t2 t1+ t3 t2+ t3 t1+t2+ t3 0 1


Se supponiamo abilitate la t1 e t3, abbiamo: Tecniche di analisi dei requisiti e modelli software.

p2 -2 -3 -1 -5 -3 -4 -6 3 3-3=0 +1 +1 +2

0 0+1=1

Tabella 65 Tabella di calcolo configurazione pi configurazioni finali passo #2a

Pagina 109 di 144

Berta Danilo - http://www.bertadanilo.name/

p1 t1 t2 t3 t1+ t2 t1+ t3 t2+ t3 t1+t2+ t3 0 1 -2 -3 -1 -5 -3 -4 -6 3 3-3=0

p2 +1 +1 +2

0 0+1+2=3

Tabella 66 Tabella di calcolo configurazione pi configurazioni finali passo #2b Vediamo quindi che a secondo di quale transizione/i scatta prima la configurazione finale differente. Se scatta prima la t2 abbiamo 1=(0,1) mentre se scattano prima la t1 e t3 otteniamo 1=(0,3).

Tecniche di analisi dei requisiti e modelli software.

Pagina 110 di 144

Berta Danilo - http://www.bertadanilo.name/

Reti di Petri binarie


Consideriamo la seguente reti di Petri:

Figura 59 Rete di Petri binaria. supponiamo che: 1. I posti possano contenere zero oppure uno token 2. Tutti gli archi abbiano peso pari ad uno; ovvero, la molteplicit dei posti sia uno Una rete siffatta la chiamiamo rete di Petri binaria, ed il motivo del nome dovrebbe essere ovvio. Se i posti possono contenere 0 o1 token, allora tutte le possibili combinazioni della rete sono ottenute considerando tutte le possibili combinazioni dei posti componenti la rete, contenenti zero o uno. Se la rete ha N posti, immediato calcolare che il numero di combinazioni 2N Nel nostro esempio, essendo N=3 abbiamo 8 combinazioni possibili, che scriviamo nella tabella che segue. p1 p2 p3 1 1 0 0 1 1 1 0 1 0 1 0 1 1 1 1 0 0 Tabella 67 Tabella delle combinazioni per rete di Petri binaria 0 1 0 0 0 0

Posti

Quelle riportate in Tabella 67 sono tutte le possibili configurazioni della rete. In qualsiasi modo possano operare le transizioni, al partire da una data configurazione dovr ottenere una nuova configurazione (eventualmente identica a quella di partenza) che sicuramente compare tra quelle riportate in Tabella 67. Le regole per generare le configurazioni sono quelle che abbiamo ampiamente visto nei paragrafi precedenti, con alcune precisazioni: 1. Se il posto possiede un token, aggiungendo un token ci troviamo sempre con un token: (1+1=1). 2. Se il posto possiede zero token, aggiungendo un token ci troviamo con un token: (0+1=1). 3. Una transazione scatta se tutti i suoi posti di input possiedono un token. I token nelle postazioni di input sono rimossi e sono aggiunti un token per ogni postazione di output. 4. Nel caso in cui uno stesso posto di input a due o pi transizioni e contiene un token, questo fa scattare sempre tutte le transizioni (regola di risoluzione delle incertezze) Consideriamo ora la seguente tabella: Tecniche di analisi dei requisiti e modelli software. Pagina 111 di 144

Berta Danilo - http://www.bertadanilo.name/ # colonna p1 Configurazione p2 iniziale (n) p3 p1 Configurazione p2 finale (n+1) p3 1 1 1 1 2 1 0 1 3 0 1 1 4 0 0 1 5 1 1 0 6 1 0 0 7 0 1 0 0 0 1 8 0 0 0 0 0 0

0 1 0 0 0 1 0 0 0 0 0 0 1 1 1 1 1 0 Tabella 68 Tabella decisionale per rete di Petri binaria

Questultima tabella definisce, dato uno stato k della rete (configurazione iniziale) quello che lo stato successivo k+1 della stessa. Il lettore pu controllare che sono state applicate le regole 1 4. In particolare, facciamo notare che nel caso in cui p1=1 e p2=1 , essendo p2 di input sia a t1 che a t2, entrambe sono scattate ed hanno portato ciascuna un token in p3. Visto per che per la regola (1) abbiamo 1+1=1, in p3 ci ritroviamo con un token. La Tabella 68 pu essere vista come una tabella decisionale, del tipo quelle che rappresentano una macchina agli stati finiti, in cui abbiamo per tre stati (corrispondenti ai posti p1, p2 e p3). Possiamo quindi semplificarla utilizzando Logic Friday. Non eseguiamo tutti i passaggi (che il lettore potr fare da se) e forniamo il risultato minimizzato.
p1(n+1) = p1(n)p2(n) p2(n+1) = 0 p3(n+1) = p2(n) + p3(n)

Ricordiamo che la configurazione (n+1) quella che si ottiene dalla configurazione (n) dopo che le transizioni sono state azionate (o sono state ferme se non cerano i token nel posto di input). Ad esempio, dalla Tabella 68 vediamo che le configurazioni iniziali delle colonne #2, 4, 6 ed 8 sono statiche visto che sono uguali alle configurazioni finali. Vediamo come interpretare il risultato: p1(n+1) ha un token se p1(n) ha un token AND p2(n) non ha un token. Se difatti p2(n) avesse un token la transizione t1 e t2 sarebbero attive e porterebbero via i token da p1. p2(n+1) non ha mai token, qualunque sia la configurazione iniziale. Se non ha un token allo stato (n), rimane senza allo stato (n+1) e se ne ha uno allo stato (n), allo stato (n+1) lo perde. p3(n+1) ha un token allo stato (n+1) se lo aveva allo stato (n) OR se p2(n) ha un token. Se p3 ha un token allo stato (n) gli rimane, indipendentemente se ne viene aggiunto uno o no allo stato (n+1) e se non lo ha, gli viene aggiunto solo se p2 ha un token allo stato (n). Difatti, se p2 ha un token allo stato (n), allora sia la transizione t1 che t2 portano un token a p3.

Le reti di Petri binarie sono spesso pi che sufficienti per modellare processi anche abbastanza complessi o, per lo meno, permettono di definire le caratteristiche peculiari di tali processi senza entrare nel dettaglio di configurazioni complicate in cui intervengono pi token per posto. Pur avendo lo svantaggio che occorre considerare tutte le possibili configurazioni, si ha il pregio di ottenere una serie di equazioni booleane che definiscono lo stato successivo a partire da quello noto iniziale, cosa che semplifica la comprensione della dinamica della rete e di una sua eventuale implementazione software. Tecniche di analisi dei requisiti e modelli software. Pagina 112 di 144

Berta Danilo - http://www.bertadanilo.name/ Per finire, ricordiamo che la regola # 4 (regola di soluzione delle incertezze) pu anche essere abbandonata e tutto il discorso vale comunque. In questultimo caso, occorrer definire pi scenari, validi per ciascuna attivazione possibile delle transizioni.

Tecniche di analisi dei requisiti e modelli software.

Pagina 113 di 144

Berta Danilo - http://www.bertadanilo.name/

Capitolo 5 Test combinatoriale

TEST COMBINATORIALE

Tecniche di analisi dei requisiti e modelli software.

Pagina 114 di 144

Berta Danilo - http://www.bertadanilo.name/

Quando si abbia unapplicazione con molteplici input, ciascuno dei quali pu assumere diversi valori, in genere impossibile eseguire il test di tutte le possibili combinazioni dei valori delle variabili dinput, semplicemente perch sono troppe. Facciamo subito un esempio: consideriamo unapplicazione che accetti in input tre possibili valori A, B e C. Tali valori possono essere scelti in modo arbitrario dalla seguente tabella: A A1 A2 A3 A4 B B1 B2 B3 C C1 C2

# Valori 4 3 2 Tabella 69 Variabili e valori Il numero totale di possibili combinazioni delle variabili (A,B,C) pari a 4 3 2 = 24 ; in pratica, per poter essere certi di garantire aver provato almeno una volta tutte le combinazioni possibili dei valori delle variabili (A,B,C) occorre effettuare 24 casi di test. Tali combinazioni sono le seguenti: 1-4 5-8 9-12 13-16 17-20 21-24 A1;B1;C1 A1;B3;C1 A2;B2;C1 A3;B1;C1 A3;B3;C1 A4;B2;C1 A1;B1;C2 A1;B3;C2 A2;B2;C2 A3;B1;C2 A3;B3;C2 A4;B2;C2 A1;B2;C1 A2;B1;C1 A2;B3;C1 A3;B2;C1 A4;B1;C1 A4;B3;C1 A1;B2;C2 A2;B1;C2 A2;B3;C2 A3;B2;C2 A4;B1;C2 A4;B3;C2 Tabella 70 Combinazioni dei valori delle variabili A,B,C Ora, nel caso specifico,un tale numero di test pu ancora essere abbordabile. Se tuttavia si considera il caso generale di N variabili X1, X2, Xk , la prima che assume n1 possibili valori, la seconda n2 possibili valori, la kma che assume nk possibili valori, il numero totale di combinazioni pari a: n1 n2 ... nk che, anche per valori non elevati di n1, n2 ,, nk un valore grande. Ad esempio se k=5 ed (n1=3; n2=4; n3=2; n4=2; n5=3) si ottiene un numero di combinazioni pari a 3 4 2 2 3 = 144 che gi un bel numero di test da eseguire se si vuole garantire la copertura completa di tutte le combinazioni. Se poi come capita sovente nella pratica il numero di valori ni che possono assumere le variabili elevato, si fa presto a raggiungere le centinaia di migliaia (o milioni) di combinazioni, cosa che rende improponibile eseguire dei test completi, su tutte le combinazioni.

Come possiamo fare per portare a termine un test comunque efficace quando il numero di variabili e di valori cos alto da rendere impossibile un test esaustivo di tutte le combinazioni? Quali tecniche di riduzione applicare?

Tecniche di analisi dei requisiti e modelli software.

Pagina 115 di 144

Berta Danilo - http://www.bertadanilo.name/

1-wise testing.
Nei casi in cui le combinazioni siano elevate, possibile per lo meno verificare che - almeno una volta ciascun singolo valore delle variabili sia stato dato in input al programma da testare. In altri termini, se la variabile A pu assumere i valori A1, A2, A3 occorre almeno eseguire un primo test in cui la variabile A=A1, un secondo test in cui A=A2 e un terzo test in cui la variabile A=A3; lo stesso dicasi per le altre variabili. Tale tipo di test fornisce una copertura cosiddetta wise-1, e ne vedremo tra breve il significato. In pratica, abbiamo la seguente tabella: # TEST A B C 1 A1 * * 2 A2 * * 3 A3 * * 4 A4 * * 5 * B1 * 6 * B2 * 7 * B3 * 8 * * C1 9 * * C2 Tabella 71 Insieme di test 1-wise massimo Una prima riduzione consiste nel fare assumere a una variabile tutti i valori consecutivi, inserendo per le altre variabili un valore qualunque (indicato con * nella Tabella 71) e procedendo in questo modo per tutte le variabili e valori. In questo modo si riducono i casi da 24 a soli 9. Il numero di casi si pu ancora ulteriormente ridurre sfruttando il fatto che al posto degli * si pu selezionare un valore della variabile che poi pu essere escluso dai casi di test successivi. In pratica, per il caso di test # 1 al posto di B=* inseriamo B=B1, al posto di C=* inseriamo C=C1 ed eliminiamo il caso di test # 5 e il caso di test #8, che sono entrambi coperti dal caso di test # 1; Per il caso di test # 2, al posto di B=* inseriamo B=B2 e al posto di C=* inseriamo C=C2 ed eliminiamo i casi di test # 6 e # 9 che sono entrambi coperti dal caso di test # 2. Per il caso di test # 3, al posto di B=* inseriamo B=B3 e al posto di C=* inseriamo un qualunque valore C1 o C2; poich i valori della variabile C pari a C1 e C2 sono gi in effetti stati coperti dai casi di test # 1 e #2, possiamo lasciare C=* rimandando a dopo la scelta se inserire C=C1 o C=C2. Eliminiamo il test #7 poich B=B3 adesso coperto dal caso di test # 3. Avendo adesso capito il meccanismo, resta solo il caso di test # 4 che copre A=A4, mentre possiamo lasciare B=* e C=* demandando a dopo la scelta di cosa selezionare effettivamente. In pratica il simbolo * rappresenta il dont care ossia, non modifica la copertura del test; tutte le variabili sono, almeno una volta, utilizzate nel caso di test reale e quelle con * hanno dei valori che possono essere coperti 2 volte. La tabella finale dei test ridotti wise-1 la seguente:

Tecniche di analisi dei requisiti e modelli software.

Pagina 116 di 144

Berta Danilo - http://www.bertadanilo.name/ # TEST A B C 1 A1 B1 C1 2 A2 B2 C2 3 A3 B3 * 4 A4 * * Tabella 72 Insieme di test 1-wise minimo La Tabella 72 ottenuta dalla Tabella 71 spostando verso lalto le colonne della variabile B e C sino a ricoprire i valori con *; il valore * rimane nelle righe non coperte dai valori stessi (riga 3 variabile C e riga 4 variabile B e C). La parola inglese wise sta ad indicare avveduto, astuto, prudente; ad esempio, all-wise significa saggio; quindi wise-1 sta a indicare qualcosa come astuto a livello 1, cosa che fa pensare che wise-2 sia un livello pi alto di astuzia wise-1. Tale affermazione non del tutto errata, anche se in italiano, potremmo tradurlo pi correttamente come modo (anche se la parola inglese per modo tuttaltra: way, manner, mode,). Dire quindi che un test set, come quello riportato in Tabella 72 fornisce una copertura wise-1, significa affermare che ogni singolo valore di ogni variabile coperto almeno una volta. In pratica per il caso wise-1 il si ottiene la regola seguente: Date N variabili X1, X2, Xk , la prima che assume n1 possibili valori, la seconda n2 possibili valori, la k-ma che assume nk possibili valori, il numero massimo di test che garantiscono la copertura wise-1 pari a

n1 + n2 + ... + nk , mentre il numero minimo di test pari al valore massimo


tra { n1 , n2 ,, nk }. Nella pratica, quello che interessa sempre il numero minimo di casi di test che servono per garantire la copertura prescelta (e questo per ovvie ragioni).

2-wise testing o pairwise testing


Se il test 1-wise garantisce la copertura di ogni singolo valore di ciascuna variabile, facile intuire che un insieme di test (nel seguito Test Set) a copertura wise-2, garantisce che tutte le coppie di valori delle variabili siano coperte almeno una volta. Nel caso delle variabili riportate nella Tabella 69, tutte le coppie delle variabili sono le seguenti: {(A,B), (A,C), (B,C)}. Infatti, il calcolo combinatoriale insegna che il numero di combinazioni di N valori presi K a K (con NK) pari a:

N N! K = K ! ( N K )!

Tecniche di analisi dei requisiti e modelli software.

Pagina 117 di 144

Berta Danilo - http://www.bertadanilo.name/ Nel nostro caso di tre variabili (N=3) prese a due a due (K=2), applicando la formula sopra riportata abbiamo =

3 2

3! = 3 ; le tre coppie che sono proprio {(A,B), (A,C), (B,C)}. 2! (3 2)!

Volendo andare a calcolare tutte le possibili coppie dei valori delle variabili, occorre considerare quanto segue: # VALORI VARIABILI TOTALE PARZIALE A B C (A,B) 4 3 4 3 = 12 (A,C) 4 2 42 = 8 (B,C) 2 3 3 2 = 6 TOTALE COMPLESSIVO 12 + 8 + 6 = 26 Tabella 73 Conteggio delle coppie di valori delle variabili A, B e C COPPIA Quindi, il totale di coppie di tutti i valori delle variabili A, B e C i cui valori sono riportati nella Tabella 69 pari a 26 e sono quelle riportate nella tabella che segue: # COPPIE VALORI A, B A, C B, C 1 A1,B1 A1,C1 B1, C1 2 A1,B2 A1,C2 B1, C2 3 A1,B3 A2,C1 B2, C1 4 A2,B1 A2,C2 B2, C2 5 A2,B2 A3,C1 B3, C1 6 A2,B3 A3,C2 B3, C2 7 A3,B1 A4,C1 8 A3,B2 A4,C2 9 A3,B3 10 A4,B1 11 A4,B2 12 A4,B3 # COPPIE 12 8 6 TOTALE 12+8+6=26 Tabella 74 Coppie di valori delle variabili A, B e C # Perch si dovrebbero considerare un Test Set a copertura wise-2? Non basterebbe considerare un Test Set con copertura wise-1? Qui entriamo in una questione spinosa, in cui i pareri sono vari, concordanti e discordanti. Riportiamo di seguito lincipit del sito http://www.pairwise.org/ : Pairwise (a.k.a. all-pairs) testing is an effective test case generation technique that is based on the observation that most faults are caused by interactions of at most two factors. Pairwise-generated test suites cover all combinations of two therefore are much smaller than exhaustive ones yet still very effective in finding defects.

Tecniche di analisi dei requisiti e modelli software.

Pagina 118 di 144

Berta Danilo - http://www.bertadanilo.name/ Citiamo anche lopinione di James Bach e Patrick J. Schroeder relativa al metodo di testing Pair Wise (Pairwise Testing: A Best Practice That Isnt from James Bach, Patrick J. Schroeder disponibile in forma completa al link http://www.testingeducation.org/wtst5/PairwisePNSQC2004.pdf ):

What do we know about the defect removal efficiency of pairwise testing? Not a great deal. Jones states that in the U.S., on average, the defect removal efficiency of our software processes is 85% [26]. This means that the combinations of all fault detection techniques, including reviews, inspections, walkthroughs, and various forms of testing remove 85% of the faults in software before it is released. In a study performed by Wallace and Kuhn [27], 15 years of failure data from recalled medical devices is analyzed. They conclude that 98% of the failures could have been detected in testing if all pairs of parameters had been tested (they didnt execute pairwise testing, they analyzed failure data and speculate about the type of testing that would have detected the defects). In this case, it appears as if adding pairwise testing to the current medical device testing processes could improve its defect removal efficiency to a "best in class" status, as determined by Jones [26]. On the other hand, Smith, et al. [28] present their experience with pairwise testing of the Remote Agent Experiment (RAX) software used to control NASA spacecraft. Their analysis indicates that pairwise testing detected 88% of the faults classified as correctness and convergence faults, but only 50% of the interface and engine faults. In this study, pairwise testing apparently needs to be augmented with other types of testing to improve the defect remove al efficiency, especially in the project context of a NASA spacecraft. Detecting only 50% of the interface and engine faults is well below the 85% U.S. average and presumably intolerable under NASA standards. The lesson here seems to be that one cannot blindly apply pairwise testing and expect high defect removal efficiency. Defect removal efficiency depends not only on the testing technique, but also on the characteristics of the software under test. As Mandl [4] has shown us, analyzing the software under test is an important step in determining if pairwise testing is appropriate; it is also an important step in determining what addition al testing technique should be used in a specific testing situation. [4] R. Mandl, "Orthogonal Latin Squares: An Application of Experiment Design to Compiler Testing," Communication of the ACM, vol. 28, no. 10, pp. 1054-1058, 1985. [26] Jones, Software Assessments, Benchmarks, and Best Practices. Boston, MA: Addison Wesley Longman, 2000. [27] D. R. Wallace and D. R. Kuhn, "Failure Modes in Medical Device Software: An Analysis of 15 Years of Recall Data," Int'l Jour. of Reliability, Quality and Safety Engineering, vol. 8, no. 4, pp. 351-371, 2001. Tecniche di analisi dei requisiti e modelli software. Pagina 119 di 144

Berta Danilo - http://www.bertadanilo.name/ [28] B. Smith, M. S. Feather, and N. Muscettola, "Challenges and Methods in Testing the Remote Agent Planner," in Proc. 5th Int'l Conf. on Artificial Intelligence Planning and Scheduling (AIPS 2000), 2000, pp. 254-263 In pratica, il metodo di test Pairwise o 2-wise garantisce che tutte le combinazioni delle coppie di valori delle variabili siano testate, cosa che dovrebbe garantire la massimizzazione delle anomalie riscontrate, con percentuali che variano dal 50% al 98% secondo gli studi condotti. In effetti, nessun test potr mai garantire una definita percentuale di rimozione dei difetti (cosa che si pu solo calcolare a consuntivo per lo specifico progetto); diciamo per essere realisti che il Pairwise raggiunge un buon compromesso tra il numero di test da eseguire e le anomalie evidenziate, quando il numero di variabili e relativi valori in gioco talmente alto da non poter essere effettuato un test a copertura di tutte le combinazioni (cosiddetto allwise testing o N-wise testing, dove N il numero delle variabili in gioco). Nel caso di Test Set a copertura wise-2 molto semplice conoscere il numero massimo di test che forniscono la copertura di tutte le coppie di valori delle variabili. Tale valore pari al numero di coppie dei valori delle variabili stesse. Nel nostro esempio delle tre variabili A, B e C della Tabella 69 il numero pari a 26 (quello calcolato in Tabella 74). Il problema vero, quello della determinazione del numero minimo di test che garantisce la copertura wise-2, a tuttora insoluto, pur esistendo una variet di metodi e di algoritmi che approssimano tale valore per un problema ad un numero arbitrario di variabili e valori. Un esempio di tool che usano questi algoritmi sono: Microsoft Pairwise Independent Combinatorial Testing tool (PICT), scaricabile da http://download.microsoft.com/download/f/5/5/f55484df-8494-48fa-8dbd8c6f76cc014b/pict33.msi, oppure AllPairs di James Bach scaricabile da http://www.satisfice.com/tools.shtml oppure ancora altri strumenti dei quali potete prendere visione al link http://www.pairwise.org/tools.asp .

n-wise testing con n>2


A questo punto, semplice estendere il concetto di test pairwise o 2-wise al caso generico di n-wise, con n>2. Il generico Test Set garantisce una copertura n-wise se in grado di coprire tutte le n-ple (3-ple se n=3, 4-ple se n=4 e cos via). Come nel caso Pairwise sempre possibile conoscere le dimensioni del Test Set massimo, pari al numero di n-ple dei valori delle variabili, ma non esiste un metodo per conoscere nel caso generale la dimensione del Test Set Minimo che garantisce la copertura n-wise. Utilizzando PICT possibile estrarre un Test Set che approssima il pi possibile il Test Set minimo. E chiaro che, dato un insieme di N variabili, il massimo livello di wise cui si pu aspirare pari al numero di variabili. Quindi, se abbiamo 4 variabili, un test set 4-wise coincide con tutte le combinazioni possibili, mentre un Test Set 5-wise (o superiore) non ha alcun senso.

Tecniche di analisi dei requisiti e modelli software.

Pagina 120 di 144

Berta Danilo - http://www.bertadanilo.name/

Wise crunch tools


Le tecniche di test combinatoriale di cui abbiamo discusso nei paragrafi precedenti sono rivolte a risolvere un problema di base, di cui abbiamo gi discusso e che riformuliamo come segue: PROBLEMA DEL TEST COMBINATORIALE DIRETTO: Dato un sistema software che accetta N variabili, ciascuna delle quali pu assumere differenti valori, trovare il Test Set con il minore numero di casi di test possibile, che mi garantisca (almeno) una copertura di tutte le combinazioni (2-ple) di tutti i valori delle variabili in gioco. Per risolvere tale problema stata sviluppata la tecnica Pairwise ed un congruo numero di tools a supporto. Una volta che tale test set (il pi possibile ridotto) stato generato, si eseguono i test cases e si rilevano le (eventuali) anomalie del software sotto test. Esiste anche un secondo problema, forse meno gettonato rispetto al precedente, che il seguente: PROBLEMA DEL TEST COMBINATORIALE INVERSO: Dato un Test Set per il quale non si conosce il metodo di generazione, calcolare quale percentuale di copertura garantisce il Test Set rispetto al livello n-wise, con n compreso tra 1 ed il numero di variabili del Test Set. Il tipico esempio quello in cui i test sono generati da strumenti automatici sui quali si ha un controllo scarso o quasi nullo, oppure quando i casi di test sono generati da dei flussi automatici che alimentano interfacce tra differenti sistemi (si pensi a un sistema che passa dei dati contabili da un sistema A a un sistema B); nelle fasi di test tali dati vengono in genere - estratti da serie storiche sulle quali non si ha alcun controllo. Per scenari di test in qualche modo riconducibili a un problema combinatoriale inverso, non si sono trovati degli strumenti a supporto e/o tali strumenti non sono facilmente reperibili. Nel seguito descriveremo una serie di tools denominati Wise crunch tools (eseguibili in ambiente Windows, ma se necessario facilmente portabili su piattaforme Unix/Linux) personalmente sviluppati che permettono di estrarre test set minimali e calcolare la copertura di un generico test set, utilizzando algoritmi di calcolo sistematico di copertura a partire da tutte le nple relative ai valori delle variabili; tali algoritmi ricadono nella categoria di algoritmi a forza bruta e come tali possono essere usati (su un normale PC di lavoro) se il numero di variabili e/o valori non troppo elevato.

Tecniche di analisi dei requisiti e modelli software.

Pagina 121 di 144

Berta Danilo - http://www.bertadanilo.name/

Procedura di installazione
Il pacchetto Wise crunch tools composto dai seguenti file e cartelle:

Figura 60 Elementi componenti i WiseCrunchTools Struttura delle cartelle La cartella source contiene i sorgenti degli eseguibili in linguaggio C++ e non dinteresse per lutente finale dei tools. La cartella workspaceCB contiene i file di workspace utilizzati dallIDE OpenSource di sviluppo C/C++ denominata Code::Blocks (http://www.codeblocks.org/) utilizzata nella fase di sviluppo dei tools; anche questa cartella non dinteresse per lutente finale dei tools. Ovviamente, pu essere utilizzato un qualunque ambiente di sviluppo C/C++ se si ha linteresse di sviluppare/modificare i tools. Il file copy_exe.bat una semplice utility di deploy dei file eseguibili, che copia gli eseguibili dalla cartella source\<nome tool>\bin\Release di ciascun tool nella cartella \product\bin. Anche in questo caso, tale file non di interesse per lutente finale dei tools. Il contenuto della cartella product il seguente:

Figura 61 Elementi componenti i WiseCrunchTools Struttura della cartella product Tale cartella contiene le utility principali di primo livello che saranno descritte nel dettaglio nei prossimi paragrafi. Il contenuto della cartella bin il seguente: Tecniche di analisi dei requisiti e modelli software. Pagina 122 di 144

Berta Danilo - http://www.bertadanilo.name/

Figura 62 Elementi componenti i WiseCrunchTools Struttura della cartella bin Tale cartella contiene le utility principali di secondo livello che saranno descritte nel dettaglio nei prossimi paragrafi. La procedura di installazione si riduce ai seguenti passi. a) Copiare il contenuto della cartella product sul file system della macchina. Supporremo nel seguito che tale cartella sia stata copiata sotto C:\WiseCrunchTools\product. b) Aggiungere alla variabile PATH di sistema e/o di utente i seguenti due percorsi: a. C:\WiseCrunchTools\product b. C:\WiseCrunchTools\product\bin In Windows, possibile compiere loperazione da: Pannello di Controllo SistemaImpostazioni Avanzate, premere il pulsante Variabili dambiente e impostare quindi la variabile PATH di sistema o di utente, secondo i privilegi disponibili. Si faccia comunque riferimento al manuale di configurazione del vostro sistema operativo Windows per ogni evenienza. Non ci sono vincoli particolari se si sceglie di installare i WiseCrunchTools in una cartella il cui nome contiene spazi, come ad esempio C:\My Documents\Wise Crunch Tools.

Tecniche di analisi dei requisiti e modelli software.

Pagina 123 di 144

Berta Danilo - http://www.bertadanilo.name/

Procedura di configurazione
La procedura di configurazione consiste nel modificare il file denominato config.bat presente nella cartella product. Il contenuto del file il seguente (trascurando i commenti di intestazione) : REM Nome del progetto in corso set "PROJECT=###### <NOME PROGETTO> ######"

REM Directory di lavoro (deve terminare con \) set "APP_PATH=C:\Users\<utente>\Documents\<nome_progetto>\" REM File di input (deve essere presente nella directory di lavoro) set "INPUT_FILE_NAME=input.txt" REM Il separatore **DEVE** essere uguale al separatore utilizzato sul REM file di input INPUT_FILE_NAME per separare i campi set "SEP=;"

I campi da impostare sono: Campo PROJECT: inserire il nome del progetto su cui andr a lavorare. E una semplice stringa mnemonica che serve a ricordare sul quale progetto si sta operando e si pu inserire in essa un qualunque valore. Campo APP_PATH: inserire una cartella valida del file system. Su tale cartella saranno salvati tutti i dati di base e comuni generati dai tools che si andranno a utilizzare. La cartella deve obbligatoriamente terminare con il carattere \ (slash). Campo INPUT_FILE_NAME: inserire il nome di un file formato testo valido, contenente le variabili e i relativi valori nel formato seguente: o <NOME VAR_1 DI 1 CARATTERE>:VAL1_1<SEP>VAL1_2<SEP>VAL1_3<SEP><SEP>VAL1_N o <NOME VAR_2 DI 1 CARATTERE>:VAL2_1<SEP>VAL2_2<SEP>VAL3<SEP><SEP>VAL2_K o . o <NOME VAR_P DI 1 CARATTERE>:VALP_1<SEP>VALP_2<SEP>VALP<SEP><SEP>VALP_T Campo SEP: il separatore che deve obbligatoriamente coincidere con quello usato nel file dinput impostato nella variabile INPUT_FILE_NAME. Il separatore non pu essere uguale a : (due punti) oppure * (asterisco) che sono caratteri riservati.

Il nome della variabile nel file dinput deve obbligatoriamente essere di un solo carattere; la cosa migliore utilizzare le lettere dellalfabeto (maiuscole o minuscole e i numeri da 0 a 9). Un esempio di file di input valido il seguente: A:A1;A2;A3;A4 B:B1;B2,B3 C:C1;C2;C3

I nomi delle variabili (A, B e C) sono separati dalla lista dei valori dal carattere : (due punti). Il separatore dei valori ; (punto e virgola) e deve coincidere con la variabile SEP impostata sul file config.bat. Tecniche di analisi dei requisiti e modelli software. Pagina 124 di 144

Berta Danilo - http://www.bertadanilo.name/

Panoramica generale dei WiseCrunchTools


I tools facenti parte del prodotto denominato WiseCrunchTools tendono a fornire un supporto alla soluzione di entrambi i problemi del test combinatoriale in precedenza enunciati. I WiseCrunchTools non intendono mettersi in competizione con i tools gi esistenti e tendenti a risolvere il problema diretto del test combinatoriale, quali ad esempio Microsoft PICT, AllPair di J. Bach o altri svariati tools commerciali e non presenti in commercio; i tools gi presenti da lungo tempo sul mercato implementano algoritmi sicuramente pi efficaci dei WiseCrunchTools e vanno quindi preferiti per quanto riguarda ripeto la soluzione del problema diretto. Per quanto riguarda invece il problema inverso del test combinatoriale non esistono, a mia conoscenza, dei tool sul mercato; i WiseCrunchTools cercano quindi di fornire una prima soluzione al problema inverso, sicuramente migliorabile nel tempo, quando si saranno meglio comprese le logiche e le leggi che soggiacciono al test combinatorio e agli insiemi di Test minimali e massimali a esso correlati. Ricordiamo che: a) Risolvere il problema diretto significa determinare il test set pi piccolo possibile con un livello di copertura WISE concordato (in genere WISE=2) a partire dallinsieme delle variabili e dei valori. b) Risolvere il problema inverso significa determinare il livello di copertura di un test set rispetto a un dato livello WISE di riferimento (anche qui in genere WISE=2). I tool si dividono in due categorie: a) Tools di primo livello: scripts batch DOS che forniscono una immediata risposta ad una serie di scenari standard che si presentano tipicamente nei progetti di test che richiedono tecniche combinatoriali. b) Tools di secondo livello: eseguibili (linguaggio di sviluppo C++/Perl) che possedendo una maggiore versatilit permettono di rispondere a dei problemi forse meno comuni ma che si presentano/possono presentare nei progetti di test che richiedono tecniche combinatoriali. Gli script di primo livello sono stati pensati come dei wrapper costruiti intorno agli eseguibili di secondo livello, allo scopo di semplificare la vita allutente finale e proponendo una serie di semplici comandi che permettono velocemente di ottenere una serie di informazioni standard.La tabella che segue mappa le due categorie di tools, dettagliando anche il tipo dinformazioni di risposta. Leseguibile di secondo livello denominato uniqueRowFile.exe non richiamato dagli script di primo livello e va considerato unutility particolare che non utilizzata direttamente per la soluzione del problema diretto o inverso, ma che pu rendersi utile in casi specifici avanzati, rimanendo quindi solo come utility di secondo livello.

Tecniche di analisi dei requisiti e modelli software.

Pagina 125 di 144

Primo Livello 1 runW runCC runsCC runT runsT runTS runsTS runTSF runsTSF runC runR X X X X 2 3 X 4 X X X X X X X X X X 5 X X X X X X X X X X 6 X

Secondo Livello 7 X 8 9 10 X 11 12 13

X X X X X X X X

Tabella 75 Mappatura tools di primo livelli vs. secondo livello (wrapping map) A seguire lelenco degli eseguibili di secondo livello: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. calcolaCopertura.exe calcolaCoperturaSlow.exe Combinazioni_n_k.exe contrLimWise.exe count_line.exe creaFileProdCart.exe creaStringa.exe generaTestSet.exe generaTestSetSlow.exe ProdCart.exe reduceNple.exe runConstrains.pl uniqueRowFile.exe

Berta Danilo - http://www.bertadanilo.name/ Tool runW runCC runsCC runT runsT runTS runsTS runTSF runsTSF runC runR calcolaCopertura calcolaCoperturaSlow Combinazioni_n_k contrLimWise count_line creaFileProdCart creaStringa generaTestSet generaTestSetSlow ProdCart reduceNple runConstrains uniqueRowFile Livello 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 Tabella 76 Mappatura tools con scenari standard Tecniche di analisi dei requisiti e modelli software. Pagina 127 di 144 X X X X X X X X X X X X X X X X X X X X X X 2 Scenario 3 4 5 6 Categoria problema Inverso Inverso Inverso Diretto Diretto Diretto Diretto Diretto Diretto Diretto/Inverso Inverso Inverso Inverso / / / / / Diretto Diretto Inverso Diretto Diretto/Inverso /

A seguire lelenco degli scenari standard presi in considerazione: 1. Calcolo insieme massimo (tutte le n-ple). 2. Calcolo della copertura di un Test Set rispetto a un livello wise prescelto. 3. Creazione di un Test Set minimale con copertura = un livello wise prescelto a partire dal Test Set di tutte le combinazioni. 4. Creazione di un Test Set minimale con copertura = un livello wise prescelto a partire da un test set qualunque. 5. Creazione di un Test Set minimale con copertura = un livello wise prescelto a partire da un test set qualunque ed escludendo un insieme di n-ple note. 6. Applicare delle condizioni di vincolo ai Test Set o alle n-ple. La Tabella 76 mostra come i tools messi a disposizione forniscano degli strumenti utili ad affrontare entrambe le tipologie di problemi; vogliamo comunque sottolineare che, essendo tali tools basati su algoritmi cosiddetti di brute force, se linteresse principale quello di avere velocemente un Test Set minimale a copertura wise predefinita da utilizzare per i test, consigliabile usare gli strumenti ormai da lungo tempo presenti sul mercato.

Convenzioni lessicali e tipografiche


Nel seguito, il numero di variabili del file dinput coincidente con il massimo valore possibile della copertura wise, verr indicato con WISE_MAX. Faremo molte volte riferimento ad un Test Set Minimo, considerandolo come insieme contenente il minimo numero di test set possibile. Questa unimprecisione poich non esiste a oggi alcun algoritmo che garantisce che il Test Set estratto sia il minimo in assoluto. Il termine corretto sarebbe quindi quasi-Minimo; quindi il termine minimo dovr essere inteso in questaccezione. Tutti i tools descritti nel seguito hanno un help a consolle cui si accede passando lopzione /? come consueto per i comandi DOS. Tale opzione, essendo comune a tutti i tools, non viene riportata nella descrizione delle specifiche del singolo strumento. I parametri compresi tra parentesi graffe {} in grassetto sono OBBLIGATORI, mentre quelli compresi tra parentesi tonde () in italico sono FACOLTATIVI.

Berta Danilo - http://www.bertadanilo.name/

Tool di primo livello script batch DOS


Di seguito sono descritti i singoli tools di primo livello, pi semplici da usare, che tendono a supportare i scenari standard precedentemente descritti. Come convenzione, il nome di tutti gli script batch segue lo schema: Prefisso run comune a tutti Lettera s solo per gli script cosiddetti slow, che ottimizzano lutilizzo della memoria a scapito del tempo di elaborazione. Numero di lettere XXX maiuscole pari al numero di parametri che lo script richiede Ad esempio runCC uno script che richiede due parametri dinput, mentre runW ne richiede uno solo. Lo script runsCC richiede due parametri in input ed in genere pi lento di runCC, ma richiede meno memoria di sistema. Tool runW E il primo tool che obbligatorio usare per poter poi utilizzare gli altri tools. Crea tutte le n-ple corrispondenti al valore del Wise passato in input (runW = run Wise) Input: 1) {WISE}: Numero intero compreso tra 1 ed il WISE_MAX

Output: 1) File contenente tutte le n-ple corrispondenti al {WISE} in input, denominato out_p_{WISE}.txt nella cartella APP_PATH. 2) File con tutte le possibili combinazioni delle variabili di input, denominati out_c_{WISE}.txt contenuto nella cartella APP_PATH. Esempio: runW 2 Crea tutte le coppie di valori delle variabili del file di input.

Tool runCC e runsCC Esegue il Calcolo della Copertura rispetto al WISE passato in input del Test Set passato anchesso in input (runCC = run Calcola Copertura). Input: 1) 2) 3) 4) 5) 6) 7)

{FILE TESTSET}: {WISE NUMBER}: (-n) (-d) (-f) (-r) (-z)

Il Test Set per il quale si vuole calcolare la copertura Il valore del WISE rispetto al quale la copertura deve essere calcolata Stampa le n-ple trovate nel file {FILE TESTSET} Stampa i dettagli, consistenti nella coppia #riga Test Set, #riga N-pla Stampa la mappa di frequenza: #riga N-pla, #occorrenze n-pla trovate Stampa la statistica (% di copertura trovata) Stampa il record del Test Set con il numero di n-ple associate

Tecniche di analisi dei requisiti e modelli software.

Pagina 129 di 144

Berta Danilo - http://www.bertadanilo.name/ Output: 1) Le informazioni come descritto dalle opzioni (-n) , (-d), (-f), (-r) e (-z). Si noti che se non si passa almeno unopzione non viene stampato nulla. Loutput stampato a video e pu essere reindirizzato su file con le consuete operazioni di pipe del DOS (> oppure >>). Prerequisiti 1) Occorre che sia stato in precedenza eseguito il comando runW {WISE NUMBER}. In caso contrario viene stampato un avviso con la richiesta di eseguire tale comando. Il tool runCC pi veloce ma richiede una memoria di sistema maggiore. Nel caso in cui la memoria di sistema non sia sufficiente, il programma sinterrompe con un overflow di memoria gestito. Il tool runsCC (si noti la s in runs che sta per slow) richiede meno memoria, ma impiega pi tempo, lavorando principalmente su file. Esempio: runCC test_set.txt 2 r -f Stampa la statistica e la mappa di frequenza per il test set contenuto nel file test_set.txt.

Tools runT e runsT Estrae il Test Set minimale con copertura garantita pari al Wise passato in input (runT = run Test) a partire dal file delle n-ple relative al WISE_MAX (tutte le combinazioni). Input: 1) {WISE}: Numero intero compreso tra 1 ed il WISE_MAX

Output: 1) File contenente il test set minimale con copertura garantita al {WISE} passato in input, denominato test_set_generato_{WISE_MAX}_{WISE}.txt nella cartella di esecuzione. 2) File contenente il test set minimale con copertura garantita al {WISE} passato in input, denominato clean_test_set_generato_{WISE_MAX}_{WISE}.txt nella cartella di esecuzione. La differenza tra i due file che in test_set_generato_{WISE_MAX}_{WISE}.txt viene riportato il numero di test relativo al file delle n-ple {WISE_MAX}, contenente tutte le combinazioni possibili, mentre in clean_test_set_generato_{WISE_MAX}_{WISE}.txt tale valore non viene riportato. Prerequisiti 2) Occorre che sia stato in precedenza eseguito il comando runW {WISE_MAX}. In caso contrario stampato un avviso con la richiesta di eseguire tale comando. Esempio: runT 2 Crea il test set a copertura wise-2 a partire dal file contenente tutte le combinazioni possibili. Notare che, se {WISE}{WISE MAX} allora semplicemente copiato il file out_p_{WISE_MAX} nella cartella di esecuzione creando solo il file clean_test_set_generato_{WISE_MAX}_{WISE_MAX}.txt. In questo caso viene anche stampato un errore DOS File Not Found o File non trovato causato dal fatto che il file Tecniche di analisi dei requisiti e modelli software. Pagina 130 di 144

Berta Danilo - http://www.bertadanilo.name/ test_set_generato_{WISE_MAX}_{WISE_MAX}.txt non viene prodotto; la cosa comunque voluta e come tale corretta. Il tool runT pi veloce ma richiede una memoria di sistema maggiore. Nel caso in cui la memoria di sistema non sia sufficiente, il programma sinterrompe con un overflow di memoria gestito. Il tool runsT (si noti la s in runs che sta per slow) richiede meno memoria, ma impiega pi tempo, lavorando principalmente su file.

Tools runTS e runsTS Estrae il Test Set minimale con copertura garantita pari al Wise passato in input a partire dal file delle n-ple passato in input (runTS = run Test Set). Input: 1) {FILE TESTSET BASE} 2) {WISE}: Test Set di partenza da cui estrarre il Test Set di output Numero intero compreso tra 1 ed il WISE_MAX

Output: 1) File contenente il test set minimale con copertura garantita al {WISE} stessa copertura del file {FILE TESTSET BASE} se minore di test_set_generato_{WISE}.txt nella cartella di esecuzione. 2) File contenente il test set minimale con copertura garantita al {WISE} stessa copertura del file {FILE TESTSET BASE} se minore di clean_test_set_generato_{WISE}.txt nella cartella di esecuzione.

passato in input o alla {WISE}, denominato passato in input o alla {WISE}, denominato

La differenza tra i due file che in test_set_generato_{WISE}.txt viene riportato il numero di test relativo al file delle n-ple {FILE TESTSET BASE} passato in input, mentre in clean_test_set_generato_{WISE}.txt tale valore non viene riportato. Prerequisiti 1) Occorre che sia stato in precedenza eseguito il comando runW {WISE}. In caso contrario stampato un avviso con la richiesta di eseguire tale comando. Esempio: runTS base_testset.txt 2 Crea il test set a copertura wise-2 (o copertura pari a quella di base_testset.txt se minore di 2) a partire dal file base_testset.txt passato in input. Notare che se il file {FILE TESTSET BASE} passato in input non garantisce una copertura al livello {WISE} passato in input, i file di output prodotti coincideranno con il file di input ed avranno ovviamente la stesa percentuale di copertura del file {FILE TESTSET BASE} di input. Il tool runTS pi veloce ma richiede una memoria di sistema maggiore. Nel caso in cui la memoria di sistema non sia sufficiente, il programma sinterrompe con un overflow di memoria gestito. Il tool runsTS (si noti la s in runs che sta per slow) richiede meno memoria, ma impiega pi tempo, lavorando principalmente su file.

Tecniche di analisi dei requisiti e modelli software.

Pagina 131 di 144

Berta Danilo - http://www.bertadanilo.name/ Tools runTSF e runsTSF Estrae il Test Set minimale con copertura garantita pari al Wise passato in input a partire dal file delle n-ple passato in input escludendo le n-ple gi coperte dal file contenente il Test Set Parziale passato anchesso in input (runTSF = run Test Set Forbidden). Input: 1) {FILE TESTSET BASE} 2) {FILE TESTSET PARZIALE} generare. 3) {WISE}: Test Set di partenza da cui estrarre il Test Set di output Test Set Parziale con casi di test validi, da escludere dalloutput da Numero intero compreso tra 1 ed il WISE_MAX

Output: 1) File contenente il test set minimale con copertura garantita al {WISE} stessa copertura del file {FILE TESTSET BASE} se minore di delta_test_set_generato_{WISE}.txt nella cartella di esecuzione. 2) File contenente il test set minimale con copertura garantita al {WISE} stessa copertura del file {FILE TESTSET BASE} se minore di delta_clean_test_set_generato_{WISE}.txt nella cartella di esecuzione.

passato in input o alla {WISE}, denominato passato in input o alla {WISE}, denominato

La differenza tra i due file che in test_set_generato_{WISE}.txt viene riportato il numero di test relativo al file delle n-ple {FILE TESTSET BASE} passato in input, mentre in clean_test_set_generato_{WISE}.txt tale valore non viene riportato. Si noti che il file generato solo il delta dei casi di test rispetto a quelli contenuti in {FILE TESTSET PARZIALE}; quindi il file generato non pu garantire una copertura al WISE passato in input. Tale copertura garantita solo dal file somma di delta_*_test_set_generato_{WISE}.txt con {FILE TESTSET PARZIALE}. Prerequisiti 1) Occorre che sia stato in precedenza eseguito il comando runW {WISE}. In caso contrario stampato un avviso con la richiesta di eseguire tale comando. Esempio: runTSF base_testset.txt parziale.txt 2 Crea il test set a copertura wise-2 (o copertura pari a quella di base_testset.txt se minore di 2) a partire dal file base_testset.txt passato in input, senza considerare le n-ple gi comprese nel file del Test Set parziale.txt. Notare che se il file {FILE TESTSET BASE} passato in input non garantisce una copertura al livello {WISE} passato in input, i file di output prodotti coincideranno con il file di input ed avranno ovviamente la stesa percentuale di copertura del file {FILE TESTSET BASE} di input. Il tool runTSF pi veloce ma richiede una memoria di sistema maggiore. Nel caso in cui la memoria di sistema non sia sufficiente, il programma sinterrompe con un overflow di memoria gestito. Il tool runsTSF (si noti la s in runs che sta per slow) richiede meno memoria, ma impiega pi tempo, lavorando principalmente su file.

Tecniche di analisi dei requisiti e modelli software.

Pagina 132 di 144

Berta Danilo - http://www.bertadanilo.name/

Tool runR Estrae il Test Set non minimale ma comunque ridotto rispetto al Test Set Massimo con copertura garantita pari al Wise passato in input. (runR = run Reduce). Input: 1) {WISE}: Numero intero compreso tra 1 ed il WISE_MAX

Output: 1) Test Set contenente un insieme ridotto ma non minimale con copertura pari al WISE passato in input. I valori con * rappresentano i dont care; al posto di * possibile prendere un qualunque valore della variabile, senza con questo inficiare il livello di copertura al WISE. Loutput stampato a video e pu essere reindirizzato su file con le consuete operazioni di pipe del DOS (> oppure >>) Il numero di test cases del test set generato dipende dallordinamento del file out_p_{WISE}.txt che viene passato alleseguibile richiamato dal file batch runR.bat. Sicuramente esiste un ordinamento del file per cui il test set di output contiene un numero minimo di Test Cases con copertura garantita a WISE, ma trovare tale ordinamento non fattibile da un punto di vista computazionale, poich troppo oneroso. Prerequisiti 1) Occorre che sia stato in precedenza eseguito il comando runW {WISE}. In caso contrario stampato un avviso con la richiesta di eseguire tale comando. Esempio: runR 2 Crea il test set a copertura wise-2 non ridotto al minimo, ma con un numero di Test Cases inferiore rispetto al Test Set Massimo.

Tool runC Applica le constrains al file di tipo test set o di tipo n-ple passato in input. Input: 1) {FILE }: Il Test Set o file delle n-ple al quale si vogliono applicare i vincoli programmati nel file constrains.pm (linguaggio Perl) Output: 1) Sullo standard output vengono stampate le nple o i casi di test validi, mentre sullo standard error sono stampate le nple o i casi di test non validi Loutput stampato a video e sullo standar error (in genere coincidente con lo standard output) e pu essere reindirizzato su file con le consuete operazioni di pipe del DOS (> oppure >>). Prerequisiti 1) Nessuno; Il tool non vincolato agli altri tools direttamente. Pu essere usato in quei casi in cui il processo di generazione di un test set minimale mediante i tools runT, runTS o runTSF (e relativi equivalenti slow) richiederebbe troppo tempo/risorse. Tecniche di analisi dei requisiti e modelli software. Pagina 133 di 144

Berta Danilo - http://www.bertadanilo.name/ Esempio: runC test_set.txt 1>validi.txt 2>non_validi.txt Applica i vincoli programmati nel file constrains.pm (linguaggio Perl) e stampa i record validi nel file validi.txt (record che rispettano i vincoli) e i record non validi nel file non_validi.txt (record che non rispettano i vincoli). Si noti lutilizzo dei pipe (>) che reindirizzano lo standard output (1>valid.txt) e lo standard error (2>non_validi.txt). Il file constrains.pm contenente i filtri un modulo scritto in linguaggio Perl, allinterno del quale possibile scrivere delle condizioni che permettono di accettare o scartare i record del file passato in input. La variabile da prendere in considerazione il vettore $r che accede ai valori delle variabili del record letto. In pratica, per ogni riga letta, viene eseguita la seguente associazione: $r->[0]: valore corrente sulla riga letta della prima variabile (A) $r->[1]: valore corrente sulla riga letta della seconda variabile (B) $r->[K]: valore corrente sulla riga letta della (K-1) variabile (J)

Ogni controllo deve restituire un valore che se vale: 1: la riga considerata non e valida 0: la riga considerata valida

Ad esempio if($r->[0] eq "A1" && $r->[1] eq "B3"){ return 1; }; Ciascuna riga del file dinput letta e la condizione verificata: se il valore della prima variabile (A) A1 e il valore della seconda variabile (B ) B3 la riga scartata. Nella presente release del prodotto non stato implementato un meccanismo per variare i valori delle variabili della riga del file; in altri termini, una condizione del tipo: if($r->[0] eq "A1" && $r->[1] eq "B3"){ $r->[1]="B2" return 0; }; non farebbe variare il valore della seconda variabile da B3 a B2; quindi, ritornando 0, la riga che dovrebbe essere esclusa, sarebbe invece erroneamente presa per valida. In pratica, il filtro solo in validazione o meno dei valori presenti, ma non ne modifica il contenuto.

Tecniche di analisi dei requisiti e modelli software.

Pagina 134 di 144

Berta Danilo - http://www.bertadanilo.name/

Tool di secondo livello eseguibili


Di seguito sono descritti i singoli tools di secondo livello, meno semplici da usare ma pi versatili, che oltre a supportare gli scenari standard in precedenza descritti, possono essere utili allutente esperto per scenari pi generali e complessi.

Eseguibili calcolacopertura.exe e calcolaCoperturaSlow.exe Esegue il Calcolo della Copertura rispetto al WISE passato in input del Test Set anchesso dato in input. Input: 1) 2) 3) 4) 5) 6) 7) 8) 9)

w: {WISE FILE NAME} t: {FILE TESTSET}: o: {WISE NUMBER}: (-s) (-n) (-d) (-f) (-r) (-z)

Nome del file con tutte le {WISE}-ple , il file out_p_{WISE}.txt Il Test Set per il quale si vuole calcolare la copertura Il valore del WISE usato per il calcolo della copertura Separatore dei campi del file Stampa le n-ple trovate nel file {FILE TESTSET} Stampa i dettagli, consistenti nella coppia #riga Test Set, #riga N-pla Stampa la mappa di frequenza: #riga N-pla, #occorrenze n-pla trovate Stampa la statistica (% di copertura trovata) Stampa il record del Test Set con il numero di n-ple associate

Output: 1) Le informazioni come descritto dalle opzioni (-n) , (-d), (-f), (-r) e (-z). Si noti che se non si passa almeno unopzione non viene stampato nulla. Loutput stampato a video e pu essere reindirizzato su file con le consuete operazioni di pipe del DOS (> oppure >>).

Il programma calcolaCopertura pi veloce ma richiede una memoria di sistema maggiore. Nel caso in cui la memoria di sistema non sia sufficiente, il programma sinterrompe con un overflow di memoria gestito. Il programma calcolaCoperturaSlow richiede meno memoria, ma impiega pi tempo, lavorando principalmente su file. Esempio: calcolaCopertura w: out_p_2.txt t: test_set.txt o: 2 r -f Stampa la statistica e la mappa di frequenza per il test set contenuto nel file test_set.txt rispetto al livello WISE=2.

Eseguibile Combinazioni_n_k Estrae tutte le combinazioni K a K di una stringa di lunghezza N passata in input. Input: 1) s: {STRINGA} 2) k: {k}:

Stringa in input con caratteri distinti Valore della lunghezza degli spezzoni della stringa (combinazioni K a K)

Tecniche di analisi dei requisiti e modelli software.

Pagina 135 di 144

Berta Danilo - http://www.bertadanilo.name/ Output: 2) Tutte le combinazioni della stringa K a K Loutput stampato a video e pu essere reindirizzato su file con le consuete operazioni di pipe del DOS (> oppure >>). Esempio: Combinazioni_n_k s: ABCDE k: 2 Restituisce la lista: AB AC AD BC BD CD che sono le combinazioni della stringa ABCDE prese a 2 a 2. Si noti che se la stringa contiene caratteri duplicati (ad esempio ABCBCD, che contiene il carattere B 2 volte), il programma restituisce un errore.

Eseguibili generaTestSet.exe e generaTestSetSlow.exe Crea il test set con copertura pari al WISE passato in input o pari a quella del Test Set passato anchesso in input, se minore di WISE. Il file generato esclude le n-ple contenute nel file di input {FROM FILE}, se presente. Input: 1) 2) 3) 4) 5)

w: {WISE FILE NAME} Nome del file con tutte le {WISE}-ple , il file out_p_{WISE}.txt t: {FILE TESTSET}: Il Test Set per il quale si vuole calcolare la copertura. o: {WISE NUMBER}: Il valore del WISE usato per il calcolo della copertura. (-s) Separatore dei campi del file. -f:(FROM FILE) Nome del file contenente la lista delle n-ple da non tener conto nella generazione del file di output.

Output: 3) Test set con la copertura richiesta come da parametri in input. Loutput stampato a video e pu essere reindirizzato su file con le consuete operazioni di pipe del DOS (> oppure >>).

Il programma generaTestSet pi veloce ma richiede una memoria di sistema maggiore. Nel caso in cui la memoria di sistema non sia sufficiente, il programma sinterrompe con un overflow di memoria gestito. Il programma generaTestSetSlow richiede meno memoria, ma impiega pi tempo, lavorando principalmente su file. Esempio: generaTestSet w: out_p_2.txt t: test_set.txt o: 2 f: nple.txt Genera un Test Set dal file test_set.txt con copertura pari a 2 o alla copertura del file test_set.txt se minor di 2, considerando le n-ple contenute nel file out_p_2.txt dal quale esclude le n-ple contenute nel file nple.txt. Questultimo file una lista della forma:

Tecniche di analisi dei requisiti e modelli software.

Pagina 136 di 144

Berta Danilo - http://www.bertadanilo.name/ 12 14 15 26 23 dove i numeri che compaiono sono i numeri di riga del file out_p_2.txt contenente tutte le n-ple a copertura wise=2; le n-ple contenute nel file nple.txt verranno escluse durante la generazione del test set di output. Il file con le n-ple da escludere pu essere generato con leseguibile calcolaCopertura.exe (o calcolaCoperturaSlow.exe) con la sola opzione (-n) applicato al test set dal quale di vogliono estrarre le nple coperte.

Eseguibile ProdCart.exe Genera tutte le possibili combinazioni .dei valori delle variabili definite nel file dinput Input: 1) i: {INPUT FILE NAME} Nome del file di input in cui ciascuna riga contiene tutti i valori di una variabile separate da (SEP) 2) s: (SEP): Separatore dei valori delle variabili. Il default ;. 3) (-c) Stampa dei commenti in fase di generazione delloutput. Output: 4) File contenente tutte le combinazioni possibili delle variabili di input. Loutput stampato a video e pu essere reindirizzato su file con le consuete operazioni di pipe del DOS (> oppure >>).

Il programma ProdCart generalmente molto pi veloce dei precedenti, ma nel caso in cui la memoria di sistema non sia sufficiente (ossia, quando il numero di combinazioni sia molto elevato), esce con un messaggio di overflow di memoria gestito. Esempio: ProdCart i: input.txt Genera un file con tutte le combinazioni possibili delle variabili. Se, ad esempio, il file input.txt il seguente: A1;A2;A3;A4 B1;B2;B3 C1;C2 Loutput comprendente tutte le combinazioni sar: A1;B1;C1 A1;B1;C2 A1;B2;C1 A1;B2;C2 A1;B3;C1 A1;B3;C2 A2;B1;C1 A2;B1;C2 Tecniche di analisi dei requisiti e modelli software. Pagina 137 di 144

Berta Danilo - http://www.bertadanilo.name/ A2;B2;C1 A2;B2;C2 A2;B3;C1 A2;B3;C2 A3;B1;C1 A3;B1;C2 A3;B2;C1 A3;B2;C2 A3;B3;C1 A3;B3;C2 A4;B1;C1 A4;B1;C2 A4;B2;C1 A4;B2;C2 A4;B3;C1 A4;B3;C2 ossia, tutte le combinazioni dei valori di tutte le tre variabili A,B e C, una per ciascuna riga del file di input. Si noti che le righe del file di input di ProdCart non sono etichettate come per il caso del file di input del tool batch runW (si veda il paragrafo Procedura di configurazione). In quel caso il file dinput avrebbe dovuto riportare in testa a ciascuna riga il nome della variabile (composto di una unica lettera) seguito da :, ossia: A:A1;A2;A3;A4 B:B1;B2;B3 C:C1;C2

Tale formato di file non corretto per leseguibile ProdCart.

Eseguibile reduceNple.exe Compatta quanto pi possibile le n-ple contenute nel file di input, sostituendo ai valori * dei valori specifici delle variabili e creando cos un Test Set a partire dal file delle n-ple che, pur non essendo il Test Set minimo, ridotto rispetto al Test Set Massimo (coincidente con tutte le n-ple). Il numero di record prodotti dipende, in modo non noto, dallordinamento del file delle n-ple in input. Sicuramente esiste un ordinamento del file per cui il test set di output contiene un numero minimo di Test Cases con copertura garantita a WISE, ma trovare tale ordinamento non fattibile da un punto di vista computazionale, poich troppo oneroso. Input: 1) n: {NPLE FILE}: 2) s: (SEP): File con le n-ple da ridurre Separatore dei valori delle variabili. Il default ;.

Output: 1) Test Set contenente un insieme ridotto ma non minimale con copertura pari al WISE delle n-ple passato in input. I rimanenti valori con * rappresentano i dont care; al posto di * possibile prendere un qualunque valore della variabile, senza con questo inficiare il livello di copertura al

Tecniche di analisi dei requisiti e modelli software.

Pagina 138 di 144

Berta Danilo - http://www.bertadanilo.name/ WISE. Loutput stampato a video e pu essere reindirizzato su file con le consuete operazioni di pipe del DOS (> oppure >>). Esempio: reduceNple n: out_p_1.txt Supponendo che il file out_p_1.txt sia il seguente e che garantisca una copertura 1 dei valori delle variabili A, B e C: A1;*;* A2;*;* A3;*;* A4;*;* *;B1;* *;B2;* *;B3;* *;*;C1 *;*;C2 Il test set ridotto il seguente: A1;B1;C1 A2;B2;C2 A3;B3;* A4;*;* Che, in questo caso loutput prodotto coincide anche con il test minimo, anche se nel caso generale con wise > 1 non vero.

Eseguibili di utility Gli eseguibili descritti molto brevemente di seguito non forniscono supporto diretto alla generazione e/o alla gestione dei test set, ma sono utilizzati prevalentemente dai tools batch DOS per eseguire operazioni secondarie che impossibile o quantomeno molto complesso eseguire direttamente in DOS. Tali utilities possono anche essere di una qualche utilit operativa, anche se non sono da considerarsi tout cours dei tool di test. Li documentiamo di seguito brevemente per completezza, ricordando che lanciando semplicemente il comando senza passare parametri, viene stampato (per le utility pi significative) un help riguardante la modalit di utilizzo. contrLimWise.exe: effettua il controllo dei limiti minimo e massimo dei WISE allinterno dei tools batch. Se lanciato, restituisce ko e preso a se stante non di alcuna utilit pratica e non restituisce un help relativo alla modalit di utilizzo count_line.exe: effettua il conteggio delle linee del file passato in input e lo stampa a video; se il file input.txt ha 10 linee, allora count_line input.txt restituisce 10. Se lanciato senza parametri in input restituisce un help relativo alla modalit di utilizzo. creaFileProdCart.exe: crea il file nel formato accettabile da ProdCart.exe, con le sole variabili sulle quale devono essere calcolate le combinazioni e rimpiazzando gli altri valori con *. Preso a se stante, non di alcuna utilit pratica e lanciato senza parametri restituisce un help relativo alla modalit di utilizzo.

Tecniche di analisi dei requisiti e modelli software.

Pagina 139 di 144

Berta Danilo - http://www.bertadanilo.name/ creaStringa.exe: crea una stringa contenente i nomi (singoli caratteri) delle variabili del file di input descritto nel paragrafo Procedura di configurazione. Preso a se stante, non di alcuna utilit pratica e lanciato senza parametri restituisce un help relativo alla modalit di utilizzo. runConstrains.pl: non un eseguibile propriamente detto, ma uno script Perl utilizzato dal tool runC per applicare i vincoli ai Test Set o ai file di N-ple. Da non usare direttamente, a meno che non si sia ben consci di quello che si sta facendo. uniqueRowFile.exe: non considera le linee duplicate del file passato in input e stampa a video quelle univoche. Lanciato senza parametri, restituisce un help sulla modalit di utilizzo e pu essere di utilit pratica se si hanno dei file con righe duplicate da ripulire. Questo eseguibile non utilizzato allinterno degli script di primo livello e va considerato unutility particolare che non utilizzata direttamente per la soluzione del problema diretto o inverso, ma che pu rendersi utile in casi specifici, rimanendo cos solo come utility di secondo livello.

Tecniche di analisi dei requisiti e modelli software.

Pagina 140 di 144

Berta Danilo - http://www.bertadanilo.name/

Nella prima parte abbiamo descritto tre tecniche di analisi dei requisiti: tabelle decisionali, macchine agli stati finiti e reti di Petri. Tali tecniche permettono di modellare il comportamento di unapplicazione software dai requisiti espressi in linguaggio naturale (umano). Utilizzando tali tecniche possibile rispondere alla domanda: CHE COSA FA lapplicazione software che si ha intenzione di sviluppare? Siamo nel dominio del COSA FA; le tecniche non ci dicono nulla su COME si possano fare realmente le cose che devono essere fatte. In questa seconda parte prenderemo in esame il problema di COME FAR FARE a unapplicazione software le cose che sono state descritte nei requisiti e modellati con le tecniche descritte nella prima parte; a tale scopo iniziamo a parlare dinterfacce.

Interfacce di unapplicazione software


Quando si parla di interfaccia di una applicazione software, la prima cosa che viene in mente sono le interfacce grafiche piene di pulsanti, di link e di immagini cui siamo stati abituati oramai da svariati anni dal web e da internet in generale. I pi anziani si ricordano le prime interfacce grafiche a caratteri che spopolavano alla fine degli anni 70 e anni 80. In effetti, il concetto dinterfaccia di unapplicazione software un po pi complesso. Per definire linterfaccia, occorre innanzi tutto conoscere i limiti dellapplicazione in analisi (cosa non sempre banale quando questultima di una certa consistenza), definire quali sono gli altri elementi software che interagiscono con lapplicazione stessa e infine definire quali sono le interfacce grafiche e non che permetto allutente o ad altri sistemi software di dialogare con lapplicazione. In pratica, le interfacce a unapplicazione sono sostanzialmente di due tipi: a) Interfacce software e hardware, che scambiano dati ed elaborano informazioni. Tali dati possono andare dal sistema esterno allapplicazione e in questo caso il sistema esterno funge da Server mentre lapplicazione da Client o in senso opposto e in questo caso le parti sono invertite. b) Interfacce utente, il cui compito di raccogliere linput inviato dallutente (che sempre una - o pi - persone) e di fornire in output tramite linterfaccia il risultato dellelaborazione. Tipicamente, siamo abituati a interfacce utente grafiche (le cosiddette G.U.I = Graphical User Interface) in quanto le pi diffuse ma non bisogna dimenticare interfacce utenti ad esempio vocali, che permetto di dare ordini alle applicazioni mediante la voce oppure interfacce ancora pi complesse che rendono accessibili le tecnologie informatiche alle persone affette da disabilit temporanea o permanente. Allinizio dellera informatica, le interfacce delluomo verso la macchina non erano neanche le tastiere, ma le schede perforate; poi le interfacce si sono sempre pi evolute, arrivando a quelle cui abbiamo che fare tutti i giorni; le figure che seguono intendono un po rappresentare questa evoluzione.

Tecniche di analisi dei requisiti e modelli software.

Pagina 141 di 144

Berta Danilo - http://www.bertadanilo.name/

Figura 63 Scheda perforata per inserire programmi Fortran nel Mainframe delluniversit del MissouriRolla sul finire degli anni 1970 fonte Wikipedia: http://it.wikipedia.org/wiki/File:Hollerith_card.jpg

Figura 64 Consolle di comando Linux Ubuntu con loutput del comando ps (process status), unapplicazione a tutti gli effetti !

Figura 65 Consolle di navigazione di Sonique, unapplicazione audio player con interfaccia grafica molto accattivante! Tecniche di analisi dei requisiti e modelli software. Pagina 142 di 144

Berta Danilo - http://www.bertadanilo.name/

Tecniche di analisi dei requisiti e modelli software.

Pagina 143 di 144

Berta Danilo - http://www.bertadanilo.name/

Nota conclusiva
Il presente lavoro da considerarsi in itinere; lintenzione di inserire altri argomenti ed esempi, ma non ho definito alcun piano di lavoro. Per qualunque errore e/o segnalazione di migliorie e/o commenti potete scrivermi direttamente alle-mail: berta_danilo@hotmail.com oppure usare il form dei contatti che trovate sul mio sito internet http://www.bertadanilo.name . Quest' opera distribuita con licenza Creative Commons Attribuzione - Non commerciale 3.0 Italia.

Tecniche di analisi dei requisiti e modelli software.

Pagina 144 di 144

Potrebbero piacerti anche