+ All Categories
Home > Documents > Studiu de caz asupra aplicaţiilor de testare pentru limbajul Ruby

Studiu de caz asupra aplicaţiilor de testare pentru limbajul Ruby

Date post: 09-Apr-2018
Category:
Upload: mihai303
View: 224 times
Download: 0 times
Share this document with a friend
5
Studiu de caz asupra aplicaţiilor de testare pentru limbajul Ruby Testarea limbajelor dinamice Debugging-ul limbajelor dinamice este considerat dificil deoarece compilatorul nu verifică 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ât dacă ne-am baza pe un compilator deoarece compilatorul nu verifica valori null, string, valori ce au ieşit din domeniul în care au fost definite, sau obiecte construite parţial, fiind de asemene a 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 comportamentul altui cod. Testele automate îmbunătăţesc timpul de dezvotare al produsului deoarece dezvoltatorul nu mai este obligat să  parcurgă “ manual ”  paş ii  pentru a se asigura că o anumită 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 apoi scrie codul care trece testul. In primul rând se scriu testele pentru codul care se doreşte a fi implementat înainte de a scrie codul 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 trecut urmează partea de optimizare a codului.
Transcript
Page 1: Studiu de caz asupra aplicaţiilor de testare pentru limbajul Ruby

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.

Page 2: Studiu de caz asupra aplicaţiilor de testare pentru limbajul Ruby

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.

Page 3: Studiu de caz asupra aplicaţiilor de testare pentru limbajul Ruby

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. 

Page 4: Studiu de caz asupra aplicaţiilor de testare pentru limbajul Ruby

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.

Page 5: Studiu de caz asupra aplicaţiilor de testare pentru limbajul Ruby

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.


Recommended