SlideShare ist ein Scribd-Unternehmen logo
1 von 99
 




                       UNIVERSITÀ DEGLI STUDI DI FIRENZE

                            FACOLTÀ DI INGEGNERIA

            CORSO DI LAUREA SPECIALISTICA IN INGEGNERIA ELETTRONICA



        Analisi sperimentali per l’incremento
    dell’affidabilità del software per la “gestione
               distribuzione carburante”


                               Candidato:
                          Alessandro Bacioccola




Relatori:                                             Relatori esterni:
Prof. M. Catelani                                     Ing. P. Pollastri
Prof. A. Fantechi                                     Ing. L. Samori
Ing. L. Ciani                                         Dott. A. Tagliati
Ing. V. L. Scarano


                              ANNO ACCADEMICO
                                  2007-2008
A Nonno Tonino
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




Sommario


Capitolo 1 ....................................................................................................... 7

          1.1 Affidabilità del Software ................................................................. 7

          1.2 Concetti fondamentali .................................................................... 9

          1.3 Verifica e Validazione .................................................................. 13

          1.4 Pianificazione dell‟attività di test .................................................. 28

Capitolo 2 ..................................................................................................... 36

          2.1 Azienda e prodotti ........................................................................ 36

          2.2 Storia dell‟azienda ....................................................................... 37

          2.3 I prodotti dell‟azienda ................................................................... 38

          2.4 Prodotto software ........................................................................ 51

Capitolo 3 ..................................................................................................... 53

          3.1 Applicazione dei test automatici alla non regressione ................. 53

          3.2 Test automatici per la non regressione ........................................ 55

          3.3 Test di non regressione sul prodotto BasePOS ........................... 57

          3.4 Risultati ........................................................................................ 76

Capitolo 4 ..................................................................................................... 80

          4.1 Applicazione dei test automatici allo studio dei memory leaks .... 80

          4.2 Individuazione dei memory leaks ................................................. 82

          4.3 Parametri per lo studio del fenomeno .......................................... 83

          4.4 Studio dei memory leaks relativi al Passport Europe ................... 84

          4.5 Risultati ........................................................................................ 85



                                                                                                                  2
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




Conclusioni................................................................................................... 91

Appendice A ................................................................................................. 93

Bibliografia ................................................................................................... 97




                                                                                                                 3
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




                                                                  Le      attività      di      verifica     e
                                                         validazione         (V&V)        del      software
                                                         consentono           di     evidenziare           non
                                                         conformità e potenziali errori generati
                                                         nelle diverse fasi di realizzazione del
                                                         prodotto. Fino a pochi anni fa gli
                                                         sviluppatori consideravano il testing
                                                         software come secondario rispetto
                                                         allo sviluppo. Da alcuni anni si è
                                                         verificata un’inversione di tendenza e
                                                         spesso è l’attività di test ad essere il
                                                         trampolino di lancio per lo sviluppo
                                                         del prodotto; anche se essendo
                                                         un’attività molto impegnativa, il suo
                                                         costo è comparabile con quello dello
                                                         sviluppo del prodotto. In questo caso
                                                         è stato effettuato uno studio a priori
                                                         delle criticità del software in funzione
                                                         dell’uso a cui è destinato: i risultati
                                                         saranno poi utilizzati per pianificare
                                                         la stesura del codice.

                                                                  Lo standard di riferimento per
                                                         lo studio dell’affidabilità e la qualità di
                                                         un software è l’ISO 9126, dove
                                                         vengono suggerite varie tipologie di
                                                         approccio al problema. Il metodo più
                                                         utilizzato consiste nel valutare la
                                                         qualità in uso del prodotto ovvero



                                                                                                             4
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




                                                         esprimere l’efficienza e l’efficacia del
                                                         prodotto di soddisfare l’esigenze del
                                                         cliente.

                                                                  Uno dei metodi per ottimizzare
                                                         e    contemporaneamente                 ridurre      i
                                                         costi del controllo di qualità del
                                                         software         è    quello       di     adottare
                                                         metodologie di test automatico. Le
                                                         applicazioni          maggiori          del      test
                                                         automatico del software sono lo
                                                         studio della non regressione dei
                                                         guasti      all’interno       della      fase      di
                                                         accettazione del prodotto e i test di
                                                         occupazione di memoria. Dove si
                                                         esegue la ripetizione continua di
                                                         operazioni e sequenze per verificare
                                                         che le nuove funzionalità introdotte
                                                         non danneggino quelle consolidate.
                                                         Contemporaneamente                  è    possibile
                                                         valutare l’occupazione di memoria
                                                         dei vari moduli software.

                                                                  Il lavoro di tesi in esame,
                                                         svolto      in    collaborazione          con      lo
                                                         stabilimento Gilbarco Veeder – Root
                                                         di Firenze, tratta l’applicazione dei
                                                         test automatici software a questi due
                                                         problemi         canonici         del         testing




                                                                                                             5
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




                                                         software:        lo     studio       della      non
                                                         regressione e dell’occupazione di
                                                         memoria, al fine di dimostrare che
                                                         l’approccio proposto permette una
                                                         riduzione dei costi del testing a fronte
                                                         di un incremento dell’affidabilità del
                                                         prodotto.




                                                                                                             6
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




Capitolo 1


1.1 Affidabilità del Software




                                                                  Lo        studio         dell’affidabilità
                                                         software deriva dalla teoria su cui si
                                                         basa l’affidabilità hardware. Lo studio
                                                         dell’affidabilità di un software è una
                                                         disciplina che risale alla metà degli
                                                         anni ’70 e non ha ancora raggiunto
                                                         uno stato di maturità consolidata. Si
                                                         continuano a percorrere due diverse
                                                         strade:       la   modellizzazione                e     la
                                                         predizione         a     priori      dei      guasti
                                                         software, meno utilizzata a causa
                                                         dell’elevata           variabilità      di            tutti
                                                         parametri in gioco e la valutazione a
                                                         posteriori dell’affidabilità del prodotto
                                                         (verifica e validazione). Quest’ultima
                                                         tecnica       è    attualmente               la       più
                                                         utilizzata a livello industriale; pur
                                                         chiamandosi valutazione a posteriori
                                                         essa non si applica a termine del
                                                         processo produttivo ma durante tutto
                                                         il ciclo di produzione del software.
                                                         L’attività di testing inizia infatti prima



                                                                                                                  7
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




                                                         dello sviluppo con l’analisi delle
                                                         specifiche tecniche fornendo una
                                                         guida al lavoro dello sviluppatore e
                                                         prosegue nel ciclo di sviluppo e
                                                         produzione, durante il quale ad
                                                         intervalli     predefiniti       si   verifica      il
                                                         raggiungimento              degli        obbiettivi
                                                         prefissati.




                                                                                                             8
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




1.2 Concetti fondamentali




         Il concetto di affidabilità hardware e le tecniche ad esso relative sono
da tempo consolidate, resta da chiarire quale possa essere l‟applicabilità
nell‟affidabilità del software. In verità le differenze che contraddistinguono le
due realtà sono spesso di carattere prevalentemente formale più che
sostanziale; entrambe, infatti, dipendono dalle condizioni di impiego e
possono essere definite nello stesso modo con la possibilità di ottenere
                                                                          l‟affidabilità complessiva
                                                                          del sistema attraverso
                                                                          una      combinazione           del
                                                                          affidabilità         dei       vari
                                                                          moduli              che           lo
                                                                          compongono [1].

                                                                          La fonte        principale dei
                                                                          malfunzionamenti in un
                                                                          programma è costituita
                                                                          dagli      errori     commessi
Figura 1: Curva a vasca, tipico andamento del tasso di guasto di un      durante la stesura del
sistema elettronico.
                                                                         codice dallo sviluppatore,
mentre,       nel    caso       hardware,         i   malfunzionamenti             non     sono       dovuti
esclusivamente ad errori di progettazione ma anche all‟invecchiamento dei
componenti ed alla scarsa manutenzione. La correzione di un errore in un
software, solitamente, è definitiva; un malfunzionamento può verificarsi solo
se il software è utilizzato in condizioni diverse da quelle per cui è stato
sottoposto a verifica. L‟introduzione e l‟eliminazione degli errori di progetto




                                                                                                             9
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




avviene durante la fase di sviluppo, quindi ci si attende che l‟affidabilità
software vari durante tale periodo. La duplicazione di una scheda elettronica
presenta inconvenienti legati alla possibilità di incorrere in componenti
difettosi, mentre la duplicazione del software è un fatto banale dal punto di
vista dell‟affidabilità ed è eseguita oggi con altissima qualità. Generalmente il
tasso di guasto di un sistema elettronico segue il tipico andamento a vasca
(fig.1), invece l‟andamento dell‟affidabilità di un software è difficilmente
descrivibile, in quanto varia durante il processo di sviluppo ed è
successivamente costante a meno di non introdurre o rimuovere errori
mediante aggiornamenti dell‟applicativo già in uso. Alcune pubblicazioni [2]
descrivono l‟andamento del tasso di guasto di un sistema software come
riportato in figura 2.




                          Figura 2: Andamento del tasso di guasto di un software


Il tasso di guasto ha un andamento decrescente nel tempo, inizialmente
esponenziale e poi con pendenza più lieve, rispecchiando rispettivamente il



                                                                                                           10
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




periodo iniziale di sviluppo e i malfunzionamenti insorti dopo il rilascio. Il
tasso di guasto software si discosta da quello hardware nel secondo periodo
temporale (il periodo di vita del prodotto, useful life) e nel terzo (periodo dove
il software è divenuto obsoleto e non sono effettuati aggiornamenti). Nella
zona di vita utile il tasso di guasto varia ed in particolare aumenta ogni qual
volta si ha un aggiornamento, dopo l‟aggiornamento il tasso di guasto
decresce esponenzialmente e tende a restare costante fino al successivo
aggiornamento o fino a che il software non è più manutenuto [3].

         Nonostante queste differenze, è possibile sviluppare una teoria
dell‟affidabilità del software che risulti compatibile con quella hardware, che ci
permetta di calcolare i valori di affidabilità dell‟intero sistema con tecniche
combinatorie [4].

Prima di approfondire le tematiche riguardanti l‟affidabilità ed il testing del
software è necessario introdurre alcuni termini fondamentali:

                        Malfunzionamento (defect): scostamento dei risultati reali
                        ottenuti con l‟esecuzione di un programma da quelli attesi
                        (risultati ideali o da specifica). Il malfunzionamento non è
                        sempre un errore nel codice, può essere anche
                        un‟intollerabile lentezza di esecuzione del programma; la
                        definizione è volutamente generica [1].
                        Errore (bug): è un difetto a livello del programma, che al
                        momento di un esecuzione in particolari condizioni può
                        generare il manifestarsi di un malfunzionamento.
                        Tempo d’esecuzione (o di CPU): tempo per il quale la
                        CPU è effettivamente utilizzata per l‟esecuzione del
                        programma.




                                                                                                           11
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




                        Tempo calendario: è il tempo al quale siamo abituati,
                        quello che scandisce la vita quotidiana. Questo parametro
                        sarà l‟unico riferimento per l‟utente.
                        Tempo cronometrico (o clock time): tempo totale di
                        esecuzione di un programma, comprese le fasi di attesa che
                        possono essere dovute ad operazioni di I/O, a funzioni del
                        sistema operativo o all‟esecuzione concorrente di altri
                        programmi.

L’affidabilità del software è la probabilità di funzionamento di un
programma senza malfunzionamenti per un determinato tempo in un
determinato ambiente esecutivo [1].

I parametri che caratterizzano l‟affidabilità software sono:

                        MTTF: mean time                     to     failure,       tempo        medio        al
                        malfunzionamento
                        MTTR: mean time to repair (fixing), tempo medio alla
                        riparazione (alla soluzione del malfunzionamento).
                        MTBF: mean time between failure, tempo medio fra due
                        malfunzionamenti.



                                                                                                       (1.1)




         Il test del software, con tutte le procedure di verifica e validazione
attuate sul codice, rappresenta il primo passo verso la stima dell‟affidabilità
del prodotto. L‟affidabilità del software R(t) sarà calcolata secondo il modello
classico a partire da MTTF e dal tasso di guasto                           .




                                                                                                           12
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




                                                                                                        (1.2)




La formula (1.2) si basa sull‟ipotesi semplificativa che il tasso di guasto sia
costante; tale ipotesi è valida soltanto oltre il periodo iniziale dei guasti
infantili ed in assenza di aggiornamenti (figura 2). Sotto questo ipotesi è
possibile ricavare la funzione affidabilità di prodotto (1.3).




                                                                                                        (1.3)




1.3 Verifica e Validazione


    Lo standard ANSI/IEEE Std 729-1983 “Standard Glossary of Software
Engineering Terminology” [5] definisce i termini:

         Verifica: Il processo che determina se il prodotto di una certa fase del
         processo di sviluppo software è conforme ai requisiti stabiliti nelle fasi
         precedenti.
         Validazione: Il processo di valutazione che ha quale prodotto di
         indagine il software al termine del processo di sviluppo per stabilirne la
         coerenza con tutte le fasi.

Possiamo definire gli stessi due termini anche con le seguenti domande:

         Verifica: sto producendo il software in modo corretto, cioè riesco a
         valutare la coerenza di quanto prodotto da una fase o attività rispetto
         ai documenti ed elementi che sono in ingresso per quella fase?



                                                                                                           13
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




         Validazione: sto producendo il prodotto che era stato richiesto dal mio
         Cliente?

    Al fine di verificare e garantire che le caratteristiche raggiungano il livello
stabilito dalle specifiche del committente, occorre stabilire opportune prove
per ricreare il contesto tipico di interazione software-utente. Per definire le
situazioni d‟uso (Test Case) [5] devono essere note e definite le
caratteristiche di sistema: configurazione, stato iniziale prima di eseguire il
test, parametri di sistema, variabili in input ed in output, condizioni al
contorno (condizioni operative) e stato finale del sistema atteso dopo aver
eseguito il test. L‟attività di test deve sicuramente esser il frutto di un
compromesso tra la necessità di massimizzare la copertura del prodotto in
termini di verifica delle sue funzionalità e le esigenze in termini di costi e
tempo. Questo significa definire delle priorità nelle funzioni da testare in base
a criteri di frequenza di utilizzo, criticità e rischio, quindi redigere Piano di
Test (PdT) [6]. L‟attività di testing dovrebbe seguire un processo parallelo al
processo di sviluppo ed essere pianificata di conseguenza, in modo che ad
ogni fase del “prodotto software” segua, sin dagli stadi iniziali del processo,
una fase di verifica e validazione. Questo approccio consente di minimizzare
gli effetti negativi perché da luogo ad un‟attività di verifica immediata nel
corso di ciascuna fase realizzativa, all‟interno della quale gli errori che si
possono generare o insorgere (malfunzionamenti latenti) siano corretti,
riducendo così la             probabilità        che i loro effetti si propaghino alle fasi
successive dello sviluppo, con conseguenze tanto più grandi quanto più il
malfunzionamento è rilevato in ritardo. Il Piano di Test serve proprio per
guidare l‟attività di testing in tutte le differenti fasi, permette di definire la
strategia di test da utilizzare rivalutando criticamente i requisiti del prodotto,
la loro implementazione ed infine la rispondenza del prodotto a tali requisiti.




                                                                                                           14
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




La redazione del piano di test è effettuata, quando possibile, prima dell‟inizio
degli     sviluppi;      i   programmatori            saranno        guidati       nello     sviluppo        e
nell‟interpretazione delle specifiche dal PdT. In base al momento in cui viene
eseguita ed alla metodologia utilizzata, l‟attività di test può essere suddivisa
in due macro famiglie:

                        Test di progetto o di basso livello.
                        Test funzionale o di alto livello.

Test di basso livello: è il test di progetto, un test white-box, che presuppone
cioè una conoscenza sufficientemente approfondita della struttura hardware
e software del sistema. E‟ tipicamente un test preventivo, che sollecita parti
del sistema in modo da mettere in relazione diretta e biunivoca un
malfunzionamento con l‟errore che ne è causa. L‟efficienza nominale, definita
come la capacità del test di individuare malfunzionamenti riconducibili alle
cause, è tanto più elevata se il test è eseguito immediatamente dopo la fase
di progetto della parte di sistema interessata, in questo modo è più agevole
mettere in relazione malfunzionamento ed errore, inoltre la correzione è
decisamente più rapida. Questa famiglia di test è di fondamentale importanza
per evitare la migrazione degli errori, che altrimenti si tradurrebbero in
malfunzionamenti che, se intercettati in fasi successive del processo di
sviluppo o peggio ancora sul campo, ne rendono difficilmente individuabili le
cause, e la loro correzione può essere molto difficile ed onerosa. Il test di
basso livello è per definizione un test eseguito su un prototipo anche molto
grezzo del prodotto o su parti di esso;                               richiede quindi spesso la
realizzazione di simulatori di parte del prodotto o del sistema da utilizzare in
sostituzione delle parti ancora non sviluppate. Se ne conclude che il test di
basso      livello     deve      essere       eseguito        da    personale         specializzato         di
progettazione e deve essere eseguito parallelamente alla fase di sviluppo, in




                                                                                                           15
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




modo da tenere sotto controllo l‟evoluzione del prodotto individuando prima
possibile gli eventuali errori inseriti. E‟ un test principalmente mirato alla
verifica di affidabilità del prodotto, demandando tipicamente al test di alto
livello le verifiche di usabilità e manutenibilità [7].

Test di alto livello: è tipicamente un test black-box, cioè basato sull‟utilizzo
del prodotto, sull‟esercizio delle sue funzionalità, per verificarne il corretto
funzionamento o evidenziare eventuali malfunzionamenti, non conformità o
comportamenti non user friendly. E‟ quindi un test a posteriori, con il quale si
valuta il prodotto sulla base degli effetti di un eventuale errore od
imperfezione. E‟ chiaro quindi che tale metodologia risulta estremamente
poco efficiente se applicata su prodotti non ancora finiti o con un livello
elevato di imperfezioni e malfunzionamenti. Dopo l‟individuazione del
malfunzionamento infatti, deve essere ricercata la causa (errore) ed
effettuata      la    relativa      correzione         da     parte      della      progettazione          ed
eventualmente nuovamente testata per verificarne l‟eliminazione.

Il test di alto livello è mirato a valutare le caratteristiche di usabilità,
installabilità, manutenibilità e sicurezza del prodotto, essendo l‟affidabilità un
obiettivo di secondo livello: se questa non è elevata in effetti l‟efficienza del
test black-box si riduce drasticamente. Se da un lato questo tipo d‟approccio
non richiede conoscenze approfondite della struttura del prodotto e quindi
può essere affidato a personale con limitate conoscenze tecniche, dall‟altro è
decisamente più efficace se eseguito da personale che conosce le esigenze
dell‟utilizzatore e quindi il modo in cui il prodotto è effettivamente utilizzato;
questo implica che il test deve essere condotto in condizioni le più simili
possibile a quelle reali di utilizzo. Si parla di beta test quando la prova è
condotta sul luogo effettivo di funzionamento (beta test), eventualmente in
presenza del cliente.




                                                                                                           16
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




