În ziua de azi, testerii sunt priviți ca fiind cei care execută munca de rutină, de o dificultate mai ușoară, și ale căror skill-uri tehnice nu sunt atât de puternice pe cât cele ale programatorilor. Există echipe fragmentate, două tabere practic: developeri și testeri. Accentul nu se pune pe comunicare și colaborare, ci se investește efort și energie în acel vechi "battle", în care fiecare dorește să demonstreze că echipa proprie e mai bună.
Astfel de situații au dus în final la apariția conceptului de Testers = second class citizens. Ce înseamnă acest lucru mai exact? Nu se lucrează constructiv împreună, unde atât testerul cât și developerul pot beneficia unul de expertiza celuilalt, ci testerul lucrează doar după ce o bună parte din munca developerului e gata (există ceva palpabil pentru testare).
...este unul complex, unde lucrează o echipa de aproximativ 50 persoane. Dacă nu am insista foarte mult pe colaborare și comunicare, nu am reuși să facem față metodologiei Kanban ce o abordăm, ce presupune un număr mare de teste automate, inițiativă și proactivitate din partea tuturor.
Cum am ajuns noi să depășim această situaţie? Prin efort colaborativ și comunicare. Testerii nu trebuie să aștepte ca un build să fie gata pentru testare, pentru a-și putea începe munca, ci pot lucra împreună cu developerii încă din momentul în care detaliile unui epic/story sunt clarificate. Împreuna pot stabili scenariile relevante ce trebuie testate, și scrie codul de automation necesar.
Suntem mândri să lucram într-un mediu unde fiecare membru al echipei se ghidează după principiul Quality is a team effort.
Trebuie să ținem cont de un lucru: această abordare nu ar fi posibilă fără un număr mare de teste automate, care să asigure regression testing-ul. În caz contrar, toată această comunicare cu echipa de development ar deveni un overhead pentru testeri (și nu numai), deoarece presupune multe discuții în prealabil, care consumă din timpul necesar scrierii și executării testelor. Poate vă gândiți că o simplă abordare Agile-Scrum ar fi suficientă, pentru că detaliile necesare implementării și testării unui feature nou se pot stabili în cadrul unui meeting de stand-up. Dar cred că știți cu toții că aceste meeting-uri pot devia de la formatul lor standard, depășindu-se deseori numărul de 15 minute alocate în mod ideal, și nu se ajunge la un consens în ceea ce privește rolul fiecărui membru al echipei.
Pentru a îmbunătăți și mai mult lucrul în echipa noastră, ne-am îndreptat atenția către Behavior Driven Development1, o metodologie ce se axează pe comunicare și colaborare ca puncte forte. Definiții pentru BDD sunt multe, dar noi vă prezentăm câteva dintre conceptele BDD așa cum le-am aplicat în cadrul proiectului nostru:
Răspunzând la întrebări de acest gen, putem să privim produsul din prisma product owner-ului, fiind capabili astfel să înțelegem mai bine business value-ul ce un produs/feature nou îl poate aduce.
Practic, pașii ce îi urmăm noi din momentul în care apare o idee de feature nou, până când aceasta se materializează sunt următorii:
După cum vă puteți da seama, BDD este un proces complex, care se poate aplica sub diferite "flavours" în cadrul mai multor echipe. Este o metodologie ce se ghidează după context, aceeași rețetă BDD ce funcționează pentru un proiect aducând alte rezultate dacă aplicată altui proiect. Sunt multe challenge-uri ce pot apărea de-a lungul timpului, iar noi am încercat să le abordăm pe fiecare în parte, evitând pe cât se poate recurgerea la compromisuri:
Am insistat asupra limbajului Gherkin, exemplificând modul cum se poate descrie un feature prin scenarii scrise cu ajutorul acestui limbaj. Aceste teste sunt ținute în același loc cu codul, reprezentând datele de intrare ale unui tool specific BDD (Cucumber, Lettuce, Freshen, etc.). De aceea vom ști că sunt mereu up to date - testele sunt modificate de îndată ce codul este modificat, pentru a continua să reflecte situația actuală a codului.
Conceptele BDD aplicate în acest moment cu succes, obțin rezultatele dorite, dar suntem conștienți de faptul că mai avem mult de lucru. Printre obiectivele noastre în viitor, amintim:
BDD este un proces complex, dar avantajele sale sunt multe, și contribuie mult la închegarea unei echipe în adevăratul sens al cuvântului și la livrarea unui produs de succes. Recomandăm sincer abordarea acestei metodologii, indiferent de complexitatea proiectului sau dimensiunea echipei. Aplicat astfel încât să țină cont de nevoile clare ale proiectului, BDD poate deveni cu ușurință o poveste de succes.
Mai multe informații cu privire la cum se pot descrie funcționalități folosind un limbaj ubiquitos2 (Gherkin) , în funcție de tool-ul ales, se pot găsi la:
Lettuce tutorial (http://lettuce.it/tutorial/simple.html#id1)-tool specific BDD, poate fi folosit cu Python
Cucumber tutorial (http://cukes.info/) - tool specific BDD, poate fi folosit cu Ruby
Freshen tutorial (https://github.com/rlisagor/freshen)- tool specific BDD, poate fi folosit cu Python
Behat tutorial (http://behat.org/) - tool specific BDD, poate fi folosit cu Python
...și lista poate continua