Unit-Tests: Warum Unit-Tests?

Schon lange sind für die meisten Entwicklerinnen und Entwickler „Unit-Test“ und „Test Driven Development“ keine Fremdwörter mehr. Dennoch werden diese in der Praxis aus verschiedensten Gründen, von nicht allzu vielen Programmiererinnen und Programmierern angewendet. Im Folgenden möchten wir zeigen, warum die Verwendung von Unit-Tests äußerst sinnvoll ist. Beim Eingehen auf die Thematik zeigen wir die Vor- und Nachteile auf und vermitteln Grundlagenwissen.

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.

Über die Inwerken AG

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

Firmenkontakt und Herausgeber der Meldung:

Inwerken AG
Pappelweg 5
30916 Isernhagen
Telefon: +49 (511) 936206-0
Telefax: +49 (511) 936206-10
http://www.inwerken.de

Ansprechpartner:
Christin Harms
Managerin
E-Mail: marketing@inwerken.de
Für die oben stehende Story ist allein der jeweils angegebene Herausgeber (siehe Firmenkontakt oben) verantwortlich. Dieser ist in der Regel auch Urheber des Pressetextes, sowie der angehängten Bild-, Ton-, Video-, Medien- und Informationsmaterialien. Die United News Network GmbH übernimmt keine Haftung für die Korrektheit oder Vollständigkeit der dargestellten Meldung. Auch bei Übertragungsfehlern oder anderen Störungen haftet sie nur im Fall von Vorsatz oder grober Fahrlässigkeit. Die Nutzung von hier archivierten Informationen zur Eigeninformation und redaktionellen Weiterverarbeitung ist in der Regel kostenfrei. Bitte klären Sie vor einer Weiterverwendung urheberrechtliche Fragen mit dem angegebenen Herausgeber. Eine systematische Speicherung dieser Daten sowie die Verwendung auch von Teilen dieses Datenbankwerks sind nur mit schriftlicher Genehmigung durch die United News Network GmbH gestattet.

counterpixel