E nevoie de cunostinte de programare in testare (QA)?

Jobul de software tester (QA), in ciuda a ceea ce cred unii oameni, este unul complex si necesita un set de mai multe cunostinte extrem de necesare pentru a performa cu adevarat. Deoarece un QA engineer trebuie sa aiba o privire cat mai de ansamblu asupra produsului, orice fel de cunostinta tehnica poate fi un avantaj in cadrul procesului de testare.

Insa una dintre cele mai intalnite intrebari este daca un software tester trebuie sa cunoasca si programare pentru a putea indeplini sarcinile de serviciu aferente? Cum raspunsul poate avea mai multe nuante in functie de context, trebuie sa detaliem mai intai unele lucruri, inainte de a oferi un raspuns acestei intrebari.

Testarea de tip manual si cea automatizata

In functie de modul in care anumite scenarii si cazuri de test se executa de catre membrii echipelor de QA, testarea poate imbraca la nivel general 2 forme principale.

Executarea manuala a testarii presupune verificarea unei functionalitati sau a unui produs software in mod direct de catre tester, prin interactiune directa cu obiectul testat, folosindu-l ca un utilizator obisnuit: sa introduca niste date, sa verifice limitele la anumite input-uri cu intervale, sa se logheze, sa caute anumite lucruri, sa dea click pe butoane, sa vada daca e suficient de intuitiva pe partea de User Experience (UX) si asa mai departe.

Pentru a realiza aceste tipuri de actiuni, e nevoie mai degraba de o minte rationala si de o intelegere a unor notiuni tehnice minimale.

A doua forma este cea a executarii automatizate a testelor. Spre deosebire de partea manuala, testarea automata presupune scrierea unor scenarii si cazuri de test automatizate cu ajutorul codului si al unor instrumente speciale numite framework-uri de automatizare, care odata pornite, interactioneaza singure cu aplicatia noastra si verifica anumite functii si asertii (assertions = conditii care verifica daca un test a trecut sau a picat).

In ce context e nevoie de programare in testare software?

Dupa ce am explicat pe scurt care e diferenta intre testare manuala si automata, e putin mai usor de inteles contextul in care intervin notiunile de programare in testare software. Pentru a realiza o analiza de calitate cat mai detaliata si mai precisa asupra unui produs software, trebuie implicate ambele tipuri de testare, si manuala dar si cea automata.

Automatizarea unor cazuri de test care de regula sunt repetitive (de exemplu sa dam click pe un anumit buton sa vedem ca functioneaza normal) este necesara pentru ca reduce semnificativ timpii alocati de echipa acelor task-uri.

Insa nu ne putem baza doar pe automatizare, deoarece riscam sa ne departam de perspectiva unui simplu user care nu stie la fel de precis cum se comporta aplicatia sau ce trebuie sa faca prima data, asa cum fac testele automate scrise de testeri ce cunosc produsul respectiv.

De asemenea, nu ne putem baza la randul nostru doar pe testare manuala. In primul rand, s-ar consuma extrem de mult timp pentru multe cazuri de test care nu se schimba fundamental si sunt repetitive (ex: login cu credentiale corecte / incorecte), si in al doilea rand exista riscul ca tehnic sa nu intelegem de ce se produce un anumit bug.

Chiar daca un QA engineer nu trebuie sa faca treaba unui programator, macar la nivel de intelegere global si intuitiv, cunostintele de programare pot ajuta la intelegerea aparitiei (si rezolvarii) unui bug, cele doua tipuri de executie a scenariilor de test fiind combinate intr-o formula unitara in cadrul procesului de testare.

Astfel, cunostintele de programare sunt necesare in contextul automatizarii testarii si al intelegerii aplicatiei pe care echipa respectiva lucreaza. Un tester care stie si programare poate avea o alta perspectiva, poate sa propuna in anumite situatii chiar solutii pentru corectarea unor defecte tehnice sau imbunatatirea unor functionalitati.

Pana la ce nivel trebuie un QA sa stie programare?

