Testarea performanței software-ului - Software performance testing

În asigurarea calității software-ului , testarea performanței este, în general, o practică de testare efectuată pentru a determina modul în care un sistem funcționează în termeni de receptivitate și stabilitate într-o anumită sarcină de lucru. De asemenea, poate servi la investigarea, măsurarea, validarea sau verificarea altor atribute de calitate ale sistemului, precum scalabilitatea , fiabilitatea și utilizarea resurselor.

Testarea performanței, un subset de inginerie de performanță , este o practică în domeniul informaticii care se străduiește să construiască standarde de performanță în implementarea, proiectarea și arhitectura unui sistem.

Tipuri de testare

Testarea sarcinii

Testarea încărcării este cea mai simplă formă de testare a performanței. De obicei se efectuează un test de încărcare pentru a înțelege comportamentul sistemului sub o sarcină preconizată specifică. Această încărcare poate fi numărul simultan preconizat de utilizatori din aplicație care efectuează un anumit număr de tranzacții pe durata stabilită. Acest test va da timpul de răspuns al tuturor tranzacțiilor critice importante pentru afaceri. Baza de date , serverul de aplicații etc. sunt, de asemenea, monitorizate în timpul testului, acest lucru va ajuta la identificarea blocajelor în software-ul aplicației și hardware-ul pe care este instalat software-ul.

Testare stresanta

Testarea stresului este utilizată în mod normal pentru a înțelege limitele superioare ale capacității din sistem. Acest tip de test se face pentru a determina robustețea sistemului în termeni de sarcină extremă și ajută administratorii aplicației să determine dacă sistemul va funcționa suficient dacă sarcina curentă depășește cu mult maximul așteptat.

Testarea la înmuiere

Testarea prin înmuiere , cunoscută și sub denumirea de teste de rezistență, se face de obicei pentru a determina dacă sistemul poate susține sarcina continuă așteptată. În timpul testelor de absorbție, utilizarea memoriei este monitorizată pentru a detecta scurgerile potențiale. De asemenea, este importantă, dar adesea trecută cu vederea, degradarea performanței, adică să se asigure că timpii de producție și / sau de răspuns după o perioadă lungă de activitate susținută sunt la fel de buni sau mai buni decât la începutul testului. În esență, implică aplicarea unei sarcini semnificative unui sistem pentru o perioadă extinsă și semnificativă de timp. Scopul este de a descoperi cum se comportă sistemul în condiții de utilizare susținută.

Testarea vârfurilor

Testarea vârfurilor se face prin creșterea sau scăderea bruscă a sarcinii generate de un număr foarte mare de utilizatori și observarea comportamentului sistemului. Scopul este de a determina dacă performanța va avea de suferit, sistemul va eșua sau va fi capabil să facă față schimbărilor dramatice ale încărcării.

Testarea punctului de întrerupere

Testarea punctelor de întrerupere este similară cu testarea stresului. O sarcină incrementală se aplică în timp, în timp ce sistemul este monitorizat pentru condiții de eșec predeterminate. Testarea punctelor de întrerupere este uneori denumită Testarea capacității, deoarece se poate spune că determină capacitatea maximă sub care sistemul va efectua conform specificațiilor sale necesare sau acordurilor de nivel de serviciu. Rezultatele analizei punctelor de întrerupere aplicate unui mediu fix pot fi utilizate pentru a determina strategia de scalare optimă în ceea ce privește hardware-ul necesar sau condițiile care ar trebui să declanșeze evenimente de scalare într-un mediu cloud.

Testarea configurației

În loc să testeze performanța din perspectiva încărcării, se creează teste pentru a determina efectele modificărilor de configurație ale componentelor sistemului asupra performanței și comportamentului sistemului. Un exemplu comun ar fi experimentarea cu diferite metode de echilibrare a sarcinii .

Testarea izolației

Testarea izolației nu este unică pentru testarea performanței, ci implică repetarea unei execuții a testului care a dus la o problemă de sistem. O astfel de testare poate izola și confirma deseori domeniul de eroare.

Testarea pe internet

Aceasta este o formă relativ nouă de testare a performanței atunci când aplicațiile globale, cum ar fi Facebook, Google și Wikipedia, sunt testate de performanță de la generatoare de încărcare care sunt plasate pe continentul țintă real, fie că sunt mașini fizice sau mașini virtuale cloud. Aceste teste necesită de obicei o cantitate imensă de pregătire și monitorizare pentru a fi executate cu succes.

