unit testing: correct - aseacs.ase.ro/media/default/documents/cts/zamfiroiu/curs... ·...
TRANSCRIPT
![Page 1: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/1.jpg)
Unit Testing: CORRECTALIN ZAMFIROIU
![Page 2: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/2.jpg)
Recapitulare
Testing
Unit testing
Junit
Test
TestCase
TestSuite
Assertion
Right-BICEP
![Page 3: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/3.jpg)
Test
QUIZ.CSIE.ASE.RO
![Page 4: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/4.jpg)
CORRECT
C – Conformitatea formatului (Conformance);
O – Ordinea (Order);
R – Intervalul (Range);
R – Referințe externe (References);
E – Existența obiectelor sau a rezultatelor (Existence);
C – Cardinalitatea rezultatelor (Cardinality)
T – Timpul (Time).
![Page 5: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/5.jpg)
CORRECT
Fiecare sub-principiu are o întrebare care ar trebui să fie în mintea
testerului.
Acest principiu este folosit și pentru a stabili condițiile limită pentru testele
de Boundary din Right-BICEP.
![Page 6: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/6.jpg)
Conformance
Este, de asemenea, cunoscut sub numele de:
Type testing
Compliance testing
Conformity assessment
![Page 7: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/7.jpg)
Conformance
Se aplică în numeroase domenii în care ceva ar trebui să îndeplinească
anumite standarde specifice.
De obicei, pentru orice intrare și pentru orice ieșire, trebuie să se verifice
conformitatea cu un format sau cu un standard.
![Page 8: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/8.jpg)
Conformance
Testele pot fi efectuate pentru a verifica ce se întâmplă dacă datele de
intrare nu sunt conforme cu formatul sau pentru a vedea dacă rezultatulobținut este conform cu formatul specificației proiectului.
![Page 9: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/9.jpg)
Conformance
Pentru clasa Persoană trebuie să testăm dacă atributul CNP are 13 caractere.
![Page 10: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/10.jpg)
Ordering
Testele de ordine sunt specifice listelor, dar nu numai.
În cazul listelor, trebuie să verificăm dacă ordinea articolelor este cea dorită.
De asemenea, putem testa comportamentul metodei dacă primește anumițiparametri într-o altă ordine sau o listă de elemente într-o ordine diferită de ceaașteptată.
![Page 11: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/11.jpg)
Ordering
Putem verifica dacă rezultatul metodei nEvenNumbers este o listă în
ordinea corectă, dacă al doilea element este mai mare decât primul; al treilea este mai mare decât al doilea și așa mai departe.
![Page 12: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/12.jpg)
Range
Pentru valorile de intrare și de ieșire, sunt setate anumite intervale. Aceste
intervale trebuie verificate.
Pentru anumite metode sunt stabilite mai multe intervale. Acest lucru va fi
testat pentru toate aceste intervale.
![Page 13: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/13.jpg)
Range
Toate funcțiile care au un index trebuie să fie testate pentru interval,
deoarece acel index are un domeniu bine stabilit.
De obicei, este necesar să verificați :
Valorile inițiale și finale pentru index au aceeași valoare;
Primul element este mai mare sau mai mic decât ultimul element;
Ce se întâmplă dacă indicele este negativ;
Ce se întâmplă dacă indicele este mai mare decât limita superioară;
Numărul de articole nu este același cu cel pe care îl doriți - dimensiunea;
etc.
![Page 14: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/14.jpg)
Range
Pentru metoda nEvenNumbers(), se poate verifica dacă lungimea listei returnate este corectă.
![Page 15: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/15.jpg)
Reference
Anumite metode depind de lucrurile externe sau de obiectele externeacestor metode. Aceste elemente trebuie verificate și controlate.
Exemple:
O aplicație web necesită conectarea utilizatorului;
O extragere din stivă funcționează dacă există elemente în stivă;
etc.
![Page 16: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/16.jpg)
Reference
Aceste elemente sunt numite precondiții sau condiții preliminare.
Condiții preliminare pentru ca metoda să funcționeze în mod normal.
Aceste teste sunt efectuate folosind dubluri de test (stub, fake, dummy, mock).
![Page 17: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/17.jpg)
Existence
“does some given thing exist?”
Trebuie să ne întrebăm ce se întâmplă cu metoda dacă un parametru nu există, dacă este nul
sau dacă este 0.
De asemenea, pentru sistemele software care funcționează cu fișiere sau cu conexiune la
internet, este necesar să se verifice existența acestor fișiere sau disponibilitatea conexiunii la
internet. În caz contrar, aplicația nu trebuie să dea eroare, ci trebuie să se comporte normal cu
avertizarea utilizatorului de problema întâmpinată.
![Page 18: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/18.jpg)
Existence
Make sure your method can stand up to
nothing.
Este asemănătoare cu condiția de
eroare din Right-BICEP.
![Page 19: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/19.jpg)
Cardinality
0-1-n Rule
Este similar cu testele de existență (Existence) și testele privind intervalul (Range).
Trebuie să verificăm dacă metoda are 0 elemente, 1 element sau elemente n.
Dacă funcționează pentru 2, 3 sau 4 elemente, se consideră că va funcționa pentru
mai multe elemente, însă nu trebuie să uităm de testul de Boundary superior.
![Page 20: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/20.jpg)
Cardinality
Pentru metoda nEvenNumbers() trebuie să verificăm situațiile :
0 numere pare;
1 număr par;
n numere pare, unde n se află în mulțimea {2,3,4….}.
![Page 21: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/21.jpg)
Time
Este similar cu testul de performanță din Right-BICEP.
De asemenea, poate fi testat dacă șablonul de apeluri este respectat.
Similar cu design pattern-ul Template.
De exemplu, pentru a apela metoda logout(), trebuie mai întâi să apelăm
metoda de conectare().
![Page 22: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/22.jpg)
CORRECT - Questions
C – Conformitatea formatului (Conformance);
O – Ordinea (Order);
R – Intervalul (Range);
R – Referințe externe (References);
E – Existența obiectelor sau a rezultatelor (Existence);
C – Cardinalitatea rezultatelor (Cardinality)
T – Timpul (Time).
![Page 23: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/23.jpg)
F.I.R.S.T
“ Pentru ca testele unitare să fie utile și eficiente pentru echipa de
programare, trebuie să vă amintiți să le faceți FIRST.”
![Page 24: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/24.jpg)
F.I.R.S.T
Fast
Isolated/Independent
Repeatable
Self-Validating
Timely
Programambile
Repetabile
Izolate/Independete
Morale
Eficiente
![Page 25: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/25.jpg)
Fast
Testul dezvoltat ar trebui să fie rapid, deoarece dacă avem prea multeteste, nu trebuie să așteptăm prea mult timp când le executăm.
![Page 26: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/26.jpg)
Isolated
Single responsibility (SOLID)
“Each unit test should have a single reason to fail.”
![Page 27: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/27.jpg)
Isolated
Atunci când un test eșuează, dezvoltatorul nu trebuie să facă debug
pentru a identifica ce este greșit și unde este problema.
Testul ar trebui să fie izolat și să spună exact unde este problema și ce
problemă există.
![Page 28: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/28.jpg)
Repeatable
Rezultatele obținute ar trebui să fie identice indiferent de numărul rulări ale
acestor teste.
Testele ar trebui să se desfășoare în mod repetat, fără alte intervenții.
![Page 29: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/29.jpg)
Self-Validating
Încrederea în testele implementate.
În cazul în care testele trec, dezvoltatorul ar trebui să aibă mare încrederecă codul este corect și fără erori.
Dacă un test nu reușește, dezvoltatorul trebuie să aibă încredere în faptul
că metoda trebuie îmbunătățită ci nu să considere ca testul este greșit.
![Page 30: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/30.jpg)
Timely
Când trebuie să punem în aplicare testele pentru metoda noastră?
Când considerăm că am făcut toate testele?
![Page 31: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/31.jpg)
EclEmma – Code Coverage
![Page 32: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/32.jpg)
EclEmma – Code Coverage
![Page 33: Unit Testing: CORRECT - ASEacs.ase.ro/Media/Default/documents/cts/zamfiroiu/curs... · 2019-03-18 · Self-Validating Încrederea în testele implementate. În cazul în care testele](https://reader033.vdocuments.us/reader033/viewer/2022041615/5e3b2d1007a60932e872a7cf/html5/thumbnails/33.jpg)
Referințe
https://github.com/ghsukumar/SFDC_Best_Practices/wiki/F.I.R.S.T-Principles-of-Unit-Testing
https://pragprog.com/magazines/2012-01/unit-tests-are-first
http://agileinaflash.blogspot.com/2009/02/first.html