TDD – Test Driven Development
Testgetriebene Entwicklung ist eine Methode der agilen Softwareentwicklung. Hier erstellen Entwicklerinnen und Entwickler Unit-Tests konsequent vor den zu testenden Code-Abschnitten bzw. Komponenten. Mittels Unit-Tests lassen sich Funktionen darauf überprüfen, ob sie wie beabsichtigt arbeiten. Dies kann sowohl manuell als auch automatisiert erfolgen. Dabei ist erwähnenswert, dass das Anwenden von Unit-Tests nicht zwingend mit der testgetriebenen Entwicklung gleichgestellt werden muss, denn Unit-Tests können auch nachträglich implementiert werden.
Unit Tests
ABAP Unit ist ein zentraler Bestandteil der SAP-Entwicklungsumgebung. Es wird in Eclipse als auch in der SAP-internen Entwicklungsumgebung SE80 unterstützt. Unit Tests werden in einer gesonderten Laufzeitumgebung durchgeführt, die den Entwickelnden eine Vielzahl an Optionen und Diagnosemöglichkeiten bietet.
Unit Tests machen den Unterschied zwischen testen und ausprobieren. Während man als Entwickelnder gerne die Logik mit einzelnen Parametern auszuprobiert (Testprogramm oder Debugging), können Unit Tests alle bereits definierten Kombinationen von Eingangsparametern und deren Ergebnisse mit einem Klick auf Korrektheit überprüft werden. Durch die Vielzahl von definierten Ausgangssituationen hat man die Sicherheit, dass diese nach Änderungen (Bug-fixing, geänderten Anforderungen oder Refactoring) immer noch das gewünschte Ergebnis liefern – und zwar alle, nicht nur die zwei, drei oder fünf, die man nach einer Änderung ausprobiert.
Wie sinnvoll Unit Tests sind, merkt man spätestens, wenn man auf Coding stößt, dass in etwa so aussieht:
IF i_vkorg = ‚1000‘ or i_vkorg = ‚1100‘ or i_vkorg = ‚2100‘.
IF i_vtweg(1) = ‚1‘ AND i_auart = ‚TA‘.
result = ‚A‘.
ELSE.
IF i_auart = ‚ZTA‘ and i_vtweg = ’20‘.
result = ‚B‘.
ENDIF.
ENDIF.
ELSEIF i_vkorg = ‚2200‘ AND ( i_auart = ‚TA‘ or i_auart = ‚ZTA‘ ).
result = ‚C‘.
ENDIF.
Bei so einem Coding ist es ohne Forschungsarbeit kaum ersichtlich, bei welchen Konstellationen welcher Wert geliefert werden soll. Bei notwendigen Änderungen ist es nicht unwahrscheinlich, dass die Logik bei bestimmten Konstellationen nicht mehr wie ursprünglich gewünscht arbeitet. Unit Tests machen das Coding zwar nicht übersichtlicher, aber sie definieren exakt, welche Parameter welches Ergebnis ergeben sollen. Bei einer Änderung kann ich als Entwickelnder also einerseits neue Anforderungen einbauen und andererseits ein Refactoring durchführen – beides mit der Sicherheit, dass die vorhandene Logik immer noch funktioniert.
Das Gute an Unit Tests ist: Sie können nachträglich zu einer Klasse definiert werden, ohne die Logik der Klasse selbst zu beeinflussen. Ich kann also beispielsweise einen Unit Test für folgende Konstellation erstellen:
Stelle sicher, dass bei der Behauptung (engl.: assert) i_vkorg = ‚1000‘, i_vtweg = ’10‘ und i_auart = ‚TA‘ der Wert „A“ herauskommt. Das Ergebnis dieser Behauptung kann ich mit einem Tastendruck verifizieren. In Verbindung mit vielen weiteren Unit Tests ergibt sich ein Sicherheitsnetz, das Programmierenden die Gewissheit gibt, dass eine vorhandene Geschäftslogik nicht unbeabsichtigt verändert wurde.
Vor- und Nachteile
Da das schrittweise Lösen von Problemen mit gleichzeitigem Testen im Allgemeinen nicht die Art ist, wie man das Programmieren erlernt, sind viele Entwicklerinnen und Entwickler das Anwenden von Unit-Tests nicht gewohnt. So gehen viele davon aus, dass das Implementieren von Unit-Tests einen hohen Aufwand mit sich bringt. Die Aussage ist zwar richtig, lässt sich jedoch entkräften, denn Unit-Tests bilden ein Sicherheitsnetz, das Änderungen sicherer machen. Werden Änderungen im Code durchgeführt, dann sind Fehler schnell und präzise lokalisierbar. Dadurch erspart man sich Zeit und Nerven bei der Suche nach der Nadel im Heuhaufen und durch das manuelle Ausführen von Geschäftsprozessen. Ein weiterer Vorteil, der daraus resultiert: Der Kunde spart Kosten ein, da in Bezug auf zukünftige Entwicklungen weniger Aufwand beim Testen betrieben werden muss. Zudem fördern das Schreiben der Tests die eigene Entwicklung, denn die Codequalität verbessert sich durch das gedankliche Arbeiten sowie Auseinandersetzen mit dem Code, da dieser ständig überdacht wird.
Ein Nachteil der Unit-Tests besteht darin, dass Entwickelnde diese falsch einsetzen könnten und somit eine trügerische Sicherheit vorgegaukelt wird. Außerdem entsteht ein Initialaufwand, der bei der Kalkulation von Softwareprojekten zu beachten ist. Weiter müssen sich Entwicklerinnen und Entwickler im Klaren darüber sein, dass Unit-Tests nur die Funktionalität des Source Codes prüfen. Die Performance und Usability fallen nicht in das Gebiet von Unit-Tests. Private Methoden werden in der Regel nicht getestet, da die Testklassen nur die Schnittstelle von öffentlichen Methoden testen.
Unit-Tests im ABAP Umfeld
Die SAP bietet für Unit-Tests das sogenannte Test Framework „ABAP Unit”. Dieses ist Teil des ABAP-Stacks seit Web AS 6.40 und ist komplett in die ABAP Workbench sowie Eclipse integriert. ABAP Entwickelnde dürfen sich in nahezu jedem Release über eine dynamische Weiterentwicklung des Testframeworks freuen.
Fazit
Unit-Tests sind ein mächtiges Werkzeug, das sich in der Softwareentwicklung bewährt hat. Nachdem ein Umdenken und Verinnerlichen der neuen Vorgehensweise in der Entwicklung stattgefunden hat, steigert sich die Source Code Qualität, während sich der Arbeitsaufwand proportional dazu verringert. Das spart nicht nur Zeit, sondern auch Kosten.
Weiterbildung in Hannover
Für Entwicklerinnen und Entwickler, die sich für die Thematik des Test Driven Developments interessieren, bietet die Inwerken AG verschiedene Events wie bspw. den „ABAP CodeRetreat“ oder die „SAP CodeJam“, wo man entweder die Technik anwendet oder sich in einem Vortag bestens über die Thematik informieren kann. Wir freuen uns stets über neue Gesichter! Außerdem erwarten Sie zwei weitere Blogbeiträge, die sich mit ABAP in Eclipse und der Implementierung von Unit-Test-Beispielen beschäftigen.
Fragen und Kontakt
Haben Sie Rückfragen zu Unit-Tests? Einfach schreiben an sapentwicklung@inwerken.de. Unser SAP-Entwicklungs-Team meldet sich bei Ihnen! Leistungen darüber hinaus finden Sie in unserem Portfolio.
Seit 2000 beraten wir Unternehmen dabei SAP®-Prozesse effizienter zu gestalten und IT-Lösungen wirkungsvoll einzusetzen. Als erfahrener Partner für SAP®-Beratung und -Entwicklung, S/4HANA®-Conversions, IT-Services und allgemeine Unternehmensaufgaben im Kontext der digitalen Prozess-Transformation begleiten wir unsere Kunden branchenübergreifend und auf internationaler Bühne: onsite und remote.
Mit 6 deutschlandweiten Standorten und rund 70 Fachkräften passen wir Standardprozesse passgenau an, schulen Key-User, unterstützen das Projektmanagement und bieten zuverlässigen First- und Second-Level-Support. Als SAP®-Silver-Partner liefern wir sowohl praxistaugliche Lösungen als auch eigene Produkte, die den Arbeitsalltag wirklich vereinfachen.
„… einfach beraten“: Zuhören. Wissen. Lösen. Entwickeln. Unternehmen profitieren von unserer praxisnahen Beratung auf Augenhöhe sowie unseren zusätzlichen IT- und SAP®-Basis-Leistungen für eine starke systemische Grundlage. Kunden vertrauen auf unsere Kernwerte: Partnerschaft, Offenheit, Exzellenz und Kompetenz.
Weitere Informationen finden Sie auf
• www.inwerken.de
• www.karriere.inwerken.de
• www.digitalisierung.inwerken.de
Firmen-Standorte: Isernhagen (Firmenhauptsitz), Berlin, Braunschweig, Hamburg, Jena, Stuttgart.
Geschäftsführung: Frank Bachmann (Gründer und Vorstandsvorsitzender), Rudolf Jost, Holger Lexow. Aufsichtsrat: Gunnar Menzel
KONTAKT
Inwerken AG
Frau Christin Harms
Tel. 0511 936 206 60
E-Mail: marketing@inwerken.de
www.inwerken.de
Inwerken AG
Pappelweg 5
30916 Isernhagen
Telefon: +49 (511) 936206-0
Telefax: +49 (511) 936206-10
http://www.inwerken.de
Managerin
E-Mail: marketing@inwerken.de