TSM - Un ecosistem de unelte de testare pentru succesul unui proiect

Daniel Tatar - Tester / Senior IT Consultant @ msg systems Romania

Un ecosistem de unelte de testare pentru succesul unui proiect. Vom discuta despre unelte de testare care pot folosite în piramida de testare. Unele dintre acestea oferă posibilitatea de a fi folosite pentru mai multe activităţi de testare, altele sunt specifice doar uneia.

Uneltele pentru testare care pot fi folosite în activităţile de testare:

  1. Unele pot executa testele (UFT, Selenium), altele pot genera datele de test (Databene Benerator) sau pot executa doar compararea rezultatelor (WinMerge, Altova XMLSpy).

  2. Gestionarea procesului de testare are unelte specifice (ALM, PractiTest), precum şi cele pentru gestionarea rezultatelor testării (Quality Center). Altele sunt folosite pentru datele testelor (Excel), sau ale cerinţelor (Zephyr, ReqSuite) şi a defectelor (Bugzilla, JIRA). De asemenea, vorbim de instrumente utilizate la raportarea şi monitorizarea execuţiei testelor (JIRA).

  3. Recunoaşterea şi testarea explorativă (Testpad, JIRA Capture).

  4. Orice unealtă ajută în procesul de testare (de exemplu, o tabelă de calcul, un procesor de text, un editor de imagini.)

Unelte de gestionarea testelor şi a testării

Acestea se aplică întregului ciclu de dezvoltare al software-ului. În funcţie de modelul de dezvoltare al software-ului (cascadă, modelul V sau agile), uneltele pot fi utilizate la sfârşitul ciclului de dezvoltare în modelul cascadă, sau de la începutul ciclului, încă din faza de adunare şi scriere a cerinţelor softului în modelele V sau agile.

Unelte de gestionare a testării

ALM (Application Lifecycle Management) aparţine MicroFocus, fiind o unealtă comercială, care asigură gestionarea cerinţelor, planificarea testării, testarea funcţională, gestionarea dezvoltării şi a defectelor. PractiTest este, de asemenea, o unealtă versatilă pentru gestionarea testării end-to-end.

Unelte de gestionarea cerinţelor

Acestea au interfeţe pentru urmărirea defectelor, gestionarea cerinţelor şi executarea testelor.

Zephyr este de tip comercial, care poate fi integrat cu JIRA şi cu Confluence, asigurând cerinţele necesare unei unelte de gestionarea cerinţelor. O altă unealtă este ReqSuite de la OSSENO, care este o soluţie simplă şi lightweight.

Unelte de gestionarea defectelor

Un foarte cunoscut program este Bugzilla, ce permite înregistrarea, prelucrarea, urmărirea şi raportarea defectelor şi a metricilor rezultate în urma testării. O soluţie comercială este JIRA. Aceasta oferă facilităţi de documentare Scrum şi Kanban, de raportare şi monitorizare.

Unelte de gestionarea configurării

Dintre uneltele de gestionare a configurării se amintesc: Bamboo dezvoltat de Atlassian, Kamatera care este foarte potrivit pentru rularea aplicațiilor în cloud; iar o altă unealtă este CFEngine, folosit pentru administrarea sistemelor mari.

Dintre uneltele de control al versionării se amintesc: CVS (Concurrent Versioning System), SVN (Subversion), Mercurial și Git. Mercurial şi Git sunt instrumente FOSS pentru gestionarea versionării în sisteme de versionare descentralizate. Mercurial are o interfață prietenoasă cu utilizatorul, fiind uşor de utilizat. În schimb, are nevoie de spațiu suficient pe disc.

Git este o unealtă foarte puternică, rapidă şi cu cerinţe mici de spaţiu, dar cu o curbă de învăţare mai mare. Se poate integra cu Gerrit, JIRA, diverse IDE-uri (Integrated Development Environment), etc. O altă unealtă pentru gestionarea configurării este Docker, care este un container ce poate conţine diferite configuraţii ale aplicaţiilor şi resurselor necesare. Se găseşte la:

