Elaborato guercia mariateresa n46000548

Scuola Politecnica e delle Scienze di Base
Corso di Laurea in Ingegneria Informatica
Elaborato Finale in Ingegneria del Software
Tecniche e strumenti per il testing di modelli
software Matlab/Simulink
Anno Accademico 2013/2014
Candidata
Mariateresa Guercia
matr. N46000548
Indice
Introduzione
i
1
Software Testing
1.1 Tecniche di Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Da Model Based a Model Driven . . . . . . . . . . . . . . . . . . . . . . .
1.2.1 Testing Model Based . . . . . . . . . . . . . . . . . . . . . . . . . .
1
5
6
7
2
Software Verification & Validation
2.1 Gli approcci per le attività di verifica e validazione . . . . . . . . . . . . .
8
9
3
Simulazione
10
3.1 Matlab & Simulink Verification and Validation . . . . . . . . . . . . . . . 10
4
Conclusioni
27
Bibliografia
27
2
Introduzione
Il testing è un procedimento utilizzato durante il ciclo di vita di un software, per
determinare eventuali difetti, testando i singoli componenti del programma. In particolare l’obiettivo del testing è quello di confermare che il sistema soddisfi i suoi requisiti
funzionali e non funzionali e che non abbia comportamenti imprevisti. Per controllare
che un determinato sistema funzioni correttamente bisogna utilizzare un insieme di test
case ossia, un insieme di condizioni o variabli che determinano se un applicazione o un
sistema software rispondono correttamente, mostrando eventuali difetti, controllando gli
output attesi in corrispondenza di un insieme di test di input. Il test non può dimostrare
che un sistema è privo di difetti o che si comporterà come specificato in ogni circostanza,
è sempre possibile scoprire ulteriori problemi, come disse Edsger Dijkstra:
Il testo può solo mostrare la presenza degli errori, non la loro assenza.
Un testing esaustivo è impossibile da realizzare quindi ci si affida ad un insieme di test
case possibili.
Struttura dell’elaborato Nell’elaborato viene presentato un approccio Model Based
per il testing di modelli software tramite l’utilizzo di Matlab/Simulink che rappresenta un
ambiente grafico per la simulazione multidominio e il Model-Based Design. In particolare viene utilizzato Simulink Verification and Validation che configura i modelli simulink
per il testing testandone l’accuratezza e la copertura e verificando formalmente il comporamento del modello. Nei capitoli iniziali vengono presentate le tecniche di testing e
gli approcci per la verifica e la validazione dei modelli. I capitoli finali riportano una
breve panoramica del software utilizzato tramite esempii che illustrano il modo in cui
esso agisce sui modelli.
i
Capitolo 1
Software Testing
La fase di testing serve ad accertare che un certo sistema funzioni come specificato
dai requisiti iniziali, in particolare si cerca di trovarne eventuali difetti testando ogni
singolo componente del programma ed ogni malfunzionamento prima di essere rilasciato
all’utente finale. Il processo di test del software ha due obiettivi distinti:
• Test di convalida dimostrare allo sviluppatore e al cliente che il software soddisfi
i suoi requisiti, in particolare dovrebbe esserci almeno un test per ogni requisito
utente e di sistema, o , per i prodotti software generici, test per tutte le funzionalità
del sistema. Per tale test vengono utilizzati un insieme di casi di test ed esso ha
esito positivo se tutto funziona come ci si aspetta.
• Test dei difetti scoprire gli errori o i difetti nel software, dove il comportamento
del software è errato, indesiderato o non si conforma alle sue specifiche. Vengono
esaminati tutti i tipi di comportamenti indesiderati del sistema come crash, calcoli
errati e corruzione dei dati. Un test completato con successo è quello in cui il
sistema evidenzia un difetto che porta il sistema a comportarsi in modo errato.
Il processo di sofwtare deve quindi convincere i clienti e gli sviluppatori che il software
corrisponda a tutti i requisti richiesti e che funzioni in maniera ottimale senza mostrare
malfunzionamenti. Un modello generale della fase di testing è mostrato in figura 1.1.
1
Capitolo 1. Software Testing
2
Figura 1.1: Modello del processo di testing del software
I test cases sono specifiche degli input del test e degli output attesi dal sistema, oltre ad
una dichiarazione di cosa si sta testando. I dati del test rappresentano gli input creati
per testare il sistema e di solito vengono generati automaticamente.
Non si deve pensare che eseguendo tutti i test possibili si riesca a testare tutte le possibili
sequenze di esecuzioni del programma. Proprio per questo motivo si può affermare che
un testing esaustivo non esiste, in quanto nel campo del software vengono testati i sistemi
discreti in cui piccole variazioni dei valori di ingresso possono portare a risultati scorretti.
Vengono dunque creati un sottoinsieme di test case possibili che comprendono:
• Dati di input (test-data) per il modulo da testare.
• Descrizione della funzione interna al modulo.
• Output atteso della funzione.
Un test-case rappresenta quindi, una caratteristica, un requisito conforme alle specifiche
ed è utilizzato come unità per costruire un test. Per costruire un test-case bisogna quindi
conoscere l’output corretto per un certo input della funzione in esame , e questo va
ricavato dalle specifiche e dai documenti prodotti in fase di progettazione. Al termine
dell’esecuzione dell’input, l’output ottenuto viene memorizzato assieme al test-case e
viene confrontato con l’output atteso. Quindi un processo di testing affinchè sia di
qualità deve essere:
• Efficace: gestito tramite strategie che consentano la scoperta di quanti più difetti
possibili.
• Efficiente: deve essere in grado di trovare difetti utilizzando il minor numero
possibile di casi di test.
• Ripetibile: se l’esecuzione del caso di test influenza l’ambiente di esecuzione senza
la possibilità di ripristinarlo, ciò potrebbe non essere possibile anche nel caso in
cui nel software ci sono degli elementi indeterministici (dipendenti da input non
controllabili).
Capitolo 1. Software Testing
3
Le attività di testing si articolano su diversi livelli e le relazioni tra modelli e livelli di
testing sono esplicitate nel cosiddetto V-Model :
Figura 1.2: V-Model
in cui ogni fase è implementabile dalla documentazione dettagliata della fase precedente.
I diversi livelli di testing vengono riportati qui di seguito:
• Livello Produttore
– Testing di Unità viene eseguito da chi sviluppa il componente e riguarda le
singole unità di codice (funzioni, oggetti, componenti riusabili).
– Testing di Integrazione si occupa di trovare i difetti nel sistema tramite
l’accesso al codice sorgente. Richiede la costruzione di un sistema a partire
dai suoi componenti in modo da scoprire problemi che derivano dall’integrazione dei singoli componenti che possono essere prefabbricati, riutilizzabili o
componenti sviluppati da zero. Quindi questo tipo di testing controlla che
questi lavorino effettivamente insieme, vengano chiamati nel modo corretto
e trasferiscano i dati in tempo. Il problema che nasce in questo caso è la
difficile localizzazione degli errori, quindi si cerca di utilizzare un approccio
incrementale in modo da integrare una configurazione minima e testarla aggiungendovi poi ulteriori componenti. Per eseguire il Testing di integrazione
vengono utilizzati due approcci:
∗ Costruzione di Modelli guida(Driver) invocano l’unità sotto test,
inviandole opportuni valori, relativi al test case.
∗ Moduli fittizzi (Stub) vengono invocati dall’unità sotto test, vengono
utilizzati per simulare il funzionamento della funzione chiamata rispetto
al caso di test richiesto. Uno stub è definito come funzione fittizia la cui
correttezza è vera per ipotesi.
– Testing di Sistema vengono integrati gruppi di componenti in modo da
formare il sistema o un sotto-sistema, e i test vengono definiti in base alle
specifiche del sistema.
• Livello Cooperativo Produttore-Cliente Privilegiato
Capitolo 1. Software Testing
4
– Alpha Testing viene fatto utilizzare il sistema ad una parte di utenti reali
(nell’ambiente di produzione) prima di immetterlo nel mercato.
– Beta Testing installazione ed uso del sistema in ambiente reale prima dell’immissione sul mercato.
• Livello Utente
– Testing di Accettazione testing effettuato sull’intero sistema sulla base di
procedure approvare dal cliente, in modo che esso possa decidere se accettare
il prodotto.
In realtà nessun processo di testing risulta perfetto ,infatti esistono diversi problemi
chiave da considerare. Bisogna inanzitutto valutare i risultati del test tramite l’ Oracolo
che rappresenta un meccanismo usato per determinare se un test ha avuto successo o
è fallito e viene utilizzato confrontando l’output di un sistema sotto analisi, dato in
ingresso uno specifico caso di test, con il risultato che il prodotto dovrebbe fornire. Gli
oracoli possono essere versioni di test precedenti o sistemi prototipo e vengono eseguiti
parallelamente al programma da testare in modo da evidenziarne le differenze. Il modello
dell’oracolo è mostrato in figura 1.3 :
Figura 1.3: Oracolo
Un altro problema può essere riscontrato in fase di terminazione del testing e, siccome il
testing esaustivo è irrangiungibile, bisogna considerare alcuni criteri per valutare quando
il testing possa essere terminato. Può essere considerato un Criterio Temporale indicando
un arco di tempo predefinito, oppure possono essere definiti dei criteri di selezione dei
casi di test tramite un Criterio di Copertura.
Capitolo 1. Software Testing
1.1
5
Tecniche di Testing
Come è stato già detto in precedenza un test è formato da un insieme di casi di test,
quindi il problema sorge nella scelta di essi. I Casi di Test devono essere selezionati in
modo da ottimizzare il più possibile efficacia ed efficienza. Le due tipologie fondamentali
di criteri di selezione sono :
• Testing Black Box viene sollecitato il sistema immettendo input e osservando i
valori degli output sulla base della sola conoscenza dei requisiti del sistema senza
quindi conoscere il codice sorgente, lo stato ed il funzionamento interno dell’applicazione. In particolare vengono consultati i documenti relativi alla fase di analisi.
Lo scopo principale di questo tipo di testing è la copertura degli scenari e delle funzionalità previste nella specifica dei requisiti. Per semplificare la difficoltà legata
alla ricerca dei casi di test vengono suddivisi i possibili input in gruppi i cui elementi si ritiene che saranno trattati similaramente dal processo elaborativo (Classi
di equivalenza), in modo che chi esegue il testing eseguirà almeno un test per ogni
classe di equivalenza.
• Testing White Box è un testing di tipo strutturale poichè viene utilizzata la
struttura interna del programma per ricavare i casi di test, quindi possono essere
formulati criteri di copertura più precisi rispetto al testing black box. In questo
caso i criteri di copertura si basano sugli oggetti che compongono la struttura dei
programmi come istruzioni e strutture di controllo. Vengono definiti un insieme
di casi di test(input data) in modo tale che gli oggetti di una definita classe siano
attivati (coperti) almeno una volta nell’esecuzione del test. Il flusso di controllo
viene eseminato per verificarne la correttezza. Il codice è rappresentato tramite
un grafo, il grafo del flusso di controllo (Control Flow Graph-CFG), i cui nodi
rappresentano istruzioni e/o predicati del programma e gli archi il passaggio del
flusso di controllo. Il grafo viene esaminato per identificare le ramificazioni del flusso
di controllo e verificare l’esistenza di eventuali anomalie. Il CFG di un programma
P viene definito come:
CF G(P ) =< N, AC, nl, nF >
dove :
– < N, AC > è un grafo diretto con archi etichettati.
– Ns, Np sono insiemi disgiunti di nodi istruzione e nodi predicato.
– nl e nF sono detti rispettivamente nodo iniziale e nodo finale.
–
AC ≤ (N − {nF }) · (N − {nl}) · ({vero, f also, incond})
rappresenta la relazione del flusso di controllo.
Un nodo n ∈ N s∪{nl} ha un solo successore immediato e il suo arco uscente è etichettato
con incond, un nodo n ∈ N p ha due successori immediati e i suoi archi uscenti sono
etichettati rispettivamente con vero e falso. I Criteri di copertura utilizzati saranno
quindi i seguenti:
Capitolo 1. Software Testing
6
• Copertura dei comandi (statement test) richiede che ogni nodo del CFG
venga eseguito almeno una volta durante il testing.
• Copertura delle decisioni (branch test) richiede che ciascun arco del CFG sia
attraversato almeno una volta in modo da garantire che ogni decisione è stata sia
vera che falsa in almeno un test case.
• Copertura delle condizioni (condition test) richiede che ciascuna condizione,
nei nodi decisione di un CFG, deve essere valutata sia per valori true che false.
• Copertura delle condizioni e delle decisioni bisogna combinare la copertura
delle condizioni in modo da coprire anche tutte le decisioni.
Attraverso il CFG può essere eseguito un Testing dei cammini, infatti dato un modulo ed il suo CFG, un cammino rappresenta un’esecuione del modulo dal nodo iniziale
del CFG fino al nodo finale. Viene definito quindi il numero dei cammini linearmente
indipendenti di un programma come il numero ciclomatico di McCabe:
•
V (G) = E − N + 2
dove E = n.ro di archi in G e N = n.ro di nodi in G.
•
V (G) = P + 1
dove P = n.ro di predicati in G.
• V(G) = n.ro di regioni chiuse in G + 1.
questi cammini di base garantiscono l’esecuzione di ciascuna istruzione almeno una volta
e la copertura di tutti gli archi. Anche per il Testing dei cammini e quindi possibile
utilizzare dei Criteri di copertura dei cammini che vengono definiti come segue:
• Copertura dei cammini(path test) gli errori si verificano con più frequenza
quando vengono eseguiti dei cammini che includono particolari sequenze di nodi
decisione. Inoltre, non tutti i cammini eseguibili in un CFG possono essere eseguiti
durante il test.
• Copertura dei cammini indipendenti vengono eseguiti un numero di cammini
indipendenti di un CFG, ossia un insieme di cammini in cui nessun cammino è
completamente contenuto in un altro dell’insieme, nè è la combinazione di altri
cammini dell’insieme.
1.2
Da Model Based a Model Driven
Esiste una sostanziale differenza tra lo sviluppo di modelli Model Based rispetto a
quelli Model Driven. Nello sviluppo Model Based infatti, i modelli vengono utilizzati
durante le fasi di progettazione e implementazione, ciò comporta che le modifiche dei
Capitolo 1. Software Testing
7
requisiti e del progetto vengano effettuate direttamente sul codice. Tramite quest’approccio i modelli possono diventare inconsistenti in quanto l’aggiornamento manuale di
essi richiede molto tempo e si rischia, quindi, di non aggiornare più i modelli originali che
dopo poco tempo rischiano di diventare inutili. Per quanto riguarda lo sviluppo Model
Driven, i modelli diventano parte stessa del progetto e il codice viene generato automaticamente a partire da essi, dando più attenzione alla creazione di modelli più vicini al
dominio del problema da risolvere rispetto alla soluzione algoritmica. Questo rappresenta
un notevole vantaggio rispetto all’approccio Model Based in quanto le modifiche vengono
apportate direttamente sui modelli e non sul codice, aumentando l’efficienza del sistema
e diminuendo i costi e i tempi di sviluppo.
1.2.1
Testing Model Based
Il Testing Model Based è un software testing in cui i casi di test sono generati per
intero o in parte da un modello che descrive alcuni aspetti del sistema sotto test. Dopo
la loro esecuzione, questi casi di test possono anche essere valutati e documentati automaticamente. Il procedimento con il quale opera il testing Model Based è visualizzato
schematicamente nella seguente figura 1.4: Per eseguire il Tesing Model Based abbiamo
Figura 1.4: Overview-Model Based Testing
bisogno di alcuni elementi fondamentali. Inizialmente vengono considerati i Requisiti/Specifiche che descrivono il sistema, assolutamente necessari per costruire il modello.
Nella fase successiva, viene costruito un modello basato su questi requisiti che richiede
un enorme impegno e talvolta risulta abbastanza complesso. Alla fine vengono valutati
i test cases e i relativi scripts, generati da una parte del modello. Tramite l’utilizzo del
test oracle viene stabilito, quindi, il risultato del sistema che viene in seguito confrontato
con quello finale.
Capitolo 2
Software Verification & Validation
Quando viene sviluppato un programma, prima e durante il processo di implementazione, deve essere verificato per accettarsi che sia conforme alle sue specifiche e fornisca le
funzionalità attese dal cliente. Questi processi di analisi e convalida vengono denominati
Verification & Validation e vengono eseguiti dopo ogni stadio del processo software, dalla
revisione dei requisiti fino alla revisione dei progetti e l’ispezione del codice fino al test del
prodotto. Dunque il problema a questo punto è capire se il sistema risolve effettivamente
i problemi per cui è stato concepito e se lo fa correttamente, citando Boehm, 1979 :
• Are we building the right product?
• Are we building the product right?
che mette in evidenza la differenza concettuale tra Verifica e Convalida:
• Convalida: Stiamo costruendo il prodotto giusto
• Verifica: Stiamo costruendo il prodotto nel modo giusto
Secondo queste definizioni, il ruolo della Verifica è controllare che il software sia conforme
alle sue specifiche e soddisfi i requisiti funzionali e non funzionali. La Convalida è un
processo più generale, assicura che il sistema software rispetti le attese del cliente. In
qualche modo queste attività intendono rassicurare l’utilizzatore che il sistema è adatto
al suo scopo, cercando di stabilire, con un buon livello di confidenza, che il sistema è
adatto all’uso a cui è destinato. Questo livello di confidenza che si vuole fornire non è
un concetto assoluto, ma dipende da diversi fattori:
• Funzioni del software: il livello di confidenza richiesto dipende da quanto il software
è critico per una determinata organizzazione.
• Aspettative dell’utente: vengono dedicati maggiori sforzi alla fase di verifica e
convalida.
• Ambiente di mercato: quando un software viene messo sul mercato entra in concorrenza con altri prodotti, quindi una società può decidere di rilasciare un programma
prima di aver effettuato il debugging in modo da essere i primi nel mercato. Oppure se i clienti non vogliono pagare prezzi alti per il prodotto devono tollerare più
8
Capitolo 2. Software Verification & Validation
9
errori nel sistema. Quindi la fase di verifica e validazione deve tener conto di questi
aspetti.
In questo modo la fase di Verification & Validation ha due obiettivi fondamentali, scoprire
i difetti presenti nel sistema e verificare se il sistema è o meno utilizzabile in condizioni
operative.
2.1
Gli approcci per le attività di verifica e validazione
All’interno del processo di Verifica e Convalida ci sono due approcci complementari
al controllo e all’analisi del sistema:
• Approcci statici: in questa fase vengono analizzate le rappresentazioni del sistema
come il documento dei requisiti, i diagrammi di progettazione e il codice sorgente
del programma, utili a verificare conformità e coerenza nelle fasi di sviluppo.
• Approcci dinamici: prevedono l’esecuzione del software o dei prototipi, con i
dati di test, al fine di scoprire eventuali difetti esaminando gli output attesi.
Figura 2.1: Verifica e Convalida statica e dinamica
La figura 2.1 mostra che le ispezioni e il test giocano ruoli complementari nel processo software. La freccia indica gli stadi del processo in cui le tecniche possono essere
utilizzate. Le revisioni dei requisiti e del progetto sono le tecniche principali utilizzate
per l’individuazione degli errori nelle specifiche e nel progetto.
Capitolo 3
Simulazione
3.1
Matlab & Simulink Verification and Validation
Simulink è un ambiente grafico utilizzato per la simulazione multidominio e il ModelBased Design. Supporta la progettazione a livello di sistema, la simulazione, la generazione automatica del codice, il testing e la verifica di sistemi. Esso offre un editor grafico,
librerie di blocchi personalizzabili e solutori per la modellazione e la simulazione di sistemi dinamici. È integrato con Matlab, e consente di incorporare gli algoritmi Matlab nei
modelli e di esportare i risultati delle simulazioni in Matlab per ulteriori analisi. Il tool
utilizzato in questa simulazione è Simulink Verification and Validation utile per automatizzare il tracciamento dei requisiti, verificare la conformità dei modelli agli standard, e
analizzare la copertura del modello sott’esame. Infatti, tramite esso, è possibile creare
report dettagliati riguardo alla tracciabilità dei requisiti e sviluppare configurazioni di
controllo da condividere con i team addetti alla fase di progettazione. Per garantire che i
modelli siano accuratamente testati viene utilizzato il modello di analisi della copertura e,
la documentazione dei requisiti, viene fornira mediante modelli, casi di test e generazione
del codice.
Model Coverage aiuta a convalidare il testing di un modello misurando quanto a
fondo gli oggetti del modello sott’esame vengono testati. Lavora analizzando l’esecuzione degli oggetti che direttamente o indirettamente determinano diversi percorsi di
simulazione del modello stesso. Essa è in grado di eseguire diversi tipi di analisi di
copertura:
• Decision Coverage analizza gli elementi che rappresentano i punti di decisione
nel modello ( come ad esempio un blocco switch), determinando la percentuale del
numero totale di percorsi di simulazione, attraverso l’elemento, che la simulazione
ha effettivamente attraversato.
• Condition Coverage analizza i blocchi che in uscita presentano una combinazione
logica dei loro ingressi ( come ad esempio il blocco operatore logico) e transizioni
stateflow.
10
Capitolo 3. Simulazione
11
• Modified Condition/Decision Coverage estende la capacità di copertura delle
decisioni e delle condizioni.
• Lookup Table Coverage esamina blocchi i cui dati in uscita vengono dati da
ingressi presenti in una tabella di ingressi e uscite. Raggiunge la piena copertura
quando si esegue ogni interpolazione ed estrapolazione di ogni intervallo almeno
una volta.
• Signal Range Coverage registra i valori massimi e minimi del segnale di ciascun
blocco del modello, misurati durante la simulazioni. Solo i blocchi con segnali di
uscita ricevono copertura del campo segnale.
• Signal Size Coverage registra il minimo, il massimo e la dimensione allocata per
tutti i segnali aventi dimensione variabile in un modello.
Prima di iniziare l’analisi di copertura del modello è necessario specificare diverse opzioni. In particolare in un modello Simulink, selezionando tools -> coverage settings
possiamo visualizzare le seguenti opzioni (figura 3.1)
Figura 3.1: Coverage Settings
• Coverage in questa sezione è possibile selezionare il modello per cui si desidera
visualizzare la copertura e le metriche che devono essere utilizzate durante l’analisi.
• Results è possibile settare la destinazioni dei risultati.
• Reporting viene settato nel caso in cui si vuole visualizzare un report in HTML,
in praticolare è possibile decidere quali dati includere.
Capitolo 3. Simulazione
12
• Options vengono selezionate le opzioni per il report di copertura del modello.
• Filter viene immesso il nome del file che specifica quali oggetti del modello devono
essere esclusi dall’analisi.
É possibile creare ed eseguire un test case anche mediante due funzioni Matlab:
>> cvto=cvtest(root)
>> cvdo=cvsim(cvto)
tramite cvtest viene creato il nuovo caso di test, tramite root viene indicato il nome del
modello Simulink. Per eseguire il test case viene utilizzato il comando cvsim.
Quando si esegue un modello Simulink è possibile settare il modello in moda da visualizzare, se gli oggetti abbiano o meno copertura 100%. Dopo la simulazione infatti, gli
oggetti del modello sono evidenziati con alcuni colori in base a quanto sono coperti:
• Verde indica che quel determinato oggetto ha ricevuto una copertura completa
durante il test.
• Rosso indica che un oggetto ha ricevuto copertura incompleta.
• Grigio indice che un oggetto è stato filtrato dalla copertura.
• Non evidenziati indica che quell’oggetto non ha ricevuto copertura.
Cliccando su un oggetto evidenziato, viene visualizzata una finestra che fornisce dettagli
riguardo alla copertura registrata per tale blocco. Tramite questo software Simulink
Verification & Validation è possibile registrare la copertura anche di funzioni Matlab e di
Stateflow, registrando, per questi ultimi, l’esecuzione del grafico, l’esecuzione degli stati,
decisioni di transizioni e condizioni individuali che compongono ciascuna decisione.
Simulazione-Risposta a un sistema Quest’esempio proposto per la simulazione è
la rappresentazione tramite i blocchi presenti in Simulink della risposta a un sistema. In
particolare viene valutata la risposta al gradino e ad una sinusoide (con frequenza pari a
1), per il seguente sistema:
w(s) =
s2
s−2
+s+1
Lo schema costruito è riportato nella figura 3.2.
(3.1)
Capitolo 3. Simulazione
13
Figura 3.2: Risposta a un sistema
dove è presente un Manual Switch che, tramite un doppio clic, decide quale segnale
connettere e, un disturbo di frequenza casuale di ampiezza 0.2.
Per visualizzare la Model Coverage è stato fatto agire sul sistema una volta il gradino e
una volta la sinusoide.
Facendo agire il gradino, sono stati ottenuti i seguenti risultati (figura 3.3):
Figura 3.3: Report-Risposta a un gradino
Capitolo 3. Simulazione
14
In cui è visibile, tramite un file HTML, il risultato del test di copertura. La metrica
utilizzata per la copertura è la Signal Range che registra i valori massimi e minimi del
segnale di ciascun blocco del modello, misurati durante la simulazioni. Solo i blocchi con
segnali di uscita ricevono copertura del campo segnale.
Nel caso duale, facendo agire la sinusoide sono stati ottenuti i seguenti risultati (figura
3.4):
Figura 3.4: Report-Risposta a una sinusoide
Simulazione-Fault-Tolerant Fuel Control System Per un’analisi più dettagliata
di tutte le funzioni presenti nel testing tramite Simulink Verification & Validation per la
Model Coverage, il modello utilizzato è Fault-Tolerant Fuel Control System che rappresenta un sistema di controllo del combustibile per un motore a benzina. Esso è composto
da diversi sottosistemi, ma vengono riportati qui di seguito solamente alcuni blocchi
principali per mostrarne l’esecuzione. É un modello presente nella libreria di Simulink e
viene visualizzato immettendo la seguente funzione nel workspace di Matlab:
>> mdl=’sldemo_fuelsys’;
>> open_system(mdl)
ed è raffigurato tramite lo schema a blocchi in figura 3.5:
Capitolo 3. Simulazione
15
Figura 3.5: Fault-Tolerant Fuel Control System
Il sistema contiene quattro sensori utilizzati per determinare il tasso di carburante (throttle, velocità, ossigeno e pressione assoluta). Sono rappresentati tramite stati paralleli, ed
ognuno di essi contiene due sottostati uno normale e uno fail, fatta eccezione per il sensore di ossigeno che contiene anche uno stato di riscaldamento. L’utente può selezionare
e deselezionare ognuno dei quattro sensori per simulare i guasti. Questo viene realizzato
tramite blocchi ad interruttore manuale (facendo doppo clic sul blocco per cambiare la
posizione del commutatore). Allo stesso modo, l’utente può indurre le condizione di guasto ad un elevata velocità del motore modificando l’interruttore presente sulla sinistra.
Un Reporting table block fornisce l’input per il throttle angle e periodicamente ripete la
sequenza di dati specificati nella maschera.
Per l’esecuzione sono stati impostati i parametri per la coverage, come le metriche utilizzate e i blocchi per cui si desidera visualizzare i risultati. Dopo una prima esecuzione
viene visualizzato (figura 3.6):
Capitolo 3. Simulazione
16
Figura 3.6: Coverage - Fault-Tolerant Fuel Control System
in cui viene mostrata a colpo d’occhio la colorazione dei vari blocchi che ricevono la copertura. In particolare i due blocchi evidenziati in rosso indicano che, quegli oggetto, hanno
ricevuto una copertura incompleta, come si può anche visualizzare nelle informazioni di
quel determinato blocco (figura 3.7 , figura 3.8):
Figura 3.7: Coverage - Fuel Rate Control
Capitolo 3. Simulazione
17
Figura 3.8: Coverage - Engine Gad Dynamics
L’altro sotto sistema utilizzato è il Fuel Rate Control che utilizza i segnali di ingresso
e di retroazione dei sensori per regolare il tasso di carburante. Il modello utilizza tre
sottosistemi per attuare questa strategia (logica di controllo, calcolo del flusso d’aria,
calcolo del carburante). In condizioni di funzionamento normale, il modello stima la
portata d’aria, e, moltiplica la stima per il reciproco del rapporto desiderato per dare il
tasso di carburante. Feedback del sensore di ossigeno fornisce una regolazione ad anello
chiuso della stima, al fine di mantenere il rapporto miscela ideale. Dopo l’esecuzione la
copertura mostrata nel modello di riferimento è la seguente (figura 3.9):
Figura 3.9: Coverage - Fuel Rate Control
anche in questo caso la copertura dei vari blocchi non è ottimale in quanto gli oggetti del
modello hanno anch’essi ricevuto una copertura incompleta.
Report HTML Il software crea sempre un rapporto di copertura del modello in cui è
possibile visualizzare le seguenti informazioni:
• Coverage Summary contiene informazioni di base riguardo al modello analizzato. In particolare contiene altre due sottosezioni, una si riferisce all’inizio e alla
fine della simulazione e contiene tutti i comandi di configurazione precedenti alla
simulazione (Tests), l’altra si riferisce alla sintesti dei risultati dei vari sottosistemi
(Summary). Per il modello in figura 3.6 le informazioni visualizzate sono (figura
3.10, figura 3.11):
Capitolo 3. Simulazione
18
Figura 3.10: Coverage Summary
Capitolo 3. Simulazione
19
Figura 3.11: Coverage Summary
• Details riporta i risultati dettagliati di copertura del modello. Ogni sezione del
report riassume i risultati per parametri, che testano ogni oggetto del modello (in
particolare possono essere visualizzati anche cliccando con il tasto destro sull’oggetto e selezionando Coverage -> Report). Sono incluse le sezioni Filtered Object ,
che elenca tutti gli oggetti filtrati dalla registrazione di copertura, Model Details
che contiene un sommario dei risultati (cliccando sul nome dell’elemento viene visualizzata la scheda dettagliata), e Subsystem Details che contiene una sintesi dei
risultati del test di copertura per il sottosistema e un elenco dei sottosistemi in esso
contenuti. Nella figura 3.12 vengono visualizzati alcuni dettagli, sempre relativi al
modello di figura 3.6 :
Capitolo 3. Simulazione
20
Figura 3.12: Coverage Details
Capitolo 3. Simulazione
21
Per quanto riguarda i parametri relativi alle metriche di copertura utilizzate, le informazioni riguardano:
• Cyclomatix Complexity è visibile nel Summary per ogni oggetto presente nella gerarchia del modello. Per un sottosistema o un diagramma Stateflow questo
numero include la complessità ciclomatica per ogni suo discendente. Nella sezione
Details è presente la complessità ciclomatica per ogni oggetto.
• Decisions Analyzed elenca i possibili esiti di decisione e il numero di volte che un
risultato si è verificato in ogni prova di simulazione. I risultati che non si verificano
sono evidenziati in rosso.
• Conditions Analyzed elenca il numero di occorrenze di condizioni di vero e falso
su ogni porta in ingresso al blocco corrispondente.
• MCDC Analysis elenca le MCDC condizioni di input rappresentati dal blocco
corrispondente e la misura in cui i test riportati coprono i casi di condizione.
Nella seguente figura 3.13 vi è riportato un esempio:
Figura 3.13: Coverage Metric
Capitolo 3. Simulazione
22
Coverage - Stateflow L’ultimo schema analizzato è il Control Logic, un singolo grafico stateflow costituito da un insieme di sei stati paralleli che implementa la logica di
controllo nel suo insieme. I quattro stati paralleli visualizzati nella parte superiore corrispondono ai quattro singoli sensori, i restanti due stati paralleli in fondo considerano lo
stato dei quattro sensori contemporaneamente e determinano la funzionalità del sistema
complessivo. Per consentire le condizioni di transizione nella modalità corretta, in modo
da essere testato in maniera tempestiva, il modello è sincrono e viene eseguito in un normale intervallo di tempo campione di 0, 01s. Dopo l’esecuzione, la copertura visualizzata
per il modello sott’esame è la seguente (figura 3.14):
Figura 3.14: Coverage - Control Logic
Per i grafici Stateflow il software registra l’esecuzione del grafico stesso e l’esecuzione di
stati, decisioni di transizione e condizioni individuali che compongono ciascuna decisione.
Al termine della simulazione, il rapporto HTML , mostra quante volte viene eseguito
un sottostato sulla base della storia del superstato e ,quante volte ogni decisione di
transizione e ogni condizione è valutata come vera o falsa. Il rapporto HTML è riportato
qui di seguito (figura 3.15):
Capitolo 3. Simulazione
23
Figura 3.15: Summary - Report Control Logic
mostra i risultati di copertura per l’intero test. Ogni linea nella gerarchia riassume i
risultati di copertura di tale livello e dei livelli sottostanti. In particolare quando si
registra una copertura per un Chart Stateflow (figura 3.16)
Capitolo 3. Simulazione
24
Figura 3.16: Report Chart-Subsystem , Chart
il software mostra due tipi di copertura una per il Chart-Subsystem, che riporta i dati di
copertura per il diagramma, una volta considerato come oggetto contenitore e, un’ altra
volta considerato come insieme di stati e transizioni, e una per il Chart che, considera i
dati di copertura, per il grafico e i suoi ingressi e, per il grafico inteso come insieme di stati
e transizioni. NA indica che quella determinata metrica di copertura non è applicabile
per un Chart o un Chart-Subsystem ma è applicabile per i sue discendenti.
Per ogni stato in un diagramma, il rapporto di copertura comprende una sezione State
(figura3.17):
Capitolo 3. Simulazione
25
Figura 3.17: Report - State
con i dettagli relativi alla copertura registrata in quello stato (in particolare in figura
3.17 sono riportati i dati relativi allo stato Low emission). La copertura di decisione per
questo stato di test riporta le decisioni che indicano in quale sottostato eseguire. Le tre
decisioni riportate sono:
• Substate Executed che indica quale sottostato deve essere eseguito quando Low
emission esegue.
• Substate Exited che indica quale sottostato è attivo quando Low emission è in
uscita
• Previously che indica da quale sottostato bisogna ripartire quando Low emission
ricomincia la sua esecuzione.
Per quanto riguarda invece, il rapporto per le transizioni viene mostrato sotto la sezione
Report degli oggetti che le possiedono. Le transizioni non compaiono nella gerarchia del
modello nella sezione Summary in quanto la gerarchia si basa su superstati che possiedono
altri oggetti Stateflow. La sezione Report è mostrata nella figura 3.18:
Capitolo 3. Simulazione
26
Figura 3.18: Report-Report
le condizioni analizzate nella tabella, mostrano in ogni riga una condizione insiema al
numero registrato di occorrenze per ogni risultato (vero o falso). In particolare siccome
entrambi i risultati di decisione sono stati verificati la copertura risultante è del 100%.
Capitolo 4
Conclusioni
In questo elaborato è stato affrontato il testing di modelli software tramite lo strumento Matlab/Simulink. Dopo una breve introduzione sul procedimento di testing, è
stata posta maggiore attenzione sulla fase di testing e sulle varie tecniche utilizzate. In
particolare è stato utilizzato un tool di Simulink, Simulink Verification & Valutation allo
scopo di mostrare come, tramite questo strumento, è possibile verificare la copertura di
particolari oggetti presenti nel modello sott’esame. Inizialmente è stato presentata la
Model Coverage e come opera sui modelli analizzati, poi è stato eseguito un semplice
esempio per mostrarne alcune caratteristiche. Poi, per mostrare al meglio come lavora
questo tool di Simulink, è stato utilizzato un modello più complesso presente nella libreria di Simulink, ossia un sistema di controllo del combustibile per un motore a benzina.
Esso è composto da diversi sottosistemi, e per alcuni di essi è stata verificata la copertura
e mostrato il report HTML con dettagliato approfondimento.
27
Bibliografia
[1] Sommerville, Ian ,Ingegneria del Sofwtare, Pearson Addison-Wesley, 2007.
[2] MATLAB Documentation Center, www.mathworks.it.
28