Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
1
Programmieren204– TestenundTestautomatisierung
BachelorMedieninformatikSommersemester2016
2
§ ...denktjederProgrammierer,deretwasfertiggestellthat
§ Wennerselbstnichtordentlichtestet,findenanderedieFehler§ imungünstigstenFallderKunde§ imschlimmstenFalldieKriminologenundGerichtsmediziner
DasProgrammfunktioniertsuper!
3
§ ProgrammierenerfordertSorgfalt!§ AuchwinzigeFehlerhabenFolgen§ BeispielMariner1§ Fehlerwerdenofterstspäterentdeckt§ BeispielAriane5
§ WasleistetTesten?§ FehlerhaftigkeitdesCodesbeweisen§ KorrektheitdesCodesbeweisen?à NEIN – aberdieAbwesenheitvorhersehbarerSchwachstellennachweisen
Testenwozu?
4
§ VenussondeMariner1 (1962)§ nach290sec.wegenFlugbahnabweichungkontrolliertzerstört
Mariner1
FORTRAN-Code:
DO5K=1.3stattDO5K1,3
àDO5K=1.3nutzloseVariablenzuweisungstattSchleife!!
BeispielausVingenshow,ObjektorientiertesTesten
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
6
§ TestenerfordertPhantasieundErfahrung§ "kannnichtpassieren"isteineTabu-Aussage!§ Esgibtdas"Gespür"desTesters
§ aberdaraufkannmansichnichtverlassen!§ beieinerProbefahrtfallenauchnichtalleMängelauf...
§ AmEndehilftnursystematischesTesten:§ Testwert-Tabellen§ Testwert-Generatoren§ SammelnvonTestfällen
Test-Propheten
7
§ ManuellerTest:§ Eingabe/Aufrufmachen§ "gucken",obdaserwarteteVerhlatenvorliegt.§ Vorteil:InutitiondecktUnerwartetesauf§ Problem:Abdeckung,Wiederholbarkeit,Ermüdung
§ Verhaltensbeobachtung:§ TestausgabenindenCodestreuen§ AblaufimDebuggernachverfolgenundbewerten§ Vorteil:TestausgabenundBreakpointswiederverwendbar§ Problem:AufwandundAufmerksamkeit
Testtechniken
7
8
§ DieTestfällewerdenprogrammiert§ DieEntscheidungüberGelingenundScheiternwirdebenfallsautomatisiert
§ Nachteil:Programmieraufwand§ Vorteil:Beliebigvielbeliebigoftwiederholbar
AutomatisierterTest
Programmier-aufwand
Wiederhol-barkeit
9
§ ImveraltetenWasserfallmodellderSoftware-EntwicklungkommtderSystemtestganzamEnde.
§ TopoderFlop,wennallesschongetanist!§ vieleFehler"imInneren"bleibenunentdeckt§ HeutewirdwährendderEntwicklung
immerdasganzeSystemgetestet
TestenwährendderEntwicklung!
9
Analyse
Spezifi-kation
Entwurf
Implemen-tierung
Systemtest
Inbetrieb-nahme
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
11
§ JedeKlassebesitzteinemain-MethodezumModultest§ TestenallerexportiertenMethoden§ TestenderinnerenDatenstuktur
§ BautaufandereKlassenauf,§ diealsgetestetangenommenwerden
Modultestsmitmain-Methoden
11
SupportLine
InputReader Responder
ResponseMap
MapElement
12
§ EinJUnit-TestCaseisteineKlasse,dieeineandereKlassetestet
§ TestCaseenthältTests– Methoden,derenErgebnisspezifiziertistundvonJUnintüberprüftwird:
§ TestCaseenthältFixtures,mitdenenTestbedingungengeschaffen(undaufgelöst)werden:
TestautomatisierungmitJUnit
12
13
§ TestCaseerzeugen:New>JUnitTestCase§ Name=<Klasse>Test§ Paket=tests
§ TestCaseausführen§ mitRunAsJUnitTest
BenutzunginEclipse
13
14
§ Forderung:EinMapElementdarfnichtzweiNull-Parameterhaben!
§ TestCase
SupportLine:MapElement
Testscheitert– eswirdkeineException
geworfen
gescheitert(rot)
15
§ "Repariert"(alsBeispiel,überdenSinnkannmanstreiten)
GelungenerTest
15
Testwiederholen(Rerun)gelungen(grün)
16
§ ContainssolltebeliebigeStringskorrektverarbeiten,aber keinenleerenundkeinennull-Keyakzeptieren!
WeitermitderResponseMap
16
17
§ DatenstrukturistArrayList<MapElement> responseList
§ AktuelleLösung
§ Korrektur:
Wasklapptnichtbei"contains"?
17
repariert
18
§ LeerenStringabfangen:
ZweitesProblem:leererStringalsKey
18
Hinweis:DieVerwendungvonuncheckedExceptionsistzunächsteinfacher,mussaberspäternocheinmalüberdachtwerden!
19
§ put(null,null)sollteExceptionwerfen:
§ aber:
§ Grund:irgendwannmal"ausgeblendet"
Wirdein(null,null)-Eintragverhindert?
19
20
ProblemimletztenBeispiel:§ VordemTestlaufvonResponseMaphätteeinTestlauffür
MapElementdurchgeführtwerdenmüssen!
§ Wasgesternnochfunktionierte,kannheuteschonProblememitsichbringen(Ariane5!)
§ Abhilfe:NachjederÄnderungALLESdurchtesten.§ EinHochaufdieTestautomatisierung....
§ Regressionstest=NachjederVeränderungwiederaufdiealtenTestszurückkommen.
Regressionstest
21
§ AlleTestsvonHandnacheinanderlaufenzulassen,ist§ mühsam§ fehlerträchtig
§ AutomatisierungalsTest-Suite-Klasse§ üblicherweiseAllTestsgenannt:
ALLESdurchtesten– Test-Suiten
21
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
23
JUnit-Test-Annotationen
23Quelle:http://www.vogella.com/tutorials/JUnit/article.html
24
JUnitAssert-Statements
24
Quelle:http://www.vogella.com/tutorials/JUnit/article.html
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
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
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
28
§ MankanndieFragendurchKommentarebeantworten§ ImTDDwirdausjederFrageeinenTestfallmitdefiniertemAusgangmachen§ Dasistgenauer§ DasistfürsTestensofortnützlich§ FragenundUnklarheitenwerdenaufdenPunktgebracht
§ TDDbedeutet:§ erstdieTestfällefestlegen§ dannimplementieren§ danntesten
SpezifikationdurchTestfälle
28
29
§ Forderung:EinMapElementdarfnichtzweiNull-Parameterhaben!
§ TestCase
FalscheForderungimnachträglichenTest
Testscheitert– eswirdkeineException
geworfen
gescheitert(rot)
ForderungimSupportline—ontext (Gesamtsystem):EinMap-Elementdarfkeinennull-Schlüsselhaben,wennderWertnichtnullist.
30
§ DasBeispielzeigt:§ nachträglichformuliertmanleichtfalscheBedingungen
§ SpezifikaitiondurchTestfällebedeutet§ Präzisierung§ frühzeitigesNachdenkenüberGrenzfälle
à TDDistführtzubesseremCodeà denTester-Blickbrauchtmantrotzdem
TDDistbesser
30
TDDistStandardinderagilenEntwicklung!
31
...undtrotzallerAutomatisierung:DerTestermitdem"Riecher"wird
gebraucht
AbjetztwirdjederCodegetestet!
J
31