8/8/2019 Studiu de caz asupra aplicaţiilor de testare pentru limbajul Ruby
http://slidepdf.com/reader/full/studiu-de-caz-asupra-aplicatiilor-de-testare-pentru-limbajul-ruby 1/5
Studiu de caz asupra aplicaţiilor de testare pentru limbajul Ruby
Testarea limbajelor dinamice
Debugging-ul limbajelor dinamice este considerat dificil deoarece compilatorul nuverifică tipul datelor până la rulare.
În limbajul Ruby obiectele sunt definite mai degrabă după comportament decât după definirea statică. Soluţia este de a crea teste care verifică comportamentul mai eficient decâtdacă ne-am baza pe un compilator deoarece compilatorul nu verifica valori null, string, valorice au ieşit din domeniul în care au fost definite, sau obiecte construite parţial, fiind deasemenea păcălite destul de uşor atunci când convertim tipul unei date.
Testarea automată este procesul prin care scriem cod pentru a testa comportamentulaltui cod.
Testele automate îmbunătăţesc timpul de dezvotare al produsului deoarecedezvoltatorul nu mai este obligat să parcurgă “ manual ” paşii pentru a se asigura că oanumită funcţionalitate este implementată corect.
Modalităţi de testare
- Test Driven Develpement
- Behavior Driven Development
Test Driven Developement
Test Driven Developement se bazează pe principiul : scrie codul care testează î nainte şi apoiscrie codul care trece testul.
In primul rând se scriu testele pentru codul care se doreşte a fi implementat înainte de a scriecodul aplicaţiei. Următorul pas este să rulam testele care nu vor trece dacă sunt scrise corect.Apoi scriem codul aplicaţiei şi rulăm testul. În cazul în care codul implementat pică testul ne
î ntoarceam le el şi îl modificăm până când v-a trece testul. Când toate testele au trecuturmează partea de optimizare a codului.
8/8/2019 Studiu de caz asupra aplicaţiilor de testare pentru limbajul Ruby
http://slidepdf.com/reader/full/studiu-de-caz-asupra-aplicatiilor-de-testare-pentru-limbajul-ruby 2/5
Test Driven Developement în Ruby
Ruby include o librarie de testare în distribuţia standard . Libraria conţine suite de test,construite din metode care fac aserţii despre codul ce se doreşte a fi testat. Aceste suite de test
folosesc un runner pentru a incova testul şi pentru a întoare rezultatul. Aceste teste se numescşi unit tests (teste unitate) şi menirea lor este de a testa unitaţi distincte şi cât mai mici de cod.Astfel se testează codul la cel mai jos nivel şi se verifică comportamentul de bază.
Exemple de aserţii
Behavior Driven Develpement
La î nceputul oricărui proiect se crează o foaie de specificaţii care conţine punctele cheie pecare proiectul trebuie să le î ndeplinescă. Problema apare în etapa de dezvoltare când ne damseama că specifiaţia conţine premise greşite care trebuie schimbate, şi în scurt timp codul
înce pe să se distanţeze fată de specificaţiile iniţiale.
Behavior Driven Developement ne propune să începem prin a scrie specificaţiile
programului în cod alături de sursele programului. Astfel specificaţiile devin un template
(model) care descrie com portamentul aşteptat. Următorul pas este construitrea testelor înfuncţie de specifiicaţii şi rularea acestor teste. Iniţial, acestea nu trebuie să treacă dacă suntscrise corect. Urmează crearea codului ,verificarea corectitudinii acestuia prin rularea şitrecerea testelor urmat de etapa de optimizare. Pe masură ce se efectuază shimbări în programacestea trebuie să se reflecte atât în teste cât şi în specificaţii.
Utilizând acest mod de testare se poate evalua foarte uşor starea reala a proiectuluiîmpreuna cu specificaţiile implementate la un anumit moment dat.
8/8/2019 Studiu de caz asupra aplicaţiilor de testare pentru limbajul Ruby
http://slidepdf.com/reader/full/studiu-de-caz-asupra-aplicatiilor-de-testare-pentru-limbajul-ruby 3/5
BDD în Ruby
RSpec – Ruby Specification
Este primul framework de testare Ruby care a folosit BDD şi în prezent este încă cel maifolosit.
Prin intermediul verbului describe se specifică comportamentul aşteptat din partea testelorcare urmează să fie implementate în contextul descris.
Contextul poate să conţină blocuri de cod cum ar fi :
Before – folosite pentru declararea variabilelor şi instanţierea obiectelorIt – descriu comportamentul pe care ar trebui să îl aiba metodeleAfter – decrie comportamentul dorit dupa efectuarea modificărilor
Metoda principală folosită în cadrul testelor este should urmată de un predicat care descrie
cum ar trebui să se comporte obiectul testat.
8/8/2019 Studiu de caz asupra aplicaţiilor de testare pentru limbajul Ruby
http://slidepdf.com/reader/full/studiu-de-caz-asupra-aplicatiilor-de-testare-pentru-limbajul-ruby 4/5
Înlocuirea componentelor folosind Stub-uri
Există situaţii când nu avem acces direct la componentele software sau hardware şi
dorim să simulam mediul în care programul v-a rula arunci când v-a fi pus în producţie.
Aceste situaţii pot fi impuse de limitări fizice sau financiare.Stub-urile sunt obiecte sau metode „ false ” care imită comportamentul obiecteloradevărate. Aplicaţia nu face diferenţa între obiectul real şi cel care îi simulează comportamentul, acesta tehnica fiind folosită pentru a mima funcţionarea anumitor parţi alesistemului.
Mock Objects (Obiecte care Imită)
Obiectele mock sunt similare cu stub-urile diferenţa fiind ca ele stabilesc aşteptări pentru codul care v-a interacţiona cu ele. Astfel î n afară de a verifica acţiunile pe care le ia
codul în funţie de valorile returnate se testează şi interactiunile codului cu parametrii trimişi,
metodele apelate, exceptii , etc. .
Mock Objects în Ruby
Mocha este o librarie pentru mock-ing şi stubbing care foloseste o sintaxa similara cu JMock ( varianta Java a librariei ). Se integreaza cu framework-uri de testare cum ar fiTest::Unit şi R spec.
Mocha crează aşteptări pentru comportamentul obiectelor definite prin metoda
expects. Odata setată aşteptarea se crează automat un stub.
Verificarea procentului de acoperire a codului oferit de teste se poate realiza folosindutilitarul rcov. Utilitarul testeaza ce procent de metode dintr-o clasă Ruby sunt acoperite de
teste.
8/8/2019 Studiu de caz asupra aplicaţiilor de testare pentru limbajul Ruby
http://slidepdf.com/reader/full/studiu-de-caz-asupra-aplicatiilor-de-testare-pentru-limbajul-ruby 5/5
Testearea calităţii testelor se poate efectua folosind utilitarul Heckle. Pentru a testa calitatease foloseşte o tehnică numită fuzz testing. Utilitarul modifică codul testului după care verifică şi rulează testele pentru a determina dacă testele pică î n situaţii create aleator (mutaţii). Dacă apare un caz î n care testul nu pică se prezintă cazul şi motivul, permitându-i dezvoltatorului
să identifice problema. Framework-ul Rspec integrază acest utilitar.
Masurarea performaţie unei aplicaţii web se poate efectua folosind utilitarul Speed Tracer.Este disponibil sub forma unei extensii pentru browserul Goole Chrome şi masoară criterii deperformanta ale browserului atunci când î ncarcăm o pagină web şi când rulam o aplicaţie
web. Criteriile de masurare includ : parsarea scripturilor, încarcare elementlor grafice,încarcarea resurselor ce ţin de reteţea etc.
Testele de accepţantă implică rularea unor suite de teste asupra unor sisteme ce conţin
aplicaţii finalizate ( Black Box Testing). Există numeroase suite de teste de acceptanţădisponibile pentru testarea aplicaţiilor web. Toate au la baza principiul de a reproduce un setde acţiuni pe care utilizatorul l-ar face când interacţionează cu site-ul web.
Selenium este un astfel de utilitar care este disponibil sub forma unui plugin pentru browserul Firefox şi care înregistrează acţiunile pe care utilizatorul le face. Selinium estecapabil să genereze scrip-uri de testare pentru acţiunile înregistrate în diverse limbaje de programare cum ar fi Java, C#, Python şi Ruby.
Utilitarele WebRat şi watir funcţionează în mod similar numai că dezvoltatorul
trebuie să îşi definescă singur acţiunile în limbajul Ruby.