Așteptările legate de calitate sunt în creștere zi de zi și nevoia de perfecțiune este permanentă, ridicând astfel nivelul calității produsului și al experienței utilizatorului final. O aplicație care doar "își face treaba" nu mai este suficientă nici măcar pentru un simplu utilizator. Chiar și așteptările de la instrumentele profesionale, concepute inițial pentru o gamă restrânsă de utilizatori, cresc treptat. Cererea de pe piață se schimbă rapid, iar procesele inginerilor de calitate ar trebui să se adapteze în consecință.
De-a lungul anilor, am tot auzit despre programatorii "full-stack". Să aruncăm o scurtă privire asupra profilului unui astfel de programator web. Un "full-stack developer" este o persoană care poate dezvolta atât software-ul pentru partea de client, cât și pentru cea de server. În plus, față de cunoștințele de HTML și CSS, el ar trebui să știe și să programeze:
un browser (necesitând cunoștințe de JavaScript, Angular, Vue, jQuery);
un server (necesitând cunoștințe de PHP, ASP, Python, Node);
Există o preconcepție că inginerii de calitate sunt mult mai puțin tehnici decât programatorii. În primul rând, ei ar efectua testare de tip "black-box", ceea ce înseamnă că sunt angajați în testarea manuală a ceea ce le înmânează programatorul. Acest lucru descrie un "tester" ca fiind reactiv în loc să fie proactiv, permanent în căutarea de defecte. Această percepție nu poate fi mai departe de adevăr. În prezent, un QA este implicat pe tot parcursul etapelor de planificare, proiectare și dezvoltare. Se mai găseau astfel de "testeri" în zilele în care toată dezvoltarea / procesul de testare urma stilul "Waterfall". Dar în ziua de astăzi, cu metodologia Agile/ DevOps, acesta nu mai este decât un punct de vedere învechit. Astăzi, mai mult ca sigur că avem de-a face cu ingineri de calitate full-stack.
În mod similar cu un programator full-stack, care lucrează la toate aspectele aplicației, un inginer QA "full-stack" este angajat în toate aspectele metodelor de testare a calității. Acesta este un "full-stack QA Engineer" - o persoană confortabilă cu participarea sa în toate straturile aplicației; o persoană care va fi implicată în toate etapele de dezvoltare a proiectului. În acest fel, un tester se familiarizează cu o mare parte din funcționalitatea aplicației. Inginerul de calitate va trebui să se gândească la mai multe aspecte ale testării precum funcționalitatea, gradul de utilizare, performanța, securitatea etc. El va trebui, de asemenea, să fie familiarizat cu strategiile de automatizare a testelor și cu noile tehnologii. Trebuie să aibă un bagaj mare de cunoștințe în domeniu, abilități tehnice și expertiză de testare- toate dintr-o perspectivă orientată spre utilizator. Această ultimă abilitate este una esențială, una pe care un QA nu ar trebui s-o piardă din vedere, deoarece este foarte ușor să cadă în capcana "a fi tehnic" mai mult decât "a fi creativ".
Motivația principală este adoptarea proceselor de dezvoltare a metodologiei Agile. Deoarece produsul software este actualizat și livrat tot mai rapid, inginerii QA au și mai puțin timp pentru a finaliza testarea. Implicarea de la începutul proiectului înseamnă că testerul are timp să se gândească la toate aspectele aplicației, în timp ce aplicația este în stadiile incipiente. Deci, pentru a atinge obiectivul de livrare rapidă, activitățile de testare sunt integrate cu procesul Agile, în sarcinile "sprint-ului". Testarea nu este ceva ce faci o singură dată, chiar înainte de lansarea produsului, ci mai degrabă în timpul fiecărei iterații. Având în vedere acest lucru, un inginer QA trebuie să se gândească la toate aspectele, de la planul de testare (în faza 0), la metodele de testare funcțională/non-funcțională și până la testele de automatizare și integrarea continuă.
Inginerii QA "full-stack" trebuie să cunoască produsul dezvoltat foarte bine și să înțeleagă cum să-l testeze din punctul de vedere al utilizatorului. De aceea, este important ca aceștia să fie implicați încă de la primele etape ale dezvoltării. Știm cu toții provocările din prima parte a dezvoltării aplicațiilor, constând în principal din planificarea, proiectarea, discutarea și rafinarea cerințelor, precum și a criteriilor de acceptanță. Nu o dată un inginer QA a trebuit să se pună în locul unui Business Analyst sau a unui designer de UX, din cauza lipsei cerințelor, a criteriilor de acceptanță sau a mockupurilor. Deci, un QA trebuie să aibă abilitățile necesare pentru a consilia echipa în momente critice, punându-și la bătaie cunoștințele și expertiza. Mai puține defecte pot fi introduse dacă testerul este implicat de la început, atunci când se definesc cerințele produsului. El ar trebui să fie implicat în elaborarea caracteristicilor de proiect viitoare, pentru a înțelege și influența fluxul aplicației de la început și până la capăt și să vină cu scenarii de utilizare pentru partea de proiect aflată în dezvoltare. După ce "story-urile" și "feature-urile" utilizatorilor sunt complete, inginerul de calitate le va testa și se va asigura că fluxul este corect.
Un QA trebuie să înțeleagă modul în care utilizatorul va folosi produsul. Astfel, vor fi dezvoltate teste de usability, accesibilitate și incluziune. Testarea securității este, de asemenea, importantă, în special pentru aplicațiile care lucrează cu date sensibile sau private. Vulnerabilitățile din aplicație trebuie evitate și testerul trebuie să aplice un set de teste de securitate pentru a se asigura de disponibilitatea aplicației. E cert că adevărata evaluare de securitate ar trebui făcută de către profesioniști, dar folosind scanere de vulnerabilitate (precum ZAP). Nici testerilor nu ar trebui să le fie foarte de greu să le ruleze și să poată da un prim raport destul de rapid. Apoi, QA-ul poate ridica un "steguleț" atunci când se găsește vreo vulnerabilitate ce merită investigată imediat.
Inginerul QA full-stack trebuie să fie un tester de performanță competent, deoarece multe dintre aplicațiile web de astăzi sunt "high-end", accesate simultan de către potențial milioane de utilizatori, care se așteaptă la o experiență de utilizator fără cusur. Așadar, a fi capabil de a "audia" o pagină web pentru performanță și de a lucra cu instrumente precum JMeter pentru "load testing" este o necesitate.
Similar cu programatorul full-stack, care implementează funcționalitatea front-end și back-end, un inginer QA full-stack ar trebui să poată testa atât interfața cu utilizatorul, cât și API-ul. Pentru aceasta, inginerul va lucra îndeaproape cu programatorii, pentru a înțelege arhitectura, modul în care este pusă în aplicare, precum și tehnologiile utilizate. Acest lucru îi va ajuta să determine care este cel mai bun mod de abordare a testării și de a da un semnal de alarmă în cazul în care serviciile API nu sunt bune - pentru ca programatorii să nu piardă timpul cu integrarea lor în interfață. Inginerul nu trebuie să cunoască codul sursă al aplicației, dar o cunoaștere aprofundată a modului de implementare poate ridica unele întrebări tehnice foarte utile.
Prin urmare, testarea ar trebui să fie tratată mai mult ca prevenire a defectelor decât ca detectare a lor. Inginerii QA trebuie să se gândească și la eficiența testării. Investirea timpului în automatizare este esențială pentru testarea repetitivă. "Regression", "sanity și "smoke" sunt primele tipuri de teste care ar trebui luate în considerare pentru automatizare. De asemenea, ar mai putea fi luate în considerare și date precum pregătirea mediului, care este și ea consumatoare de timp și predispusă la erori, atunci când este făcută manual. În acest sens, construirea unui process CI / CD ar fi util de implementat. Acesta ar trebui pus în aplicare de către echipa DevOps, pentru ca mai apoi să fie utilizat de către programatori și ingineri QA. Testele automate sunt utile ori de câte ori este instalată/implementată o nouă versiune a produsului și pusă în mediul de testare. Într-o relație complementară cu testele de tip "unit tests", această verificare oferă înainte de lansare atât echipei, cît și proprietarului produsului și părților interesate, încrederea că versiunea pregătită de lansare este una bună.
Sursa Imaginii: Shubha Rajan, "A Coaching Model Created"
Atunci când definim un full-stack QA Engineer, îl putem compara cu modelul de coaching ASK. Triunghiul ASK spune așa: cunoștințele reprezintă doar 15% din total, în timp ce abilitățile și atitudinea împreună reprezintă 85%. Filozofia din spatele modelului ASK se referă la faptul că abilitățile și cunoștințele pot fi dobândite, în timp ce atitudinea trebuie să fie deja acolo sau să fie dezvoltată de către persoana care aspiră la titlul de antrenor.
Atitudine: persoană de tipul "eu pot", conștientă că va învăța non-stop.
Abilități: persoană cu aptitudini tehnice și nu numai.
Fiecare poveste a inginerilor full-stack QA este diferită, cu siguranță. Eu am început acum vreo nouă ani ca inginer QC, făcând teste manuale. Pentru nivelul de începator nu era nevoie de cunoștințe tehnice sau de experiență pe o poziție anterioară, ceea ce a fost de mare ajutor pentru mine, pentru că nici nu aveam: acela era primul meu loc de muncă. Am absolvit o facultate tehnică, aveam cunoștințe de bază de programare, dar nu știam nimic despre testare. Am avut însă șansa de a lucra alături de o echipă deosebită, de la care am învățat multe. Apoi mi-am croit drumul de acolo. Mi-am extins cunoștințele de testare însușindu-mi mai multe tehnici de testare. Am obținut certificări în domeniu. Am învățat să scriu teste automate, asimilând limbaje de scripting. Am învățat să comunic în mod eficient și am încercat să adaug în CV cât mai multe abilități tehnice și non-tehnice. Am încercat să stau în pas cu "moda". Astăzi consider că am suficientă experiență pentru a-mi împărtăși povestea și a mă numi un full-stack QA Engineer.
Inginerii de calitate trebuie să-și dezvolte abilitățile pentru a se adapta noilor tehnologii, tehnicilor de testare și metodologiilor aflate în prezent în vogă. Drumul de la un simplu "tester" la "full-stack QA Engineer" este unul lung și provocator. Desigur, acesta depinde de setea de cunoaștere și deschiderea fiecăruia. Dar inginerii vor găsi mai multe oportunități de carieră disponibile, vor avea o influență mult mai mare asupra produsului dezvoltat. Produsul finit ce va ajunge la utilizatorul final va fi la un nivel de calitate mai ridicat ca oricând. Un inginer de calitate complet, cu o gamă largă de abilități poate cere un salariu mai mare, dar, cel mai important, se va bucura de satisfacția locului de muncă și de o carieră de succes.
de Mihai Hulea , Bogdan Bustan