Le due macro famiglie raccolgono al proprio interno sei tipi di test:

           Alpha test
           Unit test
           Test di integrazione
           Test funzionale
           Test di accettazione
           Beta test

A questi si aggiungono altri test con funzionalità specifiche (analisi critica dei
requisiti di prodotto, test di usabilità, test sentinella, test progressivo o
regressivo e test di occupazione di memoria). La figura 3 evidenzia le varie
fasi di test all‟interno del processo produttivo del software partendo
dall‟analisi dei requisiti fino al rilascio del prodotto sul mercato. Della famiglia
dei test di basso livello fanno parte le prime due fasi di test: alpha-test e unit
test, mentre della seconda famiglia fanno parte le restanti tipologie di test:
integrazione, funzionale, accettazione e beta. Il test di basso livello è compito
del team di sviluppo mentre il test di alto livello è eseguito e pianificato dal
reparto di qualità in piena autonomia. Il reparto di sviluppo software dopo
aver analizzato le specifiche funzionali fornite dal PM1 inizia lo sviluppo al
termine del quale esegue l‟alpha test e lo unit test. Se durante queste prove il
prodotto presenta problemi, non arriva alla fase successiva, altrimenti è
rilasciato al reparto di qualità. Il team di verifica e validazione che riceve il
prodotto per prima cosa prende visione della documentazione che
accompagna il prodotto; dopo di che inizia le verifiche.




1
    PM: Project Manager




                                                                                                           17
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




                   Figura 3: Fasi del test software all’interno del processo produttivo



                                                                                                           18
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




Il reparto esegue il test di integrazione e il test funzionale; se sono rilevati
malfunzionamenti questi sono inseriti nel sistema di tracciamento bug ed il
prodotto torna al reparto di sviluppo. Se invece si supera con esito positivo il
test funzionale si passa alla fase di accettazione che se superata può portare
al rilascio del prodotto al mercato o più comunemente alla realizzazione di
un‟istallazione pilota in accordo con il cliente (Beta test). La realizzazione di
un beta test (installazione dell‟applicativo sviluppato direttamente sul campo
sotto controllo del reparto di QA2) consente di valutare il comportamento del
software a fronte del reale stress a cui è sottoposto il prodotto una volta
rilasciato.

          Osserviamo adesso ogni singola fase del test di sistema nel dettaglio
evidenziandone i soggetti coinvolti e la modalità d‟esecuzione; le sessioni
saranno analizzate secondo l‟ordine in cui le incontra il software che dal
reparto di produzione procede verso il rilascio al mercato.

Alpha test: è la prima sessione di test a cui è sottoposto il codice, tale fase
come tutto il test di basso livello è esercitato in autonomia dal team di
sviluppo e consiste in una rapida verifica del funzionamento dell‟applicativo
realizzato. L‟alpha test mira a verificare macroscopicamente le funzionalità
del software senza sollecitare il prodotto in maniera critica come invece verrà
fatto nelle fasi successive.

Unit test: L‟unit test è l‟attività di verifica delle singole componenti di un
programma, cioè di moduli a se stanti, sotto-programmi e funzioni. E‟
eseguito sollecitando la logica interna del programma. Consente di associare




    2
        QA: Quality Assurance



                                                                                                           19
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




in modo biunivoco malfunzionamento ed errore che ne è la causa. Deve
essere eseguito in autonomia dal progettista, è infatti parte integrante della
stesura del codice e per essere efficace richiede conoscenze inerenti lo
specifico programma sotto test e il modo con cui è realizzato. Può richiedere
la stesura di software di supporto che consentano di simulare parti di
programma a cui il modulo sotto test si interfaccia. Di fatto lo unit test è
l‟attività fondamentale necessaria a garantire un livello di qualità accettabile
al software.

Test di integrazione: consiste nel verificare il corretto funzionamento di una
combinazione di componenti di un sistema. Tipicamente l‟obiettivo è
l‟individuazione di eventuali errori nell‟interfaccia tra i moduli. L‟integrazione
può ovviamente essere fatta a vari livelli: più moduli di un programma, più
sottosistemi, più sistemi che devono operare congiuntamente.

         Anche le modalità con cui l‟integrazione è fatta sono diverse; anzitutto
la scelta può essere tra integrazione in un‟unica soluzione (big bang) o in
modo incrementale. E‟ indubbio che la soluzione incrementale è di gran
lunga più efficace, perché consente di individuare in modo decisamente più
semplice il componente in cui è presente un eventuale errore.

Comunque il modo incrementale non e‟ univoco:

                   top – down: a partire dai moduli più critici per funzionalità
                   bottom – up: a partire da una struttura di base completa

         Non esiste in realtà una soluzione che a priori può essere considerata
la migliore, tipicamente è opportuno decidere caso per caso adattandosi alle
caratteristiche del sistema e al suo livello di evoluzione; tanto che in alcuni
casi potrebbe essere più efficace seguire semplicemente il criterio dell‟ordine
di disponibilità dei moduli.



                                                                                                           20
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




         Tipicamente il criterio da utilizzare è quello che rende minimo il
software di supporto da realizzare, per minimizzare i costi e l‟introduzione di
malfunzionamenti collaterali. Il test di integrazione richiede, per essere
efficiente, una decisione strategica su come affrontarlo e una ben definita
pianificazione.

Test funzionale o di sistema: è un test complessivo del sistema realizzato,
che esercita le funzioni del prodotto sulla base dei requisiti definiti nella
specifica funzionale. L‟ideale sarebbe poter disporre del manuale d‟uso
dell‟apparecchiatura, che però raramente in questa fase del processo di
sviluppo è disponibile anche a livello di bozza. In questa fase si tiene conto
di tutti i potenziali utilizzatori del sistema e di conseguenza si va ad esercitare
il sistema dal punto di vista di ciascuno di essi, comprendendo le funzioni di
servizio: installabilità, usabilità, affidabilità, manutenibilità, sicurezza e
rispondenza agli aspetti normativo-legali applicabili al prodotto. Il test deve
essere naturalmente condotto esercitando le funzioni secondo le modalità di
utilizzo previste; ma devono essere valutate anche condizioni di utilizzo
improprio o comunque diverse da quelle progettate, ma comunque possibili e
probabili. Laddove possibile ed applicabile è raccomandabile l‟analisi del
sistema che utilizzi strumenti quali diagrammi degli stati (è molto diffusa la
rappresentazione FSM, Macchina a Stati Finiti), che rendono più agevole una
valutazione della copertura delle funzionalità e delle modalità di utilizzo. Altro
aspetto importante è costituito dalla verifica di performance del sistema che
deve essere posto sotto stress sia nelle condizioni operative e nei limiti
previsti, che in condizioni estreme e quindi oltre i limiti massimi.

         La valutazione del prodotto non deve inoltre limitarsi alla ricerca di
possibili malfunzionamenti ma anche all‟usabilità del sistema e quindi ad




                                                                                                           21
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




aspetti relativi a facilità d‟uso, velocità di esecuzione e gradevolezza
dell‟interfaccia.

Test di accettazione: Serve per verificare la conformità del prodotto ai
requisiti espressi dal cliente/mercato. E‟ tipicamente l‟ultima fase del
processo di sviluppo prima dell‟installazione del prodotto su vasta scala. E‟
un test snello e rapido mirato a confermare il corretto funzionamento,
effettuato al momento in cui, in base ai risultati delle fasi di test precedenti, si
è confidenti sull‟assenza di malfunzionamenti significativi del prodotto. Si
concentra su installabilità, usabilità, manutenibilità, sicurezza e rispondenza
agli aspetti normativo-legali applicabili al prodotto. In questa fase sono messi
sotto test anche i documenti che accompagnano il prodotto, quali ad esempio
le istruzioni di uso, installazione e manutenzione, che costituiscono parte
integrante del prodotto.

         Per sua natura il test di accettazione dovrebbe essere condotto alla
presenza del cliente o quantomeno del cliente interno, cioè colui che ha
commissionato (responsabile di prodotto/responsabile di progetto, PM) il
lavoro e che può in questo modo rendersi conto se il prodotto risponde a
quanto richiesto. Il test di accettazione potrebbe essere in effetti concordato
con il cliente e l‟esito positivo sottoscritto per approvazione dalle parti. In
pratica i test effettuati possono essere una selezione dei test funzionali e di
sistema comprendono tipicamente test di non–regressione. Salvo accordi
formali con il cliente, il test di accettazione è l‟occasione per una valutazione
finale della conformità del prodotto a beneficio del cliente interno (PM): in
questo caso il set minimo di test da eseguire è costituito da una sessione di
test di non-regressione sui test falliti e risolti nelle fasi precedenti e una
selezione dei test funzionali basata sulla priorità e criticità delle funzioni
implementate. Le condizioni operative devono essere il più possibile quelle




                                                                                                           22
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




reali e deve essere valutato il comportamento del sistema fino ai suoi limiti di
funzionamento. Il test di accettazione si presta anche particolarmente a
valutazioni comparative di prodotti similari, precedenti o concorrenti.

Beta test: questa fase prevede il rilascio del prodotto verso alcuni clienti
fidelizzati. Il software è costantemente monitorato dal reparto di qualità
durante l‟utilizzo. Nella selezione dei siti prescelti per le prove di campo
occorre molta attenzione per quanto riguarda configurazione; è necessario
infatti poter contare su un campione significativo di casi per garantire in tempi
ragionevoli la copertura del maggior numero di funzionalità del prodotto.
Questa sessione di test rappresenta il primo impatto del prodotto sul campo, i
clienti scelti devono essere opportunamente preparati al verificarsi di possibili
malfunzionamenti. Quando il beta test è superato con esito positivo il
software è rilasciato per la diffusione su larga scala.

         Le sei fasi di test elencate in queste pagine rappresentano le sessioni
canoniche del test software a queste se ne possono aggiungere altre
rispondenti ad esigenze specifiche; tali fasi possono essere incorporate nei
test svolti durante il ciclo di produzione oppure esternamente al processo
produttivo.

Analisi critica dei requisiti di prodotto: è la prima forma di verifica relativa
alla corretta e completa interpretazione dei bisogni del cliente ovvero dei
requisiti del sistema: in termini di testing questo può tradursi in un esame
critico della specifica funzionale.

         Per definire i test necessari alla verifica di conformità del prodotto è
necessario approfondire l‟analisi dei requisiti e discutere il modo con cui sono
implementati; in tal modo sarà possibile progettare i test il cui superamento
consente di stabilire la conformità del prodotto ai requisiti. Questo consente




                                                                                                           23
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




di ri-analizzare criticamente la specifica funzionale,                          quindi in definitiva i
requisiti di progetto e anche di orientare il team di progettazione, fornendo i
criteri in base ai quali il prodotto viene valutato/misurato. Il primo step di
quest‟analisi è il rilievo delle funzionalità del prodotto e la definizione del
funzionamento atteso. Tale forma di test è in pratica implicita nel lavoro di
redazione del PdT.

Test di usabilità: è concepito per verificare che il prodotto operi secondo i
desideri del cliente/utilizzatore. E‟, come dice il nome stesso, improntato alla
valutazione della facilità d‟uso e alla comprensione del suo impiego, delle
sue     potenzialità,        dell‟accessibilità,         delle      caratteristiche         di    risposta,
dell‟efficienza del sistema e dell‟interfaccia utente.

Il    test   deve       essere        condotto        con      il   diretto      coinvolgimento           del
cliente/utilizzatore o del cliente interno (committente), che normalmente è
rappresentato dal PM. Il test deve dare indicazioni sul gradimento del
prodotto e la conferma operativa di aver centrato le richieste del cliente e/o
fornire elementi per eventuali correzioni. Il test di usabilità dovrebbe essere
effettuato non appena il prodotto ha le condizioni minime per poter essere
utilizzato, pur con tutti i limiti di un prototipo ancora da sviluppare e testare in
profondità, perché in caso di esito negativo gli aggiustamenti siano meno
onerosi possibile. La prima sessione di questo tipo di test potrebbe essere
programmata durante la sessione di integrazione, o addirittura nelle prime
fasi dello sviluppo con prototipi realizzati ad hoc e tipicamente finalizzati alla
verifica e validazione dell‟interfaccia utente. In relazione all‟entità del
progetto, al contenuto innovativo del prodotto, al grado di fidelity del cliente
può essere opportuno pianificare più sessioni di test di usabilità, in modo da
mantenere sotto stretto controllo lo sviluppo del prodotto ed intervenire con
tempestività in caso di deviazioni rispetto a quanto richiesto. E‟ importante




                                                                                                           24
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




sottolineare       ancora       che      il   test    non      è    improntato         alla    ricerca      di
malfunzionamenti, che anzi è prevedibile siano presenti in quantità
significativa, particolarmente nelle prime sessioni, e quindi occorre porre
molta cura nella sua preparazione ed in particolare nella preparazione del
cliente.

Test sentinella: A causa delle controindicazioni, in termini di ridotta
efficienza del processo, del sottoporre ai test di alto livello un prodotto in una
fase troppo prematura; ovvero in presenza di un livello qualitativo non
adeguato, il processo di re-working è particolarmente oneroso in termini di
costi e tempi, si rende quindi necessaria l‟individuazione di un indice che
consenta di garantire l‟ingresso del prodotto alla fase di test funzionale al
raggiungimento di un adeguato livello qualitativo. Il test sentinella è pensato
a questo scopo. Si tratta di una sessione di test che dovrebbe fornire
indicazioni sull‟indice di qualità del prodotto con un elevato livello di
confidenza. La selezione dei test deve essere fatta con questo criterio. Il test
deve essere eseguito con modalità simili ai test di alto livello, su esemplari
dell‟apparecchiatura diversi da quelli impiegati nella fase di test di progetto e
comprendere quindi una fase di installazione e configurazione del prodotto. Il
test dovrebbe essere eseguito in collaborazione tra i team di sviluppo e di
qualità e costituisce il momento di passaggio tra le due fasi del processo di
sviluppo. Si ottimizza in tal modo il passaggio di consegne, sfruttando questa
fase operativa per il necessario training agli addetti al testing. Il test deve
essere snello e rapido e                soltanto il suo superamento con esito positivo
consentirà di procedere alla fase di prove di alto livello. Il test deve essere
mirato     all‟individuazione          di     possibili     malfunzionamenti             significativi;      è
importante che il test sia eseguito in un ambiente diverso da quello di
progetto, ma su una apparecchiatura con una configurazione il più possibile
vicina a quella di reale operatività del sistema.



                                                                                                           25
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




Test     progressivo           o    regressivo:          Per      test    progressivo         si    intende
normalmente l‟attività di testing mirata alla verifica di nuove funzionalità di un
prodotto; nel caso di un prodotto nuovo tutta l‟attività è tipicamente
inquadrabile come progressive test. Per test regressivo o di non regressione
si intende invece quell‟attività di testing mirata a verificare il corretto
funzionamento del prodotto per le funzionalità già esistenti e consolidate, a
seguito di nuovi sviluppi che hanno generato una nuova release o versione
del prodotto. E‟ tipicamente un test in positivo, cioè di conferma, dal quale ci
si aspetta in generale un esito favorevole, cioè che i requisiti di prodotto
siano ancora rispettati, ma che mira ad individuare eventuali effetti collaterali
sulle funzionalità consolidate del sistema per effetto delle modifiche eseguite.
E‟ un attività che si presta bene come test di alto livello, ma può essere
eseguita anche a livello di test di progetto. Si tratta di una fase di test molto
onerosa e ripetitiva, che può risultare particolarmente efficace soltanto se
automatizzata; in tale ottica questo lavoro si prefigge di individuare una
procedura e delle metodologie per automatizzare in maniera snella i test di
non regressione del software.

Test di occupazione memoria: I problemi di memory leak ed accesso
errato ad aree di memoria sono i malfunzionamenti software che hanno le
conseguenze più gravi sulla sicurezza e sulla disponibilità del sistema che
ospita l‟applicativo. I memory leak sono causati dall‟allocazione di memoria
che non è poi successivamente de-allocata: questo comporta un aumento
del file di paging compromettendo le prestazioni complessive del sistema.
Nel caso peggiore può verificarsi l‟esaurimento delle risorse disponibili di
memoria portando al crash dell‟applicativo [8]. Uno dei più famosi guasti
software di questo tipo si è verificato a Londra nel 1992 quando l‟applicativo
di gestione delle autoambulanze londinesi ebbe un crash dovuto a memory
leaks alle 2 del mattino, che portò al blocco dei mezzi di soccorso per oltre 2



                                                                                                           26
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




ore [9]. L‟allocazione della memoria di sistema da parte dei processi è gestita
attraverso regole impostate sul compilatore utilizzato per compilare il singolo
applicativo. Tutti i linguaggi di programmazione hanno delle regole di
gestione della memoria predefinite che sono applicate salvo una diversa
gestione definita dallo sviluppatore. Tali regole sono ottimizzate per molte
applicazioni e rappresentano un compromesso fra le varie necessità che
possono avere le diverse tipologie di programmi implementabili con il
particolare linguaggio di programmazione preso in esame. Per individuare e
correggere questi bachi si effettuano test specifici composti di poche azioni
ripetute per un numero significativo di iterazioni che vanno a sollecitare un
numero limitato di moduli di un applicativo, tipicamente anche un solo
modulo. Durante le ripetizioni è tenuta sotto controllo l‟occupazione di
memoria del modulo in test, per tracciarne l‟andamento. Se a termine prova è
individuato un andamento monotono crescente della memoria allocata, il bug
è comunicato al reparto di sviluppo per le opportune correzioni al termine
delle quali sarà replicato il test. Per effettuare questo tipo di prove si deve
obbligatoriamente ricorrere all‟automatizzazione delle sequenze, in quanto
per ottenere risultati significativi si devono eseguire molte ripetizioni di un set
limitato di operazioni. Per automatizzare le prove può essere necessario
l‟utilizzo di simulatori che per non influenzare il risultato delle prove devono
avere elevata affidabilità.




                                                                                                           27
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




1.4 Pianificazione dell’attività di test




          La redazione del PdT è attuata dal responsabile dell‟attività di testing,
che sarà supportato dal project manager e dal team leader di sviluppo. Il PdT
utilizza come documento di riferimento la specifica funzionale, ma terrà
naturalmente conto di altri documenti ritenuti utili, quali ad esempio la
specifica tecnica o report di fasi di test precedenti o di apparecchiature
similari. A seguito di variazioni dei documenti di riferimento, che abbiano
rilevanza sulla strategia di test, il PdT deve essere sottoposto a procedura di
revisione.

          Prima di qualsiasi altra considerazione è necessario allinearsi su