Stabilirea obiectivelor de performanță

Testarea performanței poate avea diferite scopuri:

  • Poate demonstra că sistemul îndeplinește criteriile de performanță.
  • Poate compara două sisteme pentru a găsi care funcționează mai bine.
  • Poate măsura ce părți ale sistemului sau sarcina de lucru determină ca sistemul să funcționeze prost.

Multe teste de performanță sunt efectuate fără a stabili obiective de performanță suficient de realiste, orientate spre obiective. Prima întrebare din perspectiva afacerii ar trebui să fie întotdeauna „de ce testăm performanța?”. Aceste considerații fac parte din cazul de afaceri al testării. Obiectivele de performanță vor diferi în funcție de tehnologia și scopul sistemului, dar ar trebui să includă întotdeauna unele dintre următoarele:

Concurență și randament

Dacă un sistem identifică utilizatorii finali printr-o formă de procedură de autentificare, atunci este extrem de dorit un obiectiv de concurență. Prin definiție, acesta este cel mai mare număr de utilizatori simultani ai sistemului pe care sistemul este de așteptat să-l accepte la un moment dat. Fluxul de lucru al unei tranzacții scriptate poate avea un impact real asupra concurenței, mai ales dacă partea iterativă conține activitatea de logare și deconectare.

Dacă sistemul nu are concept de utilizatori finali, atunci obiectivul de performanță se va baza probabil pe un randament maxim sau o rată de tranzacție.

Timp de răspuns al serverului

Aceasta se referă la timpul necesar pentru ca un nod de sistem să răspundă la solicitarea altuia. Un exemplu simplu ar fi o cerere HTTP „GET” de la clientul de browser la serverul web. În ceea ce privește timpul de răspuns, acesta este ceea ce măsoară de fapt toate instrumentele de testare a sarcinii . Poate fi relevant să stabiliți obiective de timp de răspuns ale serverului între toate nodurile sistemului.

Redarea timpului de răspuns

Instrumentele de testare a sarcinii au dificultăți în măsurarea timpului de răspuns, deoarece, în general, nu au conceptul a ceea ce se întâmplă într-un nod, în afară de recunoașterea unei perioade de timp în care nu există activitate „pe fir”. Pentru a măsura timpul de răspuns de redare, este în general necesar să se includă scripturi de testare funcționale ca parte a scenariului de testare a performanței. Multe instrumente de testare a încărcării nu oferă această caracteristică.

Specificatii ale performantei

Este esențial să detaliați specificațiile de performanță (cerințele) și să le documentați în orice plan de testare a performanței. În mod ideal, acest lucru se face în timpul fazei de dezvoltare a cerințelor oricărui proiect de dezvoltare a sistemului, înainte de orice efort de proiectare. Consultați Ingineria performanței pentru mai multe detalii.

Cu toate acestea, testarea performanței nu este efectuată frecvent conform unei specificații; de exemplu, nimeni nu va fi exprimat care ar trebui să fie timpul de răspuns maxim acceptabil pentru o anumită populație de utilizatori. Testarea performanței este frecvent utilizată ca parte a procesului de reglare a profilului de performanță. Ideea este de a identifica „cea mai slabă verigă” - există inevitabil o parte a sistemului care, dacă este făcut să răspundă mai rapid, va duce la funcționarea mai rapidă a sistemului general. Uneori este o sarcină dificilă identificarea părții din sistem care reprezintă această cale critică, iar unele instrumente de testare includ (sau pot avea programe de completare care oferă) instrumentație care rulează pe server (agenți) și raportează timpii de tranzacție, timpii de acces la baza de date , overhead de rețea și alte monitoare de server, care pot fi analizate împreună cu statisticile brute de performanță. Fără o astfel de instrumentare, ar trebui să aveți pe cineva ghemuit în Windows Task Manager la server pentru a vedea cât de mult CPU încarcă generează testele de performanță (presupunând că un sistem Windows este sub test).

Testarea performanței poate fi efectuată pe web și chiar realizată în diferite părți ale țării, deoarece se știe că timpul de răspuns al internetului în sine variază la nivel regional. Se poate face și în interior, deși routerele ar trebui configurate pentru a introduce decalajul care ar apărea de obicei în rețelele publice. Sarcinile ar trebui introduse în sistem din puncte realiste. De exemplu, dacă 50% din baza de utilizatori a unui sistem va accesa sistemul printr-o conexiune de modem 56K și cealaltă jumătate pe un T1 , atunci injectoarele de încărcare (computere care simulează utilizatori reali) ar trebui fie să injecteze sarcină pe același mix de conexiuni (ideal) sau simulați latența rețelei unor astfel de conexiuni, urmând același profil de utilizator.