Unelte pe care se bazează testarea statică

Aceste tipuri asigură detectarea defectelor într-o fază incipientă în procesul de dezvoltare a software-ului. Testarea statică se referă la analiza codului într-o fază incipientă în dezvoltarea software-ului pentru analiza calităţii codului. Această analiză poate fi făcută de o anume persoană cu experienţa necesară sau automat prin folosirea de unelte specializate care folosesc anumite standarde de scriere a codului sursă. Așadar, testarea statică are loc înainte de rularea software-ului, adică în avans de testarea dinamică.

Uneltele de inspecţie ale codului

Specific acestor tipuri de instrumente este asistarea procesului de inspecţie al codului, oferirea de liste de verificare. Sunt folosite pentru păstrarea şi comunicarea rezultatelor inspecţiei codului. Pentru aceasta se poate folosi "Gerrit", care permite anotarea codului cu comentarii, crearea inspecţiei codului, revizuirea, verificarea şi prezentarea modificărilor necesare. "Gerrit" are un sistem de notare a codului folosind cifre de la -2 la 2. Pe baza sumei notelor, codul trece sau nu de inspecţie. "Gerrit" poate fi integrat cu "SonarQube" şi "Jenkins" pentru integrarea continuă şi folosirea automată a sistemului de notare. Gerrit este un produs gratuit FOSS (Free and Open Source Software)

Unelte de analiza statică a codului

Aceste unelte ajută dezvoltatorii şi testerii software să găsească defectele prin urmărirea standardelor de programare, analiza structurilor din cod şi a complexităţii codului. Un exemplu cunoscut este "SonarQube", disponibil pentru o mulţime de limbaje de programare. Cu ajutorul lui se pot detecta defecte, vulnerabilităţi şi se poate obţine gradul de acoperire al codului de către teste.

Unelte de modelare

Un astfel de instrument este Magic Draw, care prin folosirea Junit pune la dispoziție testarea modelelor de date. De exemplu: pentru o bază de date. Alte instrumente de testare, pot modela domeniul de business folosind UML (Unified modeling language), pentru care se găseşte o gamă variată și bogată de instrumente FOSS şi comerciale.

Unelte de suport pentru testare

Unelte de prepararea datelor de test

Pregătirea datelor de test se poate face pentru bazele de date care au nevoie de date iniţiale salvate în fişiere de dump. Pentru Oracle există două unelte: expdp și impdp, folosite pentru exportul şi importul de date.

Unelte de suport pentru executarea testelor și logare

Unelte de execuţie

La baza piramidei, care cuprinde cele mai multe teste şi asigură un coverage mai mare, se găsesc testele pentru unităţi de software. Pentru software-ul scris în Java se pretează Junit, iar pentru C++ , CppUnit. Într-un test Junit se verifică funcționalitatea la nivel de clasă.

Intermediar se găsesc testele pe componente, teste de integrare şi cele de sistem. Pentru cele de componente se pot folosi suite Junit, iar dacă ordinea lor de execuţie este importantă, se poate folosi adnotarea @TestMethodOrder. REST Assured este o bibliotecă de metode care permite testarea arhitecturilor REST (Representational State Transfer). Astfel, folosind împreună o suită Junit şi testarea REST se pot testa arhitecturi bazate pe microservicii la nivel de componente şi de integrare. O altă unealtă folosită pentru acest nivel intermediar este Fit sau varianta mai nouă Fitnesse. Fit foloseşte ExcelTM sau HTML(Hypertext Markup Language) pentru stocarea datelor şi a generării rapoartelor de testare, pe când Fitnesse foloseşte un wiki pentru scrierea, documentarea şi raportarea rezultatelor testelor.

