Documente Academic
Documente Profesional
Documente Cultură
20 noiembrie 2014
Marius Minea
Se comport
a corect metodele superclasei n contextul subclasei?
Exemplu, pentru o clasa B care mos, teneste o metoda m din A
1. putem s
a omitem complet re-testarea lui B.m ?
2. sunt de ajuns cazurile de test pentru A.m ?
3. trebuie cazuri de test noi ? care ?
Marius Minea
Marius Minea
[McGregor&Sykes]
Obiecte
ascund informat, ia ngreuneaz
a observarea st
arii n testare
au stare persistent
a dac
a e inconsistent
a cauzeaz
a erori
au o durat
a de viat,
a erori prin construirea/distrugerea inoportun
a
Mesaje / metode importante n testarea interact, iunii obiectelor
pot fi apelate n st
ari nepotrivite ale obiectului
au parametri (folosit, i/actualizat, i): se afl
a n starea potrivit
a?
implementeaz
a corect interfet, ele dorite? (vezi probleme de subtip)
Interfat,
a
= specificat, ie comportamental
a
Dou
a abord
ari privind precondit, iile de funct, ionare corect
a:
bazat
a pe contract: le presupune / programare defensiv
a: le verific
a
influent, eaz
a complexitatea implement
arii s, i test
arii:
simplific
a/complic
a testarea clasei/testarea de integrare
Obs: programarea defensiv
a verific
a s, i rezultatele (des, i n practic
a
adesea serverul/receptorul e considerat de ncredere, doar clientul nu)
Marius Minea
Marius Minea
Axiome de testare
10
Marius Minea
11
Marius Minea
12
Marius Minea
13
Acoperirea n testarea OO
Consider
am un apel de metod
a n cod:
target-methods criterion: toate implement
arile de metod
a apelabile
receiver-classes criterion: toate variantele pentru clasa receptor
Exemplu [Rountev, Milanova, Ryder 2004]
class A { public void m() { ... } }
class B extends A { public void m() { ... } }
class C extends A { ... }
A a;
...
a.m();
target-methods:
testeaz
a apeluri la A.m();, B.m()
receiver-classes (mai cuprinz
ator): testeaz
a a de tip A, B, C
Marius Minea
14
Folosire inconsistent
a ca tip
Deriv e folosit
a inconsistent s, i ca Base (chiar f
ar
a redefiniri)
Ex: Stack (acces la un cap
at) implementat din Vector (acces arbitrar)
folosirea Vector::removeAt(idx) pe Stack violeaz
a invariantul clasei
Cauza: eroare de proiectare. Detect, ie: testarea invariant, ilor de clas
a
Erori de definit, ie de stare
1) Metodele derivate interact, ioneaz
a diferit cu starea obiectului
Detect, ie: verificare c
a metodele definesc/folosesc aceias, i membri
2) Redefinirea local
a a unui membru (ascunde membru omonim mos, tenit)
dar metodele mos, tenite acceseaz
a membrul vechi inconsistent,
a
3) Metod
a redefinit
a face alt calcul asupra aceluias, i membru
inconsistent,
a a st
arii n raport cu specificat, ia (mos, tenit
a)
Erori de constructor
Apel virtual n constructor n derivat, acces la stare neinit, ializat
a
... s, i altele (anomalii de vizibilitate, etc.)
Marius Minea
Particularit
at, i ale test
arii OO
15
16
17
La nivel de metod
a
Category/Partition (analiz
a I/O, partit, ionare/echivalent,
a)
Combinational Function Test (acoperire a condit, iilor)
Recursive Function Test
Polymorphic Message Test (client al unui server polimorfic)
La nivel de clas
a
Invariant Boundaries
Nonmodal Class Test (clas
a f
ar
a constr
angeri de secvent, iere)
Modal Class Test (clas
a cu constr
angeri de secvent, iere)
Quasi-Modal Class Test (constr
angeri dependente de stare)
Pentru componente reutilizabile
Abstract Class Test (interfat,
a)
Generic Class Test (parametrizat
a)
New Framework Test
Popular Framework Test (modific
ari n cadru de aplicat, ie intens folosit)
Marius Minea
18
Marius Minea
19
Marius Minea
20
21
Marius Minea