Este întotdeauna util să aveți o declarație a numărului maxim probabil de utilizatori care ar putea fi de așteptat să utilizeze sistemul la orele de vârf. Dacă poate exista, de asemenea, o declarație a ceea ce constituie timpul maxim de răspuns 95% permis, atunci o configurație a injectorului ar putea fi utilizată pentru a testa dacă sistemul propus îndeplinește specificațiile respective.

Întrebări de pus

Specificațiile de performanță ar trebui să pună următoarele întrebări, cel puțin:

  • În detaliu, care este scopul testului de performanță? Ce subsisteme, interfețe, componente etc. sunt în și în afara scopului acestui test?
  • Pentru interfețele utilizator (UI) implicate, câți utilizatori simultani sunt așteptați pentru fiecare (specificați vârf vs. nominal)?
  • Cum arată sistemul țintă (hardware) (specificați toate configurațiile serverului și ale dispozitivelor de rețea)?
  • Care este amestecul de sarcini de lucru al aplicației pentru fiecare componentă a sistemului? (de exemplu: 20% logare, 40% căutare, 30% selectare articol, 10% checkout).
  • Ce este Mixul de încărcare a sistemului? [Sarcinile de lucru multiple pot fi simulate într-un singur test de performanță] (de exemplu: 30% Sarcină de lucru A, 20% Sarcină de lucru B, 50% Sarcină de lucru C).
  • Care sunt cerințele de timp pentru orice / toate procesele de serie back-end (specificați vârf vs. nominal)?

Condiții prealabile

O construcție stabilă a sistemului care trebuie să semene cu mediul de producție cât mai aproape posibil.

Pentru a asigura rezultate consecvente, mediul de testare a performanței trebuie izolat de alte medii, cum ar fi testarea acceptării utilizatorilor (UAT) sau dezvoltarea. Ca o bună practică, este întotdeauna recomandabil să aveți un mediu de testare a performanței separat, care seamănă cât mai mult cu mediul de producție.

Condiții de test

În testarea performanței, este adesea crucial ca condițiile de testare să fie similare cu utilizarea reală așteptată. Cu toate acestea, în practică, acest lucru este greu de aranjat și nu este complet posibil, deoarece sistemele de producție sunt supuse unor sarcini de muncă imprevizibile. Sarcinile de lucru testate pot imita aparițiile în mediul de producție pe cât posibil, dar numai în cele mai simple sisteme se poate replica exact această variabilitate a volumului de muncă.

Implementările arhitecturale slab cuplate (de exemplu: SOA ) au creat complexități suplimentare cu testarea performanței. Pentru a reproduce cu adevărat statele de tip producție, serviciile sau activele pentru întreprinderi care au o infrastructură sau o platformă comună necesită teste coordonate de performanță, toți consumatorii creând volume de tranzacții de tip producție și se încarcă pe infrastructuri sau platforme partajate. Deoarece această activitate este atât de complexă și costisitoare în bani și timp, unele organizații folosesc acum instrumente pentru a monitoriza și simula condițiile de producție (denumite și "zgomot") în mediile lor de testare a performanței ( PTE ) pentru a înțelege cerințele de capacitate și resurse și pentru a verifica / validează atributele de calitate.

Sincronizare

Este esențial pentru performanța costurilor unui nou sistem ca eforturile de testare a performanței să înceapă de la începutul proiectului de dezvoltare și să se extindă până la implementare. Cu cât este detectat mai târziu un defect de performanță, cu atât costul remedierii este mai mare. Acest lucru este adevărat în cazul testării funcționale, dar cu atât mai mult cu testarea performanței, datorită naturii end-to-end a domeniului său de aplicare. Este crucial ca o echipă de testare a performanței să fie implicată cât mai curând posibil, deoarece este nevoie de timp pentru a dobândi și a pregăti mediul de testare și alte cerințe cheie de performanță.

Instrumente

Testarea performanței este împărțită în principal în două categorii principale:

Scripturi de performanță

Această parte a testării performanței se referă în principal la crearea / scriptarea fluxurilor de lucru ale proceselor cheie de afaceri identificate. Acest lucru se poate face folosind o mare varietate de instrumente.

