Il performance testing, perché è necessario e come farlo semplice

Il performance testing, perché è necessario e come farlo semplice

L’estrema varietà di utenti e relativi dispositivi sui quali un’applicazione viene eseguita pone delle sfide aggiuntive ai programmatori. Non si tratta più solo di valutare l’efficienza di un codice dal punto di vista della funzionalità e affidabilità in modo empirico: per evitare impatti anche pesanti sulla qualità del servizio è fondamentale prevedere anche una fase di performance testing.  

 

Che cos’è il performance testing 

Quando si parla di performance testing si tratta, in estrema sintesi, di mettersi dalla parte dell’utente, di cercare di capire come e quando l’applicazione viene usata, nell’intento di prevenire ogni potenziale sorta di problema. Di fronte a connessioni instabili, hardware dei quali è difficile quantificare le caratteristiche tecniche e situazioni d’uso tra le più disparate, anche il software meglio scritto può trovarsi in difficoltà.  

A cosa serve il performance test? Prima di tutto a prevenire situazioni di disagio da parte dell’utente, situazioni che incidono negativamente sul proprietario o il gestore dell’applicazione. Basti, per esempio, pensare a un’app di e-commerce non in grado di funzionare con alcuni smartphone a causa della configurazione, della connessione o del numero di accessi contemporanei. Oppure, al lavoratore in smart working alle prese con procedure inefficienti nell’interagire con i sistemi aziendali. Con uno smart testing accurato, tutti questi inconvenienti si possono evitare in anticipo. 

 

Il performance testing, compagno di sviluppo 

Se certamente non è possibile prevedere ogni possibile combinazione di scenari, fino a dove arriva il raggio d’azione degli sviluppatori, un aiuto può arrivare dalle più attuali metodologie di sviluppo come DevOps. Nella sequenza di passaggi, il performance testing deve occupare un ruolo fisso. D’altra parte, agire per moduli aiuta a individuare i punti deboli, fermo restando la necessità di valutare sempre anche l’applicazione nel suo insieme. 

In pratica, significa individuare una serie di test dove alcuni parametri di riferimento permettono di valutare lo stato di salute di un software, in relazione all’ambiente in cui viene eseguito e alla capacità di sopportare i carichi di lavoro senza ripercussioni significative sulle prestazioni.  

Da una parte, ci sono quindi aspetti classici come la velocità, la stabilità e l’affidabilità. Dall’altra, gli elementi più legati al sistema con cui l’utente interagisce. Si parla per esempio dei server, della connessione e dell’accesso ai dati, con relative procedure di sicurezza.  

Il vero obiettivo non è tanto valutare l’insieme nelle condizioni standard, quanto invece mettere alla prova l’infrastruttura IT in condizioni limite, così da valutare il comportamento in situazioni di picco e individuare i colli di bottiglia sui quali intervenire.  

 

Carico e stress, i parametri del performance test

Sono diverse le attività possibili per una strategia di performance testing. Due però rappresentano le principali, dalle quali partire: il load testing e lo stress testing. A seconda degli obiettivi, questi due test possono prevedere un numero variabile di fasi, mentre tra i primi obiettivi rientrano l’individuazione della capacità di carico sopportabile dal sistema, o quella necessaria, e la definizione dei criteri di scalabilità necessari per adattare tempestivamente le risorse alle esigenze degli utenti. In ogni caso si tratta di procedure concettualmente semplici, con la possibilità di affidarsi a strumenti dedicati.  

Per eseguire i test vanno individuati i KPI, gli indici dai quali valutare le relative prestazioni. Una fase delicata, dove i Key Performance Index devono essere più stabili possibili nel tempo, così da permettere confronti anche nel lungo periodo. Una strada sicura è affidarsi agli strumenti disponibili sul mercato, in grado anche di garantire uniformità nelle procedure e affidabilità nel confronto dei risultati. All’occorrenza, affidandosi a consulenti esperti nel settore, pronti a supportare nell’individuazione dei punti critici e a fornire indicazioni frutto di un’esperienza più ampia. Tra i KPI più utilizzati, throughput, quantità di memoria utilizzata, tempo medio di risposta, interazioni completate al secondo, tempo di risposta sulla singola operazione e numero di accessi medi al secondo supportati. 

L’obiettivo è mettere alla prova sistemi e applicazioni in condizioni d’uso estreme. Il load testing deve quindi simulare l’accesso di un numero crescente di utenti, con relativi comportamenti, e valutare le relative prestazioni. Deve comunque rimanere uno scenario reale, ricostruito in base a una situazione corrente.  

Il test di carico può però essere eseguito sin dalle fasi di sviluppo. Anche in assenza di situazioni reali, sottoporre il software a una serie di richieste crescente e complessa aiuta a capire fino a che punto le prestazioni restino soddisfacenti ed eventualmente individuare i colli di bottiglia sui quali intervenire immediatamente.  

In sintesi, si tratta di trovare i limiti oltre i quali i singoli componenti dell’infrastruttura faticano a garantire le prestazioni, sia nei singoli moduli sia nell’insieme.  

Lo stress testing, invece, permette di completare le analisi grazie alle informazioni ricavate dalla fase precedente. Si sottopone l’intero sistema, hardware e software, a un carico crescente in modo da stimare la capacità di adattarsi e reagire senza impatti significativi sulle prestazioni lato utente.  

Non si tratta solo di quantificare i livelli massimi per le risorse. È importante anche valutare la reazione in caso di eventi esterni, a partire dagli attacchi informatici ai sistemi IT, o la capacità di tornare ai livelli standard una volta superato il picco. 

Si individua così un livello di criticità, oltre il quale il sovraccarico è tale da mettere a rischio l’intera fruibilità delle applicazioni. Capire per tempo la potenziale situazione di pericolo, permetterà però di farsi trovare pronti. Anticipare la necessità di adeguare tempestivamente aspetti come le risorse hardware o la connessione, di fatto impedisce ai problemi di raggiungere l’utente finale, a beneficio della qualità del servizio reso, ma anche dell’immagine dell’azienda. 

 

modern-application-development