Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Objektorienteret Software Test

Lignende præsentationer


Præsentationer af emnet: "Objektorienteret Software Test"— Præsentationens transcript:

1 Objektorienteret Software Test
– problemer og løsninger Michael E. Caspersen Center for Objekt Teknologi Datalogisk Institut Aarhus Universitet

2 Oversigt Introduktion Problemer i OO-test Teknikker til OO-test
Tests rolle i udviklingsprocessen Konklusion © Michael E. Caspersen COT-konference, 3. maj 2000

3 Introduktion Baggrund Deltagere Et lille eksempel Systematisk test
© Michael E. Caspersen COT-konference, 3. maj 2000

4 Baggrund Forskningsprojekt i Center for ObjektTeknologi, 1998-2000
Arkitektur af indlejrede systemer Partnere Bang & Olufsen, Danfoss, og Teknologisk Institut Fem pilotprojekter, fem måneder hver CD afspiller Generel frekvensomformer B&O Master (TV, Video, Radio, CD) Frekvensomformer til kranstyring Flow-måler Pilotprojekter  produktprojekter © Michael E. Caspersen COT-konference, 3. maj 2000

5 Arbejdsgruppe, OO-test
Danfoss Drives Stefan Hellemann Skov, QA-afdelingen Aarhus Universitet Ole Lehrmann Madsen Michael E. Caspersen © Michael E. Caspersen COT-konference, 3. maj 2000

6 Generelt om test E. W. Dijkstra Formål Et optimeringsproblem
Testing can only show the presence of bugs, never the absence! Formål At finde fejl At opnå en høj grad af tillid til korrekthed Et optimeringsproblem At finde flest fejl/opnå maksimal tillid med mindst mulig indsats Standard testmetodikker For eksempel G. Myers og B. Beizer © Michael E. Caspersen COT-konference, 3. maj 2000

7 Terminologi Testeksempler Testsoftware Testformer Testniveauer
Testscenarie, testcase, testsuite Testsoftware Driver (bottom-up test), stub (top-down test) Testformer Black-box test (specifikationsbaseret test) White-box test (implementationsbaseret test) Testniveauer Modultest (intra-class test) Integrationstest (inter-class test) Systemtest Regressionstest © Michael E. Caspersen COT-konference, 3. maj 2000

8 Et lille eksempel Opgave (Myers, 1978)
Anvis en testplan for et program der indlæser tre tal og fortolker dem som sider i en trekant og udskriver om trekanten er - skæv, (scalene) - ligebenet, eller (isocles) - ligesidet (equilateral) © Michael E. Caspersen COT-konference, 3. maj 2000

9 Testplan for procedurel løsning
33 test cases 1. Valid ”skæv” trekant 2. Valid ligesidet trekant 3. Valid ligebenet trekant 4. To lige lange sider, +, 1. perm. 5. Anden perm. 6. Tredie perm. 7. En side af længde 0 8. En side med negativ længde 9. To lige lange sider, – , 1. perm. 10. Anden perm. 11. Tredie perm. 12. Tre sider > 0, sum af to < 3. 13. Anden perm. 14. Tredie perm. Fjerde perm. 16. Femte perm. 17. Sjette perm. 18. Alle sider 0 19. Forkert input, a 20. Forkert input, b 21. Forkert input, c 22. Manglende input, a 23. Manglende input, a 24. Manglende input, a 25. Tre sider > 0, en = de to andre 26. Anden perm. 27. Tredie perm. 28. Fjerde perm. 29. Femte perm. Sjette perm. 31. Tre sider med max længde 32. To sider med max længde, + 33. To sider med max længde, – Test casene med fed er ikke relevante i OO-versionen. © Michael E. Caspersen COT-konference, 3. maj 2000

10 Samme eksempel En moderne reformulering:
Anvis en testplan for en klassen Triangle. © Michael E. Caspersen COT-konference, 3. maj 2000

