Test delle prestazioni
Il test delle prestazioni è un processo di test del software utilizzato per testare la velocità, il tempo di risposta, la stabilità, l'affidabilità, la scalabilità e l'utilizzo delle risorse di un'applicazione software con un carico di lavoro particolare. Lo scopo principale del test delle prestazioni è identificare ed eliminare i colli di bottiglia delle prestazioni nell'applicazione software. È un sottoinsieme dell'ingegneria delle prestazioni e noto anche come "Perf Testing".
L'obiettivo del test delle prestazioni è il controllo di un programma software
- Velocità: determina se l'applicazione risponde rapidamente
- Scalabilità: determina il carico utente massimo che l'applicazione software può gestire.
- Stabilità: determina se l'applicazione è stabile sotto carichi variabili
In questo tutorial imparerai-
- Che cos'è il test delle prestazioni?
- Perché i test delle prestazioni?
- Tipi di test delle prestazioni
- Problemi di prestazioni comuni
- Processo di test delle prestazioni
- Metriche del test delle prestazioni: parametri monitorati
- Esempi di casi di test delle prestazioni
- Strumenti per il test delle prestazioni
- FAQ
Perché i test delle prestazioni?
Caratteristiche e funzionalità supportate da un sistema software non sono l'unica preoccupazione. Le prestazioni di un'applicazione software come il tempo di risposta, l'affidabilità, l'utilizzo delle risorse e la scalabilità sono importanti. L'obiettivo del test delle prestazioni non è trovare bug, ma eliminare i colli di bottiglia delle prestazioni.
Il test delle prestazioni viene eseguito per fornire alle parti interessate informazioni sulla loro applicazione in merito a velocità, stabilità e scalabilità. Ancora più importante, il test delle prestazioni scopre ciò che deve essere migliorato prima che il prodotto venga immesso sul mercato. Senza il test delle prestazioni, è probabile che il software soffra di problemi quali: esecuzione lenta mentre più utenti lo utilizzano contemporaneamente, incongruenze tra i diversi sistemi operativi e scarsa usabilità.
I test delle prestazioni determineranno se il loro software soddisfa i requisiti di velocità, scalabilità e stabilità nei carichi di lavoro previsti. È probabile che le applicazioni inviate al mercato con metriche di prestazioni scadenti a causa di test inesistenti o scadenti acquisiscano una cattiva reputazione e non soddisfino gli obiettivi di vendita previsti.
Inoltre, le applicazioni mission-critical come i programmi di lancio nello spazio o le apparecchiature mediche salvavita dovrebbero essere testate sulle prestazioni per garantire che funzionino per un lungo periodo senza deviazioni.
Secondo Dunn & Bradstreet, il 59% delle aziende Fortune 500 subisce circa 1,6 ore di inattività ogni settimana. Considerando che una società Fortune 500 media con un minimo di 10.000 dipendenti paga $ 56 l'ora, la parte di manodopera dei costi del tempo di inattività per un'organizzazione di questo tipo sarebbe di $ 896.000 a settimana, che si traduce in oltre $ 46 milioni all'anno.
Si stima che solo un tempo di inattività di 5 minuti di Google.com (19-ago-13) costerà al gigante della ricerca fino a $ 545.000.
Si stima che le aziende abbiano perso vendite per un valore di $ 1100 al secondo a causa di una recente interruzione del servizio Web Amazon.
Quindi, il test delle prestazioni è importante.
Tipi di test delle prestazioni
- Test di carico: controlla la capacità dell'applicazione di funzionare sotto i carichi utente previsti. L'obiettivo è identificare i colli di bottiglia delle prestazioni prima che l'applicazione software venga pubblicata.
- Stress testing: implica il test di un'applicazione sotto carichi di lavoro estremi per vedere come gestisce il traffico elevato o l'elaborazione dei dati. L'obiettivo è identificare il punto di rottura di un'applicazione.
- Test di resistenza: vengono eseguiti per assicurarsi che il software sia in grado di gestire il carico previsto per un lungo periodo di tempo.
- Spike testing: verifica la reazione del software a improvvisi picchi di carico generati dagli utenti.
- Test di volume - In Test di volume grande no. di. I dati vengono inseriti in un database e il comportamento dell'intero sistema software viene monitorato. L'obiettivo è controllare le prestazioni dell'applicazione software con volumi di database variabili.
- Test di scalabilità : l'obiettivo del test di scalabilità è determinare l'efficacia dell'applicazione software nel "ridimensionamento" per supportare un aumento del carico utente. Aiuta a pianificare l'aggiunta di capacità al sistema software.
Problemi di prestazioni comuni
La maggior parte dei problemi di prestazioni riguardano la velocità, il tempo di risposta, il tempo di caricamento e la scarsa scalabilità. La velocità è spesso uno degli attributi più importanti di un'applicazione. Un'applicazione a esecuzione lenta perderà potenziali utenti. Il test delle prestazioni viene eseguito per assicurarsi che un'app funzioni abbastanza velocemente da mantenere l'attenzione e l'interesse dell'utente. Dai un'occhiata al seguente elenco di problemi di prestazioni comuni e nota come la velocità sia un fattore comune in molti di essi:
- Tempo di caricamento lungo: il tempo di caricamento è normalmente il tempo iniziale necessario per l'avvio di un'applicazione. Questo dovrebbe generalmente essere ridotto al minimo. Sebbene alcune applicazioni siano impossibili da caricare in meno di un minuto, il tempo di caricamento dovrebbe essere mantenuto al di sotto di pochi secondi, se possibile.
- Tempo di risposta scadente: il tempo di risposta è il tempo che trascorre da quando un utente inserisce i dati nell'applicazione fino a quando l'applicazione emette una risposta a quell'input. In generale, dovrebbe essere molto veloce. Anche in questo caso, se un utente deve aspettare troppo a lungo, perde interesse.
- Scarsa scalabilità: un prodotto software soffre di una scarsa scalabilità quando non è in grado di gestire il numero previsto di utenti o quando non soddisfa una gamma di utenti sufficientemente ampia. Il test di carico dovrebbe essere eseguito per essere certi che l'applicazione possa gestire il numero previsto di utenti.
- Bottleneck - I colli di bottiglia sono ostacoli in un sistema che degradano le prestazioni complessive del sistema. Il collo di bottiglia si verifica quando errori di codifica o problemi hardware causano una diminuzione della velocità effettiva sotto determinati carichi. Il collo di bottiglia è spesso causato da una sezione di codice difettosa. La chiave per risolvere un problema di strozzatura è trovare la sezione di codice che causa il rallentamento e provare a risolverlo lì. Il blocco viene generalmente risolto risolvendo processi in esecuzione scadenti o aggiungendo hardware aggiuntivo. Alcuni colli di bottiglia delle prestazioni comuni sono
- Utilizzo della CPU
- Utilizzo della memoria
- Utilizzo della rete
- Limitazioni del sistema operativo
- Uso del disco
Processo di test delle prestazioni
La metodologia adottata per i test delle prestazioni può variare notevolmente, ma l'obiettivo dei test delle prestazioni rimane lo stesso. Può aiutare a dimostrare che il sistema software soddisfa determinati criteri prestazionali predefiniti. Oppure può aiutare a confrontare le prestazioni di due sistemi software. Può anche aiutare a identificare parti del sistema software che ne riducono le prestazioni.
Di seguito è riportato un processo generico su come eseguire il test delle prestazioni
- Identifica il tuo ambiente di test: conosci il tuo ambiente di test fisico, l'ambiente di produzione e quali strumenti di test sono disponibili. Comprendere i dettagli dell'hardware, del software e delle configurazioni di rete utilizzate durante il test prima di iniziare il processo di test. Aiuterà i tester a creare test più efficienti. Aiuterà anche a identificare le possibili sfide che i tester potrebbero incontrare durante le procedure di test delle prestazioni.
- Identificare i criteri di accettazione delle prestazioni - Ciò include obiettivi e vincoli per la produttività, i tempi di risposta e l'allocazione delle risorse. È inoltre necessario identificare i criteri di successo del progetto al di fuori di questi obiettivi e vincoli. I tester dovrebbero avere il potere di stabilire criteri e obiettivi di prestazione perché spesso le specifiche del progetto non includeranno una varietà abbastanza ampia di benchmark di prestazione. A volte potrebbe non essercene affatto. Quando possibile, trovare un'applicazione simile da confrontare è un buon modo per impostare obiettivi di rendimento.
- Pianifica e progetta i test delle prestazioni: determina come è probabile che l'utilizzo vari tra gli utenti finali e identifica gli scenari chiave da testare per tutti i possibili casi d'uso. È necessario simulare una varietà di utenti finali, pianificare i dati dei test delle prestazioni e delineare le metriche che verranno raccolte.
- Configurazione dell'ambiente di test: preparare l'ambiente di test prima dell'esecuzione. Inoltre, organizza strumenti e altre risorse.
- Implementare il progetto di test: creare i test delle prestazioni in base al progetto di test.
- Esegui i test: esegui e monitora i test.
- Analizza, ottimizza e riprova : consolida, analizza e condividi i risultati dei test. Quindi ottimizza e prova di nuovo per vedere se c'è un miglioramento o una diminuzione delle prestazioni. Poiché i miglioramenti generalmente si riducono a ogni nuovo test, fermati quando i colli di bottiglia sono causati dalla CPU. Quindi potresti avere la possibilità di aumentare la potenza della CPU.
Metriche del test delle prestazioni: parametri monitorati
I parametri di base monitorati durante il test delle prestazioni includono:
- Utilizzo del processore: la quantità di tempo che il processore impiega per eseguire thread non inattivi.
- Utilizzo della memoria: quantità di memoria fisica disponibile per i processi su un computer.
- Tempo su disco: tempo in cui il disco è occupato nell'esecuzione di una richiesta di lettura o scrittura.
- Larghezza di banda: mostra i bit al secondo utilizzati da un'interfaccia di rete.
- Byte privati: numero di byte allocati da un processo che non possono essere condivisi tra altri processi. Questi vengono utilizzati per misurare le perdite di memoria e l'utilizzo.
- Memoria impegnata: quantità di memoria virtuale utilizzata.
- Pagine di memoria / secondo - numero di pagine scritte o lette dal disco per risolvere gli errori di pagina hardware. Gli errori di pagina rigida si verificano quando il codice non proveniente dal working set corrente viene richiamato da altrove e recuperato da un disco.
- Errori di pagina / secondo: la frequenza complessiva con cui le pagine di errore vengono elaborate dal processore. Ciò si verifica di nuovo quando un processo richiede codice esterno al proprio working set.
- Interruzioni della CPU al secondo: è la media. numero di interruzioni hardware che un processore riceve ed elabora ogni secondo.
- Lunghezza della coda del disco: è la media. no. di richieste di lettura e scrittura accodate per il disco selezionato durante un intervallo di campionamento.
- Lunghezza della coda di output di rete: lunghezza della coda dei pacchetti di output nei pacchetti. Qualunque cosa più di due significa che è necessario fermare un ritardo e le strozzature.
- Byte di rete totali al secondo: velocità con cui i byte vengono inviati e ricevuti sull'interfaccia, inclusi i caratteri di framing.
- Tempo di risposta: tempo che intercorre tra il momento in cui un utente immette una richiesta e la ricezione del primo carattere della risposta.
- Velocità effettiva: velocità di ricezione delle richieste da parte di un computer o di una rete al secondo.
- Quantità di pool di connessioni: il numero di richieste utente soddisfatte dalle connessioni in pool. Maggiore è il numero di richieste soddisfatte dalle connessioni nel pool, migliori saranno le prestazioni.
- Numero massimo di sessioni attive: il numero massimo di sessioni che possono essere attive contemporaneamente.
- Rapporti di riscontro: questo ha a che fare con il numero di istruzioni SQL gestite dai dati memorizzati nella cache invece di costose operazioni di I / O. Questo è un buon punto di partenza per risolvere i problemi di strozzatura.
- Hit al secondo - il no. di visite su un server web durante ogni secondo di un test di carico.
- Segmento di rollback: la quantità di dati che è possibile eseguire il rollback in qualsiasi momento.
- Blocchi del database: il blocco di tabelle e database deve essere monitorato e messo a punto con attenzione.
- Attese principali: vengono monitorate per determinare quali tempi di attesa possono essere ridotti quando si tratta della velocità con cui i dati vengono recuperati dalla memoria
- Conteggi thread: lo stato di salute delle applicazioni può essere misurato dal n. di thread in esecuzione e attualmente attivi.
- Garbage collection: ha a che fare con la restituzione della memoria inutilizzata al sistema. La raccolta dei rifiuti deve essere monitorata per l'efficienza.
Esempi di casi di test delle prestazioni
- Verificare che il tempo di risposta non sia superiore a 4 secondi quando 1000 utenti accedono al sito Web contemporaneamente.
- Verificare che il tempo di risposta dell'applicazione sotto carico rientri in un intervallo accettabile quando la connettività di rete è lenta
- Verificare il numero massimo di utenti che l'applicazione può gestire prima che si arresti in modo anomalo.
- Controlla il tempo di esecuzione del database quando 500 record vengono letti / scritti contemporaneamente.
- Controllare l'utilizzo della CPU e della memoria dell'applicazione e del server database in condizioni di carico massimo
- Verificare il tempo di risposta dell'applicazione in condizioni di carico basso, normale, moderato e pesante.
Durante l'effettiva esecuzione del test delle prestazioni, termini vaghi come intervallo accettabile, carico pesante, ecc. Vengono sostituiti da numeri concreti. Gli ingegneri delle prestazioni impostano questi numeri in base ai requisiti aziendali e al panorama tecnico dell'applicazione.
Strumenti per il test delle prestazioni
Sul mercato è disponibile un'ampia varietà di strumenti di test delle prestazioni. Lo strumento scelto per il test dipenderà da molti fattori come i tipi di protocollo supportato, il costo della licenza, i requisiti hardware, il supporto della piattaforma, ecc. Di seguito è riportato un elenco di strumenti di test comunemente utilizzati.
- LoadNinja - sta rivoluzionando il modo in cui cariciamo il test. Questo strumento di test di carico basato su cloud consente ai team di registrare e riprodurre istantaneamente test di carico completi, senza correlazioni dinamiche complesse ed eseguire questi test di carico su browser reali su larga scala. I team sono in grado di aumentare la copertura dei test. e ridurre i tempi di test di carico di oltre il 60%.
- NeoLoad : è la piattaforma di test delle prestazioni progettata per DevOps che si integra perfettamente nella pipeline di Continuous Delivery esistente. Con NeoLoad, i team eseguono test 10 volte più velocemente rispetto agli strumenti tradizionali per soddisfare il nuovo livello di requisiti durante l'intero ciclo di vita dello sviluppo software Agile, dai test di carico a livello di sistema completo dei componenti.
- HP LoadRunner - è lo strumento di test delle prestazioni più diffuso oggi sul mercato. Questo strumento è in grado di simulare centinaia di migliaia di utenti, sottoponendo le applicazioni a carichi reali per determinare il loro comportamento sotto i carichi previsti. Loadrunner dispone di un generatore di utenti virtuali che simula le azioni di utenti umani dal vivo.
- Jmeter : uno dei principali strumenti utilizzati per i test di carico dei server Web e delle applicazioni.
FAQ
Quali applicazioni dovremmo testare le prestazioni?
Il test delle prestazioni viene sempre eseguito solo per i sistemi basati su client-server. Ciò significa che qualsiasi applicazione che non sia un'architettura basata su client-server, non deve richiedere il test delle prestazioni.
Ad esempio, Microsoft Calculator non è né client-server né esegue più utenti; quindi non è un candidato per il test delle prestazioni.
Qual è la differenza tra Performance Testing e Performance Engineering
È importante comprendere la differenza tra Performance Testing e Performance Engineering. Di seguito viene condivisa un'intesa:
Il test delle prestazioni è una disciplina che si occupa di testare e riportare le prestazioni correnti di un'applicazione software sotto vari parametri.
L'ingegneria delle prestazioni è il processo mediante il quale il software viene testato e messo a punto con l'intento di realizzare le prestazioni richieste. Questo processo mira a ottimizzare il tratto più importante delle prestazioni dell'applicazione, ovvero l'esperienza dell'utente.
Storicamente, test e messa a punto sono stati ambiti nettamente separati e spesso concorrenti. Negli ultimi anni, tuttavia, diverse tasche di tester e sviluppatori hanno collaborato in modo indipendente per creare team di ottimizzazione. Poiché questi team hanno ottenuto un successo significativo, il concetto di accoppiare il test delle prestazioni con l'ottimizzazione delle prestazioni ha preso piede e ora lo chiamiamo ingegneria delle prestazioni.
Conclusione
Nell'ingegneria del software, il test delle prestazioni è necessario prima di commercializzare qualsiasi prodotto software. Assicura la soddisfazione del cliente e protegge l'investimento di un investitore dal fallimento del prodotto. I costi dei test delle prestazioni sono generalmente più che compensati da una maggiore soddisfazione, fedeltà e fidelizzazione del cliente.