În vârful piramidei de testare se găsesc testele manuale, de acceptanţă şi de sistem, deoarece acestea sunt cele mai costisitoare ca resurse şi timp şi sunt, prin urmare, mai puține. Ca unelte pentru testarea automatizată a interfeţei cu utilizatorul amintim Selenium și UFT(Unified Functional Testing) . Selenium este foarte important pentru testarea web şi are mai multe limbaje de suport, iar UFT are o gamă largă de aplicaţii la care se pretează, dintre care se remarcă SAP(Systeme, Anwendungen und Produkte in der Datenverarbeitung ). Selenium poate fi folosit împreună cu suite Junit sau cu Cucumber sau cu Intern pentru teste complexe de interfață cu utilizatorul. Pentru a gestiona uşor Xpath-urile folosite de Selenium se poate folosi Testy, versiunea SDL. Pentru aplicaţii de tip desktop există Testpartner (sau noua variantă Silk).

Unelte comparatoare pentru testare

Pentru compararea codului se pot folosi Winmerge sau Kdiffhttp://kdiff3.sourceforge.net/. Pentru documentele binare, ExcelTM, MicrosoftTM are o unealtă în pachetul Office.

Unelte pentru măsurarea acoperirii testării

O unealtă pentru măsurarea procentului de acoperire a codului de către teste este JaCoCo. JaCoCo și se poate integra cu Ant si Maven

Unelte de testare a securităţii

Securitatea unei aplicaţii reprezintă o temă de mare actualitate şi de importanţă majoră, mai ales pentru aplicaţiile web, clienţi de aplicaţii mobile şi cloud. O soluţie pentru creşterea securităţii este folosirea unui firewall.

O suită pentru testarea securității unei aplicaţii web este Burp care oferă versiuni community, professional şi enterprise.

Unelte folosite pentru performanță şi încărcare

Dintre testele non-funcţionale se numără și testarea performanţei. Se efectuează, de obicei, spre finalizarea aplicaţiei pentru a măsura timpul de răspuns mediu, procentul de erori, procentul de cereri, folosirea procesorului şi a memoriei. Una dintre uneltele folosite pentru testarea performanţei şi a încărcării aplicației este Jmeter.

Alte unelte de testare

Printre alte unelte de testare se numără Jenkins, folosit pentru tot ciclul de dezvoltare şi testare continuă şi o unealtă de raportare ale rezultatelor testelor.

Maven este o unealtă folosită pentru a construi aplicaţii şi a rula teste pentru unităţile software, pentru teste de componente şi de integrare.

Quay asigură un depozit pentru imaginile Docker.

Consideraţii asupra uneltelor de şi proceselor testare

Uneltele de testare uşurează munca inginerului de asigurarea calităţii software-ului şi prin natura lor măresc eficienţa, eficacitatea, viteza, standardizarea, calitatea şi ROI (Return On Investment) şi scad timpul de testare, costul cu repararea defectelor şi defectele create, etc. Pe lângă numeroasele avantaje, trebuie luate în considerare strategia de testare, modelul dezvoltare software (waterfall, V, agile), calitatea, costul şi complexitatea uneltelor, pregătirea profesională a inginerilor responsabili cu asigurarea calităţii software-ului, cerinţele legale, procesele și structurile de gestionarea a resurselor umane, timpul disponibil, riscurile asumate, cerinţele asupra calităţii stabilite de comun acord cu clientul.

Având o suită de unelte care folosesc date de intrare standard, protocoale comune de comunicare ale datelor şi de prezentare ale rezultatelor, se reduce timpul de prelucrare a datelor, atât de intrare cât şi de ieşire şi astfel, cresc eficienţa şi eficacitatea inginerului responsabil cu asigurarea calităţii software-ului.

Având un mod standard de execuţie a procesului de testare conform cu un set de standarde şi un set de bune practici asigură succesul unui proiect de testare.

Pentru că procesul de testare automată este tot un proces software, se ridică aceleaşi probleme privind calitatea artefactelor folosite şi rezultate în procesul de testare. Pentru îmbunătăţirea calităţii se pot folosi inspecţiile de cod, tehnica de programare în perechi (tester cu experienţă - tester începător; programator - tester), etc.