alcuni principi fondamentali legati all‟attività di testing. Il test di un prodotto
non può essere, in generale, esaustivo. Non è infatti ipotizzabile che sia
possibile pensare tutti i test case3 necessari alla verifica di un prodotto, né
tanto meno progettarli ed eseguirli in tutte le possibili condizioni al contorno,
con tempi e costi accettabili. L‟attività di test deve quindi esser il frutto di un
compromesso tra la necessità di massima copertura del prodotto in termini di
verifica delle sue funzionalità e le esigenze in termini di costi e tempo.
Questo significa definire delle priorità delle funzioni da testare in base a
criteri di frequenza di utilizzo, criticità e rischio. Fra gli scopi principali
dell‟attività di test ci sono i seguenti requisiti: focalizzare la fase di test
all‟effettivo utilizzo cui il prodotto è destinato e migliorare la condivisione della




    3
        Test case: situazione d‟uso, tipica sequenza operativa ipotizzata per il prodotto.



                                                                                                           28
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




strategia di test cui il prodotto deve essere sottoposto per dichiararne la
conformità ai requisiti, rendendo più oggettiva possibile la valutazione del
prodotto.

Test case: per individuare un test case devono essere note e definite le
seguenti informazioni:

              La configurazione del sistema
              Lo Stato Iniziale (SI) del sistema prima di eseguire il test
              I parametri di sistema
              Le variabili in input
              Le variabili in output
              Le condizioni al contorno (condizioni operative)
              Lo Stato Finale (SF) del sistema atteso dopo aver eseguito il test

Come abbiamo già detto non è possibile pensare tutti i test case, ovvero tutte
le sequenze che possono essere attuate con quel determinato software. Si
possono avere più sequenze che testano la medesima funzionalità. In questo
caso si parla di classe di equivalenza ovvero di un insieme di test
caratterizzati dalle seguenti proprietà:

              Sono pensati per la verifica della stessa funzionalità
              Lo stato finale atteso del sistema è lo stesso per tutti
              Se un test è in grado di rilevare un malfunzionamento allora
              qualsiasi altro test della stessa CdE (classe di equivalenza) ha la
              stessa probabilità di rilevarlo
              Se un test non è in grado di rilevare un malfunzionamento allora
              qualsiasi altro test della stessa CdE ha la stessa probabilità di
              non rilevarlo

         L‟individuazione di classi di equivalenza consente di sostituire più test
case che appartengono alla stessa CdE con uno solo rappresentativo della
stessa. Le classi di equivalenza così definite sono del tutto soggettive ed




                                                                                                           29
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




essendo il numero di test pressoché infinito anche il numero di CdE è
immenso. Occorre quindi selezionare prima le classi di equivalenza e poi
selezionare i test rappresentativi delle CdE scelte [7]. Per capire qual è il
principio di selezione attraverso le CdE, supponiamo di dover testare la
funzione f(x) che accetta ingressi (x) tali che:

                                             x ≥ 1 e x ≤ 99

E‟ ragionevole pensare che esercitare la funzione con:

              x = - 15 consenta di valutare il comportamento della funzione per
              tutti i numeri negativi
              x = 175 consenta di valutare il comportamento della funzione per
              tutti i numeri con più di 2 cifre
              x = 50 consenta di valutare il comportamento della funzione per
              tutti i multipli di 10
              x = 19, 28, 37, 46, 55, 64, 73, 82, 91 può essere un campione
              significativo del dominio a 2 cifre
              x = 0, 1, 99, 100 valori di frontiera
              x = 3, 4, 7, 8 può essere un campione significativo del dominio a 1
              cifra

Esercitando la funzione con 20 valori di ingresso ho una ragionevole
probabilità di aver coperto tutto il range di valori di uscita della funzione.

         Il grafico di figura 4 [10] mostra l‟andamento di alcune grandezze
caratteristiche al variare del numero di CdE. La probabilità di rilevare un bug




                                                                                                           30
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




ed i costi crescono all‟aumentare del numero di classi di equivalenza, mentre
la probabilità di reale utilizzo4 del sistema decresce esponenzialmente.



                      1


                                                                                  Robustezza
                                                                                  P Ril. (Bug)
                    0,5
                                                                                  Costo
                                                                                  P Reale Ut.


                      0
                                                    N.     CdE
                 Figura 4:Andamento della robustezza del sistema, probabilità di rilevare un
                 malfunzionamento, costi e probabilità del reale utilizzo del sistema in
                 funzione del numero di classi di equivalenza.


         L‟andamento della probabilità di reale utilizzo si spiega considerando
che all‟aumentare delle CdE si va a considerare situazioni di utilizzo sempre
più particolari con ingressi improbabili.

          A questo proposito è utile confrontare le classi di equivalenza
attraverso la matrice delle ipotesi (tabella 1). La matrice delle ipotesi è
realizzata per la singola funzionalità da testare e permette il confronto fra le
classi di equivalenza per tale funzionalità evidenziando per ogni classe la
probabilità di accadimento del test case considerato (p).




    4
      Probabilità di reale utilizzo del sistema: probabilità che la sequenza di test associata
alla CdE in esame sia eseguita sul campo.



                                                                                                           31
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




Tabella 1: Matrice delle ipotesi relativa alla funzionalità di prevalida di carte petrolifere, nella matrice si
considerano le carte petrolifere più comuni (EuroShell ed EssoCard); per ogni test case è riportata in
grassetto la probabilità di accadimento calcolata mediante l’analisi di dati provenienti dall’archivio GVR.


     Card check                    CdE 1                  CdE 2                    CdE 3                Note
                                                       Due carte          Due carte (Carta A e
                              Una sola carta
                                                       (Carta A e          Carta B)) da prevali
  Carte da prevali              (Carta A) da
                                                      Carta B) da           dare, la Carta B è
          dare                  prevalidare
                                                      prevalidare                 scaduta
                                    p=0,4
                                                          p=0,4                     p=0,2
   Server / client
Stampa automatica
        ticket di
   prevalidazione
Stampante off-line
    PPEU off-line



Valutazione del rischio: uno dei più efficaci criteri di selezione dei test è
quello basato sulla valutazione del rischio, inteso come prodotto della
probabilità del manifestarsi di un malfunzionamento per la gravita dei suoi
effetti. Per valutare il rischio di un malfunzionamento software si usano i
seguenti criteri:

                    Gravità degli effetti di malfunzionamento in termini di: danni
                    prodotti, tempi di indisponibilità del sistema, sanzioni, frodi, etc.
                    Criticità della funzione
                    Importanza della funzione
                    Frequenza d‟uso della funzione
                    Ripetibilità della sequenza
                    Evidenza e sensibilità al malfunzionamento




                                                                                                           32
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




         Una selezione sul criterio della criticità è utile non solo per selezionare
i test da effettuare ma anche per definire una strategia di priorità
nell‟esecuzione del testing.

         Tipicamente i malfunzionamenti si concentrano sui punti notevoli di
una funzione; punti notevoli sono i cosiddetti valori di frontiera o quelli
caratterizzati da vincoli di qualsiasi natura. I valori di frontiera di una funzione
sono tipicamente i valori estremi del suo dominio di ingresso o di uscita. I
punti di vincolo sono quelli caratterizzati da un vincolo tra input ed output la
cui natura può essere geometrica, fisica, legislativa, normativa, monetaria,
legata all‟unita di misura. Considerazioni di questo tipo, che logicamente si
prestano ad essere implementate più facilmente nel test di basso livello,
consentono l‟individuazione di test con elevata probabilità di fallire. Il
superamento con esito positivo di questi test è normalmente un indice di
buona qualità.

         La criticità di un malfunzionamento è una classificazione del bug in
funzione del sua gravità; in base a questa classificazione si decidono le
priorità di intervento sul codice, agendo prima sui bachi più critici e
successivamente sugli altri. Si possono verificare situazioni dove un software
è rilasciato in presenza di malfunzionamenti dichiarati nella sua nota di
rilascio (Release Note) purché la loro criticità sia ritenuta lieve. In seguito è
riportata la classificazione della gravità di un bug adottata in GVR [11].

              Cat. A Critici: possono causare perdite di dati e interruzione delle
              operazioni, per cui è necessario un intervento dell‟operatore per
              riattivare il processo.
              Cat.B Gravi: causano un notevole abbassamento delle prestazioni
              e/o producono risultati insignificanti costringendo l‟utente ad usare
              diversi approcci.




                                                                                                           33
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




              Cat.C Medi: il software riesce ad attivarsi automaticamente, riesce
              ad aggirare il malfunzionamento; le prestazioni           risultano
              leggermente inferiori e si riscontra una certa difficoltà ad
              interpretare il messaggio visualizzato dall‟elaboratore.
              Cat.D Bassi: non provocano alcuna diminuizione delle prestazioni
              del software in oggetto, sono per lo più errori di presentazione
              dell‟interfaccia che possono causare cattive interpretazioni.
              Cat.E Saltuari: malfunzionamenti di tipo non ripetitivo,
              l‟eliminazione del problema ha richiesto l‟implementazione di un
              nuovo algoritmo poichè non è stato possibile capire la causa SWR
              del malfunzionamento.
              Cat.F Incongruenti: il sistema pur funzionando correttamente ha
              un comportamento non conforme coi requisiti espressi nelle
              specifiche; in altre parole è stato realizzato un prodotto ben
              funzionante ma non era il prodotto che si voleva realizzare.

Tracciamento dei malfunzionamenti: Quando si ha un ciclo di produzione
del software organizzato, si ha una ben precisa definizione delle attività di
sviluppo, di testing e di produzione. Il codice prodotto è sottoposto a varie
fasi di verifica; tutti i malfunzionamenti trovati ad ogni controllo sono inseriti in
un database che permette di tracciare tutti i bug rilevati per un determinato
processo e tutte le azioni di correzione apportate al codice per la soluzione
del problema. Ogni fault è annotato segnalando la funzionalità che presenta il
problema, la sua frequenza di accadimento (se determinata), la sua criticità,
la versione del prodotto su cui è stato riscontrato il problema, l‟esatta
sequenza che riproduce il problema (se è stata individuata) e le condizioni al
contorno nel quale si verifica l‟evidenza del malfunzionamento.




                                                                                                           34
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




Il tracciamento dei malfunzionamenti ha molteplici vantaggi:

              Associa al problema le relative azioni correttive
              Se la parte di codice dove è rilevato il problema è comune a più
              progetti, tutti i progetti hanno la disponibilità delle migliorie
              apportate al codice
              Possibilità di individuare le versioni contenenti le righe di codice
              malfunzionante
              Visione completa di tutti i bug relativi ad un progetto così da poter
              pianificare le azioni correttive secondo priorità

         Il tracciamento delle versioni (versioning) durante lo sviluppo di un
prodotto software permette di tenere traccia di ogni modifica apportata al
codice, garantendo la possibilità di poter regredire ad una versione
precedente         in     ogni     momento           e    di     collegare        l‟insorgere        di    un
malfunzionamento ad una particolare versione e quindi alle modifiche ad
essa relative.




                                                                                                           35
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




Capitolo 2


2.1 Azienda e prodotti




                                                                  In questo capitolo saranno
                                                         presentati alcuni prodotti software ed
                                                         hardware           sui      quali        verranno
                                                         implementate analisi sperimentali per
                                                         l’incremento          dell’affidabilità.         Sui
                                                         prodotti scelti in funzione di esigenze
                                                         specifiche dell’azienda produttrice si
                                                         vuole dimostrare i vantaggi del test
                                                         software automatico rispetto a quello
                                                         tradizionale.




                                                                                                           36
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




2.2 Storia dell’azienda




         La Gilbarco S.p.A Italia con sede a Firenze nasce nel 1969 con il
nome di Logitron. La Logitron inizia la sua attività nel settore della
distribuzione all‟utenza dei carburanti e si specializza nei sistemi di
prepagamento con banconote. Nel 1974 sigla un accordo con la Gilbarco
Ltd. per la vendita dei propri prodotti in tutta Europa ed estende la
produzione agli erogatori con testata elettronica. Nel 1980 sviluppa e
commercializza un sistema completo per la distribuzione dei carburanti e
dieci anni dopo inizia a vendere i propri prodotti al di fuori dei confini europei.
Nel 1999 la compagnia entra a far parte del gruppo Gilbarco e nel 2000
prende il nome Marconi Commerce Systems; nel 2002 la Gilbarco è acquisita
dalla Danaher Corporation ed inizia una collaborazione strategica con la
VeederRoot con la quale completa la sua offerta di prodotti specializzati alla
distribuzione dei carburanti. L‟attuale nome dell‟azienda è Gilbarco Veeder-
Root [12].

         La Danaher Corporation è una multinazionale americana che
raggruppa con il suo marchio oltre 50 compagnie per un fatturato annuo di 9
miliardi di dollari; la multinazionale opera principalmente in sei settori
produttivi:

                        Test elettronici
                        Utensili meccanici
                        Automazione
                        Tecnologie mediche
                        Soluzioni per l‟ambiente
                        Identificazione dei prodotti


                                                                                                           37
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




         Fra le tante aziende del gruppo spiccano i nomi di Fluke, Vision
BioSystems, Red Jacket, Armstrong Tools e Raytek. Attualmente la Gilbarco
Veeder-Root è l‟unica azienda che offre prodotti e servizi per le aree di
amministrazione dei carburanti (dal punto di vista di normative a ambiente) di
gestione dei piazzali delle stazioni di servizio (pompe e controllori) e di
pagamenti automatici (POS5, BOS6) .




2.3 I prodotti dell’azienda




         Il prodotto di punta di Gilbarco è il sistema Passport che permette di
implementare la totalità della gestione di un punto di distribuzione del
carburante dal controllo delle pompe e quindi dell‟erogato (attraverso il
controllore di piazzale) alla gestione delle cisterne (mediante centraline e
sensori Veeder-Root) ai pagamenti elettronici (POS) al collegamento dei
terminali di pagamento esterni (OPT7 e Crind8) o moduli di raccolta ed invio
dati alle compagnie petrolifere (WISE9).




    5
       POS: Point Of Sale la traduzione letteraria è punto di pagamento, nella pratica
l‟acronimo POS indica un sistema in grado di accettare pagamenti elettronici.
     6
       BOS: Back Office System indica la gestione di tutto ciò che non è vendita diretta al
cliente come la gestione del magazzino, delle scorte, la gestione delle cisterne e dei modi
operativi delle pompe e del piazzale.
     7
       OPT: Outdoor Payment Terminal, terminale di pagamento esterno; è un sistema che si
interfaccia all‟utente permettendogli di accedere ai servizi offerti dal punto di distribuzione
anche senza rivolgersi al gestore dell‟impianto.



                                                                                                           38
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




   .




                                             Figura 5: Sistema Passport




Passport10: rappresenta sia un architettura hardware che software (figura 5
e 6); per quanto riguarda la parte hardware integra un elaboratore elettronico
commerciale con una scheda SPU11 o CORE12. Tutto il sistema è racchiuso




    8
        Crind: Card reader in Dispenser, lettore di carte sull‟erogatore; sono particolari
erogatori di carburante che integrano nella pompa stessa un sistema per effettuare
pagamenti elettronici.
     9
        WISE: Wireless Internet Service Enabler, è un sistema che permette di interfacciare
direttamente la stazione di servizio alla rete internet in modo tale da poter continuamente
tenere sotto controllo l‟impianto ed intervenire nel caso di malfunzionamenti (19).
     10
        In questa trattazione con la parola Passport si intenderà il prodotto Passport Europe
con personalizzazione Italia, versione del sistema installata sul territorio nazionale.
     11
         SPU: Site Processing Unit, è una scheda che offre sia un‟espansione della
connettività del PC attraverso una multi seriare che un controllo di integrità sul software
installato mediante la verifica dell‟informazioni contenute in una carta metrica collegata alla
SPU.



                                                                                                           39
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




in un robusto case che a termine dell‟assemblaggio è
piombato in modo tale da evidenziare un‟eventuale
tentativo di frode. Quando la macchina si avvia lancia
automaticamente il software di gestione rendendo
inaccessibile all‟utente tutta la macchina a meno del
software GVR13. La SPU o la CORE hanno 10 (o 20)
seriali attraverso le quali il passport è interfacciato alle
periferiche       di    piazzale        (SPOT14,         OPT,        Crind,
centraline di livello e pompe), a stampanti fiscali e
non, ai cassetti dei cassieri, a display utente ed a tutti i                      Figura 6: Passport Stand-Alone
                                                                                  (Server)
dispositivi che il gestore intende installare sulla
stazione.

         Il Passport è collegato mediante rete ADSL15, PSTN16, ISDN17 o
GPRS18 sia per effettuare transazioni elettroniche che per eseguire la
manutenzione da remoto sull‟impianto; è infatti possibile effettuare
l‟aggiornamento del software installato senza inviare un tecnico sul sito




    12
        CORE: è il cuore del sistema Passport Europe, permette di trasformare un comune
PC in un sistema in grado di gestire un intera stazione di servizio espandendone la
connettività seriale attraverso protocolli RS-232,422 e RS-485.
     13
        GVR: Gilbarco Vedeer-Root
     14
        SPOT: Secure Payment Outdoor Terminal, Terminale di pagamento esterno sicuro, è
il terminale esterno di nuova generazione nato dall‟esperienza maturata con OPT. Tale
sistema ha conseguito la certificazione EMV (Europay, Mastercard e Visa) di livello 2.
     15
         ADSL :Asymmetric Digital Subscriber Line, tecnologia che permette l‟accesso ad
internet ad alta velocità.
     16
         PSTN: Pulse Switched Telephone Network rappresenta lo standard della linea
telefonica analogica distribuita sul territorio nazionale.
     17
        ISDN: Integrated Services Digital Network, rete digitale a servizi integrati.
     18
        GPRS: General Packet Radio system, tecnologia per il trasferimento dati che sfrutta i i
canali della rete GSM con tecnologia a divisione di tempo. La tariffazione di questo servizio è
funzione dei pacchetti inviati e non della durata della connessione.



                                                                                                           40
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




                                             (tranne nei casi in cui sia necessaria una
                                             riconfigurazione hardware del sistema).

                                                      Oltre      il    75%        degli      impianti       di
                                             distribuzione italiani sono gestiti mediante il
                                             sistema Passport Europe.

                                             Terminali di pagamento esterni: il sistema
                                             OPT è il primo sistema di pagamento esterno
                                             completo sviluppato da Gilbarco (figura 7).
                                             OPT offre un alto grado di efficienza della
                                             stazione di servizio accelerando le operazioni
                                             di rifornimento con particolare riguardo alla
