Che cosa sono i test non funzionali?

Completato

In Eseguire test funzionali in Azure Pipelines sono stati aggiunti i test dell’interfaccia utente Selenium alla pipeline. I test dell’interfaccia utente sono un tipo di test funzionale. In questa parte è possibile esplorare i tipi di test non funzionali da eseguire in una pipeline.

Il team definisce innanzitutto i test non funzionali. Discute di alcuni tipi di test. Quindi, decide di eseguire un test non funzionale da aggiungere alla pipeline.

Che differenza c’è tra i test non funzionali e quelli funzionali?

In Eseguire test funzionali in Azure Pipelines, è stata data una definizione di test funzionali e test non funzionali.

In breve, i test funzionali controllano che ogni funzione del software esegua le operazioni previste. In altre parole, i test funzionali controllano la funzionalità di un’applicazione.

I test non funzionali controllano gli aspetti non funzionali di un’applicazione, ad esempio le prestazioni e l’affidabilità. È anche possibile eseguire test non funzionali su sistemi diversi dalle app, ad esempio componenti dell'infrastruttura. Un esempio di test non funzionale consiste nel determinare il numero di persone che possono accedere simultaneamente a un’applicazione senza causare problemi, ad esempio tempi di risposta più lenti.

Prendendo ad esempio il sito Web Space Game, un test funzionale può verificare che il tabellone punteggi venga visualizzato correttamente e che mostri i record corretti quando l'utente seleziona un filtro. Un test non funzionale permette di verificare che il filtraggio del tabellone punteggi venga completato in meno di un secondo, anche quando molti utenti si collegano al sito Web nello stesso momento.

I test non funzionali testano sempre qualcosa di misurabile. L’obiettivo è quello di migliorare il prodotto. Per esempio, è possibile migliorare l’efficienza con cui l’applicazione usa le risorse o i tempi di risposta quando molti clienti la usano contemporaneamente. Ecco alcune delle domande a cui i test non funzionali consentono di rispondere:

  • Come si comporta l’applicazione in circostanze normali?
  • Come si comporta l’applicazione quando molti utenti eseguono l’accesso contemporaneamente?
  • Quanto è sicura l’applicazione?

Quali tipi di test non funzionali è possibile eseguire?

Esistono molti tipi di test non funzionali. Molti di essi rientrano nelle più ampie categorie di test delle prestazioni e test di sicurezza.

Test delle prestazioni

L’obiettivo dei test delle prestazioni consiste nel migliorare la velocità, la scalabilità e la stabilità di un’applicazione. Il test della velocità determina la rapidità di risposta di un’applicazione. Il test della scalabilità determina il carico massimo di utenti che un’applicazione può gestire. Il test della stabilità determina se l’applicazione rimane stabile in condizioni di carichi diversi. Due tipi comuni di test delle prestazioni sono i test di carico e i test di stress.

Test di carico

I test di carico determinano le prestazioni di un’applicazione in condizioni di carichi realistici. Ad esempio, i test di carico consentono di determinare il livello di prestazioni di un’applicazione al limite massimo del contratto di servizio (SLA). In pratica, i test di carico determinano il comportamento dell’applicazione quando più utenti ne hanno necessità contemporaneamente.

Gli utenti non sono necessariamente persone. Un test di carico per il software di una stampante, ad esempio, può inviare all'applicazione grandi quantità di dati. Un test di carico per un server di posta può simulare migliaia di utenti contemporaneamente.

Il test di carico è anche un modo efficace per individuare i problemi che si presentano solo quando l’applicazione opera al limite. Questo è il momento in cui possono verificarsi problemi quali l’overflow del buffer le perdite di memoria.

In questo modulo si userà Apache JMeter per eseguire i test di carico. Verrà usato un set di utenti simulati che accedono al sito Web contemporaneamente.

Test di stress

I test di stress determinano la stabilità e l’affidabilità di un’applicazione con carichi elevati. I carichi superano quanto specificato per l’applicazione. I test di stress determinano se l’applicazione si arresterà in modo anomalo con questi carichi. Se l’applicazione ha esito negativo, il test di stress verifica che ciò avvenga in modo normale. L’esito negativo normale potrebbe, ad esempio, emettere un messaggio di errore informativo appropriato.

Gli scenari in cui le applicazioni devono funzionare con carichi anomali sono comuni. Ad esempio, nel caso in cui un video divenga virale, è necessario capire in che modo i server possono gestire il carico aggiuntivo. Un altro scenario tipico è il traffico elevato sui siti Web di shopping durante le festività.

Test di sicurezza

I test di sicurezza garantiscono che le applicazioni siano prive di vulnerabilità, minacce e rischi. I test di sicurezza approfonditi individuano tutte le possibili falle e debolezze del sistema che potrebbero causare una violazione delle informazioni o una perdita di ricavi.

Esistono molti tipi di test di sicurezza. Due di questi sono i test di penetrazione e i test di conformità.

Test di penetrazione

I test di penetrazioneo pen testing, è un tipo di test di sicurezza che verifica le aree non sicure dell’applicazione. In particolare, verifica le vulnerabilità che possono essere sfruttate da un utente malintenzionato. L’attacco informatico autorizzato e simulato in genere fa parte dei test di penetrazione.

Test di conformità

Il test di conformità determina se un’applicazione è conforme a una serie di requisiti, all’interno o all’esterno dell’azienda. Ad esempio, le organizzazioni sanitarie devono in genere conformarsi all'HIPAA (Health Insurance Portability and Accountability Act del 1996), che contiene disposizioni in materia di privacy dei dati e sicurezza per la protezione dei dati sanitari.

Un’organizzazione potrebbe anche avere i propri requisiti di sicurezza. Il software deve essere testato per assicurarsi che segua tali requisiti. Nei sistemi Linux, ad esempio, la maschera utente predefinita deve essere 027 o più restrittiva. Un test di sicurezza deve dimostrare che questo requisito è soddisfatto.

Il piano

Nella parte restante di questo modulo, si configurerà l’ambiente Azure DevOps, si apprenderà a pianificare i test di carico usando Apache JMeter e a eseguire i test di carico in Azure Pipelines.

Verificare le conoscenze

1.

L’app Web è stata recentemente connessa a un database. I record del database vengono visualizzati quando viene caricata la pagina. È necessario verificare che le chiamate al database non comportino un caricamento della pagina più lungo di un secondo. Quale tipo di test non funzionale è possibile usare?

2.

Il sito Web vende biglietti per i concerti di un locale. La sede ospita un evento di più giorni con la partecipazione di molti artisti noti. Si ha il timore è che il sito non sia in grado di gestire l’improvviso aumento del traffico. Qual è il tipo di test più rassicurante?

3.

Si sospetta che il sito Web esponga una vulnerabilità che consentirebbe a un hacker di accedere ai dati sensibili. Quale tipo di test non funzionale è possibile eseguire per individuare questa vulnerabilità?