Benefici, costi, tipologie e tools della fase di testing software

Benefici, costi, tipologie e tools della fase di testing software

La Fase di Testing software

Ciclo di sviluppo di un software

Per ciclo di sviluppo di un software si intende la metodologia che scompone in varie attivitá tutto il processo di sviluppo di applicativi informatici. A differenza di molti processi, lo sviluppo di un software ha una ricorrenza ciclica: questo implica che arrivati al punto in cui il software viene rilasciato sul mercato inizia una nuova fase chiamata mantenimento che comporta la reiterazione di tutte le fasi precedentemente svolte, proprio a causa dell’impossibilitá di ottenere un prodotto che sia costantemente allineato con i requisiti e le specifiche necessarie nel ciclo di vita del software stesso. In questo capitolo si approfondirá principalmente la fase di testing che sarà quella su cui si concentrerà lo studio di ricerca sull’inserimento di aspetti di gamificazione di cui parleremo nei capitoli successivi.

Introduzione al testing

La fase di testing é l’insieme delle procedure finalizzate a garantire il corretto funzionamento di un software per permetterne l’ utilizzo da parte dell’utente finale. L’obiettivo é quello di individuare mancanze da un punto di vista di correttezza e affidabilità in modo da portare il prodotto sviluppato a rispettare le specifiche tecniche e i requisiti dettati dal cliente o dall’azienda stessa.

In sostanza il compito di un tester é quello di risolvere i malfunzionamenti dell’applicativo risultanti da errori durante la fase di sviluppo. Per avere maggior chiarezza delle terminologie utilizzate si prenderá in considerazione le definizioni data dall’IEEE:

  1. Malfunzionamento: un funzionamento di un programma diverso da quanto previsto dalla sua specifica
  2. Difetto: la causa di un malfunzionamento
  3. Errore: l’origine del difetto

E’ importante stabilire i vari casi d’uso del software per cercare di coprire la totalità delle possibilità di interazione. E’ possibile utilizzare vari tools che aiutino il tester nel suo compito. In ambito professionale, nell’ultimo periodo, si sta andando nella direzione dei test automatizzati per facilitare il lavoro e per renderlo più stabile anche nelle fasi intermedie di sviluppo in cui il codice viene modificato in continuazione.

Oltre l’utilizzo dei tools è necessario tenere in considerazione l’utilizzo di un sistema di feedback da parte dell’utente che, eventualmente, può segnalare la presenza di eventuali bug o problematiche, favorendo così la fase di manutenzione e di miglioramento.

Benefici della fase di testing

Testare nel migliore dei modi un software consente di ottenere numerosi vantaggi:

  1. Guadagno economico: Riuscire a trovare i difetti e i malfuzionamenti di un prodotto prima della sua uscita sul mercato permette di risparmiare tempo, ma soprattutto denaro. E’ molto meno costoso farlo in una fase iniziale di realizzazione che dover riprendere in mano il codice e sistemare tutto in fase di manutenzione.
  2. Sicurezza: La fase di testing è necessaria anche per riuscire a indentificare falle di sicurezza nel prodotto prima che queste possano portare dei danni all’utilizzatore finale. Per guadagnarsi la fiducia del consumatore è fondamentale dare nelle sue mani un prodotto funzionante, ma soprattutto sicuro.
  3. Qualità del prodotto: Il testing permette anche di aumentare la qualità di un prodotto con tutte le conseguenze che comporta. Un prodotto migliore è un prodotto più vendibile e più utile.
  4. Soddisfazione dell’utente: Un prodotto migliore rende anche più soddisfatto l’utilizzatore finale permettedogli di avere un’esperienza meno frustrante e più confortevole.

Costi esponenziali di un bug fix

Da un punto di vista economico diventa di rilevanza considerare i costi di risoluzione dei vari problemi nelle singole fasi di sviluppo. Risulta evidente come un errore risolto in una fase primordiale del ciclo di vita di un software vada ad impattare molto meno rispetto a un bug-fix in fase di manutezione. Questo sia perché la quantitá di righe di codice é minore, sia perché in una fase successiva potrebbe essere molto piú complicato modificare la struttura del software, rivelatasi solo successivamente insufficiente a garantirne il corretto funzionamento.

Benefici, costi, tipologie e tools della fase di testing software

Tipologie di test

Di seguito vengono elencate le principali tipologie di test svolti solitamente nel corso dello sviluppo di un software.

Unit Test

Gli unit test sono il primo livello del testing software. L’obiettivo é quello di isolare una singola funzionalitá del programma e verificare che funzioni come da requisiti. Separare logicamente le varie porzioni del codice aiuta a identificare piú facilmente i problemi, restringendo il campo d’azione. Spesso vengono utilizzate funzionalitá di mock per affiancare gli unit test in modo da simulare il piú possibile il comportamento reale.

Integration Test

Gli integration test sono la fase successiva: essi si occupano di ragruppare varie funzionalitá del software per fare delle tipologie di test piú complete.

Graphic User Interface Test

Il test GUI è un tipo di test del software che controlla l’interfaccia utente grafica del software. Lo scopo del test dell’interfaccia utente grafica (GUI) è garantire che le funzionalità dell’applicazione software funzionino secondo le specifiche controllando schermate e controlli come menu, pulsanti, icone, ecc. Sará proprio questa tipologia di test quella interassata dallo studio fatto in questa tesi.

End-to-end Test

Per End-to-End si intende la verifica del flusso completo di esecuzione di un software in modo da verificare che nell’utilizzo completo di ogni funzionalitá non si riscontrino problematiche. Nel caso di software che interagiscono all’interno di una rete si parla anche di chain test, ovvero test della catena, in modo da verificare che ogni componente comunichi nel modo corretto con le altre. Questo test viene principalmente fatto per capire se il flusso tra il back-end dell’applicazione e il front-end venga eseguito nel modo corretto.