Figura 7:OPT installato      su   di   una
stazione di servizio.                        soddisfazione dei clienti. L‟operatività della
                                             stazione è estesa alla totalità delle 24 ore
anche quando non è presente il personale. Il terminale viene posizionato sul
piazzale della stazione ed è collegato (in genere) a tutte le pompe presenti
sull‟impianto. L‟utente si trova ad interagire con un sistema che grazie alla
presenza del display grafico risulta intuitivo e semplice; durante le normali
operazioni di pagamento delle erogazioni possono essere inviate al cliente
comunicazioni personalizzate e messaggi pubblicitari [13]. I metodi di
pagamento previsti sono banconote (di diverso taglio), carte di debito e carte
private, è sempre garantita la corrispondenza tra il carburante erogato e
l‟ammontare del pagamento il tutto verificabile attraverso la ricevuta emessa
dal terminale. L‟OPT non è solo un interfaccia attraverso cui il cliente si
relaziona alla stazione                di servizio       ma permette anche lo scarico del
carburante nelle cisterne in assenza del personale sulla stazione. Il sistema è
disponibile in varie versioni:




                                                                                                           41
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




              Stand-alone: che ha al suo interno tutta l‟intelligenza necessaria
              alla gestione della stazione di servizio.
              Slave: versione per l‟uso come terminale di piazzale asservito ad
              un‟unità centrale di stazione che controlla e gestisce tutte le
              operazioni.

         Entrambe le versioni sono dotate di colonna di sostegno che permette
l‟ancoraggio al suolo e che contiene la cassetta di sicurezza per la raccolta
delle banconote nel caso in cui il dispositivo sia equipaggiato con lettore di
banconote oltre che con lettore di carte. In Italia ci
sono oltre 10.000 OPT installati su impianti di varie
compagnie petrolifere.

    Il sistema SPOT (figura 8) appartiene alla
famiglia      di     terminali       self     service       di     ultima
generazione prodotti dalla Gilbarco Veeder-Root;
utilizza la PIN Pad SPOT M219 progettata per il
pagamento sicuro con carte di debito/credito, sia a
                                                                               Figura 8:Testata SPOT nella schermata
banda magnetica che chip. SPOT M2 è certificata:                               di IDLE.



         EMV20 Level 1
         EMV Level 2
         PCI PED21




    19
       SPOT M2 è l‟ultimo modello di terminale esterno che alla data di stesura di questo
testo è stato rilasciato al mercato; il modello SPOT M3 ha già concluso la fase di sviluppo e
sarà presto presentato.
    20
       EMV: Europay Mastercard Visa, standard nato nel 1993 dalla collaborazione dei
principali circuiti di pagamento elettronico a livello mondiale. La piattaforma fondata
(EMVCo) mira allo sviluppo dei pagamenti elettronici sicuri attraverso carte a
microprocessore (smart card).



                                                                                                           42
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




L‟elettronica di controllo e gestione della stazione di servizio è totalmente
separata da quella che gestisce i pagamenti in modo da massimizzare
prestazioni e sicurezza. Il Terminale SPOT consente il rifornimento di
carburante self service in modo semplice, veloce e sicuro garantendo la
completa gestione ed il controllo della stazione di servizio in modalità non
presidiata. Grazie a queste caratteristiche rende possibile l‟apertura senza
personale della stazione di servizio 24 ore su 24, 7 giorni su 7 [14].

         Il terminale è dotato di ampio display a colori ad alta illuminazione che
lo rende ben visibile in ogni condizione di luce, anche grazie ad un design
studiato per evitare l‟incidenza dei raggi solari. E‟ possibile abilitare una voce
guida che illustra all‟utente le varie opzioni disponibili nelle diverse fasi di
vendita. SPOT è equipaggiato con soft key retro-illuminate per le scelte
utente oltre a pulsanti dedicati alla selezione degli erogatori.

         SPOT offre un elevato standard di sicurezza sia al gestore che
all‟utente, l‟accettatore di banconote è dotato dei più sofisticati sistemi
antifrode e reiezione di falsi. Le banconote sono conservate in una colonna di
sicurezza antieffrazione certificata, ancorata al sistema di fondazioni del
terminale. La piattaforma di pagamento con carte, SPOT M2, offre la
massima garanzia di sicurezza nelle operazioni di pagamento e nel
trasferimento dei dati sensibili (PIN e dati carta). Il terminale è stato
progettato utilizzando accorgimenti per la prevenzione dal rischio di
clonazione della carta o il furto d‟identità (Dispositivo Anti-Skimming; Patent




    21
        PCI PED: Payment Card Industry – Pin Entry Device, è uno standard emergente nei
pagamenti elettronici con carte magnetiche e chip, il suo scopo è quello di definire le
caratteristiche di sicurezza dei POS nell‟accettare le carte e creare maggiore confidenza nel
titolare della carta per un suo uso diffuso.



                                                                                                           43
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




Pending). Il design del terminale è stato studiato per garantire all‟utente la
massima privacy nelle operazioni di pagamento. Il terminale è dotato di un
potente sistema diagnostico in grado di rilevare anomalie ed eventi notevoli e
gestirne la segnalazione e le eventuali contromisure.

         Il sistema controlla il piazzale, gestendo in modo completamente
automatizzato l‟autorizzazione del pagamento e l‟abilitazione al rifornimento.
Inoltre memorizza i dati relativi a tutte le transazioni eseguite ed è in grado di
fornire report contabili strutturati; esportabili via protocollo seriale su PC e
disponibili anche da remoto (opzione disponibile in combinazione con il
servizio raccolta dati del sistema WISE).

     Come OPT, SPOT consente le attività di carico in cisterna del
carburante,        anche        in     assenza       di
personale        (opzione            disponibile     in
combinazione           con      il     Sistema       di
gestione della stazione di servizio
PPEU). SPOT è disponibile in due
versioni:

         Master (Stand-alone): per il
                                                                 Figura 9:Crind nella schermata di IDLE.
         controllo integrale della stazione
         di servizio.
         Slave: terminale associato ad un server di gestione della stazione di
         servizio




                                                                                                           44
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




     Sia i terminali SPOT che OPT sono disponibili anche in modalita Crind (o
RID22, figura 9) ovvero integrati nella pompa. Questo sistema è dotato
soltanto di lettore di carte magnetiche eo chip, pertanto non è prevista la
modalità di pagamento con banconote23.

     Sono disponibili i kit di retrofit per l‟installazione di RID e Crind anche
sulle pompe già presenti sulla stazione [15].

     Oltre il 75% dei terminali esterni installati sul territorio nazionale sono
prodotti da Gilbarco.

BasePOS: è un prodotto nato quando un cliente di rilievo dell‟azienda ha
manifestato        la    volontà       di aggiornare           i   propri      impianti attualmente
equipaggiati con il sistema passport con un prodotto di nuova concezione
che mantiene il backoffice24 del sistema Passport con il frontoffice25 di una
azienda concorrente ed un hardware di un PC commerciale. Questa
soluzione comporta un notevole risparmio economico nell‟acquisto delle due
semi-parti da due software-house distinte e dal vantaggio di non essere
vincolati ad una piattaforma hardware specifica. Il sistema così realizzato è
installabile su qualsiasi PC commerciale senza dipendere da una particolare
struttura.




    22
        RID: Reader In Dispenser, Lettore nell‟erogatore integrazione dell‟OPT nella pompa di
distribuzione.
     23
        RID e CRIND sono equipaggiati soltanto con lettore di carte elettroniche, questo fa si
che il sistema non abbia una ampia diffusione sul territorio italiano dove non c‟è ancora una
cultura diffusa nell‟uso dei metodi di pagamenti elettronici.
     24
        Backoffice: parte del software relativo alla gestione dei pagamenti elettronici, del
magazzino e delle cisterne.
     25
        Frontoffice: software relativo alla gestione del piazzale (modo operativo delle pompe,
pagamento delle erogazioni e vendita diretta al cliente).



                                                                                                           45
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




         La configurazione hardware di un sistema BasePos prevede due
installazioni di base: il server ed il client (o i client). La macchina client è un
comune PC commerciale dotato di connessione di rete (necessaria per il
collegamento al server) e di almeno una porta seriale per il collegamento del
terminale POS (Point of sale).

         La macchina server è anch‟essa un PC commerciale con l‟aggiunta
però di alcune periferiche che permettono di estendere la connettività
dell‟elaboratore verso i dispositivi installati sulla stazione di servizio (pompe,
terminali esterni, e centraline di livello). Le periferiche che realizzano questi
collegamenti sono una multiseriale ed una scheda realizzata da ITL (partner
di Gilbarco nel progetto BasePos) che prende il nome di Enabler. La prima
permette il collegamento ai terminali esterni (OPT, SPOT e CRIND), ai
terminali POS ed alle centraline di livello delle cisterne mentre attraverso la
seconda si realizza il collegamento alle pompe. Il collegamento fra l‟enabler e
le pompe non è diretto ma avviene attraverso un‟ulteriore scheda chiamata
FDM (Forecourt Distribution Module, Modulo di distribuzione di piazzale).

Vediamo nel dettaglio le tre periferiche collegate al server:

         La multiseriale: che permette di avere più porte seriali per il
         collegamento alle varie periferiche esterne all‟elaboratore che
         utilizzano il protocollo RS-232.
         L’enabler: che permette il collegamento alle pompe attraverso il
         modulo del controllore di piazzale (FDM).
         Forecourt Distribution Module (FDM): è il nodo intermedio fra pompe
         ed enabler.

    La prima scheda è una normale espansione seriale di tipo commerciale,
mentre, l‟enabler ed il controllore di piazzale sono periferiche specifiche




                                                                                                           46
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




realizzate da ITL per la gestione del proprio sistema e quindi interessante
esaminarle in maniera approfondita.

Enabler (figura 10):               utilizza il
bus     standard        PCI      (Peripheral
Component           Interconnect)              e
permette         di      espandere            la
connettività dell‟elaboratore per
quanto riguarda il collegamento ai
dispositivi       del      piazzale.         La

tecnologia          realizzativa          della                        Figura 10: Scheda Enabler

scheda è a montaggio superficiale
(SMT, Surface Mount Tecnology) e permette di realizzare in unica scheda
stampata l‟intero circuito contenendone le dimensioni L‟enabler dispone di 5
canali (uscite) indipendenti per la gestione delle varie periferiche del
piazzale: 1 canale è dedicato alla gestione di IFSF LON (International
Forecourt Standard Forum LON, protocollo standard per il collegamento agli
erogatori), 3 canali configurabili per i dispositivi tradizionali del piazzale ed 1
dedicato alla gestione degli altri dispositivi del piazzale come ad esempio le
centraline di livello. La scheda è in grado di gestire una grande quantità di
protocolli proprietari e standard relativi al collegamento di periferiche di
distribuzione del carburante (erogatori, terminali esterni e centraline di
livello).

         La scheda é compatibile con tutti i sistemi operativi successivi a
Windows NT, é dotata di controlli ActiveX e supporta l‟accesso e la gestione
dei database attraverso ODBC (Open Database Connectivity).




                                                                                                           47
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




FDM: Il modulo FDM realizza il collegamento fra l„enabler
PCI e le pompe; il dispositivo è disponibile in due versioni,
una passiva ed una attiva. La versione passiva (figura 11)
è utilizzata per connettere le pompe che sfruttano il
protocollo RS-485 o lo standard IFSF-LON. Il vantaggio di
questo dispositivo è il rapporto qualità prezzo che lo rende
un‟alternativa economica ed affidabile ai dispositivi di
gestione delle pompe degli altri produttori. I protocolli non
supportati dal nodo passivo sono stati implementati nel
FDM attivo (figura 12).

                                                                                        Figura     11:    FDM
                                                                                        passivo.




                              Figura 12:FDM attivo.


         A bordo del dispositivo attivo è integrato un sistema di diagnostica
che permette di monitorare in tempo reale lo stato dei canali. In tabella 2 è
riportato il significato dei LED di diagnostica.




                                                                                                           48
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




                                  Tabella 2: Led di diagnostica FDM attivo



                         Led              Colore                  Descrizione

                                                      Indica       la     presenza        di
                         LD1              Arancio
                                                      alimentazione

                         LD2              Rosso       Dati in ricezione

                         LD3               Verde      Dati trasmessi

                                                      Il numero indica il canale e
                   LDA1      LDA8          Verde      questi led indicano il transito
                                                      dei dati sul canale




         La tipica configurazione di base di un piazzale gestito dal sistema
BasePOS è riportata in figura 13. Il sistema può avere fino ad un massimo di
4 FDM collegati al server e fino ad 8 pompe per ogni distributore di piazzale
per complessive 32 pompe (bi-lato). Ad ogni server possono essere collegati
più client ed ad ogni client può essere collegato un POS. Nello schema non è
evidenziata la connessione ai terminali esterni; posso collegare fino ad otto
terminali su ogni seriale del sistema (al massimo posso avere 32 terminali
esterni, 8 terminali per seriale per un massimo di 4 seriali impegnate). La
connessione al terminale esterno avviene mediante protocollo RS-422, la
conversione dal seriale standard (RS-232) al 422 avviene mediante un
convertitore di protocollo.




                                                                                                           49
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




                            Figura 13: Architettura tipica di un sistema BasePOS




                                    Figura 14: Insieme di prodotti GVR.




                                                                                                           50
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




Altri prodotti: oltre ai prodotti illustrati nei paragrafi precedenti, dispone di
pompe, centraline di livello e sensoristica per le cisterne, moduli WISE e car
wash (figura 14). Tutti i prodotti sono compatibili oltre che con gli altri
dispositivi GVR anche con i prodotti concorrenti dei maggiori marchi presenti
sul mercato; la compatibilità è garantita in parte direttamente a livello di
prodotto ed in parte attraverso l‟interposizione di particolari controllori di
piazzali progettati appositamente per questo scopo.




2.4 Prodotto software




         I prodotti che producono maggior volume di affari per l‟azienda sono i
software di gestione delle stazioni di servizio; questi software sono soggetti a
continue modifiche ed aggiornamenti con l‟obbiettivo di essere sempre in
accordo con le normative che li riguardano, gli standard di accettazione dei
pagamenti elettronici, le attese del cliente che si reca sull‟impianto per
effettuare il rifornimento e le richieste del committente (la compagnia
petrolifera). L‟insieme dell‟esigenze dei vari soggetti porta il ciclo vita medio
del software una volta rilasciato ad essere di tre mesi. Vista la breve vita del
prodotto è necessario che questo non presenti bug all‟interno del suo ciclo




                                                                                                           51
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




vita. L‟azienda investe numerose risorse nel controllo di qualità del prodotto o
meglio nella quality assurance26 (QA).

         Al momento che lo sviluppatore ha terminato di scrivere il codice
relativo al programma esegue l‟alpha test dopo di che il prodotto arriva
accompagnato dalla relativa release note27 al reparto del controllo di qualità.
In questa fase il personale di verifica e validazione (V&V28) esegue i test
funzionali. I problemi rilevati sono inseriti in un database per il tracciamento
dei malfunzionamenti, e sono catalogati per personalizzazione, per versione
del programma e per area funzionale.




    26
       QA: Quality assurance, significa assicurazione di qualità. E‟ il processo necessario
perché il prodotto abbia un elevato grado di qualità in uso.
    27
        Release note: documento che accompagna il software e che ne descrive le
caratteristiche e le novità rispetto ad eventuali versioni precedenti.
    28
       V&V agent: i ruoli di tutte le figure inerenti il processo di V&V saranno oggetto del
capitoli successivi.



                                                                                                           52
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




Capitolo 3


3.1 Applicazione dei test automatici alla non regressione




                                                                  In questo capitolo si presenta
                                                         la prima delle applicazioni dei test
                                                         automatici; quella relativa ai test di
                                                         non regressione. La metodologia
                                                         descritta in queste pagine è del tutto
                                                         generale e può essere utilizzata per
                                                         effettuare test di non regressione
                                                         software su qualsiasi prodotto.

                                                                  Nello specifico l’applicazione
                                                         interessa       la    non      regressione         di
                                                         BasePOS              prodotto         in      parte
                                                         internamente           ed      in     parte       da
                                                         un’azienda            esterna.          L’azienda
                                                         esterna si è fatta carico del controllo
                                                         di qualità dell’intero sistema. Questa
                                                         soluzione richiede che il prodotto
                                                         rilasciato             verso               l’azienda
                                                         responsabile          dell’integrazione          del
                                                         sistema abbia un elevato grado di
                                                         affidabilità. Le funzionalità previste
                                                         saranno tutte funzioni considerate




                                                                                                           53
Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante”




                                                         consolidate in quanto erano già
                                                         presenti nelle ultime                versioni di
                                                         Passport Europe realizzate per il
                                                         cliente e quindi tutti i test software
                                                         eseguiti sulla versione sono test di
                                                         non regressione e di verifica della
                                                         corretta integrazione fra i moduli
                                                         software.




                                                                                                           54
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale
Tesi Magistrale

Weitere ähnliche Inhalte

Was ist angesagt?

TPi: una metodologia per il miglioramento del processo di test, by Andrea Di ...
TPi: una metodologia per il miglioramento del processo di test, by Andrea Di ...TPi: una metodologia per il miglioramento del processo di test, by Andrea Di ...
TPi: una metodologia per il miglioramento del processo di test, by Andrea Di ...Codemotion
 
Test e scrum un caso reale v3.2
Test e scrum   un caso reale v3.2Test e scrum   un caso reale v3.2
Test e scrum un caso reale v3.2Ivan Fioravanti
 
Test Funzionale
Test FunzionaleTest Funzionale
Test FunzionaleIxmaSoft
 
Bli.it la-convalida [presentazione]
Bli.it la-convalida [presentazione]Bli.it la-convalida [presentazione]
Bli.it la-convalida [presentazione]BLI.IT
 
I processi di sviluppo software: l'evoluzione agile ed il DevOps
I processi di sviluppo software: l'evoluzione agile ed il DevOpsI processi di sviluppo software: l'evoluzione agile ed il DevOps
I processi di sviluppo software: l'evoluzione agile ed il DevOpsGiulio Destri
 
Come rilasciare App di Qualità
Come rilasciare App di QualitàCome rilasciare App di Qualità
Come rilasciare App di QualitàLuca Manara
 
Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...
Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...
Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...Emerasoft, solutions to collaborate
 

Was ist angesagt? (8)

TPi: una metodologia per il miglioramento del processo di test, by Andrea Di ...
TPi: una metodologia per il miglioramento del processo di test, by Andrea Di ...TPi: una metodologia per il miglioramento del processo di test, by Andrea Di ...
TPi: una metodologia per il miglioramento del processo di test, by Andrea Di ...
 