Rata de recuperare a investiţiei (ROI) este o metrică foarte importantă, deoarece procesul de testare poate fi evaluat pe baza ei. Astfel, intră în calcul costul creării testelor, al achiziţiei uneltelor şi al mentenanţei testelor create. Această metrică este influenţată pozitiv de testele de regresie, în accepţiunea în care acestea sunt automatizate şi rulează regulat, în unele cazuri zilnic, spre a demonstra că aplicaţia se comportă constant conform cerinţelor deja stabilite, la fiecare modificare a aplicaţiei.

Prin adoptarea unor soluţii de testare automatizată, scade timpul de execuţie al testelor. Desigur, aceasta nu înseamnă dispariţia testelor manuale. Există scenarii complicate sau ale căror implementare nu se justifică din punctul de vedere al costului şi al timpului şi pentru care testarea manuală este cea mai potrivită.

Strategia de testare poate pune accent pe anumite etape, metode sau tehnici de testare în care este importantă gestionarea resurselor de timp, a bugetului, a calităţii şi a riscurilor asociate.

Modelul de dezvoltare software asociază diferite etape ale dezvoltării artefactelor cu acţiunile de testare corespunzătoare. În modelul cascadă, testarea se efectuează după la finalul ciclului de dezvoltare software, pe când în modelul agil, crearea testelor şi rularea se face la implementarea fiecărei funcţionalităţi.

Calitatea instrumentelor de testare şi competenţele inginerilor referitoare la asigurarea calităţii pot face diferenţa între succesul sau eşecul unui proiect de testare.

Costul uneltelor şi calitatea lor sunt factori demn de luat în considerare, mai ales pentru alternativele FOSS.

Pregătirea inginerilor poate fi optimizată prin specializări oferite de firmele producătoare ale uneltelor, ateliere de lucru, certificări (ISTQB) şi sesiuni de antrenament. Evident că la fiecare instrument nou va exista o curbă de învăţare.

În anumite industrii (aviaţie, medicină) şi pentru anumite aplicaţii există reglementări legislative care impun anumite condiţii de calitate și parametri cu care aplicaţia trebuie să fie conformă.

Procesele din cadrul unui proiect de testare pot să varieze de la modele de dezvoltare de tip cascadă cu reglementări mai stricte până la cele de tip agil în care echipele sunt autonome.

Timpul disponibil pentru efectuarea testelor poate duce la executarea unor anumite tipuri de testare. Spre exemplu, testarea explorativă poate fi folosită când presiunea este mai mare şi timpul mai puţin, luând în considerare o analiză a riscurilor asociate.

Cerinţele clientului pot favoriza un tip de testare. De exemplu, o testare REST în detrimentul testării interfeţei.

În acest articol a fost expus un ecosistem de unelte de testare urmărind programa ISTQB (International Software Testing Qualifications Board) şi o corespondenţă între diferitele niveluri ale piramidei de testare şi uneltele corespunzătoare acestor niveluri.

Figura următoare reprezintă arhitectura aplicaţiei şi a testelor în cloud. Este reprezentat un flux de acţiuni cu uneltele respective pentru testarea unei aplicaţii în cloud.

Înregistrarea modificării codului sursă ajunge în Bitbucket, care declanşează o acţiune a Jenkins. Jenkins porneşte Maven cu sarcinile de clean şi install. Software-ul ajunge în registrul Quay care face desfăşurarea unei imagini Docker.

În final, se testează aplicaţia conţinută de imaginea Docker. După testarea aplicaţiei se evaluează testele şi se repară defectele.

Ciclul se reia în ritm orar, zilnic sau săptămânal, în funcţie de configurare. O astfel de arhitectură poate fi realizată de o echipă DevOps.

Schema de testare a unei aplicaţii în cloud.

În concluzie, s-a prezentat o mapare a uneltelor de testare la piramida testării şi la programa ISTQB referitoare la uneltele de testare.