11 Klassemodel Fra [Meyer, 97], pp. 467. © Michael E. Caspersen
COT-konference, 3. maj 2000

12 Klassen Triangle class Triangle extends Polygon {
public Triangle(LineSegment a, // constructor LineSegment b, LineSegment c); public void setA(LineSegment a); // setters public void setB(LineSegment b); public void setC(LineSegment c); public LineSegment getA(); // getters public LineSegment getB(); public LineSegment getC(); public boolean isScalene(); // predicates public boolean isIsoceles(); public boolean isEquilateral(); public void draw(int r, int g, int b); // Figure public void erase(); // Figure public float area(); // Closed public float perimeter(); // Closed public Point center(); // Closed } © Michael E. Caspersen COT-konference, 3. maj 2000

13 Ekstra test for OO-løsning
Yderligere 32 test cases Kan ikke umiddelbart sammenlignes med den procedurelle! 34. Constructor 35. Test af prædikaterne 36. Max og min værdi for linierne 37. Gentag test 38. Gentag efter perm. af linier 39. Gentag efter erase 40. Gentag efter draw 41. Gentag mere end en gang 42. En et-punkts linie 43. To et-punkts linier 44. Tre et-punkts linier 45. To sider med max længde, en 1 46. To ikke-skærende linier 47. To sammenfaldende linier 48. Tre sammenfaldende linier 49. To skærende linier 50. To parallelle linier 51. Tre linier der skærer i et punkt 52. Tre parallelle linier 53. Tre ikke-X og ikke-II linier 54. Tre linier der danner indre trekant 55. Tre linier med to skæringer 56. Tre linier med en skæring 57. Tre max-længde linier 58. Tre min-længde linier 59. En linie der ligger på randen 60. To linier der ligger på randen 61. Tre linier der ligger på randen 62. To linier der X fra randen 63. Alle metoder fra Figure ok 64. Alle metoder fra Closed ok 65. Alle metoder fra Polygon ok Første del: tilstand; anden del: indkapsling; tredie del: arv og polymorfi. © Michael E. Caspersen COT-konference, 3. maj 2000

14 Hvad lærte vi af eksemplet
Metoder er ikke øer Test i konteksten af hele klassen Objekter har tilstand Test forskellige rækkefølger af metodekald Objekter holder på hemmeligheder En klasse kan være realiseret i termer af andre klasser hvilket gør aftestning mere omfattende Objekters opførsel ændres Dynamisk binding gør at objekter på forskellige tidspunkter kan udvise forskellig opførsel © Michael E. Caspersen COT-konference, 3. maj 2000

15 Systematisk OO-test Skabelon for testklasse (driver)
class TestMyClass { run() { setup(); runTest(); tearDown(); } setup() { ... } tearDown() { ... } runTest() { ... } © Michael E. Caspersen COT-konference, 3. maj 2000

16 Elaboreret OO-test Composite © Michael E. Caspersen
COT-konference, 3. maj 2000

17 Problemer i OO-test I udgangspunktet er test af objektorienteret software gjort væsentligt nemmere indkapsling bedre arkitektur/ansvarsfordeling Der er imidlertid OO-områder som kræver særlig opmærksomhed Indkapsling Arv Polymorfi © Michael E. Caspersen COT-konference, 3. maj 2000

18 Problemer, indkapsling
Indkapsling tæller næsten udelukkende på plussiden! Der er dog et lille ”aber dabei” som kræver systematisk håndtering. Hvordan laves white-box test hvis man ikke må tilgå private variabler? © Michael E. Caspersen COT-konference, 3. maj 2000

19 ”Løsninger”, indkapsling
Specielle test metoder ÷ Specielle test subklasser ÷ Testklasser er friend (+) C++ Testklasser ligger i samme pakke + Java class TestMyClass { public run(); private MyClass& c; ... } class MyClass { private ... package ... Java class TestMyClass { public: run(); private: MyClass& c; ... } class MyClass { friend TestMyClass; C++ © Michael E. Caspersen COT-konference, 3. maj 2000

20 Arv En subklasse arver egenskaber (attributter og metoder) fra sin superklasse. Superklassen er testet, men arvede metoder må testes på ny! Hvorfor? Hvad skal testes på ny? Terminologi Simpel arv: udvider, men redefinerer ikke opførsel Subtyping: redefinerer, men overholder spec. Subclassing: anarki (begrænsning, nye spec., etc.) © Michael E. Caspersen COT-konference, 3. maj 2000

21 Problemer, simpel arv Nye funktioner i subklasser kan ændre tilstanden af arvede variabler. Dette kan bevirke at metoder i superklassen ikke længere virker efter hensigten. Løsning: afskærm tilstanden med ”private”. © Michael E. Caspersen COT-konference, 3. maj 2000

22 Polymorfi Virtuelle funktioner
class A { public: virtual foo() { ... } }; class B : public A { En redefineret virtuel funktion kan ødelægge egenskaber ved superklassen © Michael E. Caspersen COT-konference, 3. maj 2000

23 Begrænsning til subtyping
Behavioral subtyping Alle redefinerede metoder har mindst samme opførsel som i superklassen. Med behavioral subtyping kan vi garantere at klientkode der virker med superklassen også virker med subklassen. Men der skal naturligvis testes! © Michael E. Caspersen COT-konference, 3. maj 2000

24 Genbrug af test ved subtyping
Klassifikation af ændringer 1., 2. og 3. grad 1. grad: Arvede metoder Begrænset test 2. grad: Redefinerede metoder Genbrug af black-box test Ny white-box test 3. grad: Nye metoder Fuldstændig test © Michael E. Caspersen COT-konference, 3. maj 2000

25 Teknikker til OO-test Software-elementer og OO-test
En uniform tilgang til OO-test OO-test = Package test Design by Contract pre- og post-betingelser klasseinvarianter © Michael E. Caspersen COT-konference, 3. maj 2000

26 Software-elementer og OO-test
I et objektorienteret program er der to slags moduler klasser pakker (samlinger af klasser) Klasse med operationer Pakke: samling af klasser © Michael E. Caspersen COT-konference, 3. maj 2000

27 OO test = pakketest Systemtest: Test af applikationen
Integrationstest: Test af pakker Unit test: Test af basale pakker © Michael E. Caspersen COT-konference, 3. maj 2000

28 Et kontinuum af test Systemtest Integrationstest Unit test
Test af systemet (use cases) Test af mest afhængige pakker ... Integrationstest Test af næstmindst afhængige pakker Test af de mindst afhængige pakker Unit test Test af uafhængige klasser © Michael E. Caspersen COT-konference, 3. maj 2000

29 Klassediagram med pakker
X Y Z V U W © Michael E. Caspersen COT-konference, 3. maj 2000

30 Pakke-afhængigheder 4 Y 3 X 2 Z V 1 U W © Michael E. Caspersen
COT-konference, 3. maj 2000

31 OO pakke test På alle niveauer testes pakker med klasser Mål Unit test
Uafhængige Afhængige Mål Test bør være det samme på alle niveauer Unit test Metoder ? Klasser ? Niveau-0 pakker ? © Michael E. Caspersen COT-konference, 3. maj 2000

32 Design by Contract Invariant for hver klasse
Tilstandsmaskine for hver klasse Pre- og post-betingelse for hver metode Assertions (udsagn) udvalgte steder i koden Assertions skal kunne slås til og fra, men... Hele ideen om at ville slå check fra i produktionssoftware er dybest set absurd. Hvad tænker vi om en sejler der kun har redningsvesten på på land og tæt på kysten, men som når det virkelig gælder på åbent hav har ladet redningsvesten blive hjemme? C. A. R. Hoare © Michael E. Caspersen COT-konference, 3. maj 2000

33 Specifikationen er en kontrakt
Kontraktperspektivet To parter Gensidige fordele Gensidige forpligtigelser Service Forpligtigelser Fordele Skal opfylde pre-betingelse Kan antage post-betingelse Klient Skal opfylde post -betingelse Kan antage pre -betingelse Udbyder © Michael E. Caspersen COT-konference, 3. maj 2000

34 Contravariance i pre-betingelsen Covariance i postbetingelsen
Behavioral subtyping class A { public: virtual ... foo(...); // pre: QA // post: RA }; class B : public A { // pre: QB // post: RB A* x = new ...; {Q} x->foo(...); {R} QA RA QB RB foo QA  QB RA  RB Contravariance i pre-betingelsen Covariance i postbetingelsen © Michael E. Caspersen COT-konference, 3. maj 2000

35 Klasseinvariant for Triangle
class Triangle extends Polygon { // class invariant: // // A triangle is valid if and only if: // // 1. a.length > 0 , b.length > 0 , c.length > 0 // 2. s > a.length , s > b.length , s > c.length // where s = (a.length + b.length + c.length)/2 // 3. The line segments a, b and c forms a triangle public Triangle(LineSegment a, // constructor LineSegment b, LineSegment c); public void setA(LineSegment a); // setters public void setB(LineSegment b); public void setC(LineSegment c); ... } © Michael E. Caspersen COT-konference, 3. maj 2000

36 Om klasseinvarianter Konstruktøren etablerer invarianten,
hver metode bevarer den. true konstruktør rep-inv metode Triangle: Halvdelen af testcasene indfanges af invarianten © Michael E. Caspersen COT-konference, 3. maj 2000

37 Tilstandsmaskiner N-elements kø, N > 1: tre tilstande E M F
Lovlige i alle tilstande: size isFull isEmpty enqueue enqueue dequeue M enqueue dequeue dequeue F Kan danne grundlag for black-box test © Michael E. Caspersen COT-konference, 3. maj 2000

38 Tests rolle i processen
Kravspec Analyse Design Evaluering Implemen- tering System Inkrementel udvikling består af en række (korte) cykler med review efter hver iteration. © Michael E. Caspersen COT-konference, 3. maj 2000

39 Krav og evaluering Krav Evaluering Krav:
Enhver iteration skal opfylde krav der stilles før iterationen Evaluering Evaluering i forhold til de stillede krav Fastlæggelse af krav til næste iteration Krav: GUI krav: nye skærmbilleder/flere detaljer Mere funktionalitet Definition af testkrav: Black-box og white-box scenarier Grænsetilfælde Externe/interne scenarier ... Dokumentation bør ligeledes integreres © Michael E. Caspersen COT-konference, 3. maj 2000

40 Kent Beck & Eric Gamma JUnit: et framework der understøtter test
Test skrives som en del af udviklingsfasen I form af separate test-klasser Skriv testklassen før den ”rigtige” klasse! Korte mini-iterationer Begynd med et lille test eksempel Skriv koden der skal testes Udvid testen Udvid koden Gentag ... Test-first-style: giver mindre og bedre klasser og metoder! © Michael E. Caspersen COT-konference, 3. maj 2000

41 Konklusion Test kan systematiseres og organiseres efter objektorienterede principper. Design by Contract er nøglen til godt design samt systematisering og simplificering af test. Ved udvikling af objektorienteret software bør test gøres til drivmidlet i udviklings-processen. © Michael E. Caspersen COT-konference, 3. maj 2000

42 Resultat af vores arbejde
Rapport der Sammenfatter centrale problemstillinger i forbindelse med OO-test Giver anvisninger på konkrete teknikker til at imødegå problemerne Illustrerer teknikkerne vha. et overskueligt eksempel Rapporten er snart tilgængelig på © Michael E. Caspersen COT-konference, 3. maj 2000


Download ppt "Objektorienteret Software Test"

Lignende præsentationer


Annoncer fra Google