Professional Documents
Culture Documents
Unit testing
CDL - Cursul 5
Mihai Maruseac
mihai.maruseac@rosedu.org
20 mai 2010
ROSEdu
1 / 25
Unit Testing Test Driven Development no TDD uses
Before we begin
2 / 25
Unit Testing Test Driven Development no TDD uses
Studiu de caz
3 / 25
Unit Testing Test Driven Development no TDD uses
Studiu de caz
4 / 25
Unit Testing Test Driven Development no TDD uses
Studiu de caz
3. S, i ajungem aici.
5 / 25
Unit Testing Test Driven Development no TDD uses
Solut, ii
6 / 25
Unit Testing Test Driven Development no TDD uses
Solut, ii
6 / 25
Unit Testing Test Driven Development no TDD uses
Solut, ii
6 / 25
Unit Testing Test Driven Development no TDD uses
7 / 25
Unit Testing Test Driven Development no TDD uses
7 / 25
Unit Testing Test Driven Development no TDD uses
7 / 25
Unit Testing Test Driven Development no TDD uses
8 / 25
Unit Testing Test Driven Development no TDD uses
8 / 25
Unit Testing Test Driven Development no TDD uses
8 / 25
Unit Testing Test Driven Development no TDD uses
Cum testăm?
9 / 25
Unit Testing Test Driven Development no TDD uses
Cum testăm?
9 / 25
Unit Testing Test Driven Development no TDD uses
Exercit, iu 1
Task 1
Scriet, i o funct, ie mystrrev ce va realiza inversarea unui s, ir de caractere
dat argument. Funct, ia va returna un pointer către s, irul rezultat.
10 / 25
Unit Testing Test Driven Development no TDD uses
Exercit, iu 1
Task 1
Scriet, i o funct, ie mystrrev ce va realiza inversarea unui s, ir de caractere
dat argument. Funct, ia va returna un pointer către s, irul rezultat.
Task 2
Scriet, i o funct, ie check mystrrev ce va testa funct, ia anterioară:
mystrrev(mystrrev(sir)) == sir
10 / 25
Unit Testing Test Driven Development no TDD uses
Exercit, iu 1
Task 1
Scriet, i o funct, ie mystrrev ce va realiza inversarea unui s, ir de caractere
dat argument. Funct, ia va returna un pointer către s, irul rezultat.
Task 2
Scriet, i o funct, ie check mystrrev ce va testa funct, ia anterioară:
mystrrev(mystrrev(sir)) == sir
10 / 25
Unit Testing Test Driven Development no TDD uses
Exercit, iu 1
Task 1
Scriet, i o funct, ie mystrrev ce va realiza inversarea unui s, ir de caractere
dat argument. Funct, ia va returna un pointer către s, irul rezultat.
Task 2
Scriet, i o funct, ie check mystrrev ce va testa funct, ia anterioară:
mystrrev(mystrrev(sir)) == sir
10 / 25
Unit Testing Test Driven Development no TDD uses
Testing vs Coding
11 / 25
Unit Testing Test Driven Development no TDD uses
Testing vs Coding
11 / 25
Unit Testing Test Driven Development no TDD uses
Testing vs Coding
11 / 25
Unit Testing Test Driven Development no TDD uses
Testing vs Coding
11 / 25
Unit Testing Test Driven Development no TDD uses
12 / 25
Unit Testing Test Driven Development no TDD uses
12 / 25
Unit Testing Test Driven Development no TDD uses
12 / 25
Unit Testing Test Driven Development no TDD uses
12 / 25
Unit Testing Test Driven Development no TDD uses
12 / 25
Unit Testing Test Driven Development no TDD uses
13 / 25
Unit Testing Test Driven Development no TDD uses
Exercit, iu 2
Descriere
Vom implementa funct, ia mystrcmp ce va compara dacă două s, iruri de
caractere sunt egale. Vom ı̂ncepe prin a defini testul s, i apoi vom scrie
codul.
Task 1
Scriet, i o funct, ie de test ce va verifica că mystrcmp returnează ce
trebuie. Nu implementat, i mystrcmp, scriet, i doar un stub.
14 / 25
Unit Testing Test Driven Development no TDD uses
Exercit, iu 2
Descriere
Vom implementa funct, ia mystrcmp ce va compara dacă două s, iruri de
caractere sunt egale. Vom ı̂ncepe prin a defini testul s, i apoi vom scrie
codul.
Task 1
Scriet, i o funct, ie de test ce va verifica că mystrcmp returnează ce
trebuie. Nu implementat, i mystrcmp, scriet, i doar un stub.
Task 2
Implementat, i mystrcmp, pe etape. Rulat, i funct, ia de test de fiecare dată
când compilat, i.
14 / 25
Unit Testing Test Driven Development no TDD uses
Timeline
15 / 25
Unit Testing Test Driven Development no TDD uses
1 Focus
16 / 25
Unit Testing Test Driven Development no TDD uses
1 Focus
2 S, tii când ai terminat
16 / 25
Unit Testing Test Driven Development no TDD uses
1 Focus
2 S, tii când ai terminat
3 Dacă un unit merge o dată va merge mereu
16 / 25
Unit Testing Test Driven Development no TDD uses
1 Focus
2 S, tii când ai terminat
3 Dacă un unit merge o dată va merge mereu
4 Cod mult mai modular
16 / 25
Unit Testing Test Driven Development no TDD uses
1 Focus
2 S, tii când ai terminat
3 Dacă un unit merge o dată va merge mereu
4 Cod mult mai modular
5 Cod mai curat s, i mai us, or de ı̂nt, eles
16 / 25
Unit Testing Test Driven Development no TDD uses
1 Focus
2 S, tii când ai terminat
3 Dacă un unit merge o dată va merge mereu
4 Cod mult mai modular
5 Cod mai curat s, i mai us, or de ı̂nt, eles
6 Satisfact, ia de a vedea că lucrurile merg
16 / 25
Unit Testing Test Driven Development no TDD uses
1 Focus
2 S, tii când ai terminat
3 Dacă un unit merge o dată va merge mereu
4 Cod mult mai modular
5 Cod mai curat s, i mai us, or de ı̂nt, eles
6 Satisfact, ia de a vedea că lucrurile merg
7 Progres vizibil
16 / 25
Unit Testing Test Driven Development no TDD uses
1 Focus
2 S, tii când ai terminat
3 Dacă un unit merge o dată va merge mereu
4 Cod mult mai modular
5 Cod mai curat s, i mai us, or de ı̂nt, eles
6 Satisfact, ia de a vedea că lucrurile merg
7 Progres vizibil
8 “Documentare” cod
16 / 25
Unit Testing Test Driven Development no TDD uses
No silver bullet
Nu merge mereu
17 / 25
Unit Testing Test Driven Development no TDD uses
No silver bullet
Nu merge mereu
Prea multe teste
17 / 25
Unit Testing Test Driven Development no TDD uses
No silver bullet
Nu merge mereu
Prea multe teste
Linii de test de 100 de ori mai multe ca linii de cod utile
17 / 25
Unit Testing Test Driven Development no TDD uses
No silver bullet
Nu merge mereu
Prea multe teste
Linii de test de 100 de ori mai multe ca linii de cod utile
Teste nesemnificative
17 / 25
Unit Testing Test Driven Development no TDD uses
No silver bullet
Nu merge mereu
Prea multe teste
Linii de test de 100 de ori mai multe ca linii de cod utile
Teste nesemnificative
Teste pe cazuri nespecificate
17 / 25
Unit Testing Test Driven Development no TDD uses
No silver bullet
Nu merge mereu
Prea multe teste
Linii de test de 100 de ori mai multe ca linii de cod utile
Teste nesemnificative
Teste pe cazuri nespecificate
Teste incorect specificate
17 / 25
Unit Testing Test Driven Development no TDD uses
No silver bullet
Nu merge mereu
Prea multe teste
Linii de test de 100 de ori mai multe ca linii de cod utile
Teste nesemnificative
Teste pe cazuri nespecificate
Teste incorect specificate
Teste depinzând de implementare
17 / 25
Unit Testing Test Driven Development no TDD uses
No silver bullet
Nu merge mereu
Prea multe teste
Linii de test de 100 de ori mai multe ca linii de cod utile
Teste nesemnificative
Teste pe cazuri nespecificate
Teste incorect specificate
Teste depinzând de implementare
Uneori testarea durează prea mult
17 / 25
Unit Testing Test Driven Development no TDD uses
No silver bullet
Nu merge mereu
Prea multe teste
Linii de test de 100 de ori mai multe ca linii de cod utile
Teste nesemnificative
Teste pe cazuri nespecificate
Teste incorect specificate
Teste depinzând de implementare
Uneori testarea durează prea mult
Testarea manuală poate fi sărită
17 / 25
Unit Testing Test Driven Development no TDD uses
No silver bullet
Nu merge mereu
Prea multe teste
Linii de test de 100 de ori mai multe ca linii de cod utile
Teste nesemnificative
Teste pe cazuri nespecificate
Teste incorect specificate
Teste depinzând de implementare
Uneori testarea durează prea mult
Testarea manuală poate fi sărită
not thinking ahead
17 / 25
Unit Testing Test Driven Development no TDD uses
18 / 25
Unit Testing Test Driven Development no TDD uses
19 / 25
Unit Testing Test Driven Development no TDD uses
19 / 25
Unit Testing Test Driven Development no TDD uses
19 / 25
Unit Testing Test Driven Development no TDD uses
Integrarea cu SCM-uri
git bisect
20 / 25
Unit Testing Test Driven Development no TDD uses
Integrarea cu SCM-uri
git bisect
testăm manual?
20 / 25
Unit Testing Test Driven Development no TDD uses
Integrarea cu SCM-uri
git bisect
testăm manual?
putem face un script pentru testare
20 / 25
Unit Testing Test Driven Development no TDD uses
Problema
Compilat, i sursele s, i rulat, i programul. Vom ı̂ncerca să găsim commit-ul
ce a introdus eroarea folosind git bisect.
21 / 25
Unit Testing Test Driven Development no TDD uses
Problema
Compilat, i sursele s, i rulat, i programul. Vom ı̂ncerca să găsim commit-ul
ce a introdus eroarea folosind git bisect.
Solut, ie
Descărcat, i cele două fis, iere bash de la
http://swarm.cs.pub.ro/∼mihai/cdl/2010/.
Rulat, i ut.sh s, i vet, i obt, ine commit-ul ce a introdus gres, eala. Corectat, i-o
introducând un nou commit corect (nu facet, i push).
21 / 25
Unit Testing Test Driven Development no TDD uses
Stress testing
Robustet, ea programului
22 / 25
Unit Testing Test Driven Development no TDD uses
Stress testing
Robustet, ea programului
Teste peste limitele operării normale
22 / 25
Unit Testing Test Driven Development no TDD uses
Stress testing
Robustet, ea programului
Teste peste limitele operării normale
Paralelism, sisteme de operare, middleware, biblioteci, memory leaks
22 / 25
Unit Testing Test Driven Development no TDD uses
Stress testing
Robustet, ea programului
Teste peste limitele operării normale
Paralelism, sisteme de operare, middleware, biblioteci, memory leaks
Zburat, i cu un avion al cărui software nu a fost testat astfel?
22 / 25
Unit Testing Test Driven Development no TDD uses
Concluzii
Testing is good
23 / 25
Unit Testing Test Driven Development no TDD uses
Concluzii
Testing is good
23 / 25
Unit Testing Test Driven Development no TDD uses
Concluzii
23 / 25
Unit Testing Test Driven Development no TDD uses
Concluzii
23 / 25
Unit Testing Test Driven Development no TDD uses
Concluzii
23 / 25
Unit Testing Test Driven Development no TDD uses
Concluzii
23 / 25
Unit Testing Test Driven Development no TDD uses
Întrebări?
24 / 25
Unit Testing Test Driven Development no TDD uses
Bibliografie
25 / 25