Si la aceasta intrebare raspunsul este unul relativ si depinde de contextul in care plasam munca unui tester, raportat si la sarcinile sale de serviciu specifice in echipa / compania respectiva. In ultimii 10 ani, au fost create versiuni tot mai complexe din punct de vedere al functionalitatilor ale limbajelor de programare folosite in industria IT (Java, JavaScript, Python, C# etc.).

Desigur, nu e deloc nevoie ca un QA engineer sa cunoasca 100% dintr-un limbaj de programare folosit la testare automata, din mai multe motive. In primul rand, foarte multe atributii si functii ale limbajelor de programare sunt specifice zonei de development si nu au nicio legatura cu testarea.

De asemenea, e aproape imposibil sa cunosti total un limbaj de programare, mai realist fiind sa avem o baza cat mai solida si sa stim sa ne documentam ulterior pentru ce avem nevoie sa aplicam din totalitatea acestuia.

Daca suntem la inceputul invatarii pe partea de automation, atunci e nevoie sa stim lucrurile super de baza din acel limbaj, corelat cu un framework de automatizare, pentru a putea incepe sa scriem primele cateva teste simple: variabile si constante, declararea lor, functii (includem aici functiile anonime si metodele), tipuri de elemente web si locatorii lor. Toate aceste lucruri nu fac mai mult de 1% din limbajul de programare respectiv.

Cu timpul, pe masura ce dobandim experienta si trebuie sa executam task-uri mai avansate, cunostintele pe partea de automation se vor imbogati si ele in mod natural, prin exercitiu practic si prin documentare constanta din carti, documentatii online sau tutoriale.

Insa chiar si un tester de automatizare foarte experimentat nu va cunoaște probabil mai mult de 40-50% din respectivul limbaj de programare, din motivele expuse anterior. Ca o limita orientativa, un tester automat ar trebui sa cunoasca inclusiv conceptele de OOP (acronim de la Programare orientata pe obiecte) si aplicabilitatea lor in cadrul codului respectiv.

La inceputul carierei nu va fi nevoie de lucruri prea complexe de stiut, pentru ca acestea de regula nu sunt date incepatorilor / juniorilor sa fie facute pe partea de testare automata. Pe masura insa ce se acumuleaza experienta, atunci va fi nevoie de un bagaj de cunostinte de programare mai solid, care va fi dobandit prin multa practica si auto-documentare.

Exista si unele alternative, daca in evolutia profesionala un manual tester nu vrea sa faca pasul spre zona de automation. Anumite tipuri de testare se bazeaz mai degraba pe stapanirea si folosirea unor tool-uri, motiv pentru care aceste nise mai sunt denumite generic ”tooling”.

Un exemplu ar fi testarea de performanta, unde parametrii specifici ai acesteia sunt urmariti si analizati cu anumite tool-uri performante (ex: Gatling, JMeter), dar unde nu e nevoie in mod direct de programare.

Optiuni de invatare pentru programare in testare

Exista mai multe optiuni pentru doritorii care vor sa vada ce inseamna testarea automata si sa exerseze pe cont propriu, pentru a intelege ce inseamna acest tip de testare software, eventual pentru a construi niste proiecte personale care sa probeze noile skill-uri.

O prima optiune ar fi framework-ul Cypress, despre care am discutat in trecut aici pe blog, care poate fi folosit cu limbajul JavaScript (sau cu supersetul acestuia, TypeScript). Poate fi folosit pentru automatizarea pe aplicatii web sau pentru a scrie Unit tests de catre programatori.

Exemplu de test automat cu Cypress

Tot cu limbajul JavaScript se pot invata si framework-urile WebDriverIO sau Playwright, care sunt destul de asemanatoare ca utilizare. WebDriverIO este un tool ceva mai vechi dar inca folosit, pe cand Playwright este relativ recent lansat, ambele fiind dezvoltate in mod continuu, astfel incat exista multe optiuni de lucru cu ele pe partea de automatizare.

Exemplu cu Playwright

O alta optiune foarte buna si foarte folosita este framework-ul Selenium WebDriver. Acesta e unul dintre cele mai vechi si stabile framework-uri, dezvoltat si intretinut de propria sa comunitate open-source. Selenium poate fi folosit cu majoritatea limbajelor de programare, cu Java, cu Python, cu C# si multe altele, fiind extrem de folosit atat pentru partea Web, dar si pentru partea de aplicatii desktop.

Exemplu de test scris cu Java si Selenium

Toate aceste optiuni sunt foarte bune pentru a invata bazele automatizarii in testare, iar odata ce un astfel de framework este bine invatat, se poate face mai usor tranzitia spre oricare altul.

Concluzii

In incheiere, pentru a reveni la intrebarea principala cu care am pornit discutia din acest articol, daca e necesar ca un tester (QA) sa cunoasca programare, am vazut ca raspunsurile pot fi variate, insa in mod ideal aceste cunostinte sunt utile.

La inceputul carierei ca tester manual nu va fi nevoie de astfel de abilitati de codare, dar ca obiectiv pe temen mediu si lung, pe masura ce avansam ca automation tester, acolo notiunile de programare vor fi mai mult decat necesare pentru a automatiza diferite scenarii si cazuri de testare in aplicatiile noastre pentru clienti.

Un tester care scrie scenarii automatizate nu trebuie sa cunoasca programare la un nivel inalt, ca un developer, insa este nevoie de o baza solida ce poate fi completata la nevoie, prin documentare.

Exista desigur si alternative care nu implica codarea, insa cunoasterea programarii ne ajuta foarte mult sa intelegem de ce functioneaza (sau nu) un anumit feature sau cum se produc anumite bug-uri in produsele software, oferind o perspectiva mai ampla si ajutandu-ne sa propunem uneori solutii pentru acestea.

Mircea-Gabriel Macarie

https://www.linkedin.com/in/mirceamacarie/

Tech enthusiast și QA engineer, membru al comunității Vlog De IT. Interesat de testare software (QA) în general, de User Experience și Web Development.

Related post

Leave a Reply

Your email address will not be published. Required fields are marked *