Fiecare dintre instrumentele menționate în lista de mai sus (care nu este exhaustivă și nici completă) folosește fie un limbaj de scriptare (C, Java, JS), fie o formă de reprezentare vizuală (drag and drop) pentru a crea și simula fluxurile de lucru ale utilizatorului final. Majoritatea instrumentelor permit ceva numit „Record & Replay”, unde în testerul de performanță va lansa instrumentul de testare, îl va conecta la un browser sau client gros și va captura toate tranzacțiile de rețea care se întâmplă între client și server. În acest sens, se dezvoltă un script care poate fi îmbunătățit / modificat pentru a emula diferite scenarii de afaceri.

Monitorizarea performantei

Aceasta formează cealaltă față a testării performanței. Cu monitorizarea performanței, se respectă caracteristicile de comportament și răspuns ale aplicației supuse testului. Parametrii de mai jos sunt de obicei monitorizați în timpul executării unui test de performanță

Parametrii hardware ai serverului

  • Utilizarea CPU
  • Utilizarea memoriei
  • Utilizarea discului
  • Utilizarea rețelei

Ca prim pas, modelele generate de acești 4 parametri oferă o bună indicație asupra locului unde se află blocajul. Pentru a determina cauza principală a problemei, inginerii software folosesc instrumente precum profileri pentru a măsura ce părți ale unui dispozitiv sau software contribuie cel mai mult la performanța slabă sau pentru a stabili niveluri de transfer (și praguri) pentru un timp de răspuns acceptabil menținut.

Tehnologie

Tehnologia de testare a performanței folosește unul sau mai multe PC-uri sau servere Unix pentru a acționa ca injectoare, fiecare emulând prezența unui număr de utilizatori și fiecare rulând o secvență automată de interacțiuni (înregistrate ca un script sau ca o serie de scripturi pentru a emula diferite tipuri de utilizatori interacțiune) cu gazda a cărei performanță este testată. De obicei, un computer separat acționează ca un conductor de testare, coordonând și colectând valori de la fiecare dintre injectoare și colectând date de performanță în scopuri de raportare. Secvența obișnuită este de a crește sarcina: pentru a începe cu câțiva utilizatori virtuali și pentru a crește numărul în timp la un maxim predeterminat. Rezultatul testului arată modul în care performanța variază în funcție de încărcare, dat ca număr de utilizatori față de timpul de răspuns. Sunt disponibile diverse instrumente pentru efectuarea unor astfel de teste. Instrumentele din această categorie execută de obicei o suită de teste care imită utilizatorii reali împotriva sistemului. Uneori, rezultatele pot dezvălui ciudățenii, de exemplu, deși timpul mediu de răspuns ar putea fi acceptabil, există valori aberante ale câtorva tranzacții cheie care durează mult mai mult timp - ceva care ar putea fi cauzat de interogări ineficiente în baze de date, imagini etc.

Testarea performanței poate fi combinată cu testarea stresului , pentru a vedea ce se întâmplă atunci când este depășită o sarcină acceptabilă. Sistemul se blochează? Cât durează recuperarea dacă se reduce o sarcină mare? Eșecul acestuia provoacă daune colaterale?

Modelarea analitică a performanței este o metodă de modelare a comportamentului unui sistem într-o foaie de calcul. Modelul este alimentat cu măsurători ale solicitărilor de resurse tranzacționale ( CPU , I / O disc, LAN , WAN ), ponderate de mixul tranzacțiilor (tranzacții comerciale pe oră). Cerințele ponderate ale resurselor tranzacției sunt adăugate pentru a obține cerințele orare de resurse și împărțite la capacitatea orară a resurselor pentru a obține încărcăturile de resurse. Folosind formula timpului de răspuns (R = S / (1-U), R = timpul de răspuns, S = timpul de serviciu, U = sarcină), timpii de răspuns pot fi calculați și calibrați cu rezultatele testelor de performanță. Modelarea analitică a performanței permite evaluarea opțiunilor de proiectare și a dimensionării sistemului pe baza utilizării reale sau anticipate a afacerii. Prin urmare, este mult mai rapid și mai ieftin decât testarea performanței, deși necesită o înțelegere aprofundată a platformelor hardware.

Sarcini de îndeplinit

