Tipologie di testing software: Il Test di Sistema

Tipologie di testing software: Il Test di Sistema

Dopo aver completato i test sulle singole unità e verificato la loro corretta integrazione, si procede con il collaudo dell’intero sistema software.
Effettuare dei test sull’intero sistema significa affermare con una certa misura la qualità del prodotto finale. Le caratteristiche testate a questo livello possono essere diverse e numerose, e spesso dipendono dal tipo di applicazione realizzata.

Tipologie di testing software: Il Test di Sistema

Tali test solitamente si basano sulle funzionalità espresse nelle specifiche e nei requisiti dell’applicazione e possono coinvolgere diverse configurazioni software e hardware.
Anche se l’approccio utilizzato è per lo più di tipo black box testing, quindi orientato ai test funzionali, vengono controllate anche altre caratteristiche strutturali come sicurezza, usabilità e manutenibilità.
I test di sicurezza, ad esempio, sono un aspetto cruciale del collaudo di un sistema, e dipendono necessariamente dai requisiti definiti per l’applicazione che si sta realizzando, che deve poter garantire caratteristiche come: autenticità, controllo degli accessi, segretezza dei dati, integrità dei dati e non ripudiabilità.

Il testing di sicurezza può risultare molto impegnativo, complicato e costoso per applicazioni che richiedono un elevato grado di sicurezza, in quanto per proteggere il software da eventuali attacchi bisogna tenere conto che questi sono generalmente provocati da avversari intelligenti che sfruttano tutte le possibili debolezze del sistema.
Il testing accurato dei meccanismi di sicurezza, sviluppati per prevenire, scoprire o ripristinare il sistema dopo un attacco, viene sempre affiancato alle analisi di rischio, che possono aiutare a identificare e classificare potenziali problemi di sicurezza e il loro impatto.
Mentre le analisi di rischio vengono affrontate con un approccio di tipo white box testing, attraverso una profonda conoscenza dell’architettura del software e una ricerca e classificazione delle sue debolezze interne, il testing dei meccanismi di sicurezza, invece, viene solitamente effettuato con test funzionali di tipo black box.

Un altro classico test di sistema, oltre a quelli legati alla sicurezza, è il cosiddetto “stress test”, che ha lo scopo di destabilizzare il sistema ponendolo in uno stato di stress, quindi con un sovraccarico o una sottrazione di risorse.
Questo tipo di testing ha come scopo quello di garantire l’aspetto qualitativo noto come “recoverability” o robustezza, ovvero la capacità di un sistema di reagire ad errori imprevisti.
Dopo aver mandato in crash il sistema è necessario osservare con attenzione la sua reazione, misurando la sua tolleranza verso errori improvvisi, verificando se l’arresto avviene in modo controllato o entra immediatamente in uno stato di blocco, controllando se il riavvio riprende dall’ultimo stato corretto e se i dati sono stati salvati o andati persi.
Alcuni esempi di stress test per un applicazione web possono essere: lo spegnimento e il riavvio casuale di porte di switch e router di rete che collegano i server, la messa offline del database e l’esecuzione di processi che consumano risorse (CPU, memoria, disco e rete) sui server.

I requisiti di un applicazione comprendono anche l’efficienza del prodotto software, tipicamente controllata nei test di sistema.
Lo scopo di questo tipo di test è proprio quello di andare a verificare che siano soddisfatti quelli che vengono comunemente definiti requisiti prestazionali, che devono quindi essere verificati prima del rilascio dell’applicativo.
Questa tipologia di test viene anche spesso utilizzata per il confronto in termini di efficienza di diverse versioni di uno stesso applicativo.
Solitamente in questo tipo di test la variabile principale che viene considerata è il tempo di esecuzione.
Infatti, per vari tipi di operazioni vengono fissati i tempi massimi di esecuzione (ovvero, si definiscono delle “baseline”) e si verifica che il prodotto software non superi tali tempi limite.
I tempi massimi di esecuzione presi in esame possono variare in base al tipo di hardware e alle funzioni del software analizzate.

E’ chiaro che se tale test fosse eseguito per un applicazione web installata su server di ultima generazione, con tecnologia multiprocessore, i risultati attesi sarebbero molto diversi da quelli della stessa applicazione su un server obsoleto.
Lo stesso discorso può essere fatto per la complessità computazionale delle varie operazioni prese in esame, che determineranno in modo sostanziale tali limiti di tempo.
Questi test possono essere sviluppati sia dal punto di vista funzionale, che da quello strutturale, ovvero ispezionando e controllando il sistema dall’interno, considerando i tempi di esecuzione come somma dei tempi necessari per le singole operazioni.
Ciò si spiega con la raccolta e l’analisi di misure localizzate in diverse porzioni di codice, che facilitano la determinazione di un rallentamento dell’applicazione.

Uno o più test di performance possono essere integrati anche nei test di regressione, per verificare che le modifiche al prodotto software non abbiano introdotto rallentamenti.
Un altro tipo di test di sistema è il “load test”, che prevede l’aumento costante del carico sul sistema tramite strumenti automatici.
Per una applicazione web, ad esempio, il carico è il numero di utenti/connessioni HTTP concorrenti.
Altri esempi di questo tipo di test possono essere: la creazione di un grande numero di mailbox in un mail server, la scrittura di un documento molto lungo per un word processor oppure la stampa di un job pesante per una stampante.
Questo tipo di test è molto utile per prevenire difetti legati alla gestione della memoria o alle dimensioni di buffer.

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 *