Iloveyou
IloveyouIloveyou
Iloveyou
 
Test e scrum un caso reale v3.2
Test e scrum   un caso reale v3.2Test e scrum   un caso reale v3.2
Test e scrum un caso reale v3.2
 
Test Funzionale
Test FunzionaleTest Funzionale
Test Funzionale
 
Bli.it la-convalida [presentazione]
Bli.it la-convalida [presentazione]Bli.it la-convalida [presentazione]
Bli.it la-convalida [presentazione]
 
I processi di sviluppo software: l'evoluzione agile ed il DevOps
I processi di sviluppo software: l'evoluzione agile ed il DevOpsI processi di sviluppo software: l'evoluzione agile ed il DevOps
I processi di sviluppo software: l'evoluzione agile ed il DevOps
 
Come rilasciare App di Qualità
Come rilasciare App di QualitàCome rilasciare App di Qualità
Come rilasciare App di Qualità
 
Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...
Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...
Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...
 

Ähnlich wie Tesi Magistrale

Webinar: Il “real device testing” di Perfecto Mobile per una strategia mobile...
Webinar: Il “real device testing” di Perfecto Mobile per una strategia mobile...Webinar: Il “real device testing” di Perfecto Mobile per una strategia mobile...
Webinar: Il “real device testing” di Perfecto Mobile per una strategia mobile...Emerasoft, solutions to collaborate
 
Produzione software - La qualità
Produzione software - La qualitàProduzione software - La qualità
Produzione software - La qualitàGemax Consulting
 
Competence center Application Management & Quality Assurance
Competence center Application Management  & Quality AssuranceCompetence center Application Management  & Quality Assurance
Competence center Application Management & Quality AssuranceFausto Servello
 
Presentazione circa la qualità
Presentazione circa la qualitàPresentazione circa la qualità
Presentazione circa la qualitàSERandP
 
dal test manuale al test automatico: un esempio basato sul Keyword Driven Tes...
dal test manuale al test automatico: un esempio basato sul Keyword Driven Tes...dal test manuale al test automatico: un esempio basato sul Keyword Driven Tes...
dal test manuale al test automatico: un esempio basato sul Keyword Driven Tes...Microfocusitalia
 
Per essere alla avanguardia bisogna migliorare
Per essere alla avanguardia bisogna migliorarePer essere alla avanguardia bisogna migliorare
Per essere alla avanguardia bisogna migliorareBCC-Consulting FM
 
Qualità del Software
Qualità del SoftwareQualità del Software
Qualità del SoftwareYeser Rema
 
Il dilemma del test: Manuale o Automatico?
Il dilemma del test: Manuale o Automatico?Il dilemma del test: Manuale o Automatico?
Il dilemma del test: Manuale o Automatico?Microfocusitalia
 
Alm assessment, a che livello siete?
Alm assessment, a che livello siete?Alm assessment, a che livello siete?
Alm assessment, a che livello siete?dvernole
 
Segnali dal futuro. Prevedere le prestazioni dei sistemi web ed evitare gli a...
Segnali dal futuro. Prevedere le prestazioni dei sistemi web ed evitare gli a...Segnali dal futuro. Prevedere le prestazioni dei sistemi web ed evitare gli a...
Segnali dal futuro. Prevedere le prestazioni dei sistemi web ed evitare gli a...K-Tech Formazione
 
Benchmarking - Architettura degli Elaboratori - AA 2010/2011 - UNICAM
Benchmarking - Architettura degli Elaboratori - AA 2010/2011 - UNICAMBenchmarking - Architettura degli Elaboratori - AA 2010/2011 - UNICAM
Benchmarking - Architettura degli Elaboratori - AA 2010/2011 - UNICAMNicola Paoletti
 
Vetorix - Compositi magazine - giugno 2014
Vetorix - Compositi magazine - giugno 2014Vetorix - Compositi magazine - giugno 2014
Vetorix - Compositi magazine - giugno 2014Vetorix Engineering Srl
 
Produzione software - Le metriche
Produzione software - Le metricheProduzione software - Le metriche
Produzione software - Le metricheGemax Consulting
 
01_AICQ_QOL_N.3-2007_ControlloQualità...
01_AICQ_QOL_N.3-2007_ControlloQualità...01_AICQ_QOL_N.3-2007_ControlloQualità...
01_AICQ_QOL_N.3-2007_ControlloQualità...ercolonese
 
Corporate profile at work
Corporate profile at workCorporate profile at work
Corporate profile at workbmariotti
 

Ähnlich wie Tesi Magistrale (20)

Webinar: Il “real device testing” di Perfecto Mobile per una strategia mobile...
Webinar: Il “real device testing” di Perfecto Mobile per una strategia mobile...Webinar: Il “real device testing” di Perfecto Mobile per una strategia mobile...
Webinar: Il “real device testing” di Perfecto Mobile per una strategia mobile...
 
Produzione software - La qualità
Produzione software - La qualitàProduzione software - La qualità
Produzione software - La qualità
 
Competence center Application Management & Quality Assurance
Competence center Application Management  & Quality AssuranceCompetence center Application Management  & Quality Assurance
Competence center Application Management & Quality Assurance
 
Presentazione circa la qualità
Presentazione circa la qualitàPresentazione circa la qualità
Presentazione circa la qualità
 
dal test manuale al test automatico: un esempio basato sul Keyword Driven Tes...
dal test manuale al test automatico: un esempio basato sul Keyword Driven Tes...dal test manuale al test automatico: un esempio basato sul Keyword Driven Tes...
dal test manuale al test automatico: un esempio basato sul Keyword Driven Tes...
 
Sinossi
SinossiSinossi
Sinossi
 
Per essere alla avanguardia bisogna migliorare
Per essere alla avanguardia bisogna migliorarePer essere alla avanguardia bisogna migliorare
Per essere alla avanguardia bisogna migliorare
 
Qualità del Software
Qualità del SoftwareQualità del Software
Qualità del Software
 
Il dilemma del test: Manuale o Automatico?
Il dilemma del test: Manuale o Automatico?Il dilemma del test: Manuale o Automatico?
Il dilemma del test: Manuale o Automatico?
 
Alm assessment, a che livello siete?
Alm assessment, a che livello siete?Alm assessment, a che livello siete?
Alm assessment, a che livello siete?
 
Corso progettazione
Corso progettazioneCorso progettazione
Corso progettazione
 
Produzione software
Produzione softwareProduzione software
Produzione software
 
Segnali dal futuro. Prevedere le prestazioni dei sistemi web ed evitare gli a...
Segnali dal futuro. Prevedere le prestazioni dei sistemi web ed evitare gli a...Segnali dal futuro. Prevedere le prestazioni dei sistemi web ed evitare gli a...
Segnali dal futuro. Prevedere le prestazioni dei sistemi web ed evitare gli a...
 
Benchmarking - Architettura degli Elaboratori - AA 2010/2011 - UNICAM
Benchmarking - Architettura degli Elaboratori - AA 2010/2011 - UNICAMBenchmarking - Architettura degli Elaboratori - AA 2010/2011 - UNICAM
Benchmarking - Architettura degli Elaboratori - AA 2010/2011 - UNICAM
 
Software Testing e TDD
Software Testing e TDDSoftware Testing e TDD
Software Testing e TDD
 
Vetorix - Compositi magazine - giugno 2014
Vetorix - Compositi magazine - giugno 2014Vetorix - Compositi magazine - giugno 2014
Vetorix - Compositi magazine - giugno 2014
 
Produzione software - Le metriche
Produzione software - Le metricheProduzione software - Le metriche
Produzione software - Le metriche
 
01_AICQ_QOL_N.3-2007_ControlloQualità...
01_AICQ_QOL_N.3-2007_ControlloQualità...01_AICQ_QOL_N.3-2007_ControlloQualità...
01_AICQ_QOL_N.3-2007_ControlloQualità...
 
Corporate profile at work
Corporate profile at workCorporate profile at work
Corporate profile at work
 
Iso 9001 2000 Sezione Vi.3 Vii.6
Iso 9001 2000 Sezione Vi.3 Vii.6Iso 9001 2000 Sezione Vi.3 Vii.6
Iso 9001 2000 Sezione Vi.3 Vii.6
 

