Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in...
Transcript of Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in...
![Page 1: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/1.jpg)
1
Programmieren204– TestenundTestautomatisierung
BachelorMedieninformatikSommersemester2016
![Page 2: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/2.jpg)
2
§ ...denktjederProgrammierer,deretwasfertiggestellthat
§ Wennerselbstnichtordentlichtestet,findenanderedieFehler§ imungünstigstenFallderKunde§ imschlimmstenFalldieKriminologenundGerichtsmediziner
DasProgrammfunktioniertsuper!
![Page 3: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/3.jpg)
3
§ ProgrammierenerfordertSorgfalt!§ AuchwinzigeFehlerhabenFolgen§ BeispielMariner1§ Fehlerwerdenofterstspäterentdeckt§ BeispielAriane5
§ WasleistetTesten?§ FehlerhaftigkeitdesCodesbeweisen§ KorrektheitdesCodesbeweisen?à NEIN – aberdieAbwesenheitvorhersehbarerSchwachstellennachweisen
Testenwozu?
![Page 4: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/4.jpg)
4
§ VenussondeMariner1 (1962)§ nach290sec.wegenFlugbahnabweichungkontrolliertzerstört
Mariner1
FORTRAN-Code:
DO5K=1.3stattDO5K1,3
àDO5K=1.3nutzloseVariablenzuweisungstattSchleife!!
BeispielausVingenshow,ObjektorientiertesTesten
![Page 5: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/5.jpg)
5
§ BewährteTrägerrakete§ Ariane5(1996)deutlichschubstärkeralsihreVorgänger§ FehlerhafteFlugbahnkorrekturum20° führtezurSprengungnach30sec
Ariane5
5
BeispielausVingenshow,ObjektorientiertesTesten
ADA-Code:
VieleJahrelangzuverlässigfunktioniertà keineneueTestreihe
ErhöhteSchubstärkeführtezumZahlenüberlauf, dernichtabgefangenwurde
![Page 6: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/6.jpg)
6
§ TestenerfordertPhantasieundErfahrung§ "kannnichtpassieren"isteineTabu-Aussage!§ Esgibtdas"Gespür"desTesters
§ aberdaraufkannmansichnichtverlassen!§ beieinerProbefahrtfallenauchnichtalleMängelauf...
§ AmEndehilftnursystematischesTesten:§ Testwert-Tabellen§ Testwert-Generatoren§ SammelnvonTestfällen
Test-Propheten
![Page 7: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/7.jpg)
7
§ ManuellerTest:§ Eingabe/Aufrufmachen§ "gucken",obdaserwarteteVerhlatenvorliegt.§ Vorteil:InutitiondecktUnerwartetesauf§ Problem:Abdeckung,Wiederholbarkeit,Ermüdung
§ Verhaltensbeobachtung:§ TestausgabenindenCodestreuen§ AblaufimDebuggernachverfolgenundbewerten§ Vorteil:TestausgabenundBreakpointswiederverwendbar§ Problem:AufwandundAufmerksamkeit
Testtechniken
7
![Page 8: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/8.jpg)
8
§ DieTestfällewerdenprogrammiert§ DieEntscheidungüberGelingenundScheiternwirdebenfallsautomatisiert
§ Nachteil:Programmieraufwand§ Vorteil:Beliebigvielbeliebigoftwiederholbar
AutomatisierterTest
Programmier-aufwand
Wiederhol-barkeit
![Page 9: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/9.jpg)
9
§ ImveraltetenWasserfallmodellderSoftware-EntwicklungkommtderSystemtestganzamEnde.
§ TopoderFlop,wennallesschongetanist!§ vieleFehler"imInneren"bleibenunentdeckt§ HeutewirdwährendderEntwicklung
immerdasganzeSystemgetestet
TestenwährendderEntwicklung!
9
Analyse
Spezifi-kation
Entwurf
Implemen-tierung
Systemtest
Inbetrieb-nahme
![Page 10: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/10.jpg)
10
§ Beispiel Filmregister:§ AußenverhaltenimTestrichtig
§ EintragenundFindenklapptindenTests§ trotzfehlerhafterinnererStruktur:
§ "Abeautiful Mind"ungleich"ABeautiful Mind"§ zweiEinträge,dienichtgemeinsamaktualisiert
werden§ irgendwannspäterfliegendieFehlerauf!
NichtnurdasGesamtsystemtesten!
10
Analyse
Spezifi-kation
Entwurf
Implemen-tierung
Systemtest
Inbetrieb-nahme
![Page 11: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/11.jpg)
11
§ JedeKlassebesitzteinemain-MethodezumModultest§ TestenallerexportiertenMethoden§ TestenderinnerenDatenstuktur
§ BautaufandereKlassenauf,§ diealsgetestetangenommenwerden
Modultestsmitmain-Methoden
11
SupportLine
InputReader Responder
ResponseMap
MapElement
![Page 12: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/12.jpg)
12
§ EinJUnit-TestCaseisteineKlasse,dieeineandereKlassetestet
§ TestCaseenthältTests– Methoden,derenErgebnisspezifiziertistundvonJUnintüberprüftwird:
§ TestCaseenthältFixtures,mitdenenTestbedingungengeschaffen(undaufgelöst)werden:
TestautomatisierungmitJUnit
12
![Page 13: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/13.jpg)
13
§ TestCaseerzeugen:New>JUnitTestCase§ Name=<Klasse>Test§ Paket=tests
§ TestCaseausführen§ mitRunAsJUnitTest
BenutzunginEclipse
13
![Page 14: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/14.jpg)
14
§ Forderung:EinMapElementdarfnichtzweiNull-Parameterhaben!
§ TestCase
SupportLine:MapElement
Testscheitert– eswirdkeineException
geworfen
gescheitert(rot)
![Page 15: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/15.jpg)
15
§ "Repariert"(alsBeispiel,überdenSinnkannmanstreiten)
GelungenerTest
15
Testwiederholen(Rerun)gelungen(grün)
![Page 16: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/16.jpg)
16
§ ContainssolltebeliebigeStringskorrektverarbeiten,aber keinenleerenundkeinennull-Keyakzeptieren!
WeitermitderResponseMap
16
![Page 17: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/17.jpg)
17
§ DatenstrukturistArrayList<MapElement> responseList
§ AktuelleLösung
§ Korrektur:
Wasklapptnichtbei"contains"?
17
repariert
![Page 18: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/18.jpg)
18
§ LeerenStringabfangen:
ZweitesProblem:leererStringalsKey
18
Hinweis:DieVerwendungvonuncheckedExceptionsistzunächsteinfacher,mussaberspäternocheinmalüberdachtwerden!
![Page 19: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/19.jpg)
19
§ put(null,null)sollteExceptionwerfen:
§ aber:
§ Grund:irgendwannmal"ausgeblendet"
Wirdein(null,null)-Eintragverhindert?
19
![Page 20: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/20.jpg)
20
ProblemimletztenBeispiel:§ VordemTestlaufvonResponseMaphätteeinTestlauffür
MapElementdurchgeführtwerdenmüssen!
§ Wasgesternnochfunktionierte,kannheuteschonProblememitsichbringen(Ariane5!)
§ Abhilfe:NachjederÄnderungALLESdurchtesten.§ EinHochaufdieTestautomatisierung....
§ Regressionstest=NachjederVeränderungwiederaufdiealtenTestszurückkommen.
Regressionstest
![Page 21: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/21.jpg)
21
§ AlleTestsvonHandnacheinanderlaufenzulassen,ist§ mühsam§ fehlerträchtig
§ AutomatisierungalsTest-Suite-Klasse§ üblicherweiseAllTestsgenannt:
ALLESdurchtesten– Test-Suiten
21
![Page 22: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/22.jpg)
22
§ TestCase(nichtannotiert):§ KlassemiteinerMengevonTests (ohneReihenfolge!)undFixtures§ typischerweiseeinerKlassezugeordnet
§ Fixture ("Inventar")§ OperationenvorundnacheinemTestbzw.allenTestseinesTestcase§ @Before,@BeforeClass,@After,@AfterClass
§ Test§ @Test§ Methode,derenErgbenisvonJUnitüberprüftwird§ mitexpects,assert,failGelngen/Scheiternspezifiziert
§ TestSuite§ @RunWith(Suite.class)§ @Suite.classes({...})§ KlasseheißttypischerweiseAllTestsundistleer.§ TestCaseswerdenindergegebenenReihenfolgedurchgeführt
JUnitimÜberblick
22
![Page 23: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/23.jpg)
23
JUnit-Test-Annotationen
23Quelle:http://www.vogella.com/tutorials/JUnit/article.html
![Page 24: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/24.jpg)
24
JUnitAssert-Statements
24
Quelle:http://www.vogella.com/tutorials/JUnit/article.html
![Page 25: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/25.jpg)
25
§ UnitTestssindheuteeinMUSSinderSoftware-Entwicklung§ UrsprunginderAgilenSoftware-Entwicklung(xp)§ AllgemeinüblichinderOpenSource-Entwicklung:
§ große,weltweiteEntwicklergemeinde§ jedermussgründlichtesten,eheereineÄnderungveröffentlicht§ aufdemServerlaufenautomatischeAkzeptanztests,diefürjede
veröffentlichteÄnderunggefahrenwerden§ JUnitistselbsteinOpenSource-Projekt
§ Automatisierunggehtnochweiter:§ WerkzeugezumCompilierenundBereitstellenführenautomatische
Testsaus(Hudson,Jenkins...)§ "NightlyBuild"– JedeNachteinenneue,durchgetesteteVersionder
Software.
IstdasPraxis?
25
![Page 26: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/26.jpg)
26
§ UnitTests(Modultests)sindzunächsteinKonzeptderobjektorientiertenProgrammierung§ SUnitfürSmalltalkwarderPrototyp
§ InähnlicherFormfüralleOO-Sprachenvorhanden§ NUnitfürdas.NET-Framework,PHPUnitfürPHP,
CppUnitfürC++,DUnit fürDelphi,QUnitfürJavaScript,etc.
§ AlsKonzeptauchfürandereSprachenundgrafischeOberflächenweitergeführt
§ GroßeTestframeworksfürheterogeneProjekte§ SeleniumfürWebanwendungen
NurfürJava?
26
![Page 27: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/27.jpg)
27
§ EinAPIoderKlasseninterfacewirftvieleFragenauf:BeispielMovieRegister-Interface§ WassollbeimEintrageneinesleerenTitelspassieren?§ Wassollpassieren,wennderenglischeundderdeutscheTitelgleich
sind?§ Wassollpassieren,wennaddMovie()füreinenbereitsvorhandenen
Filmaufgerufenwird?§ Wassollpassieren,wennbeiupdateMovie eineleereSchauspielerliste
angegebenwird,dievorhandeneabernichtleerist?§ Darfmanmitcontainsauchnachnullund""suchen?§ DarfeinTitelbeliebigeSonderzeichen enthalten?§ WiegenaumüssenTitelübereinstimmen,damitsieidentifiziertwerden
(Groß/Kleinschreibung,Leerzeichen,Tippfehler)?§ WiesolldasSystem"fastgleiche"Titelbehandeln?§ .....
TestDrivenDevelopment(TDD)
27
![Page 28: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/28.jpg)
28
§ MankanndieFragendurchKommentarebeantworten§ ImTDDwirdausjederFrageeinenTestfallmitdefiniertemAusgangmachen§ Dasistgenauer§ DasistfürsTestensofortnützlich§ FragenundUnklarheitenwerdenaufdenPunktgebracht
§ TDDbedeutet:§ erstdieTestfällefestlegen§ dannimplementieren§ danntesten
SpezifikationdurchTestfälle
28
![Page 29: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/29.jpg)
29
§ Forderung:EinMapElementdarfnichtzweiNull-Parameterhaben!
§ TestCase
FalscheForderungimnachträglichenTest
Testscheitert– eswirdkeineException
geworfen
gescheitert(rot)
ForderungimSupportline—ontext (Gesamtsystem):EinMap-Elementdarfkeinennull-Schlüsselhaben,wennderWertnichtnullist.
![Page 30: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/30.jpg)
30
§ DasBeispielzeigt:§ nachträglichformuliertmanleichtfalscheBedingungen
§ SpezifikaitiondurchTestfällebedeutet§ Präzisierung§ frühzeitigesNachdenkenüberGrenzfälle
à TDDistführtzubesseremCodeà denTester-Blickbrauchtmantrotzdem
TDDistbesser
30
TDDistStandardinderagilenEntwicklung!
![Page 31: Prg2-04-Testen und Testautomatisierung · 2016-04-04 · § mit Run As JUnit Test Benutzung in Eclipse 13. 14 § Forderung: Ein MapElement darf nicht zwei Null-Parameter haben! §](https://reader033.fdokument.com/reader033/viewer/2022042913/5f4be62e6faebc48d001c942/html5/thumbnails/31.jpg)
31
...undtrotzallerAutomatisierung:DerTestermitdem"Riecher"wird
gebraucht
AbjetztwirdjederCodegetestet!
J
31