Test automatizzati

Nello stato attuale si stanno utilizzando sempre maggiormente dei tools che permettono l’esecuzione automatica di test, in modo da poter verificare piú velocemente e con costi minori le funzionalitá del software. L’automazione permette in questo modo di affrontare anche casistiche molto complesse e difficili da gestire nel modo tradizionale, rendendo di fatto l’utilizzo di questa pratica sempre piú necessaria.

Tools

I tools presi in esame sono quelli relativi al testing per applicazioni che presentano una GUI e principalmente si occupano di andare a testare che tutte le parti grafiche dell’applicativo funzionino a dovere senza incorrere in vari errori d’esecuzione e valutare che il risultato sia conforme con quello atteso. Solitamente i tools utilizzati hanno l’obiettivo di essere il più universali possibili cercando di adattarsi alle varie piattaforme di esecuzione, tuttavia questa universalità non è sempre garantita ed è necessario andare ad agire nel dettaglio modifcando alcuni parametri.

Automation APIs / Frameworks

Questi tools dispongono di una interfaccia costituita da tutti gli elementi della GUI disposti gerarchicamente nella view e con cui l’utente può interagire. Cercano di essere il più universali possibile, nonostante hanno alcuni casi limite in cui gli attribuiti o gli stati dell’app se non compatibili con la convenzione utilizzata possono comportare uno stato d’errore durante l’esecuzione dello script. Nella maggior parte dei casi sono cross platform, ma hanno il problema della frammentazione. Inoltre sono i costi di mantenimento sono molto alti e spesso è difficile mantenersi al passo con lo sviluppo dell’applicazione.

Record and Replay Tools (R&R)

Attraverso l’utilizzo di tools di questo tipo è possibile creare facilmente dei script di testing per valutare il software.Tutte le interazioni, anche le più complesse, che l’utente può fare attraverso il software gvengono registrate ed eventualmente riprodurle a schermo per verificare che tutto stia funzionando come previsto. Tuttavia il tempo necessario per verificare ogni singola casistica è abbastanza elevato e potrebbe esserne una limitazione.

Automated Test Input Generation Techniques

Un’altra tipologia di approccio per le app mobile è quella basata sulla generazione automatica di input di varia natura. Negli ultimi hanno si sta puntando molto su questa tecnica che però presenta ancora delle sfide irrisolte che comprendono la generazione di eventi di sistema, il costo di riorganizzare l’app e quello di inserire input manuali per specifiche operazioni più complesse.

Bug and Error Reporting/Monitoring Tools

Alcuni tools si occupano di creare dei report automatici sui bug ed errori dell’app. Solitamente sono integrati con dei sistemi di feedback dati dall’utente stessi che può inviare un report di una sua problematica e aiutare più facilmente i tester nel risovlerla. Il limite è basato sul tipo di report possibili attraverso sistemi automatizzati che si limitano per lo più ad essere crash o eccezioni restringendo l’utilità degli stessi.

Continous, Evolutionary e Large scale

Durante lo sviluppo di applicazioni mobile sta prendendo piede il paradigma CEL (Continous, Evolutionary e Large scale). Il panorama dei dispositivi mobile è molto vasto e questo comporta un’attenzione maggiore durante la fase di test:

  1. Continous (Continuoità): é importante che la fase di sviluppo e di test procedano di pari Il software deve essere continuamente testato seguendo l’evoluzione degli obiettivi da raggiungere che possono variare durante tutto il ciclo di sviluppo.
  2. Evolutionary (Evoluzione): Il codice sorgente e gli “artefatti” dei test non devono evolversi indipendemente l’uno dall’altro. Ogni modifica del codice sorgente e dell’eventuale obiettivo da raggiungere deve essere seguita accuratamente dai test in modo che si possa valutare più accuratamente che il prodotto sia conforme a quello
  3. Large Scale: la grandissima quantità di dispositivi mobile obbliga gli sviluppatori ad assicurasi che il prodotto sia stabile e funzionante per tutti i dispositivi che si intende I test devono valutare anche la diversità di dispositivi su cui l’applicazione girerà, in modo da evitare malfunzionamenti. E’ possibile utilizzare un engine che permetta di testare il codice scritto per tutti i dispositivi in modo da testare le reali condizioni dei vari dispositivi e di conseguenza indentificare i problemi eventuali.

Continous Integration / Continous Development (CI/CD)

Il CI/CD é una pratica che permette di distribuire in maniera continua il software in fase di sviluppo automatizzando alcune procedure relative alla build, al testing e al deployment dell’applicativo. Principalmente viene utilizzato in contesti in cui é presente un versioning del codice scritto, con l’appoggio di repository online che contengono tutto l’albero delle modifiche fatte nel corso delle varie versioni. Prima di rilasciare una nuova versione, vengono eseguite in automatico una serie di operazioni automatizzate, solitamente lato server in modo da distribuire il carico di operazioni e favorire la collaborazione tra vari team di sviluppo. E’ una pratica che viene sempre piú usata e favorisce la riuscita di un buon prodotto dopo ogni versione di rilascio.

I software di versioning piú utilizzati sono GIT e SVN. Una delle piattaforme piú avanzate nell’ambito del CI/CD é sicuramente GitLab che permette la creazione di pipeline di operazioni all’inserimento di una nuova versione del software in un determinato branch della repository.

Pubblicato da Vito Lavecchia

Lavecchia Vito Ingegnere Informatico (Politecnico di Bari) Email: [email protected] Sito Web: https://vitolavecchia.altervista.org

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *