Testarea statica vs. testarea dinamica
Asa cum am mai mentionat si cu alte ocazii aici pe blog, testarea in ansamblu cuprinde foarte multe forme si sub-tipuri, dand nastere multor forme de clasificare a acestora in functie de diverse criterii legate de aspectele sale practice.
Pornind de la cele mai cunoscute clasificari ale formelor de testare, precum testarea functionala sau non-functionala, sau testarea in mod manual si cea automatizata, in continuare vom discuta despre o alta impartire a procesului de ansamblu al testarii, si anume testarea statica si cea dinamica.
De unde porneste disocierea static vs. dinamic?
Daca in cazul impartirii testarii in functionala si non-functionala ne referim la aspectul general verificat, iar in cazul testarii in mod manual sau automatizat la modalitatea principala de executie a testarii, criteriul de clasificare al disocierii testarii in statica versus dinamica este dat de analiza codului si a produsului, precum si a executarii (sau nu) a codului din spate, intr-o maniera directa sau indirecta.
Astfel, nivelul de clasificare al testarii in statica vs. dinamica este unul mai general, superior, din care deriva ulterior celelalte modalitati de clasificare a testarii, precum in white-box si black-box testing, si functionala ori non-functionala, aceasta din urma fiind reunita sub umbrela testarii dinamice.
La ce se refera testarea statica?
Mergand in continuare pe niste definiri cat mai simple si usor de inteles, testarea statica reprezinta acea forma a ei unde verificarea se face fara a executa niciun cod, fara a performa nicio actiune concreta fata de produsul supus testarii.
Din punct de vedere al etapizarii cronologice, testarea statica se executa la inceputul procesului general de testare (Software Testing Life Cycle), cat mai devreme posibil. Obiectivele principale ale testarii statice sunt acelea de a identifica posibilele erori si defecte ale produsului in cauza cat mai timpuriu posibil pentru a reduce costurile in materie de timp, efort si desigur bani, dar si de a inspecta corectitudinea artefactelor (instrumentelor de lucru) de testare incipiente precum documentatiile tehnice si cele de business.
Printre tipurile de documente care sunt supuse testarii statice se enumera: cazurile de test, documentatiile scrise cu cerintele de business (ce ar trebui sa faca produsul respectiv), planurile de testare, analizele initiale cu test coverage (ce ar trebui acoperit la testare), schitele cu design-ul aplicatiei (mock-urile), documentatiile de suport pentru utilizatorii finali (instructiunile practice ce vor ajunge la acestia) si chiar codul sursa al produsului.
Testarea statica poate conduce la un cod mai curat, la documentatii consistente si metodologii coerente de testare, astfel incat eventualele scapari sa fie prevenite cand se ajunge la testarea functionala propriu-zisa.
Ce reprezinta testarea dinamica?
Prin contrast evident cu testarea statica, testarea dinamica presupune analiza temeinica a comportamentului efectiv al codului ce alcatuieste respectivul produs software. Cu alte cuvinte, testarea dinamica include respectivul produs software.
Cu alte cuvinte, obiectivul principal al testarii dinamice presupune testarea functionala si non-functionala bazata pe efectuarea de teste manuale sau rularea de teste automatizate, care sa valideze produsul software respectiv raportat la ce s-a cerut initial sa faca acesta pentru clientii care il vor cumpara.
De asemenea, testarea dinamica are drept scop si identificarea bug-urilor care s-au strecurat in componenta aplicatiei, pentru a fi raportat si corectate inainte de a ajunge in Productie si implicit la clienti.
Din acest punct de vedere, costurile implicate de testarea dinamica sunt mai mari, deoarece cronologic ea se efectueaza dupa testarea statica in cadrul STLC, dar are avantajul ca ofera rezultate mult mai palpabile despre situatia produsului verificat, astfel incat echipa de dezvoltare sa stie exact ce merge, ce nu merge si ce poate fi imbunatatit pana la etapa de release.
Testarea dinamica se bazeaza deci pe caracteristicile directe si indirecte ale codului, si presupune la randul sau atat testare de tip white-box (cu acces la cod, precum rularea de teste Unit), cat si black-box (fara acces la cod, precum teste manuale de End-to-End). In aceasta etapa, se ruleaza cazurile de testare si se testeaza concret produsul, din perspectiva unui utilizator final, pentru a se vedea experienta de utilizare cat de bine e croita, daca e intuitiva si unde sunt scaparile functionale.
Tehnici de testare statica si dinamica
Atat testarea statica cat si cea dinamica presupun fiecare cate un set propriu de tehnici prin care se verifica (cazul testarii statice) si valideaza (cazul testarii dinamice) produsul software dezvoltat de echipa / compania respectiva.
Printre tehnicile specifice testarii statice se regasesc:
- Review-ul asupra documentatiei – prin care sunt parcurse de regula in echipa toate documentele si cerintele tehnice ale acelui produs, pentru a se vedea daca sunt redactate corect si nu apar erori de logica ce pot fi prevenite usor;
- Analiza statica a codului sursa – se face un peer review al codului, asupra sintaxei sale fara a executa in aceasta etapa nicio linie de cod;
- Prezentarile – acestea pot avea rol de tutorial (Walkthrough), si pot fi sustinute de cel / cei care au dezvoltat produsul respectiv, de programatori sau managerii de produs, astfel incat toata echipa sa fie familiarizata cu aplicatia in ansamblu, si sa puna intrebari asupra oricaror detalii care nu sunt clare;
- Inspectia – sau testarea live, prin care se organizeaza o sedinta pregatita de un moderator in care echipa trece prin produs pe baza unui checklist si incearca toate componentele acesteia, astfel incat sa se culeaga cat mai multe opinii si eventual sa se raporteze erorile statice.
Printre tehnicile specifice testarii dinamice se regasesc:
- Unit testing – primul nivel din asa-zisa piramida a nivelurilor de testare (automata), testele unitare sunt cele mai numeroase, si sunt teste izolate care verifica individual fiecare linie de cod;
- Integration testing – deasupra nivelului de Unit, testele de integrare sunt tot teste izolate cu acces la codul sursa, dar care imbina logica a doua sau mai multe componente, pentru a vedea un pas mai departe daca acel cod se comporta ok si nu apar blocaje majore;
- Testare End-to-end – aceasta presupune verificarea flow-urilor principale si secundare din cadrul aplicatiei de la un capat la altul, exact asa cum ar face-o un utilizator obisnuit (exemplu: se logheaza, cauta un produs, in selecteaza, il pune in cos, il comanda, il plateste). Aici testele end-to-end pot fi automatizate sau manuale, deopotriva.
- Testarea non-functionala – pentru a nu pune in prim plan doar formele de testare functionala cum sunt cele anterior prezentate, testarea dinamica presupune si verificarea aspectelor non-functionale din cadrul aplicatiei software, precum testarea de performanta sau de securitate.
E vreuna dintre acestea mai importanta decat cealalta?
Analizand specificul celor doua forme principale de testare si complementaritatea lor extrem de armonioasa, raspunsul cel mai potrivit la intrebarea de fata e unul simplu: ambele tipuri, statica si dinamica, sunt la fel de importante intr-un proces temeinic de testare a oricarui produs software.
Fiecare are rolul si atributiile sale bine definite, cu tehnici dedicate analizei instrumentelor si componentelor ce alcatuiesc organic dezvoltarea de ansamblu a aplicatiei soft respective. Testarea statica constutie o analiza initiala temeinica pentru a se corecta tot ce se poate in maniera incipienta, fara un efort prea mare, iar ce a dinamica de a testa cat mai amanuntit ce merge si ce nu merge din rezultatul final, inainte de a ajunge la client.
Oricat de ideal ar suna, defectele nu pot fi toate prevazute si identificate doar in faza de testare statica fara a-si porni efectiv aplicatia in cauza, deoarece nu putem avea deloc garantia ca se va initializa corect si va livra ceea ce trebuie. Mereu pe hartie lucrurile (pot) arata bine, dar practica va avea cuvantul final.
Concluzii
In incheiere, se poate afirma ca testarea statica si dinamica reprezinta o alta forma de clasificare a formelor principale de testare ce se executa sistematic si etapizat in cadrul procesului de testare software general.
In timp ce testarea statica se axeaza pe analiza initiala a documentatiei tehnice si de business, testarea dinamica executa efectiv testele manuale si automate asupra produsului dezvoltat, pentru a se obtine in final o verificare si validare cat mai temeinice, care sa satisfaca cerintele clientilor care platesc pentru acel produs. Cele doua forme se imbina reciproc si niciuna nu e mai importanta ca cealalta.
Surse consultate si suplimentare
Informatii utile despre testarea statica vs. dinamica gasesti pe BrowserStack, GeeksForGeeks si Guru99.