Tesi Magistrale

  • 1.   UNIVERSITÀ DEGLI STUDI DI FIRENZE FACOLTÀ DI INGEGNERIA CORSO DI LAUREA SPECIALISTICA IN INGEGNERIA ELETTRONICA Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Candidato: Alessandro Bacioccola Relatori: Relatori esterni: Prof. M. Catelani Ing. P. Pollastri Prof. A. Fantechi Ing. L. Samori Ing. L. Ciani Dott. A. Tagliati Ing. V. L. Scarano ANNO ACCADEMICO 2007-2008
  • 3. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Sommario Capitolo 1 ....................................................................................................... 7 1.1 Affidabilità del Software ................................................................. 7 1.2 Concetti fondamentali .................................................................... 9 1.3 Verifica e Validazione .................................................................. 13 1.4 Pianificazione dell‟attività di test .................................................. 28 Capitolo 2 ..................................................................................................... 36 2.1 Azienda e prodotti ........................................................................ 36 2.2 Storia dell‟azienda ....................................................................... 37 2.3 I prodotti dell‟azienda ................................................................... 38 2.4 Prodotto software ........................................................................ 51 Capitolo 3 ..................................................................................................... 53 3.1 Applicazione dei test automatici alla non regressione ................. 53 3.2 Test automatici per la non regressione ........................................ 55 3.3 Test di non regressione sul prodotto BasePOS ........................... 57 3.4 Risultati ........................................................................................ 76 Capitolo 4 ..................................................................................................... 80 4.1 Applicazione dei test automatici allo studio dei memory leaks .... 80 4.2 Individuazione dei memory leaks ................................................. 82 4.3 Parametri per lo studio del fenomeno .......................................... 83 4.4 Studio dei memory leaks relativi al Passport Europe ................... 84 4.5 Risultati ........................................................................................ 85 2
  • 4. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Conclusioni................................................................................................... 91 Appendice A ................................................................................................. 93 Bibliografia ................................................................................................... 97 3
  • 5. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Le attività di verifica e validazione (V&V) del software consentono di evidenziare non conformità e potenziali errori generati nelle diverse fasi di realizzazione del prodotto. Fino a pochi anni fa gli sviluppatori consideravano il testing software come secondario rispetto allo sviluppo. Da alcuni anni si è verificata un’inversione di tendenza e spesso è l’attività di test ad essere il trampolino di lancio per lo sviluppo del prodotto; anche se essendo un’attività molto impegnativa, il suo costo è comparabile con quello dello sviluppo del prodotto. In questo caso è stato effettuato uno studio a priori delle criticità del software in funzione dell’uso a cui è destinato: i risultati saranno poi utilizzati per pianificare la stesura del codice. Lo standard di riferimento per lo studio dell’affidabilità e la qualità di un software è l’ISO 9126, dove vengono suggerite varie tipologie di approccio al problema. Il metodo più utilizzato consiste nel valutare la qualità in uso del prodotto ovvero 4
  • 6. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” esprimere l’efficienza e l’efficacia del prodotto di soddisfare l’esigenze del cliente. Uno dei metodi per ottimizzare e contemporaneamente ridurre i costi del controllo di qualità del software è quello di adottare metodologie di test automatico. Le applicazioni maggiori del test automatico del software sono lo studio della non regressione dei guasti all’interno della fase di accettazione del prodotto e i test di occupazione di memoria. Dove si esegue la ripetizione continua di operazioni e sequenze per verificare che le nuove funzionalità introdotte non danneggino quelle consolidate. Contemporaneamente è possibile valutare l’occupazione di memoria dei vari moduli software. Il lavoro di tesi in esame, svolto in collaborazione con lo stabilimento Gilbarco Veeder – Root di Firenze, tratta l’applicazione dei test automatici software a questi due problemi canonici del testing 5
  • 7. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” software: lo studio della non regressione e dell’occupazione di memoria, al fine di dimostrare che l’approccio proposto permette una riduzione dei costi del testing a fronte di un incremento dell’affidabilità del prodotto. 6
  • 8. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Capitolo 1 1.1 Affidabilità del Software Lo studio dell’affidabilità software deriva dalla teoria su cui si basa l’affidabilità hardware. Lo studio dell’affidabilità di un software è una disciplina che risale alla metà degli anni ’70 e non ha ancora raggiunto uno stato di maturità consolidata. Si continuano a percorrere due diverse strade: la modellizzazione e la predizione a priori dei guasti software, meno utilizzata a causa dell’elevata variabilità di tutti parametri in gioco e la valutazione a posteriori dell’affidabilità del prodotto (verifica e validazione). Quest’ultima tecnica è attualmente la più utilizzata a livello industriale; pur chiamandosi valutazione a posteriori essa non si applica a termine del processo produttivo ma durante tutto il ciclo di produzione del software. L’attività di testing inizia infatti prima 7
  • 9. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” dello sviluppo con l’analisi delle specifiche tecniche fornendo una guida al lavoro dello sviluppatore e prosegue nel ciclo di sviluppo e produzione, durante il quale ad intervalli predefiniti si verifica il raggiungimento degli obbiettivi prefissati. 8
  • 10. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” 1.2 Concetti fondamentali Il concetto di affidabilità hardware e le tecniche ad esso relative sono da tempo consolidate, resta da chiarire quale possa essere l‟applicabilità nell‟affidabilità del software. In verità le differenze che contraddistinguono le due realtà sono spesso di carattere prevalentemente formale più che sostanziale; entrambe, infatti, dipendono dalle condizioni di impiego e possono essere definite nello stesso modo con la possibilità di ottenere l‟affidabilità complessiva del sistema attraverso una combinazione del affidabilità dei vari moduli che lo compongono [1]. La fonte principale dei malfunzionamenti in un programma è costituita dagli errori commessi Figura 1: Curva a vasca, tipico andamento del tasso di guasto di un durante la stesura del sistema elettronico. codice dallo sviluppatore, mentre, nel caso hardware, i malfunzionamenti non sono dovuti esclusivamente ad errori di progettazione ma anche all‟invecchiamento dei componenti ed alla scarsa manutenzione. La correzione di un errore in un software, solitamente, è definitiva; un malfunzionamento può verificarsi solo se il software è utilizzato in condizioni diverse da quelle per cui è stato sottoposto a verifica. L‟introduzione e l‟eliminazione degli errori di progetto 9
  • 11. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” avviene durante la fase di sviluppo, quindi ci si attende che l‟affidabilità software vari durante tale periodo. La duplicazione di una scheda elettronica presenta inconvenienti legati alla possibilità di incorrere in componenti difettosi, mentre la duplicazione del software è un fatto banale dal punto di vista dell‟affidabilità ed è eseguita oggi con altissima qualità. Generalmente il tasso di guasto di un sistema elettronico segue il tipico andamento a vasca (fig.1), invece l‟andamento dell‟affidabilità di un software è difficilmente descrivibile, in quanto varia durante il processo di sviluppo ed è successivamente costante a meno di non introdurre o rimuovere errori mediante aggiornamenti dell‟applicativo già in uso. Alcune pubblicazioni [2] descrivono l‟andamento del tasso di guasto di un sistema software come riportato in figura 2. Figura 2: Andamento del tasso di guasto di un software Il tasso di guasto ha un andamento decrescente nel tempo, inizialmente esponenziale e poi con pendenza più lieve, rispecchiando rispettivamente il 10
  • 12. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” periodo iniziale di sviluppo e i malfunzionamenti insorti dopo il rilascio. Il tasso di guasto software si discosta da quello hardware nel secondo periodo temporale (il periodo di vita del prodotto, useful life) e nel terzo (periodo dove il software è divenuto obsoleto e non sono effettuati aggiornamenti). Nella zona di vita utile il tasso di guasto varia ed in particolare aumenta ogni qual volta si ha un aggiornamento, dopo l‟aggiornamento il tasso di guasto decresce esponenzialmente e tende a restare costante fino al successivo aggiornamento o fino a che il software non è più manutenuto [3]. Nonostante queste differenze, è possibile sviluppare una teoria dell‟affidabilità del software che risulti compatibile con quella hardware, che ci permetta di calcolare i valori di affidabilità dell‟intero sistema con tecniche combinatorie [4]. Prima di approfondire le tematiche riguardanti l‟affidabilità ed il testing del software è necessario introdurre alcuni termini fondamentali: Malfunzionamento (defect): scostamento dei risultati reali ottenuti con l‟esecuzione di un programma da quelli attesi (risultati ideali o da specifica). Il malfunzionamento non è sempre un errore nel codice, può essere anche un‟intollerabile lentezza di esecuzione del programma; la definizione è volutamente generica [1]. Errore (bug): è un difetto a livello del programma, che al momento di un esecuzione in particolari condizioni può generare il manifestarsi di un malfunzionamento. Tempo d’esecuzione (o di CPU): tempo per il quale la CPU è effettivamente utilizzata per l‟esecuzione del programma. 11
  • 13. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Tempo calendario: è il tempo al quale siamo abituati, quello che scandisce la vita quotidiana. Questo parametro sarà l‟unico riferimento per l‟utente. Tempo cronometrico (o clock time): tempo totale di esecuzione di un programma, comprese le fasi di attesa che possono essere dovute ad operazioni di I/O, a funzioni del sistema operativo o all‟esecuzione concorrente di altri programmi. L’affidabilità del software è la probabilità di funzionamento di un programma senza malfunzionamenti per un determinato tempo in un determinato ambiente esecutivo [1]. I parametri che caratterizzano l‟affidabilità software sono: MTTF: mean time to failure, tempo medio al malfunzionamento MTTR: mean time to repair (fixing), tempo medio alla riparazione (alla soluzione del malfunzionamento). MTBF: mean time between failure, tempo medio fra due malfunzionamenti. (1.1) Il test del software, con tutte le procedure di verifica e validazione attuate sul codice, rappresenta il primo passo verso la stima dell‟affidabilità del prodotto. L‟affidabilità del software R(t) sarà calcolata secondo il modello classico a partire da MTTF e dal tasso di guasto . 12
  • 14. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” (1.2) La formula (1.2) si basa sull‟ipotesi semplificativa che il tasso di guasto sia costante; tale ipotesi è valida soltanto oltre il periodo iniziale dei guasti infantili ed in assenza di aggiornamenti (figura 2). Sotto questo ipotesi è possibile ricavare la funzione affidabilità di prodotto (1.3). (1.3) 1.3 Verifica e Validazione Lo standard ANSI/IEEE Std 729-1983 “Standard Glossary of Software Engineering Terminology” [5] definisce i termini: Verifica: Il processo che determina se il prodotto di una certa fase del processo di sviluppo software è conforme ai requisiti stabiliti nelle fasi precedenti. Validazione: Il processo di valutazione che ha quale prodotto di indagine il software al termine del processo di sviluppo per stabilirne la coerenza con tutte le fasi. Possiamo definire gli stessi due termini anche con le seguenti domande: Verifica: sto producendo il software in modo corretto, cioè riesco a valutare la coerenza di quanto prodotto da una fase o attività rispetto ai documenti ed elementi che sono in ingresso per quella fase? 13
  • 15. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Validazione: sto producendo il prodotto che era stato richiesto dal mio Cliente? Al fine di verificare e garantire che le caratteristiche raggiungano il livello stabilito dalle specifiche del committente, occorre stabilire opportune prove per ricreare il contesto tipico di interazione software-utente. Per definire le situazioni d‟uso (Test Case) [5] devono essere note e definite le caratteristiche di sistema: configurazione, stato iniziale prima di eseguire il test, parametri di sistema, variabili in input ed in output, condizioni al contorno (condizioni operative) e stato finale del sistema atteso dopo aver eseguito il test. L‟attività di test deve sicuramente esser il frutto di un compromesso tra la necessità di massimizzare la copertura del prodotto in termini di verifica delle sue funzionalità e le esigenze in termini di costi e tempo. Questo significa definire delle priorità nelle funzioni da testare in base a criteri di frequenza di utilizzo, criticità e rischio, quindi redigere Piano di Test (PdT) [6]. L‟attività di testing dovrebbe seguire un processo parallelo al processo di sviluppo ed essere pianificata di conseguenza, in modo che ad ogni fase del “prodotto software” segua, sin dagli stadi iniziali del processo, una fase di verifica e validazione. Questo approccio consente di minimizzare gli effetti negativi perché da luogo ad un‟attività di verifica immediata nel corso di ciascuna fase realizzativa, all‟interno della quale gli errori che si possono generare o insorgere (malfunzionamenti latenti) siano corretti, riducendo così la probabilità che i loro effetti si propaghino alle fasi successive dello sviluppo, con conseguenze tanto più grandi quanto più il malfunzionamento è rilevato in ritardo. Il Piano di Test serve proprio per guidare l‟attività di testing in tutte le differenti fasi, permette di definire la strategia di test da utilizzare rivalutando criticamente i requisiti del prodotto, la loro implementazione ed infine la rispondenza del prodotto a tali requisiti. 14
  • 16. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” La redazione del piano di test è effettuata, quando possibile, prima dell‟inizio degli sviluppi; i programmatori saranno guidati nello sviluppo e nell‟interpretazione delle specifiche dal PdT. In base al momento in cui viene eseguita ed alla metodologia utilizzata, l‟attività di test può essere suddivisa in due macro famiglie: Test di progetto o di basso livello. Test funzionale o di alto livello. Test di basso livello: è il test di progetto, un test white-box, che presuppone cioè una conoscenza sufficientemente approfondita della struttura hardware e software del sistema. E‟ tipicamente un test preventivo, che sollecita parti del sistema in modo da mettere in relazione diretta e biunivoca un malfunzionamento con l‟errore che ne è causa. L‟efficienza nominale, definita come la capacità del test di individuare malfunzionamenti riconducibili alle cause, è tanto più elevata se il test è eseguito immediatamente dopo la fase di progetto della parte di sistema interessata, in questo modo è più agevole mettere in relazione malfunzionamento ed errore, inoltre la correzione è decisamente più rapida. Questa famiglia di test è di fondamentale importanza per evitare la migrazione degli errori, che altrimenti si tradurrebbero in malfunzionamenti che, se intercettati in fasi successive del processo di sviluppo o peggio ancora sul campo, ne rendono difficilmente individuabili le cause, e la loro correzione può essere molto difficile ed onerosa. Il test di basso livello è per definizione un test eseguito su un prototipo anche molto grezzo del prodotto o su parti di esso; richiede quindi spesso la realizzazione di simulatori di parte del prodotto o del sistema da utilizzare in sostituzione delle parti ancora non sviluppate. Se ne conclude che il test di basso livello deve essere eseguito da personale specializzato di progettazione e deve essere eseguito parallelamente alla fase di sviluppo, in 15
  • 17. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” modo da tenere sotto controllo l‟evoluzione del prodotto individuando prima possibile gli eventuali errori inseriti. E‟ un test principalmente mirato alla verifica di affidabilità del prodotto, demandando tipicamente al test di alto livello le verifiche di usabilità e manutenibilità [7]. Test di alto livello: è tipicamente un test black-box, cioè basato sull‟utilizzo del prodotto, sull‟esercizio delle sue funzionalità, per verificarne il corretto funzionamento o evidenziare eventuali malfunzionamenti, non conformità o comportamenti non user friendly. E‟ quindi un test a posteriori, con il quale si valuta il prodotto sulla base degli effetti di un eventuale errore od imperfezione. E‟ chiaro quindi che tale metodologia risulta estremamente poco efficiente se applicata su prodotti non ancora finiti o con un livello elevato di imperfezioni e malfunzionamenti. Dopo l‟individuazione del malfunzionamento infatti, deve essere ricercata la causa (errore) ed effettuata la relativa correzione da parte della progettazione ed eventualmente nuovamente testata per verificarne l‟eliminazione. Il test di alto livello è mirato a valutare le caratteristiche di usabilità, installabilità, manutenibilità e sicurezza del prodotto, essendo l‟affidabilità un obiettivo di secondo livello: se questa non è elevata in effetti l‟efficienza del test black-box si riduce drasticamente. Se da un lato questo tipo d‟approccio non richiede conoscenze approfondite della struttura del prodotto e quindi può essere affidato a personale con limitate conoscenze tecniche, dall‟altro è decisamente più efficace se eseguito da personale che conosce le esigenze dell‟utilizzatore e quindi il modo in cui il prodotto è effettivamente utilizzato; questo implica che il test deve essere condotto in condizioni le più simili possibile a quelle reali di utilizzo. Si parla di beta test quando la prova è condotta sul luogo effettivo di funzionamento (beta test), eventualmente in presenza del cliente. 16
  • 18. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Le due macro famiglie raccolgono al proprio interno sei tipi di test: Alpha test Unit test Test di integrazione Test funzionale Test di accettazione Beta test A questi si aggiungono altri test con funzionalità specifiche (analisi critica dei requisiti di prodotto, test di usabilità, test sentinella, test progressivo o regressivo e test di occupazione di memoria). La figura 3 evidenzia le varie fasi di test all‟interno del processo produttivo del software partendo dall‟analisi dei requisiti fino al rilascio del prodotto sul mercato. Della famiglia dei test di basso livello fanno parte le prime due fasi di test: alpha-test e unit test, mentre della seconda famiglia fanno parte le restanti tipologie di test: integrazione, funzionale, accettazione e beta. Il test di basso livello è compito del team di sviluppo mentre il test di alto livello è eseguito e pianificato dal reparto di qualità in piena autonomia. Il reparto di sviluppo software dopo aver analizzato le specifiche funzionali fornite dal PM1 inizia lo sviluppo al termine del quale esegue l‟alpha test e lo unit test. Se durante queste prove il prodotto presenta problemi, non arriva alla fase successiva, altrimenti è rilasciato al reparto di qualità. Il team di verifica e validazione che riceve il prodotto per prima cosa prende visione della documentazione che accompagna il prodotto; dopo di che inizia le verifiche. 1 PM: Project Manager 17
  • 19. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Figura 3: Fasi del test software all’interno del processo produttivo 18
  • 20. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Il reparto esegue il test di integrazione e il test funzionale; se sono rilevati malfunzionamenti questi sono inseriti nel sistema di tracciamento bug ed il prodotto torna al reparto di sviluppo. Se invece si supera con esito positivo il test funzionale si passa alla fase di accettazione che se superata può portare al rilascio del prodotto al mercato o più comunemente alla realizzazione di un‟istallazione pilota in accordo con il cliente (Beta test). La realizzazione di un beta test (installazione dell‟applicativo sviluppato direttamente sul campo sotto controllo del reparto di QA2) consente di valutare il comportamento del software a fronte del reale stress a cui è sottoposto il prodotto una volta rilasciato. Osserviamo adesso ogni singola fase del test di sistema nel dettaglio evidenziandone i soggetti coinvolti e la modalità d‟esecuzione; le sessioni saranno analizzate secondo l‟ordine in cui le incontra il software che dal reparto di produzione procede verso il rilascio al mercato. Alpha test: è la prima sessione di test a cui è sottoposto il codice, tale fase come tutto il test di basso livello è esercitato in autonomia dal team di sviluppo e consiste in una rapida verifica del funzionamento dell‟applicativo realizzato. L‟alpha test mira a verificare macroscopicamente le funzionalità del software senza sollecitare il prodotto in maniera critica come invece verrà fatto nelle fasi successive. Unit test: L‟unit test è l‟attività di verifica delle singole componenti di un programma, cioè di moduli a se stanti, sotto-programmi e funzioni. E‟ eseguito sollecitando la logica interna del programma. Consente di associare 2 QA: Quality Assurance 19
  • 21. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” in modo biunivoco malfunzionamento ed errore che ne è la causa. Deve essere eseguito in autonomia dal progettista, è infatti parte integrante della stesura del codice e per essere efficace richiede conoscenze inerenti lo specifico programma sotto test e il modo con cui è realizzato. Può richiedere la stesura di software di supporto che consentano di simulare parti di programma a cui il modulo sotto test si interfaccia. Di fatto lo unit test è l‟attività fondamentale necessaria a garantire un livello di qualità accettabile al software. Test di integrazione: consiste nel verificare il corretto funzionamento di una combinazione di componenti di un sistema. Tipicamente l‟obiettivo è l‟individuazione di eventuali errori nell‟interfaccia tra i moduli. L‟integrazione può ovviamente essere fatta a vari livelli: più moduli di un programma, più sottosistemi, più sistemi che devono operare congiuntamente. Anche le modalità con cui l‟integrazione è fatta sono diverse; anzitutto la scelta può essere tra integrazione in un‟unica soluzione (big bang) o in modo incrementale. E‟ indubbio che la soluzione incrementale è di gran lunga più efficace, perché consente di individuare in modo decisamente più semplice il componente in cui è presente un eventuale errore. Comunque il modo incrementale non e‟ univoco: top – down: a partire dai moduli più critici per funzionalità bottom – up: a partire da una struttura di base completa Non esiste in realtà una soluzione che a priori può essere considerata la migliore, tipicamente è opportuno decidere caso per caso adattandosi alle caratteristiche del sistema e al suo livello di evoluzione; tanto che in alcuni casi potrebbe essere più efficace seguire semplicemente il criterio dell‟ordine di disponibilità dei moduli. 20
  • 22. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Tipicamente il criterio da utilizzare è quello che rende minimo il software di supporto da realizzare, per minimizzare i costi e l‟introduzione di malfunzionamenti collaterali. Il test di integrazione richiede, per essere efficiente, una decisione strategica su come affrontarlo e una ben definita pianificazione. Test funzionale o di sistema: è un test complessivo del sistema realizzato, che esercita le funzioni del prodotto sulla base dei requisiti definiti nella specifica funzionale. L‟ideale sarebbe poter disporre del manuale d‟uso dell‟apparecchiatura, che però raramente in questa fase del processo di sviluppo è disponibile anche a livello di bozza. In questa fase si tiene conto di tutti i potenziali utilizzatori del sistema e di conseguenza si va ad esercitare il sistema dal punto di vista di ciascuno di essi, comprendendo le funzioni di servizio: installabilità, usabilità, affidabilità, manutenibilità, sicurezza e rispondenza agli aspetti normativo-legali applicabili al prodotto. Il test deve essere naturalmente condotto esercitando le funzioni secondo le modalità di utilizzo previste; ma devono essere valutate anche condizioni di utilizzo improprio o comunque diverse da quelle progettate, ma comunque possibili e probabili. Laddove possibile ed applicabile è raccomandabile l‟analisi del sistema che utilizzi strumenti quali diagrammi degli stati (è molto diffusa la rappresentazione FSM, Macchina a Stati Finiti), che rendono più agevole una valutazione della copertura delle funzionalità e delle modalità di utilizzo. Altro aspetto importante è costituito dalla verifica di performance del sistema che deve essere posto sotto stress sia nelle condizioni operative e nei limiti previsti, che in condizioni estreme e quindi oltre i limiti massimi. La valutazione del prodotto non deve inoltre limitarsi alla ricerca di possibili malfunzionamenti ma anche all‟usabilità del sistema e quindi ad 21
  • 23. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” aspetti relativi a facilità d‟uso, velocità di esecuzione e gradevolezza dell‟interfaccia. Test di accettazione: Serve per verificare la conformità del prodotto ai requisiti espressi dal cliente/mercato. E‟ tipicamente l‟ultima fase del processo di sviluppo prima dell‟installazione del prodotto su vasta scala. E‟ un test snello e rapido mirato a confermare il corretto funzionamento, effettuato al momento in cui, in base ai risultati delle fasi di test precedenti, si è confidenti sull‟assenza di malfunzionamenti significativi del prodotto. Si concentra su installabilità, usabilità, manutenibilità, sicurezza e rispondenza agli aspetti normativo-legali applicabili al prodotto. In questa fase sono messi sotto test anche i documenti che accompagnano il prodotto, quali ad esempio le istruzioni di uso, installazione e manutenzione, che costituiscono parte integrante del prodotto. Per sua natura il test di accettazione dovrebbe essere condotto alla presenza del cliente o quantomeno del cliente interno, cioè colui che ha commissionato (responsabile di prodotto/responsabile di progetto, PM) il lavoro e che può in questo modo rendersi conto se il prodotto risponde a quanto richiesto. Il test di accettazione potrebbe essere in effetti concordato con il cliente e l‟esito positivo sottoscritto per approvazione dalle parti. In pratica i test effettuati possono essere una selezione dei test funzionali e di sistema comprendono tipicamente test di non–regressione. Salvo accordi formali con il cliente, il test di accettazione è l‟occasione per una valutazione finale della conformità del prodotto a beneficio del cliente interno (PM): in questo caso il set minimo di test da eseguire è costituito da una sessione di test di non-regressione sui test falliti e risolti nelle fasi precedenti e una selezione dei test funzionali basata sulla priorità e criticità delle funzioni implementate. Le condizioni operative devono essere il più possibile quelle 22
  • 24. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” reali e deve essere valutato il comportamento del sistema fino ai suoi limiti di funzionamento. Il test di accettazione si presta anche particolarmente a valutazioni comparative di prodotti similari, precedenti o concorrenti. Beta test: questa fase prevede il rilascio del prodotto verso alcuni clienti fidelizzati. Il software è costantemente monitorato dal reparto di qualità durante l‟utilizzo. Nella selezione dei siti prescelti per le prove di campo occorre molta attenzione per quanto riguarda configurazione; è necessario infatti poter contare su un campione significativo di casi per garantire in tempi ragionevoli la copertura del maggior numero di funzionalità del prodotto. Questa sessione di test rappresenta il primo impatto del prodotto sul campo, i clienti scelti devono essere opportunamente preparati al verificarsi di possibili malfunzionamenti. Quando il beta test è superato con esito positivo il software è rilasciato per la diffusione su larga scala. Le sei fasi di test elencate in queste pagine rappresentano le sessioni canoniche del test software a queste se ne possono aggiungere altre rispondenti ad esigenze specifiche; tali fasi possono essere incorporate nei test svolti durante il ciclo di produzione oppure esternamente al processo produttivo. Analisi critica dei requisiti di prodotto: è la prima forma di verifica relativa alla corretta e completa interpretazione dei bisogni del cliente ovvero dei requisiti del sistema: in termini di testing questo può tradursi in un esame critico della specifica funzionale. Per definire i test necessari alla verifica di conformità del prodotto è necessario approfondire l‟analisi dei requisiti e discutere il modo con cui sono implementati; in tal modo sarà possibile progettare i test il cui superamento consente di stabilire la conformità del prodotto ai requisiti. Questo consente 23
  • 25. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” di ri-analizzare criticamente la specifica funzionale, quindi in definitiva i requisiti di progetto e anche di orientare il team di progettazione, fornendo i criteri in base ai quali il prodotto viene valutato/misurato. Il primo step di quest‟analisi è il rilievo delle funzionalità del prodotto e la definizione del funzionamento atteso. Tale forma di test è in pratica implicita nel lavoro di redazione del PdT. Test di usabilità: è concepito per verificare che il prodotto operi secondo i desideri del cliente/utilizzatore. E‟, come dice il nome stesso, improntato alla valutazione della facilità d‟uso e alla comprensione del suo impiego, delle sue potenzialità, dell‟accessibilità, delle caratteristiche di risposta, dell‟efficienza del sistema e dell‟interfaccia utente. Il test deve essere condotto con il diretto coinvolgimento del cliente/utilizzatore o del cliente interno (committente), che normalmente è rappresentato dal PM. Il test deve dare indicazioni sul gradimento del prodotto e la conferma operativa di aver centrato le richieste del cliente e/o fornire elementi per eventuali correzioni. Il test di usabilità dovrebbe essere effettuato non appena il prodotto ha le condizioni minime per poter essere utilizzato, pur con tutti i limiti di un prototipo ancora da sviluppare e testare in profondità, perché in caso di esito negativo gli aggiustamenti siano meno onerosi possibile. La prima sessione di questo tipo di test potrebbe essere programmata durante la sessione di integrazione, o addirittura nelle prime fasi dello sviluppo con prototipi realizzati ad hoc e tipicamente finalizzati alla verifica e validazione dell‟interfaccia utente. In relazione all‟entità del progetto, al contenuto innovativo del prodotto, al grado di fidelity del cliente può essere opportuno pianificare più sessioni di test di usabilità, in modo da mantenere sotto stretto controllo lo sviluppo del prodotto ed intervenire con tempestività in caso di deviazioni rispetto a quanto richiesto. E‟ importante 24
  • 26. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” sottolineare ancora che il test non è improntato alla ricerca di malfunzionamenti, che anzi è prevedibile siano presenti in quantità significativa, particolarmente nelle prime sessioni, e quindi occorre porre molta cura nella sua preparazione ed in particolare nella preparazione del cliente. Test sentinella: A causa delle controindicazioni, in termini di ridotta efficienza del processo, del sottoporre ai test di alto livello un prodotto in una fase troppo prematura; ovvero in presenza di un livello qualitativo non adeguato, il processo di re-working è particolarmente oneroso in termini di costi e tempi, si rende quindi necessaria l‟individuazione di un indice che consenta di garantire l‟ingresso del prodotto alla fase di test funzionale al raggiungimento di un adeguato livello qualitativo. Il test sentinella è pensato a questo scopo. Si tratta di una sessione di test che dovrebbe fornire indicazioni sull‟indice di qualità del prodotto con un elevato livello di confidenza. La selezione dei test deve essere fatta con questo criterio. Il test deve essere eseguito con modalità simili ai test di alto livello, su esemplari dell‟apparecchiatura diversi da quelli impiegati nella fase di test di progetto e comprendere quindi una fase di installazione e configurazione del prodotto. Il test dovrebbe essere eseguito in collaborazione tra i team di sviluppo e di qualità e costituisce il momento di passaggio tra le due fasi del processo di sviluppo. Si ottimizza in tal modo il passaggio di consegne, sfruttando questa fase operativa per il necessario training agli addetti al testing. Il test deve essere snello e rapido e soltanto il suo superamento con esito positivo consentirà di procedere alla fase di prove di alto livello. Il test deve essere mirato all‟individuazione di possibili malfunzionamenti significativi; è importante che il test sia eseguito in un ambiente diverso da quello di progetto, ma su una apparecchiatura con una configurazione il più possibile vicina a quella di reale operatività del sistema. 25
  • 27. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Test progressivo o regressivo: Per test progressivo si intende normalmente l‟attività di testing mirata alla verifica di nuove funzionalità di un prodotto; nel caso di un prodotto nuovo tutta l‟attività è tipicamente inquadrabile come progressive test. Per test regressivo o di non regressione si intende invece quell‟attività di testing mirata a verificare il corretto funzionamento del prodotto per le funzionalità già esistenti e consolidate, a seguito di nuovi sviluppi che hanno generato una nuova release o versione del prodotto. E‟ tipicamente un test in positivo, cioè di conferma, dal quale ci si aspetta in generale un esito favorevole, cioè che i requisiti di prodotto siano ancora rispettati, ma che mira ad individuare eventuali effetti collaterali sulle funzionalità consolidate del sistema per effetto delle modifiche eseguite. E‟ un attività che si presta bene come test di alto livello, ma può essere eseguita anche a livello di test di progetto. Si tratta di una fase di test molto onerosa e ripetitiva, che può risultare particolarmente efficace soltanto se automatizzata; in tale ottica questo lavoro si prefigge di individuare una procedura e delle metodologie per automatizzare in maniera snella i test di non regressione del software. Test di occupazione memoria: I problemi di memory leak ed accesso errato ad aree di memoria sono i malfunzionamenti software che hanno le conseguenze più gravi sulla sicurezza e sulla disponibilità del sistema che ospita l‟applicativo. I memory leak sono causati dall‟allocazione di memoria che non è poi successivamente de-allocata: questo comporta un aumento del file di paging compromettendo le prestazioni complessive del sistema. Nel caso peggiore può verificarsi l‟esaurimento delle risorse disponibili di memoria portando al crash dell‟applicativo [8]. Uno dei più famosi guasti software di questo tipo si è verificato a Londra nel 1992 quando l‟applicativo di gestione delle autoambulanze londinesi ebbe un crash dovuto a memory leaks alle 2 del mattino, che portò al blocco dei mezzi di soccorso per oltre 2 26
  • 28. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” ore [9]. L‟allocazione della memoria di sistema da parte dei processi è gestita attraverso regole impostate sul compilatore utilizzato per compilare il singolo applicativo. Tutti i linguaggi di programmazione hanno delle regole di gestione della memoria predefinite che sono applicate salvo una diversa gestione definita dallo sviluppatore. Tali regole sono ottimizzate per molte applicazioni e rappresentano un compromesso fra le varie necessità che possono avere le diverse tipologie di programmi implementabili con il particolare linguaggio di programmazione preso in esame. Per individuare e correggere questi bachi si effettuano test specifici composti di poche azioni ripetute per un numero significativo di iterazioni che vanno a sollecitare un numero limitato di moduli di un applicativo, tipicamente anche un solo modulo. Durante le ripetizioni è tenuta sotto controllo l‟occupazione di memoria del modulo in test, per tracciarne l‟andamento. Se a termine prova è individuato un andamento monotono crescente della memoria allocata, il bug è comunicato al reparto di sviluppo per le opportune correzioni al termine delle quali sarà replicato il test. Per effettuare questo tipo di prove si deve obbligatoriamente ricorrere all‟automatizzazione delle sequenze, in quanto per ottenere risultati significativi si devono eseguire molte ripetizioni di un set limitato di operazioni. Per automatizzare le prove può essere necessario l‟utilizzo di simulatori che per non influenzare il risultato delle prove devono avere elevata affidabilità. 27
  • 29. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” 1.4 Pianificazione dell’attività di test La redazione del PdT è attuata dal responsabile dell‟attività di testing, che sarà supportato dal project manager e dal team leader di sviluppo. Il PdT utilizza come documento di riferimento la specifica funzionale, ma terrà naturalmente conto di altri documenti ritenuti utili, quali ad esempio la specifica tecnica o report di fasi di test precedenti o di apparecchiature similari. A seguito di variazioni dei documenti di riferimento, che abbiano rilevanza sulla strategia di test, il PdT deve essere sottoposto a procedura di revisione. Prima di qualsiasi altra considerazione è necessario allinearsi su alcuni principi fondamentali legati all‟attività di testing. Il test di un prodotto non può essere, in generale, esaustivo. Non è infatti ipotizzabile che sia possibile pensare tutti i test case3 necessari alla verifica di un prodotto, né tanto meno progettarli ed eseguirli in tutte le possibili condizioni al contorno, con tempi e costi accettabili. L‟attività di test deve quindi esser il frutto di un compromesso tra la necessità di massima copertura del prodotto in termini di verifica delle sue funzionalità e le esigenze in termini di costi e tempo. Questo significa definire delle priorità delle funzioni da testare in base a criteri di frequenza di utilizzo, criticità e rischio. Fra gli scopi principali dell‟attività di test ci sono i seguenti requisiti: focalizzare la fase di test all‟effettivo utilizzo cui il prodotto è destinato e migliorare la condivisione della 3 Test case: situazione d‟uso, tipica sequenza operativa ipotizzata per il prodotto. 28
  • 30. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” strategia di test cui il prodotto deve essere sottoposto per dichiararne la conformità ai requisiti, rendendo più oggettiva possibile la valutazione del prodotto. Test case: per individuare un test case devono essere note e definite le seguenti informazioni: La configurazione del sistema Lo Stato Iniziale (SI) del sistema prima di eseguire il test I parametri di sistema Le variabili in input Le variabili in output Le condizioni al contorno (condizioni operative) Lo Stato Finale (SF) del sistema atteso dopo aver eseguito il test Come abbiamo già detto non è possibile pensare tutti i test case, ovvero tutte le sequenze che possono essere attuate con quel determinato software. Si possono avere più sequenze che testano la medesima funzionalità. In questo caso si parla di classe di equivalenza ovvero di un insieme di test caratterizzati dalle seguenti proprietà: Sono pensati per la verifica della stessa funzionalità Lo stato finale atteso del sistema è lo stesso per tutti Se un test è in grado di rilevare un malfunzionamento allora qualsiasi altro test della stessa CdE (classe di equivalenza) ha la stessa probabilità di rilevarlo Se un test non è in grado di rilevare un malfunzionamento allora qualsiasi altro test della stessa CdE ha la stessa probabilità di non rilevarlo L‟individuazione di classi di equivalenza consente di sostituire più test case che appartengono alla stessa CdE con uno solo rappresentativo della stessa. Le classi di equivalenza così definite sono del tutto soggettive ed 29
  • 31. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” essendo il numero di test pressoché infinito anche il numero di CdE è immenso. Occorre quindi selezionare prima le classi di equivalenza e poi selezionare i test rappresentativi delle CdE scelte [7]. Per capire qual è il principio di selezione attraverso le CdE, supponiamo di dover testare la funzione f(x) che accetta ingressi (x) tali che: x ≥ 1 e x ≤ 99 E‟ ragionevole pensare che esercitare la funzione con: x = - 15 consenta di valutare il comportamento della funzione per tutti i numeri negativi x = 175 consenta di valutare il comportamento della funzione per tutti i numeri con più di 2 cifre x = 50 consenta di valutare il comportamento della funzione per tutti i multipli di 10 x = 19, 28, 37, 46, 55, 64, 73, 82, 91 può essere un campione significativo del dominio a 2 cifre x = 0, 1, 99, 100 valori di frontiera x = 3, 4, 7, 8 può essere un campione significativo del dominio a 1 cifra Esercitando la funzione con 20 valori di ingresso ho una ragionevole probabilità di aver coperto tutto il range di valori di uscita della funzione. Il grafico di figura 4 [10] mostra l‟andamento di alcune grandezze caratteristiche al variare del numero di CdE. La probabilità di rilevare un bug 30
  • 32. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” ed i costi crescono all‟aumentare del numero di classi di equivalenza, mentre la probabilità di reale utilizzo4 del sistema decresce esponenzialmente. 1 Robustezza P Ril. (Bug) 0,5 Costo P Reale Ut. 0 N. CdE Figura 4:Andamento della robustezza del sistema, probabilità di rilevare un malfunzionamento, costi e probabilità del reale utilizzo del sistema in funzione del numero di classi di equivalenza. L‟andamento della probabilità di reale utilizzo si spiega considerando che all‟aumentare delle CdE si va a considerare situazioni di utilizzo sempre più particolari con ingressi improbabili. A questo proposito è utile confrontare le classi di equivalenza attraverso la matrice delle ipotesi (tabella 1). La matrice delle ipotesi è realizzata per la singola funzionalità da testare e permette il confronto fra le classi di equivalenza per tale funzionalità evidenziando per ogni classe la probabilità di accadimento del test case considerato (p). 4 Probabilità di reale utilizzo del sistema: probabilità che la sequenza di test associata alla CdE in esame sia eseguita sul campo. 31
  • 33. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Tabella 1: Matrice delle ipotesi relativa alla funzionalità di prevalida di carte petrolifere, nella matrice si considerano le carte petrolifere più comuni (EuroShell ed EssoCard); per ogni test case è riportata in grassetto la probabilità di accadimento calcolata mediante l’analisi di dati provenienti dall’archivio GVR. Card check CdE 1 CdE 2 CdE 3 Note Due carte Due carte (Carta A e Una sola carta (Carta A e Carta B)) da prevali Carte da prevali (Carta A) da Carta B) da dare, la Carta B è dare prevalidare prevalidare scaduta p=0,4 p=0,4 p=0,2 Server / client Stampa automatica ticket di prevalidazione Stampante off-line PPEU off-line Valutazione del rischio: uno dei più efficaci criteri di selezione dei test è quello basato sulla valutazione del rischio, inteso come prodotto della probabilità del manifestarsi di un malfunzionamento per la gravita dei suoi effetti. Per valutare il rischio di un malfunzionamento software si usano i seguenti criteri: Gravità degli effetti di malfunzionamento in termini di: danni prodotti, tempi di indisponibilità del sistema, sanzioni, frodi, etc. Criticità della funzione Importanza della funzione Frequenza d‟uso della funzione Ripetibilità della sequenza Evidenza e sensibilità al malfunzionamento 32
  • 34. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Una selezione sul criterio della criticità è utile non solo per selezionare i test da effettuare ma anche per definire una strategia di priorità nell‟esecuzione del testing. Tipicamente i malfunzionamenti si concentrano sui punti notevoli di una funzione; punti notevoli sono i cosiddetti valori di frontiera o quelli caratterizzati da vincoli di qualsiasi natura. I valori di frontiera di una funzione sono tipicamente i valori estremi del suo dominio di ingresso o di uscita. I punti di vincolo sono quelli caratterizzati da un vincolo tra input ed output la cui natura può essere geometrica, fisica, legislativa, normativa, monetaria, legata all‟unita di misura. Considerazioni di questo tipo, che logicamente si prestano ad essere implementate più facilmente nel test di basso livello, consentono l‟individuazione di test con elevata probabilità di fallire. Il superamento con esito positivo di questi test è normalmente un indice di buona qualità. La criticità di un malfunzionamento è una classificazione del bug in funzione del sua gravità; in base a questa classificazione si decidono le priorità di intervento sul codice, agendo prima sui bachi più critici e successivamente sugli altri. Si possono verificare situazioni dove un software è rilasciato in presenza di malfunzionamenti dichiarati nella sua nota di rilascio (Release Note) purché la loro criticità sia ritenuta lieve. In seguito è riportata la classificazione della gravità di un bug adottata in GVR [11]. Cat. A Critici: possono causare perdite di dati e interruzione delle operazioni, per cui è necessario un intervento dell‟operatore per riattivare il processo. Cat.B Gravi: causano un notevole abbassamento delle prestazioni e/o producono risultati insignificanti costringendo l‟utente ad usare diversi approcci. 33
  • 35. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Cat.C Medi: il software riesce ad attivarsi automaticamente, riesce ad aggirare il malfunzionamento; le prestazioni risultano leggermente inferiori e si riscontra una certa difficoltà ad interpretare il messaggio visualizzato dall‟elaboratore. Cat.D Bassi: non provocano alcuna diminuizione delle prestazioni del software in oggetto, sono per lo più errori di presentazione dell‟interfaccia che possono causare cattive interpretazioni. Cat.E Saltuari: malfunzionamenti di tipo non ripetitivo, l‟eliminazione del problema ha richiesto l‟implementazione di un nuovo algoritmo poichè non è stato possibile capire la causa SWR del malfunzionamento. Cat.F Incongruenti: il sistema pur funzionando correttamente ha un comportamento non conforme coi requisiti espressi nelle specifiche; in altre parole è stato realizzato un prodotto ben funzionante ma non era il prodotto che si voleva realizzare. Tracciamento dei malfunzionamenti: Quando si ha un ciclo di produzione del software organizzato, si ha una ben precisa definizione delle attività di sviluppo, di testing e di produzione. Il codice prodotto è sottoposto a varie fasi di verifica; tutti i malfunzionamenti trovati ad ogni controllo sono inseriti in un database che permette di tracciare tutti i bug rilevati per un determinato processo e tutte le azioni di correzione apportate al codice per la soluzione del problema. Ogni fault è annotato segnalando la funzionalità che presenta il problema, la sua frequenza di accadimento (se determinata), la sua criticità, la versione del prodotto su cui è stato riscontrato il problema, l‟esatta sequenza che riproduce il problema (se è stata individuata) e le condizioni al contorno nel quale si verifica l‟evidenza del malfunzionamento. 34
  • 36. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Il tracciamento dei malfunzionamenti ha molteplici vantaggi: Associa al problema le relative azioni correttive Se la parte di codice dove è rilevato il problema è comune a più progetti, tutti i progetti hanno la disponibilità delle migliorie apportate al codice Possibilità di individuare le versioni contenenti le righe di codice malfunzionante Visione completa di tutti i bug relativi ad un progetto così da poter pianificare le azioni correttive secondo priorità Il tracciamento delle versioni (versioning) durante lo sviluppo di un prodotto software permette di tenere traccia di ogni modifica apportata al codice, garantendo la possibilità di poter regredire ad una versione precedente in ogni momento e di collegare l‟insorgere di un malfunzionamento ad una particolare versione e quindi alle modifiche ad essa relative. 35
  • 37. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Capitolo 2 2.1 Azienda e prodotti In questo capitolo saranno presentati alcuni prodotti software ed hardware sui quali verranno implementate analisi sperimentali per l’incremento dell’affidabilità. Sui prodotti scelti in funzione di esigenze specifiche dell’azienda produttrice si vuole dimostrare i vantaggi del test software automatico rispetto a quello tradizionale. 36
  • 38. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” 2.2 Storia dell’azienda La Gilbarco S.p.A Italia con sede a Firenze nasce nel 1969 con il nome di Logitron. La Logitron inizia la sua attività nel settore della distribuzione all‟utenza dei carburanti e si specializza nei sistemi di prepagamento con banconote. Nel 1974 sigla un accordo con la Gilbarco Ltd. per la vendita dei propri prodotti in tutta Europa ed estende la produzione agli erogatori con testata elettronica. Nel 1980 sviluppa e commercializza un sistema completo per la distribuzione dei carburanti e dieci anni dopo inizia a vendere i propri prodotti al di fuori dei confini europei. Nel 1999 la compagnia entra a far parte del gruppo Gilbarco e nel 2000 prende il nome Marconi Commerce Systems; nel 2002 la Gilbarco è acquisita dalla Danaher Corporation ed inizia una collaborazione strategica con la VeederRoot con la quale completa la sua offerta di prodotti specializzati alla distribuzione dei carburanti. L‟attuale nome dell‟azienda è Gilbarco Veeder- Root [12]. La Danaher Corporation è una multinazionale americana che raggruppa con il suo marchio oltre 50 compagnie per un fatturato annuo di 9 miliardi di dollari; la multinazionale opera principalmente in sei settori produttivi: Test elettronici Utensili meccanici Automazione Tecnologie mediche Soluzioni per l‟ambiente Identificazione dei prodotti 37
  • 39. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Fra le tante aziende del gruppo spiccano i nomi di Fluke, Vision BioSystems, Red Jacket, Armstrong Tools e Raytek. Attualmente la Gilbarco Veeder-Root è l‟unica azienda che offre prodotti e servizi per le aree di amministrazione dei carburanti (dal punto di vista di normative a ambiente) di gestione dei piazzali delle stazioni di servizio (pompe e controllori) e di pagamenti automatici (POS5, BOS6) . 2.3 I prodotti dell’azienda Il prodotto di punta di Gilbarco è il sistema Passport che permette di implementare la totalità della gestione di un punto di distribuzione del carburante dal controllo delle pompe e quindi dell‟erogato (attraverso il controllore di piazzale) alla gestione delle cisterne (mediante centraline e sensori Veeder-Root) ai pagamenti elettronici (POS) al collegamento dei terminali di pagamento esterni (OPT7 e Crind8) o moduli di raccolta ed invio dati alle compagnie petrolifere (WISE9). 5 POS: Point Of Sale la traduzione letteraria è punto di pagamento, nella pratica l‟acronimo POS indica un sistema in grado di accettare pagamenti elettronici. 6 BOS: Back Office System indica la gestione di tutto ciò che non è vendita diretta al cliente come la gestione del magazzino, delle scorte, la gestione delle cisterne e dei modi operativi delle pompe e del piazzale. 7 OPT: Outdoor Payment Terminal, terminale di pagamento esterno; è un sistema che si interfaccia all‟utente permettendogli di accedere ai servizi offerti dal punto di distribuzione anche senza rivolgersi al gestore dell‟impianto. 38
  • 40. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” . Figura 5: Sistema Passport Passport10: rappresenta sia un architettura hardware che software (figura 5 e 6); per quanto riguarda la parte hardware integra un elaboratore elettronico commerciale con una scheda SPU11 o CORE12. Tutto il sistema è racchiuso 8 Crind: Card reader in Dispenser, lettore di carte sull‟erogatore; sono particolari erogatori di carburante che integrano nella pompa stessa un sistema per effettuare pagamenti elettronici. 9 WISE: Wireless Internet Service Enabler, è un sistema che permette di interfacciare direttamente la stazione di servizio alla rete internet in modo tale da poter continuamente tenere sotto controllo l‟impianto ed intervenire nel caso di malfunzionamenti (19). 10 In questa trattazione con la parola Passport si intenderà il prodotto Passport Europe con personalizzazione Italia, versione del sistema installata sul territorio nazionale. 11 SPU: Site Processing Unit, è una scheda che offre sia un‟espansione della connettività del PC attraverso una multi seriare che un controllo di integrità sul software installato mediante la verifica dell‟informazioni contenute in una carta metrica collegata alla SPU. 39
  • 41. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” in un robusto case che a termine dell‟assemblaggio è piombato in modo tale da evidenziare un‟eventuale tentativo di frode. Quando la macchina si avvia lancia automaticamente il software di gestione rendendo inaccessibile all‟utente tutta la macchina a meno del software GVR13. La SPU o la CORE hanno 10 (o 20) seriali attraverso le quali il passport è interfacciato alle periferiche di piazzale (SPOT14, OPT, Crind, centraline di livello e pompe), a stampanti fiscali e non, ai cassetti dei cassieri, a display utente ed a tutti i Figura 6: Passport Stand-Alone (Server) dispositivi che il gestore intende installare sulla stazione. Il Passport è collegato mediante rete ADSL15, PSTN16, ISDN17 o GPRS18 sia per effettuare transazioni elettroniche che per eseguire la manutenzione da remoto sull‟impianto; è infatti possibile effettuare l‟aggiornamento del software installato senza inviare un tecnico sul sito 12 CORE: è il cuore del sistema Passport Europe, permette di trasformare un comune PC in un sistema in grado di gestire un intera stazione di servizio espandendone la connettività seriale attraverso protocolli RS-232,422 e RS-485. 13 GVR: Gilbarco Vedeer-Root 14 SPOT: Secure Payment Outdoor Terminal, Terminale di pagamento esterno sicuro, è il terminale esterno di nuova generazione nato dall‟esperienza maturata con OPT. Tale sistema ha conseguito la certificazione EMV (Europay, Mastercard e Visa) di livello 2. 15 ADSL :Asymmetric Digital Subscriber Line, tecnologia che permette l‟accesso ad internet ad alta velocità. 16 PSTN: Pulse Switched Telephone Network rappresenta lo standard della linea telefonica analogica distribuita sul territorio nazionale. 17 ISDN: Integrated Services Digital Network, rete digitale a servizi integrati. 18 GPRS: General Packet Radio system, tecnologia per il trasferimento dati che sfrutta i i canali della rete GSM con tecnologia a divisione di tempo. La tariffazione di questo servizio è funzione dei pacchetti inviati e non della durata della connessione. 40
  • 42. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” (tranne nei casi in cui sia necessaria una riconfigurazione hardware del sistema). Oltre il 75% degli impianti di distribuzione italiani sono gestiti mediante il sistema Passport Europe. Terminali di pagamento esterni: il sistema OPT è il primo sistema di pagamento esterno completo sviluppato da Gilbarco (figura 7). OPT offre un alto grado di efficienza della stazione di servizio accelerando le operazioni di rifornimento con particolare riguardo alla Figura 7:OPT installato su di una stazione di servizio. soddisfazione dei clienti. L‟operatività della stazione è estesa alla totalità delle 24 ore anche quando non è presente il personale. Il terminale viene posizionato sul piazzale della stazione ed è collegato (in genere) a tutte le pompe presenti sull‟impianto. L‟utente si trova ad interagire con un sistema che grazie alla presenza del display grafico risulta intuitivo e semplice; durante le normali operazioni di pagamento delle erogazioni possono essere inviate al cliente comunicazioni personalizzate e messaggi pubblicitari [13]. I metodi di pagamento previsti sono banconote (di diverso taglio), carte di debito e carte private, è sempre garantita la corrispondenza tra il carburante erogato e l‟ammontare del pagamento il tutto verificabile attraverso la ricevuta emessa dal terminale. L‟OPT non è solo un interfaccia attraverso cui il cliente si relaziona alla stazione di servizio ma permette anche lo scarico del carburante nelle cisterne in assenza del personale sulla stazione. Il sistema è disponibile in varie versioni: 41
  • 43. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Stand-alone: che ha al suo interno tutta l‟intelligenza necessaria alla gestione della stazione di servizio. Slave: versione per l‟uso come terminale di piazzale asservito ad un‟unità centrale di stazione che controlla e gestisce tutte le operazioni. Entrambe le versioni sono dotate di colonna di sostegno che permette l‟ancoraggio al suolo e che contiene la cassetta di sicurezza per la raccolta delle banconote nel caso in cui il dispositivo sia equipaggiato con lettore di banconote oltre che con lettore di carte. In Italia ci sono oltre 10.000 OPT installati su impianti di varie compagnie petrolifere. Il sistema SPOT (figura 8) appartiene alla famiglia di terminali self service di ultima generazione prodotti dalla Gilbarco Veeder-Root; utilizza la PIN Pad SPOT M219 progettata per il pagamento sicuro con carte di debito/credito, sia a Figura 8:Testata SPOT nella schermata banda magnetica che chip. SPOT M2 è certificata: di IDLE. EMV20 Level 1 EMV Level 2 PCI PED21 19 SPOT M2 è l‟ultimo modello di terminale esterno che alla data di stesura di questo testo è stato rilasciato al mercato; il modello SPOT M3 ha già concluso la fase di sviluppo e sarà presto presentato. 20 EMV: Europay Mastercard Visa, standard nato nel 1993 dalla collaborazione dei principali circuiti di pagamento elettronico a livello mondiale. La piattaforma fondata (EMVCo) mira allo sviluppo dei pagamenti elettronici sicuri attraverso carte a microprocessore (smart card). 42
  • 44. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” L‟elettronica di controllo e gestione della stazione di servizio è totalmente separata da quella che gestisce i pagamenti in modo da massimizzare prestazioni e sicurezza. Il Terminale SPOT consente il rifornimento di carburante self service in modo semplice, veloce e sicuro garantendo la completa gestione ed il controllo della stazione di servizio in modalità non presidiata. Grazie a queste caratteristiche rende possibile l‟apertura senza personale della stazione di servizio 24 ore su 24, 7 giorni su 7 [14]. Il terminale è dotato di ampio display a colori ad alta illuminazione che lo rende ben visibile in ogni condizione di luce, anche grazie ad un design studiato per evitare l‟incidenza dei raggi solari. E‟ possibile abilitare una voce guida che illustra all‟utente le varie opzioni disponibili nelle diverse fasi di vendita. SPOT è equipaggiato con soft key retro-illuminate per le scelte utente oltre a pulsanti dedicati alla selezione degli erogatori. SPOT offre un elevato standard di sicurezza sia al gestore che all‟utente, l‟accettatore di banconote è dotato dei più sofisticati sistemi antifrode e reiezione di falsi. Le banconote sono conservate in una colonna di sicurezza antieffrazione certificata, ancorata al sistema di fondazioni del terminale. La piattaforma di pagamento con carte, SPOT M2, offre la massima garanzia di sicurezza nelle operazioni di pagamento e nel trasferimento dei dati sensibili (PIN e dati carta). Il terminale è stato progettato utilizzando accorgimenti per la prevenzione dal rischio di clonazione della carta o il furto d‟identità (Dispositivo Anti-Skimming; Patent 21 PCI PED: Payment Card Industry – Pin Entry Device, è uno standard emergente nei pagamenti elettronici con carte magnetiche e chip, il suo scopo è quello di definire le caratteristiche di sicurezza dei POS nell‟accettare le carte e creare maggiore confidenza nel titolare della carta per un suo uso diffuso. 43
  • 45. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Pending). Il design del terminale è stato studiato per garantire all‟utente la massima privacy nelle operazioni di pagamento. Il terminale è dotato di un potente sistema diagnostico in grado di rilevare anomalie ed eventi notevoli e gestirne la segnalazione e le eventuali contromisure. Il sistema controlla il piazzale, gestendo in modo completamente automatizzato l‟autorizzazione del pagamento e l‟abilitazione al rifornimento. Inoltre memorizza i dati relativi a tutte le transazioni eseguite ed è in grado di fornire report contabili strutturati; esportabili via protocollo seriale su PC e disponibili anche da remoto (opzione disponibile in combinazione con il servizio raccolta dati del sistema WISE). Come OPT, SPOT consente le attività di carico in cisterna del carburante, anche in assenza di personale (opzione disponibile in combinazione con il Sistema di gestione della stazione di servizio PPEU). SPOT è disponibile in due versioni: Master (Stand-alone): per il Figura 9:Crind nella schermata di IDLE. controllo integrale della stazione di servizio. Slave: terminale associato ad un server di gestione della stazione di servizio 44
  • 46. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Sia i terminali SPOT che OPT sono disponibili anche in modalita Crind (o RID22, figura 9) ovvero integrati nella pompa. Questo sistema è dotato soltanto di lettore di carte magnetiche eo chip, pertanto non è prevista la modalità di pagamento con banconote23. Sono disponibili i kit di retrofit per l‟installazione di RID e Crind anche sulle pompe già presenti sulla stazione [15]. Oltre il 75% dei terminali esterni installati sul territorio nazionale sono prodotti da Gilbarco. BasePOS: è un prodotto nato quando un cliente di rilievo dell‟azienda ha manifestato la volontà di aggiornare i propri impianti attualmente equipaggiati con il sistema passport con un prodotto di nuova concezione che mantiene il backoffice24 del sistema Passport con il frontoffice25 di una azienda concorrente ed un hardware di un PC commerciale. Questa soluzione comporta un notevole risparmio economico nell‟acquisto delle due semi-parti da due software-house distinte e dal vantaggio di non essere vincolati ad una piattaforma hardware specifica. Il sistema così realizzato è installabile su qualsiasi PC commerciale senza dipendere da una particolare struttura. 22 RID: Reader In Dispenser, Lettore nell‟erogatore integrazione dell‟OPT nella pompa di distribuzione. 23 RID e CRIND sono equipaggiati soltanto con lettore di carte elettroniche, questo fa si che il sistema non abbia una ampia diffusione sul territorio italiano dove non c‟è ancora una cultura diffusa nell‟uso dei metodi di pagamenti elettronici. 24 Backoffice: parte del software relativo alla gestione dei pagamenti elettronici, del magazzino e delle cisterne. 25 Frontoffice: software relativo alla gestione del piazzale (modo operativo delle pompe, pagamento delle erogazioni e vendita diretta al cliente). 45
  • 47. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” La configurazione hardware di un sistema BasePos prevede due installazioni di base: il server ed il client (o i client). La macchina client è un comune PC commerciale dotato di connessione di rete (necessaria per il collegamento al server) e di almeno una porta seriale per il collegamento del terminale POS (Point of sale). La macchina server è anch‟essa un PC commerciale con l‟aggiunta però di alcune periferiche che permettono di estendere la connettività dell‟elaboratore verso i dispositivi installati sulla stazione di servizio (pompe, terminali esterni, e centraline di livello). Le periferiche che realizzano questi collegamenti sono una multiseriale ed una scheda realizzata da ITL (partner di Gilbarco nel progetto BasePos) che prende il nome di Enabler. La prima permette il collegamento ai terminali esterni (OPT, SPOT e CRIND), ai terminali POS ed alle centraline di livello delle cisterne mentre attraverso la seconda si realizza il collegamento alle pompe. Il collegamento fra l‟enabler e le pompe non è diretto ma avviene attraverso un‟ulteriore scheda chiamata FDM (Forecourt Distribution Module, Modulo di distribuzione di piazzale). Vediamo nel dettaglio le tre periferiche collegate al server: La multiseriale: che permette di avere più porte seriali per il collegamento alle varie periferiche esterne all‟elaboratore che utilizzano il protocollo RS-232. L’enabler: che permette il collegamento alle pompe attraverso il modulo del controllore di piazzale (FDM). Forecourt Distribution Module (FDM): è il nodo intermedio fra pompe ed enabler. La prima scheda è una normale espansione seriale di tipo commerciale, mentre, l‟enabler ed il controllore di piazzale sono periferiche specifiche 46
  • 48. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” realizzate da ITL per la gestione del proprio sistema e quindi interessante esaminarle in maniera approfondita. Enabler (figura 10): utilizza il bus standard PCI (Peripheral Component Interconnect) e permette di espandere la connettività dell‟elaboratore per quanto riguarda il collegamento ai dispositivi del piazzale. La tecnologia realizzativa della Figura 10: Scheda Enabler scheda è a montaggio superficiale (SMT, Surface Mount Tecnology) e permette di realizzare in unica scheda stampata l‟intero circuito contenendone le dimensioni L‟enabler dispone di 5 canali (uscite) indipendenti per la gestione delle varie periferiche del piazzale: 1 canale è dedicato alla gestione di IFSF LON (International Forecourt Standard Forum LON, protocollo standard per il collegamento agli erogatori), 3 canali configurabili per i dispositivi tradizionali del piazzale ed 1 dedicato alla gestione degli altri dispositivi del piazzale come ad esempio le centraline di livello. La scheda è in grado di gestire una grande quantità di protocolli proprietari e standard relativi al collegamento di periferiche di distribuzione del carburante (erogatori, terminali esterni e centraline di livello). La scheda é compatibile con tutti i sistemi operativi successivi a Windows NT, é dotata di controlli ActiveX e supporta l‟accesso e la gestione dei database attraverso ODBC (Open Database Connectivity). 47
  • 49. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” FDM: Il modulo FDM realizza il collegamento fra l„enabler PCI e le pompe; il dispositivo è disponibile in due versioni, una passiva ed una attiva. La versione passiva (figura 11) è utilizzata per connettere le pompe che sfruttano il protocollo RS-485 o lo standard IFSF-LON. Il vantaggio di questo dispositivo è il rapporto qualità prezzo che lo rende un‟alternativa economica ed affidabile ai dispositivi di gestione delle pompe degli altri produttori. I protocolli non supportati dal nodo passivo sono stati implementati nel FDM attivo (figura 12). Figura 11: FDM passivo. Figura 12:FDM attivo. A bordo del dispositivo attivo è integrato un sistema di diagnostica che permette di monitorare in tempo reale lo stato dei canali. In tabella 2 è riportato il significato dei LED di diagnostica. 48
  • 50. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Tabella 2: Led di diagnostica FDM attivo Led Colore Descrizione Indica la presenza di LD1 Arancio alimentazione LD2 Rosso Dati in ricezione LD3 Verde Dati trasmessi Il numero indica il canale e LDA1 LDA8 Verde questi led indicano il transito dei dati sul canale La tipica configurazione di base di un piazzale gestito dal sistema BasePOS è riportata in figura 13. Il sistema può avere fino ad un massimo di 4 FDM collegati al server e fino ad 8 pompe per ogni distributore di piazzale per complessive 32 pompe (bi-lato). Ad ogni server possono essere collegati più client ed ad ogni client può essere collegato un POS. Nello schema non è evidenziata la connessione ai terminali esterni; posso collegare fino ad otto terminali su ogni seriale del sistema (al massimo posso avere 32 terminali esterni, 8 terminali per seriale per un massimo di 4 seriali impegnate). La connessione al terminale esterno avviene mediante protocollo RS-422, la conversione dal seriale standard (RS-232) al 422 avviene mediante un convertitore di protocollo. 49
  • 51. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Figura 13: Architettura tipica di un sistema BasePOS Figura 14: Insieme di prodotti GVR. 50
  • 52. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Altri prodotti: oltre ai prodotti illustrati nei paragrafi precedenti, dispone di pompe, centraline di livello e sensoristica per le cisterne, moduli WISE e car wash (figura 14). Tutti i prodotti sono compatibili oltre che con gli altri dispositivi GVR anche con i prodotti concorrenti dei maggiori marchi presenti sul mercato; la compatibilità è garantita in parte direttamente a livello di prodotto ed in parte attraverso l‟interposizione di particolari controllori di piazzali progettati appositamente per questo scopo. 2.4 Prodotto software I prodotti che producono maggior volume di affari per l‟azienda sono i software di gestione delle stazioni di servizio; questi software sono soggetti a continue modifiche ed aggiornamenti con l‟obbiettivo di essere sempre in accordo con le normative che li riguardano, gli standard di accettazione dei pagamenti elettronici, le attese del cliente che si reca sull‟impianto per effettuare il rifornimento e le richieste del committente (la compagnia petrolifera). L‟insieme dell‟esigenze dei vari soggetti porta il ciclo vita medio del software una volta rilasciato ad essere di tre mesi. Vista la breve vita del prodotto è necessario che questo non presenti bug all‟interno del suo ciclo 51
  • 53. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” vita. L‟azienda investe numerose risorse nel controllo di qualità del prodotto o meglio nella quality assurance26 (QA). Al momento che lo sviluppatore ha terminato di scrivere il codice relativo al programma esegue l‟alpha test dopo di che il prodotto arriva accompagnato dalla relativa release note27 al reparto del controllo di qualità. In questa fase il personale di verifica e validazione (V&V28) esegue i test funzionali. I problemi rilevati sono inseriti in un database per il tracciamento dei malfunzionamenti, e sono catalogati per personalizzazione, per versione del programma e per area funzionale. 26 QA: Quality assurance, significa assicurazione di qualità. E‟ il processo necessario perché il prodotto abbia un elevato grado di qualità in uso. 27 Release note: documento che accompagna il software e che ne descrive le caratteristiche e le novità rispetto ad eventuali versioni precedenti. 28 V&V agent: i ruoli di tutte le figure inerenti il processo di V&V saranno oggetto del capitoli successivi. 52
  • 54. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” Capitolo 3 3.1 Applicazione dei test automatici alla non regressione In questo capitolo si presenta la prima delle applicazioni dei test automatici; quella relativa ai test di non regressione. La metodologia descritta in queste pagine è del tutto generale e può essere utilizzata per effettuare test di non regressione software su qualsiasi prodotto. Nello specifico l’applicazione interessa la non regressione di BasePOS prodotto in parte internamente ed in parte da un’azienda esterna. L’azienda esterna si è fatta carico del controllo di qualità dell’intero sistema. Questa soluzione richiede che il prodotto rilasciato verso l’azienda responsabile dell’integrazione del sistema abbia un elevato grado di affidabilità. Le funzionalità previste saranno tutte funzioni considerate 53
  • 55. Analisi sperimentali per l’incremento dell’affidabilità del software per la “gestione distribuzione carburante” consolidate in quanto erano già presenti nelle ultime versioni di Passport Europe realizzate per il cliente e quindi tutti i test software eseguiti sulla versione sono test di non regressione e di verifica della corretta integrazione fra i moduli software. 54