Sarcinile pentru efectuarea unui astfel de test ar include:

  • Decideți dacă folosiți resurse interne sau externe pentru a efectua testele, în funcție de expertiza internă (sau de lipsa acesteia).
  • Adunați sau obțineți cerințe de performanță (specificații) de la utilizatori și / sau analiști de afaceri.
  • Elaborați un plan la nivel înalt (sau o carte de proiect), care să includă cerințe, resurse, termene și repere.
  • Elaborați un plan detaliat de testare a performanței (inclusiv scenarii detaliate și cazuri de testare , sarcini de lucru, informații despre mediu etc.).
  • Alegeți instrumentele de testare .
  • Specificați datele de testare necesare și efortul de încărcare (adesea trecut cu vederea, dar vital pentru efectuarea unui test de performanță valid).
  • Elaborați scripturi de probă de concept pentru fiecare aplicație / componentă testată, utilizând instrumentele și strategiile de testare alese.
  • Elaborați un plan detaliat al proiectului de testare a performanței, inclusiv toate dependențele și calendarele asociate.
  • Instalați și configurați injectoarele / controlerul.
  • Configurați mediul de testare (hardware ideal identic cu platforma de producție), configurația routerului, rețeaua liniștită (nu dorim rezultate supărate de alți utilizatori), implementarea instrumentelor serverului, seturi de testare a bazelor de date dezvoltate etc.
  • Executați testele în sec - înainte de a efectua efectiv testul de încărcare cu utilizatorii predefiniți, se efectuează o execuție în sec pentru a verifica corectitudinea scriptului.
  • Executați teste - probabil în mod repetat (iterativ), pentru a vedea dacă vreun factor care nu este contabilizat poate afecta rezultatele.
  • Analizați rezultatele - fie trecerea / eșuarea, fie investigarea căii critice și recomandarea acțiunilor corective.

Metodologie

Testarea performanței aplicațiilor web

Conform Rețelei de dezvoltatori Microsoft, Metodologia de testare a performanței constă din următoarele activități:

  1. Identificați mediul de testare. Identificați mediul de testare fizică și mediul de producție, precum și instrumentele și resursele disponibile echipei de testare. Mediul fizic include configurații hardware, software și de rețea. A avea o înțelegere aprofundată a întregului mediu de testare de la început permite o proiectare și o planificare mai eficiente a testelor și vă ajută să identificați provocările de testare la începutul proiectului. În unele situații, acest proces trebuie revizuit periodic pe parcursul ciclului de viață al proiectului .
  2. Identificați criteriile de acceptare a performanței. Identificați timpul de răspuns, debitul și obiectivele și constrângerile de utilizare a resurselor. În general, timpul de răspuns este o preocupare a utilizatorului, randamentul este o preocupare de afaceri, iar utilizarea resurselor este o preocupare a sistemului. În plus, identificați criteriile de succes ale proiectului care nu pot fi surprinse de aceste obiective și constrângeri; de exemplu, folosind teste de performanță pentru a evalua ce combinație de setări de configurație va avea ca rezultat cele mai dorite caracteristici de performanță.
  3. Planificați și testați testele. Identificați scenariile cheie , determinați variabilitatea între utilizatorii reprezentativi și cum să simulați această variabilitate, definiți datele de testare și stabiliți valorile care trebuie colectate. Consolidați aceste informații într-unul sau mai multe modele de utilizare a sistemului pentru a fi implementate, executate și analizate.
  4. Configurați mediul de testare. Pregătiți mediul de testare, instrumentele și resursele necesare pentru a executa fiecare strategie, pe măsură ce caracteristicile și componentele devin disponibile pentru testare. Asigurați-vă că mediul de testare este instrumentat pentru monitorizarea resurselor, după caz.
  5. Implementați proiectarea testului. Elaborați testele de performanță în conformitate cu proiectarea testului.
  6. Executați testul. Rulați și monitorizați testele. Validați testele, datele de testare și colectarea rezultatelor . Executați teste validate pentru analiză în timp ce monitorizați testul și mediul de testare.
  7. Analizați rezultatele, reglați și retestați. Analizați, consolidați și distribuiți datele rezultatelor. Efectuați o schimbare de reglare și retestați. Comparați rezultatele ambelor teste. Fiecare îmbunătățire realizată va aduce o îmbunătățire mai mică decât îmbunătățirea anterioară. Când te oprești? Când ajungeți la un blocaj al procesorului, opțiunile sunt fie să îmbunătățiți codul, fie să adăugați mai mult procesor.

Vezi si