UNIT-Testing im Bereich der SAP Anwendungsentwicklung Bachelorarbeit zur Erlangung des akademischen Grades „Bachelor of Science in Informatik“ im Rahmen des Bachelorstudiums Informatik vorgelegt von: Patrick Deutsch betreut von: Priv.-Doz. Dipl.-Ing. Mag. Dr. Michael Felderer am Institut für Informatik an der Leopold-Franzens-Universität Innsbruck Innsbruck, im November 2016 Abstract Kundenspezifische Anpassungen von ERP Systemen sind anfällig für kostspielige Systemfehler, was das Testen dieser Modifikationen unerlässlich macht. Das Konzept der Unit-Tests stellt hierbei eine Möglichkeit dar, bestimmte Fehler bereits sehr früh zu identifizieren und somit zu verhindern. In Kooperation mit der Firma Swarovski, welche das marktführende ERP System SAP im Einsatz hat, soll das Potenzial sowie die Verbreitung von Unit-Tests in ERP Systemen ermittelt werden. Darüber hinaus sollen die Gründe für den derzeitigen Nicht-Einsatz von Unit-Tests bei Swarovski eruiert werden. Zur Klärung dieser Fragen wurde eine Umfrage zum Thema ERP Testing ausgewertet, sowie eine weitere Umfrage bei der Firma Swarovski durchgeführt. Außerdem wurden Beispielimplementierungen in verschiedenen Bereichen des Systems erstellt, um die Funktionsweise von ABAP Unit zu untersuchen. Weiters wurden die Programmabbrüche am System von Swarovski auf die Vermeidbarkeit durch Unit-Testing untersucht. Die ERP Testing Umfrage ergab, dass Unit-Tests bei der Anpassung von ERP Systemen nicht sehr weit verbreitet sind. Bei der Mitarbeiterbefragung wurden als Hauptgründe für diesen Umstand Zeitmangel, Budgetknappheit sowie fehlendes Wissen über das Prinzip genannt. Insgesamt konnten 90 % aller untersuchten Quellcodeobjekte durch Unit-Tests getestet werden, der Aufwand dafür war jedoch bei objektorientierten Objekten wesentlich geringer als bei prozeduralen. Knapp die Hälfte aller Programmabbrüche hätte durch entsprechende UnitTests vermieden werden können. Das Erstellen von Unit-Tests stellt einen beträchtlichen Aufwand dar und es muss sichergestellt werden, dass die Testkosten die Fehlerkosten nicht übersteigen. Daher empfiehlt es sich, nur jene Geschäftsprozesse mit einer hohen Risikobewertung für Unit-Tests in Betracht zu ziehen. Eine Risikoanalyse kann zur Identifikation dieser Geschäftsprozesse verwendet werden. I Inhaltsverzeichnis 1 EINLEITUNG ......................................................................................................................... 1 1.1 Thema und Motivation ........................................................................................................................ 1 1.2 Problemstellung .................................................................................................................................. 1 1.3 Zielsetzung........................................................................................................................................... 2 1.4 Struktur der Arbeit .............................................................................................................................. 2 2 GRUNDLAGEN DES SOFTWARE TESTENS .............................................................................. 3 2.1 Was ist Software Testen? .................................................................................................................... 3 2.2 Testklassifikation ................................................................................................................................. 4 2.3 Was ist Unit-Testing? ........................................................................................................................... 6 2.3.1 Aufbau von Unit-Tests ........................................................................................................................... 8 2.4 Testgetriebene Entwicklung................................................................................................................. 8 2.4.1 Testgetriebener Entwicklungszyklus.................................................................................................... 10 2.5 ABAP Unit .......................................................................................................................................... 10 2.6 Testen in ERP Systemen ..................................................................................................................... 12 2.7 ERP bei der Firma Swarovski .............................................................................................................. 13 2.7.1 Systemlandschaft................................................................................................................................. 13 2.7.2 Entwicklungs- und Testorganisation .................................................................................................... 14 3 METHODEN........................................................................................................................ 15 3.1 Datenerhebung und -analyse ............................................................................................................. 15 3.1.1 ERP-Testing Umfrage ........................................................................................................................... 15 3.1.2 Umfrage bei Swarovski ........................................................................................................................ 16 3.1.3 Analyse der Programmabbrüche ......................................................................................................... 16 3.1.4 Objektklassifikation ............................................................................................................................. 16 3.2 Realisierung ....................................................................................................................................... 17 3.2.1 Implementierung von Unit-Tests ......................................................................................................... 17 3.2.2 Risikoanalyse ....................................................................................................................................... 18 4 ERGEBNISSE ....................................................................................................................... 19 4.1 Datenerhebung und -analyse ............................................................................................................. 19 4.1.1 ERP-Testing Umfrage ........................................................................................................................... 19 4.1.2 Umfrage bei Swarovski ........................................................................................................................ 22 4.1.3 Analyse der Programmabbrüche ......................................................................................................... 24 4.1.4 Objektklassifikation ............................................................................................................................. 26 II 4.2 Realisierung ....................................................................................................................................... 26 4.2.1 Implementierung von Unit-Tests ......................................................................................................... 26 4.2.2 Risikoanalyse ....................................................................................................................................... 29 4.3 5 Zusammenfassung ............................................................................................................................. 31 DISKUSSION ....................................................................................................................... 32 5.1 Datenerhebung und -analyse ............................................................................................................. 32 5.1.1 ERP-Testing Umfrage ........................................................................................................................... 32 5.1.2 Umfrage bei Swarovski ........................................................................................................................ 32 5.1.3 Analyse der Programmabbrüche ......................................................................................................... 33 5.1.4 Objektklassifikation ............................................................................................................................. 34 5.1.5 Zusammenfassung ............................................................................................................................... 35 5.2 Realisierung ....................................................................................................................................... 36 5.2.1 Implementierung von Unit-Tests ......................................................................................................... 36 5.2.2 Risikoanalyse ....................................................................................................................................... 37 5.2.3 Teststrategie bei Swarovski ................................................................................................................. 38 5.2.4 Zusammenfassung ............................................................................................................................... 38 6 DANKSAGUNG.................................................................................................................... 40 7 LITERATURVERZEICHNIS ..................................................................................................... 41 8 ANHANG ............................................................................................................................ 43 8.1 Umfrage: SAP UNIT – Testing bei Swarovski ...................................................................................... 43 8.2 Detailliste der Programmabbrüche .................................................................................................... 50 8.3 Abbildungsverzeichnis ....................................................................................................................... 52 8.4 Tabellenverzeichnis ........................................................................................................................... 53 III Einleitung Patrick Deutsch 1 Einleitung 1.1 Thema und Motivation Enterprise Resource Planning (ERP) Systeme bilden sämtliche Geschäftsprozesse einer Organisation in einem einzigen IT-System ab [1]. Da diese Systeme bei ihrer Einführung in einem Unternehmen die bereits bestehenden Prozesse meist nicht vollständig widerspiegeln, werden sie oft durch den Kunden angepasst. Da Fehler in diesen Systemen zu erheblichen Kosten für die jeweiligen Unternehmen führen können, ist das Testen dieser Anpassungen vor ihrer Freigabe essenziell. Für diese Tests stehen meist eigens dafür konzipierte Testsysteme zur Verfügung. Die Durchführung der Tests kann entweder manuell erfolgen oder automatisiert durch spezielle Frameworks durchgeführt werden. Der Hauptvorteil von Testautomatisierung liegt darin, dass die Tests nach ihrer Erstellung wiederholt ohne großen Aufwand ausgeführt werden können. Die Kosten für Softwarefehler erhöhen sich mit jeder Entwicklungsstufe in der sie unentdeckt bleiben. Unit-Testing Frameworks bieten eine Möglichkeit, Softwarequalitätssicherung in einer sehr frühen Entwicklungsphase durchzuführen. Diese Bachelorarbeit wird in Kooperation mit der Firma Swarovski erstellt. Diese verwendet das ERP System der Firma SAP, welches mit einem Marktanteil von 24 % Marktführer im ERP Bereich ist [2]. Bei der Firma Swarovski werden derzeit keine Unit-Tests im SAP Bereich erstellt. Ziel der Arbeit ist es, die Gründe für diesen Umstand herauszufinden, sowie das Potenzial für den Einsatz von Unit-Tests zu ermitteln. Darüber hinaus soll die Verbreitung von Unit-Tests in den ERP Systemen anderer Unternehmen untersucht werden. Hier wird der Fokus speziell auf Unternehmen gelegt, welche wie die Firma Swarovski SAP als ERP System verwendet. 1.2 Problemstellung Die Probleme und Schwierigkeiten dieser Arbeit liegen hauptsächlich darin, jene Bereiche im SAP ERP System der Firma Swarovski zu ermitteln, welche sich für den Einsatz von UnitTests eignen. Dafür muss der bestehende kundenspezifische Quellcode im System analysiert werden. Da das Designen und Erstellen von Unit-Tests einen beträchtlichen Aufwand darstellt, sollten vor deren Einsatz jene Geschäftsprozesse ermittelt werden, welche überhaupt dafür in Frage kommen. Ein weiteres Problem besteht darin, zu analysieren warum bei der Firma Swarovski derzeit bei der Implementierung von kundenspezifischem Code im ERP System keine Unit-Tests erstellt werden. Die technischen Mittel dazu stehen bereits seit Längerem zur Verfügung, werden aber derzeit nicht genutzt. 1 Einleitung Patrick Deutsch 1.3 Zielsetzung Das primäre Ziel dieser Arbeit liegt in der Identifikation von Geschäftsprozessen und Technologien bei denen der Einsatz von automatisierten Unit-Tests zur Verbesserung der Qualität von kundenspezifischem Software-Code in der SAP Anwendungsentwicklung beitragen kann. Dafür werden Beispielimplementierungen von Unit-Tests im SAP ERP System der Firma Swarovski erstellt, um die Funktionsweise und Möglichkeiten des integrierten UnitTesting-Frameworks ABAP Unit herauszuarbeiten. Darauf aufbauend erfolgt eine Empfehlung für die Integration von spezifischen Unit-Tests in die Teststrategie der Firma Swarovski. Weiters soll durch eine interne Mitarbeiterbefragung herausgefunden werden, warum derzeit keine Unit-Tests im SAP Umfeld eingesetzt werden. Außerdem soll ermittelt werden, wie weit verbreitet Unit-Testing generell bei der Anpassung von ERP Systemen ist. 1.4 Struktur der Arbeit Die vorliegende Arbeit gliedert sich in 5 große Kapitel. Nachdem in der Einleitung die Probleme und Ziele definiert wurden, befasst sich das 2. Kapitel mit den Grundlagen des Software Testens sowie mit dem ERP System der Firma Swarovski. Im 3. Kapitel werden die Vorgehensweise sowie die Methoden zur Erreichung der definierten Ziele beschrieben. In Anschluss werden die erzielten Ergebnisse dargestellt bevor diese im 5. Kapitel hinsichtlich verschiedener Aspekte diskutiert werden. Die Methoden, Ergebnisse und die Diskussion gliedern sich dabei jeweils in einen Analyse- sowie einen Implementierungsteil. 2 Grundlagen des Software Testens Patrick Deutsch 2 Grundlagen des Software Testens 2.1 Was ist Software Testen? „Software Testen ist der Prozess, ein Programm mit der Absicht auszuführen, Fehler zu finden“[3]. Software Testen zählt zu den Maßnahmen der Analytischen Qualitätssicherung. Im Gegensatz zur Statischen Qualitätssicherung liegt hier der Fokus darauf, Fehler welche bereits im Programmcode enthalten sind, zu entdecken. Bei der Statischen Qualitätssicherung geht es darum, Maßnahmen zu definieren um Fehler bereits vor der Entstehung zu vermeiden. [4] Abbildung 2.1: Gliederung der Software Qualitätssicherung [4] Warum Software Testen wichtig ist, zeigt eine Untersuchung der LOT Consulting GmbH aus Karlsruhe zum Thema Kosten durch Softwarefehler aus dem Jahr 2001. In dieser Untersuchung wird der geschätzte Verlust in deutschen Mittelstands- und Großunternehmen mit 84,4 Mrd. EUR pro Jahr angegeben. Die Kosten für die Beseitigung von Programmfehlern belaufen sich auf ein Drittel des gesamten IT-Budgets von Unternehmen in Deutschland. [5] Die Testkosten für IT-Projekte nehmen ständig zu. Noch Ende der 1980er Jahre veranschlagten Projektleiter maximal 25 % des Gesamtbudgets für Testkosten. Die Komplexität von Software nimmt immer weiter zu, und somit machen heute die Testkosten oft mehr als 50 % der Gesamtprojektkosten aus. [6] 3 Grundlagen des Software Testens Patrick Deutsch 2.2 Testklassifikation Softwaretests lassen sich anhand ihrer Merkmale in verschiedene Klassen einteilen [4, 7]: Prüfmethodik: Nach welchen Methoden und Techniken werden Testfälle konstruiert? - Black-Box Tests: die innere Struktur der Software bleibt beim Test unberücksichtigt. Die Testfälle werden ausschließlich aus der Spezifikation abgeleitet. Für die Testfallkonstruktion wird nur das Ein- und Ausgabeverhalten berücksichtigt. Bekannte Konstruktionsverfahren sind beispielsweise Äquivalenzklassenbildung, Grenzwertanalyse und Paarweises Testen. - White-Box-Tests: orientieren sich am Quellcode des Testobjektes. Daher werden diese Testverfahren auch als codebasierte Testverfahren bezeichnet. Das Ziel bei WhiteBox-Tests ist es, möglichst viele Anweisungen in einem Testobjekt zur Ausführung zu bringen. Als Grundlage für diese Testverfahren wird vor der Testfallerstellung der sogenannte Kontrollflussgraph eines Testobjektes abgeleitet. Jeder Knoten in diesem gerichteten Graph entsprich einer Anweisung im Programm, jede Kante einem möglichen Kontrollfluss [8]. Anhand vom erstellten Graphen lassen sich verschiedene Testfallentwurfsmethoden konstruieren: Abbildung 2.2: Kontrollflussgraph für das Zählen von Zeichen Anweisungsüberdeckung: hier werden die einzelnen Anweisungen (Knoten im Kontrollflussgraphen) herangezogen. Um eine vollständige Anweisungsüberdeckung zu erzielen, muss jede Anweisung mindestens 4 Grundlagen des Software Testens Patrick Deutsch einmal in einem Testfall ausgeführt werden. Dieses Testverfahren ist das schwächste aller Überdeckungstestverfahren und ist somit als Teilmenge in allen anderen Verfahren enthalten. - Zweigüberdeckung: da bei diesem Testverfahren die Kanten im Kontrollflussgraphen betrachtet werden, muss für eine vollständige Zweigüberdeckung jede Kante im Kontrollflussgraphen einmal durchlaufen werden. Pfadüberdeckung: diese Testtechnik ist wesentlich mächtiger als die vorher genannten, hat aber in der Praxis aufgrund der hohen Komplexität nur wenig Bedeutung. Um eine vollständige Pfadüberdeckung zu erreichen, müsste jeder mögliche Pfad im Kontrollflussgraphen durchlaufen werden. Vor allem wenn Schleifen in einem Programm vorhanden sind, ist dies nur theoretisch realisierbar, da eine extrem hohe Anzahl an möglichen Pfaden entsteht. Bedingungsüberdeckung: kann als eine Erweiterung der Zweigüberdeckung angesehen werden. Der Unterschied besteht darin, dass die Zweigüberdeckung nur den Ergebniswert einer gesamten Bedingung berücksichtigt, da diese für die Verzweigung im Kontrollflussgraphen relevant sind. Die Bedingungsüberdeckung zieht jedoch zusätzlich noch die einzelnen Teilbedingungen zur Testfallkonstruktion heran. Gray-Box-Tests: dies stellt eine Kombination aus Black-Box-Tests und White-BoxTests dar. Grundsätzlich werden die Testfälle ähnlich wie Black-Box-Tests erstellt. Dem Tester ist allerdings die interne Programmstruktur des Testobjektes bekannt und er lässt dieses Wissen in die Konstruktion der Testfälle einfließen. Prüfkriterium: Gliederung nach den inhaltlichen Aspekten der Testfälle. - Funktionale Tests: es wird überprüft, ob ein Software System bei einer vorgegebenen Belegung von Eingabewerten, die korrekten Ausgabewerte berechnet. Funktionale Anforderungen spezifizieren „was“ das System erbringen soll. Funktionale Merkmale sind Richtigkeit, Interoperabilität, Sicherheit, Ordnungsmäßigkeit und Angemessenheit. Zu dieser Gruppe von Tests zählen unter anderem Funktionstests, Kompatibilitätstests, Zufallstests, Crashtests und Trivialtests. - Nicht-Funktionale Tests: bei dieser Testart werden Attribute des funktionalen Verhaltens überprüft, also in welcher Qualität – „wie gut“ – ein System funktioniert. Die Umsetzung nicht funktionaler Anforderungen beeinflusst oft die Zufriedenheit des Kunden mit einem Softwareprodukt. Nicht funktionale Merkmale sind Zuverlässigkeit, Effizienz und Benutzbarkeit. Lasttests, Stresstests, Performanztests und Massentests sind Vertreter dieser Testart. Prüfebene: Gliederung der Tests in die verschiedenen Entwicklungsphasen. Die Tests werden in vier Klassen unterteilt: - Unit-Tests: die erste Teststufe, in der kleine Programmteile unabhängig von anderen Programmteilen getestet werden. 5 Grundlagen des Software Testens Patrick Deutsch - Integrationstests: jene Teststufe in welcher das Zusammenspiel einzelner Komponenten getestet wird. Ziel des Integrationstests ist es, Fehlerzustände in Schnittstellen verschiedener Komponenten zu finden. Jede Komponente für sich wurde isoliert bereits getestet. - Systemtests: in dieser Teststufe wird das System zum ersten Mal als Ganzes getestet. Es wird überprüft, ob die vom Kunden spezifizierten Anforderungen an das Produkt erfüllt sind. - Abnahmetests: im Gegensatz zu den vorherigen Teststufen, liegt der Abnahmetest nicht mehr im Verantwortungsbereich des Herstellers, sondern des Kunden. Dieser Test wird bereits in der Einsatzumgebung des Kunden und mit authentischen Daten ausgeführt. Abbildung 2.3: Einteilung der Teststufen nach Prüfebene [4] Je später Softwarefehler entdeckt werden, umso höher sind die entsprechenden Fehlerkorrekturkosten. Abbildung 2.4: Fehlerkorrekturkosten nach Entdeckungszeitpunkt [9] 2.3 Was ist Unit-Testing? Bei Unit-Tests, oft auch Modul- oder Komponententests genannt, werden atomare Programmeinheiten getestet, welche groß genug sind um eigenständig getestet zu werden. Bei den einzelnen Units kann es sich um Klassen, Funktionen, Module, Pakete oder sogar um 6 Grundlagen des Software Testens Patrick Deutsch ganze Bibliotheken handeln. Unit-Tests werden zu den White-Box-Tests gezählt. Dies bedeutet, dass sie sich am zu testenden Quellcode orientieren [4], weshalb sie meist von Mitgliedern des Entwicklungsteams erstellt werden [10]. Das Konzept des Unit-Testings wurde in den 1970er Jahren entwickelt und stellt eine der besten Möglichkeiten zur Verbesserung der Code Qualität dar. Zum ersten Mal eingesetzt wurde das Konzept von Kent Beck in der Programmiersprache Smalltalk. Ab diesem Zeitpunkt wurde es zu einer gängigen Praxis in der Softwareentwicklung [11]. Die Implementierung dieses Frameworks nannte Beck SUnit. Sie diente als Grundlage für das xUnit Framework, welches eine Sammlung von Unit-Testing Architekturen verschiedener Programmiersprachen darstellt [12]. Tabelle 2.1 beinhaltet eine Auflistung verschiedener Programmiersprachen mit den dazugehörigen Unit-Testing Frameworks welche auf der xUnit-Architektur basieren. Tabelle 2.1: xUnit-Implementierungen verschiedener Programmiersprachen [5] xUnit-Derivate ABAP Objects Unit ABAP Unit CppUnit CsUnit JUnit Nunit PHPUnit Runit SUnit Test::Unit TestNG VbUnit VB Lite Unit Programmiersprache ABAP ab Release 6.10 ABAP ab Release 6.40 C++ C# Java .NET-Plattform PHP Ruby Smalltalk Ruby Java Visual Basic 6.0 Visual Basic (VB) und Visual Basic for Application (VBA) Eigenschaften eines „guten“ UNIT-Tests [11]: 1. 2. 3. 4. 5. 6. automatisiert und wiederholt ausführbar einfach zu implementieren einmal geschrieben, ist der Test auch morgen noch relevant jeder sollte in der Lage sein, den Test schnell und einfach laufen zu lassen kurze Ausführungszeit die Resultate sind konsistent (wenn zwischen den Testläufen am Programmcode nichts geändert wird, geben die Tests immer denselben Wert zurück) 7. der Test besitzt die volle Kontrolle über die getestete Unit 8. komplett isoliert von anderen Tests 9. sollte der Test fehlschlagen, ist einfach zu erkennen was erwartet wurde und wie das Problem lokalisiert werden kann 7 Grundlagen des Software Testens Patrick Deutsch 2.3.1 Aufbau von Unit-Tests In der Regel werden alle Unit-Tests in drei Phasen gegliedert [13]: - Ausgangszustand herstellen zu testende Operation ausführen Vergleich von Ist- und Sollwert (mittels Assertions) Das Ergebnis eines Unit-Tests wird in eine der folgenden drei Kategorien eingeteilt [4]: Success: Ist-Wert und Soll-Wert stimmen überein, somit wurde der Test erfolgreich durchlaufen. Error: Der Testfall konnte ohne Probleme durchlaufen werden, der Ist-Wert weicht allerdings vom Soll-Wert ab. Failure: Bei der Testausführung ist ein Systemfehler aufgetreten. Dies kann zB durch einen Programmabsturz im zu testenden System verursacht worden sein. In diesem Fall ist die Berechnung eines Ist-Wertes für den Vergleich nicht möglich. 2.4 Testgetriebene Entwicklung Testgetriebene Entwicklung (engl. Testdriven Development – TDD) ist eine qualitätsbewusste Programmiertechnik, mit der Programme in kleinen Schritten entwickelt werden können. Vom Entwickler werden automatisierbare Unit-Tests geschrieben, welche ein Programm in kleinen unabhängigen Einheiten überprüfen. Die Idee des testgetriebenen Ansatzes in der Softwareentwicklung besteht darin, zuerst den Testcode und erst im Anschluss den eigentlichen Programmcode zu schreiben. Für jede Änderung am Programmcode wird zuerst ein Test geschrieben, welcher vorerst fehlschlägt. da die entsprechende Funktionalität im Programm noch nicht vorhanden ist. Da zuerst der Test entwickelt und geschrieben wird, wird sichergestellt, dass auch wirklich das programmiert wird, was programmiert werden soll. Ein weiterer Vorteil der Testgetriebenen Entwicklung besteht darin, dass auf jeden Fall testbarer Code erstellt wird, da der Test ja bereits geschrieben wurde. [14] Abbildung 2.5 sowie Abbildung 2.6 verdeutlichen den Unterschied der traditionellen Softwareentwicklung zur Testgetriebenen Softwareentwicklung. 8 Grundlagen des Software Testens Abbildung 2.5: Traditioneller Entwicklungszyklus [11] Abbildung 2.6: Testgetriebener Entwicklungszyklus [11] 9 Patrick Deutsch Grundlagen des Software Testens Patrick Deutsch 2.4.1 Testgetriebener Entwicklungszyklus Der Testgetriebene Entwicklungszyklus besteht im Wesentlichen aus drei Phasen: grün rot: der Programmierzyklus beginnt damit, dass neue Anforderungen an den Code gestellt werden. Für diese Anforderung wird ein Test entwickelt, welcher fehlschlägt, da die Funktionalität noch nicht implementiert ist. rot grün: der Programmcode wird so implementiert, dass der Test auf möglichst einfache Weise erfüllt wird. grün grün: nachdem wieder alle Tests erfolgreich durchlaufen, muss der neu implementierte bzw. geänderte Programmcode überarbeitet und gut strukturiert werden. Diesen Vorgang nennt man Refactoring. Durch das neuerliche Ausführen der Tests, wird sichergestellt, dass durch diesen Schritt keine zusätzlichen Fehler in den Programmcode gekommen sind. [11, 14] Abbildung 2.7: Phasen der Testgetriebenen Entwicklung https://en.wikipedia.org/w/index.php?title=Test-driven_development&oldid=721858149 [06.11.2016] Wenn von einem Test erwartet wird, dass er fehlschlägt, dieser aber erfolgreich durchläuft, wurde entweder nicht getestet, was getestet werden sollte, oder der Test ist fehlerhaft. [11] 2.5 ABAP Unit ABAP Unit ist die durch SAP entwickelte Umsetzung des xUnit Frameworks. ABAP Unit ist seit dem Release 6.40 sowohl in die interne SAP Entwicklungsumgebung, als auch in die ABAP Erweiterung für Eclipse integriert. Die Tests können entweder direkt in das zu testende Objekt integriert werden, oder es können eigene Testprogramme angelegt werden, was zu einer Trennung von Testcode und Produktivcode führt. Für eine Implementierung der Tests in eigenen Testprogrammen spricht, 10 Grundlagen des Software Testens Patrick Deutsch dass die Testfälle in eigenen Testpaketen zusammengehalten werden können. Somit sind alle Tests im System an einer zentralen Stelle implementiert und können gut strukturiert werden, was die Übersichtlichkeit erhöht. Gegen die Trennung von Test- und Produktivcode spricht, dass diese oft eng miteinander verwoben sind. Daher könnte eine Trennung wesentlichen Mehraufwand bedeuten. Da sich die Tests an einer anderen Stelle im System befinden, kann es bei einer Änderung am Produktivcode leichter passieren, dass die Testfälle nicht angepasst werden. Außerdem bedeutet es beim Transport der Änderungen in das Test- bzw. Produktivsystem einen Mehraufwand, da nicht nur das geänderte Objekt, sondern auch das Testobjekt transportiert werden muss. Obwohl beide Methoden Vor- und Nachteile mit sich bringen, empfiehlt die SAP das Testcoding direkt in das Testobjekt zu integrieren. [12] Abbildung 2.8: Beispiel einer Testklasse in ABAP Unit ABAP Unit unterscheidet strikt zwischen Test- und Produktivcode. Testklassen haben Zugriff auf den Produktivcode, umgekehrt jedoch nicht. Im Framework integriert ist die Möglichkeit zur Messung der Code Coverage sowie die Möglichkeit zur automatisierten Testausführung. [15] Unit-Tests können für folgende Objekttypen im SAP System erstellt und ausgeführt werden: 1. 2. 3. 4. Ausführbare Programme Modulpools Funktionsgruppen Klassenpools Technisch gesehen können Unit-Tests also sowohl in prozeduralen Objekten (Programme, Modulpools und Funktionsgruppen) als auch in objektorientierter Programmierung (Klassenpools) implementiert werden. SAP empfiehlt allerdings objektorientiert zu 11 Grundlagen des Software Testens Patrick Deutsch programmieren, da dies dabei hilft die Programme gut zu strukturieren. Damit sich ein Programm für Unit-Tests eignet, sollte eine Methode genau eine Funktionalität abbilden. [12] 2.6 Testen in ERP Systemen Enterprise Resource Planning Systeme (ERPs) kapseln die gesamten Daten und Prozesse einer Organisation in einem einheitlichen System [1]. In der heutigen Zeit gehören ERP Systeme zu den wichtigsten und kritischsten Teilen des operativen Geschäfts in allen Arten von Organisationen [16]. Meist decken diese Systeme bei der Einführung jedoch nicht zu 100 Prozent die Prozesse der Unternehmen ab. Dieser Umstand führt dazu, dass die Systeme oft durch den Kunden angepasst werden müssen. Fehler bei Kundenanpassungen bzw. erweiterungen können zu sehr hohen Kosten für das Unternehmen führen [17]. Deshalb ist effektives und effizientes Testen ein wichtiger Punkt bei ERP Projekten, um zu verhindern, dass Fehler bei der Implementierung in das Produktivsystem gelangen [10]. Bei umfangreichen und kritischen ERP Projekten belaufen sich die Testkosten auf ca. 50 % der Gesamtkosten [1]. Erfolgreiches Testen beeinflusst maßgeblich den Erfolg des gesamten Projektes [10]. Eine ERP Systemlandschaft besteht in der Regel aus mindestens drei Systemen: einem Entwicklungssystem, einem Testystem und dem Produktivsystem. [18] Abbildung 2.9: ERP Systemlandschaft [18] Bezogen auf die einzelnen Teststufen kann gesagt werden, dass Unit-Tests im Entwicklungssystem geschrieben und ausgeführt werden. Alle weiteren Teststufen werden im Testsystem realisiert, da hier meist bessere Testdaten zur Verfügung stehen und das System weniger Änderungen unterzogen ist, als das Entwicklungssystem. 12 Grundlagen des Software Testens Patrick Deutsch 2.7 ERP bei der Firma Swarovski 2.7.1 Systemlandschaft Die Firma Swarovski verwendet das ERP System von SAP. Derzeit sind folgende Module dieses Systems im Einsatz: Tabelle 2.2: eingesetzte ERP Module bei Swarovski Abkürzung MM PP FI CO LO Bezeichnung Material Management Production Planning Financial Accounting Controlling Logistics Die ERP Systemlandschaft besteht insgesamt aus sechs Systemen: 1. 2. 3. 4. 5. 6. Entwicklungssystem Testsystem Schulungssystem Upgrade System Konsolidierungssystem Produktivsystem Jedes System besitzt eine eindeutige dreistellige ID welche sich folgendermaßen zusammensetzt: das einstellige Präfix bezeichnet den Typ des Systems, die darauffolgende zweistellige Zahl steht für die Systemlandschaft – „10“ für das ERP System. Weitere bei der Firma Swarovski eingesetzte Systeme von SAP sind unter anderem das Business-Warehouse System (BW) sowie das Customer-Relationship-Management System (CRM). Abbildung 2.10: ERP Systemlandschaft bei Swarovski Das einzige System, in dem Änderungen am Programmcode möglich sind, ist das Entwicklungssystem. Anschließend können die Änderungen in das Testsystem und das Schulungssystem transportiert werden. Diese beiden Systeme werden in periodischen Abständen auf den Stand des Produktivsystems gesetzt. Dies führt dazu, dass in diesen Systemen wesentlich bessere Testdaten zur Verfügung stehen als im Entwicklungssystem. Im Konsolidierungssystem wird noch einmal überprüft, ob die Integration der geänderten Objekte 13 Grundlagen des Software Testens Patrick Deutsch in den bestehenden Code wie geplant funktioniert. Ist dies der Fall können die Objekte für das Produktivsystem freigegeben werden. Im Jahr 2014 wurden ca. 12.000 Anpassungen am System vorgenommen, wovon ca. 1.100 Änderungen am Programmcode zur Folge hatten. Systemupgrades durch die SAP werden als erstes in das Upgrade System integriert. Dies hat den Vorteil, dass die Auswirkungen des Upgrades ersichtlich sind und getestet werden können, ohne den laufenden Entwicklungsprozess zu stören. 2.7.2 Entwicklungs- und Testorganisation Zurzeit sind bei der Firma Swarovski ca. 20 Softwareentwickler und ca. 120 Business Consultants im Bereich SAP beschäftigt. Die Organisation der Business Consultants orientiert sich an den jeweiligen Modulen im SAP System. Programmänderungen zur Anpassung des Systems werden von der Entwicklungsabteilung durchgeführt. Vor der Freigabe dieser Änderungen für das Produktivsystem müssen diese noch durch mindestens einen Business Consultant getestet werden. Getestet wird sowohl ob die Anpassungen der Anforderung entsprechen und ob diese korrekt implementiert wurden. Großteils werden diese Tests in Black-Box-Testverfahren durch manuelles Ausführen der Programme durchgeführt. Zusätzlich dazu gibt es noch eine Quality Management Abteilung, welche derzeit aus einer Person besteht. Aktuell wird in dieser Abteilung eine Teststrategie für Systemupgrades inkl. automatisierter Black-Box-Tests ausgearbeitet. Außerdem gibt es in jedem Team der Business Consultants die Rolle eines SAP Test Managers. Diese sind für die Wartung des Testkataloges sowie für das Testmanagement bei Systemupgrades in ihren jeweiligen Bereichen zuständig. 14 Methoden Patrick Deutsch 3 Methoden 3.1 Datenerhebung und -analyse Mithilfe einer Umfrage zum Thema ERP Testing wurde die Verbreitung von Unit-Tests im ERP Bereich ermittelt. Um den derzeitigen Wissensstand der Mitarbeiter der Firma Swarovski im SAP Bereich über Unit-Testing zu bestimmen wurde eine weitere Umfrage erstellt und ausgewertet. Diese Umfrage sollte mögliche Gründe für den derzeitigen Nicht-Einsatz dieser Teststufe aufzeigen. Um herauszufinden inwieweit Unit-Tests zur Qualitätsverbesserung beitragen können, wurden die Programmabbrüche im Produktivsystem der Firma Swarovski dahingehend analysiert. Dadurch soll ermittelt werden, wie viele dieser Fehler durch Unit-Testing vermieden werden hätten können. Weiters wurde eine Klassifizierung der derzeit im System vorhandenen Objekte in die einzelnen Objektkategorien durchgeführt, da diese für die Verwendung von ABAP Unit hinsichtlich Usability und Aufwand der Testerstellung relevant sind. Alle vorliegenden Daten und Ergebnisse beziehen sich auf das SAP ERP System in der Version 7.40 der Firma Swarovski. Alle Auswertungen beziehen sich rein auf den Kundenerweiterungsraum (Z-Coding). Es kann davon ausgegangen werden, dass der nicht erweiterte Standardcode im System bereits vom Hersteller SAP getestet wurde. 3.1.1 ERP-Testing Umfrage Die Universität Innsbruck hat im Jahr 2013 eine Online-Umfrage zum Thema Testen in ERP Projekten durchgeführt. Teilgenommen an dieser Umfrage haben insgesamt 299 Personen von denen 97 die Umfrage vollständig und 202 teilweise ausgefüllt haben. Ziel der Umfrage war es den „State of the Art“ beim Testen in ERP Projekten zu erheben. Die Umfrage beinhaltete insgesamt 114 Fragen, welche in folgende 13 Gruppen eingeteilt waren: 1. Allgemeines zum Unternehmen 2. ERP Basisinformationen 3. Herausforderungen beim Testen in ERP Projekten 4. Vorgehensmodell 5. Testorganisation 6. Risikomanagement 7. Maßnahmen zur Qualitätssicherung 8. Testmanagement 9. Testverfahren 10. Testarchitektur 11. Testwerkzeuge 12. Auswertung und Bericht 15 Methoden Patrick Deutsch 3.1.2 Umfrage bei Swarovski Um herauszufinden warum derzeit bei der Firma Swarovski keine Unit-Tests implementiert werden, wurde eine interne Umfrage durchgeführt. Diese richtete sich gleichermaßen an Entwickler und Consultants. Die Umfrage umfasste sowohl Fragen zum Wissensstand über Unit-Testing im Allgemeinen sowie zur Qualitätseinschätzung bezüglich der selbst implementierten/betreuten Programme. Die Umfrage wurde mittels der Online Plattform www.umfrageonline.com erstellt, versendet und ausgewertet. Insgesamt wurden 34 Personen befragt, 25 nahmen daran teil und füllten die Umfrage vollständig aus. Die Teilnahme war vom 11.08.2016 bis 26.09.2016 möglich. 3.1.3 Analyse der Programmabbrüche Es wurde eine Auswertung aller Programmabbrüche im Zeitraum von April 2015 bis Juni 2015 durchgeführt. Hierdurch konnten folgende Parameter abgeleitet werden: Programmabbrüche pro Fehler, Fehler pro Modul, die 30 fehleranfälligsten Programme, die 30 häufigsten Programmierfehler sowie die betroffenen Z-Programme. Diese Daten wurden dahingehend analysiert, welche dieser Programmabbrüche durch UnitTests vermieden werden hätten können. Damit dies auf einen Programmabbruch zutrifft, ist es notwendig einen geeigneten Unit-Testfall zu erstellen, welcher das Fehlverhalten des Programmes erkennt. Ist die Erstellung eines derartigen Testfalles nicht möglich, wäre der Programmabbruch durch Unit-Tests nicht vermeidbar gewesen. 3.1.4 Objektklassifikation In einem Zeitintervall von einer Woche wurde aus dem SAP Produktivsystem die Aufrufstatistik der einzelnen Verarbeitungsblöcke extrahiert. Anschließend wurden die Verarbeitungsblöcke in die folgenden Kategorien eingeteilt: 1. 2. 3. 4. Methoden Funktionsbausteine Form-Routinen Sonstige Objekte Für jede Kategorie wurde die Anzahl der Objekte sowie die Häufigkeit der Aufrufe ermittelt. Die verschiedenen Objektkategorien sind unterschiedlich in das Unit-Test Framework ABAP Unit integriert. Dies bedeutet, dass sich die Vorgehensweise für die Erstellung von Unit-Tests zwischen den Kategorien teilweise erheblich voneinander unterscheidet. 16 Methoden Patrick Deutsch 3.2 Realisierung Zur Erstellung der Testfälle wurde das im SAP integrierte ABAP Unit Framework verwendet. Als IDE (Integrated Development Environment) wurde Eclipse in der Version 4.6 (Neon) verwendet. 3.2.1 Implementierung von Unit-Tests Um beurteilen zu können in welchen Bereichen des Systems Unit-Tests sinnvoll zur Anwendung kommen könnten, wurden Tests in verschiedenen Technologien (Objektorientierte Programmierung, Prozedurale Programmierung, User-Exits, Badis, usw.) erstellt. Wo es möglich war, wurden die Testfälle direkt in die zu testenden Objekte integriert, wie es von SAP empfohlen wird. Teilweise waren aufwändige Vorarbeiten nötig um die Objekte entsprechend testbar zu machen. Um nicht in den laufenden Systembetrieb einzugreifen, wurden die Testfälle nicht in den Originalobjekten, sondern in zuvor erstellten Kopien implementiert. In jedem Testobjekt waren mehrere Datenbankzugriffe implementiert, daher wurde für jedes Objekt ein Data Access Object erstellt, in welches die Datenbankzugriffe ausgelagert wurden. Testklassen Testklassen sind lokale Klassen, welche bei der Definition den Zusatz „FOR TESTING“ erhalten. Die einzelnen Testmethoden erhalten ebenfalls den Zusatz „FOR TESTING“. Sie sind parameterlose Instanzmethoden. Eine Testmethode entspricht einem Testfall. Um die Handhabung von Testklassen für die verschiedenen Objekttypen zu untersuchen, wurden sowohl für ausführbare Programme, Modulpools, Funktionsgruppen als auch Klassenpools exemplarisch Testklassen mit den dazugehörigen Testmethoden angelegt und ausgeführt. Weiters wurde die Testüberdeckung der getesteten Objekte gemessen (Anweisungsüberdeckung, Bedingungsüberdeckung und Prozedurüberdeckung). Testautomatisierung Zur Automatisierung von Unit-Tests wird der im System integrierte Code Inspector [19] verwendet. Es werden sogenannte Prüfvarianten angelegt, welche die zu testende Objektmenge definieren. 17 Methoden Patrick Deutsch 3.2.2 Risikoanalyse Bei Swarovski wird für jeden Geschäftsprozess eine Risikobewertung durchgeführt. Das Risiko jedes Prozesses errechnet sich daraus, wie häufig dieser Prozess durchlaufen wird und wie hoch die Kosten bei einem Fehler im Prozess sind. Die Fehlerkosten setzen sich folgendermaßen zusammen [7]: - - Fehlerkorrekturkosten: jene Kosten, die für die Behebung des Fehlers anfallen, zB Analyse und Korrektur, erneuter Testaufwand sowie die Kosten für die erneute Auslieferung des Produkts. direkte Fehlerkosten: Kosten welche beim Kunden durch den Fehler entstehen, für die aber der Hersteller haften muss. indirekte Fehlerkosten: hier handelt es sich um jene Kosten bzw. Umsatzverlust, welche dadurch entstehen, weil der Kunde mit dem Produkt unzufrieden ist. Der verursachte Imageschaden zählt ebenfalls zu den indirekten Fehlerkosten. Gemeinsam mit einem Vertreter der SAP QM Abteilung von Swarovski wurde die aktuelle Risikobewertung analysiert und ein Pareto Diagramm erstellt. 18 Ergebnisse Patrick Deutsch 4 Ergebnisse 4.1 Datenerhebung und -analyse 4.1.1 ERP-Testing Umfrage Die Teilnehmer der durchgeführten Umfrage wurden wie folgt klassifiziert: Tabelle 4.1: Personenklassifizierung der ERP-Testing Umfrage Gruppe ERP-Anwender ERP-Hersteller ERP-Vertriebs- und/oder Implementierungspartner keine Antwort Summe Anzahl 175 34 42 48 299 Prozent 58,53% 11,37% 14,05% 16,05% 100,00% Als größte Gruppe wurden die ERP-Anwender mit 58,53 % identifiziert. Mit 25,42 % bilden die ERP-Hersteller zusammen mit den ERP-Vertriebs- oder Implementierungspartnern den kleineren Teil. Auffallend war jedoch, dass der zweitgrößte Teil der befragten Personen sich zu keiner der vorhandenen Gruppen zählte bzw. sich nicht dazu äußern wollte. Die Umfrage zeigte außerdem, dass derzeit folgende Teststufen bei den befragten Unternehmen in ERP Projekten realisiert sind: Tabelle 4.2: Teststufen in der ERP Umfrage Teststufe Unit-/Modul-/Klassen-/Komponententest Integrationstest Systemtest Abnahmetest keine Angabe Sonstiges Summe Anzahl 29 60 46 62 8 4 209 Prozent 9,70% 20,07% 15,38% 20,74% 2,68% 1,34% 69,91% Abnahme- und Integrationstests sind jene Teststufen, welche bei ERP Projekten am häufigsten eingesetzt werden. Jeweils mehr als 20 % gaben an, diese Tests in ihren Projekten durchzuführen. Weniger als 10 % haben hingegen die Ebene der Unit-/Modul-/Klassen/Komponententests in ERP Projekten im Einsatz. Die eingesetzten ERP Systeme der befragten Unternehmen sind in Tabelle 4.3 dargestellt: 19 Ergebnisse Patrick Deutsch Tabelle 4.3: ERP System Verteilung ERP-System SAP Eigen-/Individualentwicklung Sonstiges Microsoft NAV BMD Comarch ERP Enterprise Microsoft AX Mesonic Orlando proalpha Lawson M3 abas ERP Aplus Comarch Suite Infor LN PSIpenta eNVenta ERP IFS Applications Infor AS Jet Orbit RS2 keine Antwort Summe Anzahl 59 31 27 21 12 10 9 7 5 5 4 3 3 3 3 3 1 1 1 1 1 89 299 Prozent 19,73% 10,37% 9,03% 7,02% 4,01% 3,34% 3,01% 2,34% 1,67% 1,67% 1,34% 1,00% 1,00% 1,00% 1,00% 1,00% 0,33% 0,33% 0,33% 0,33% 0,33% 29,77% 100,00% Mit 19,73 % ist SAP das führende ERP System unter den Umfrageteilnehmern. Am zweithäufigsten kommen Eigen-/Individualentwicklungen zum Einsatz. Interessanterweise gab der Hauptteil der Befragten keine Antwort ab. In Tabelle 4.4 ist die Verteilung der Teststufe Unit-/Modul-/Klassen-/Komponententest auf die einzelnen ERP Systeme ersichtlich. Einige der Unternehmen, welche diese Teststufe bei ihren Projekten einsetzen, gaben an, mehr als ein ERP System im Einsatz zu haben. Dieser Umstand erklärt die Differenz der 29 Unternehmen in Tabelle 4.2 und der in Summe 34 ERP Systemen in Tabelle 4.4. 20 Ergebnisse Patrick Deutsch Tabelle 4.4: Aufteilung von Unit-/Modul-/Klassen-/Komponententest in die jeweiligen ERP Systeme ERP-System RS2 Orlando abas ERP Comarch Suite Mesonic SAP Comarch ERP Enterprise proalpha Eigen-/Individualentwicklung Microsoft NAV BMD Summe Anzahl 1 2 1 1 2 14 2 1 6 3 1 34 Prozent 2,94% 5,88% 2,94% 2,94% 5,88% 41,18% 5,88% 2,94% 17,65% 8,82% 2,94% 100,00% Anteil im jeweiligen System 100,00% 40,00% 33,33% 33,33% 28,57% 23,73% 20,00% 20,00% 19,35% 14,29% 8,33% Absolut wird die Teststufe Unit-/Modul-/Klassen-/Komponententest bei Unternehmen mit SAP am häufigsten eingesetzt. Dies entspricht jedoch nur einem Anteil von 23,73 % der SAP einsetzenden Unternehmen. Folgende Tabelle zeigt, wie auf die Frage nach der Qualitätssicherung im jeweiligen Vorgehensmodell geantwortet wurde: Tabelle 4.5: Qualitätssicherung im jeweiligen Vorgehensmodell Antwort Reviews sind Teil jeder Iteration Unittests sind Teil jeder Iteration Integrationstests sind Teil jeder Iteration Abnahmetests sind Teil jeder Iteration Regressionstests sind Teil jeder Iteration Separate Iterationen dienen der Qualitätssicherung keine Antwort Nicht beendet oder nicht gezeigt Summe Anzahl 8 5 11 15 2 5 38 215 299 Prozent 2,68% 1,67% 3,68% 5,02% 0,67% 1,67% 12,71% 71,91% 100,00% Auffällig ist, dass in 29 Datensätzen die Frage ob in der Teststufe Unit-/Modul-/Klassen/Komponententest im ERP Umfeld getestet wird, mit ja beantwortet wurde, bei der Frage zur Qualitätssicherung im jeweiligen Vorgehensmodell jedoch nur 5mal „Unittests sind Teil jeder Iteration“ mit ja beantwortet wurde. Bei einem dieser 5 Datensätze wurde sogar die Frage nach der Teststufe Unit-/Modul/Klassen-/Komponententest mit nein beantwortet. 21 Ergebnisse Patrick Deutsch 4.1.2 Umfrage bei Swarovski Von den 34 befragten Personen bei Swarovski haben 25 an der Umfrage teilgenommen und diese vollständig ausgefüllt. Folgende Tabelle zeigt, wie sich diese Personen auf die einzelnen Teams verteilen: Tabelle 4.6: Teilnahme an der Mitarbeiterbefragung Berufsgruppe (inkl. Führungskräfte) Entwickler Consultant Quality Management Summe befragt 17 16 1 34 teilgenommen 13 11 1 25 teilgenommen in Prozent 52,00% 44,00% 4,00% 100,00% Insgesamt gaben 80 % der teilnehmenden Personen an, mit dem Begriff Unit-, Modul- bzw. Komponententest vertraut zu sein, wobei sich die restlichen 20 % in zwei Consultants und drei Entwickler aufschlüsseln. Abbildung 4.1: Einteilung der Personen nach Unit-Test Kenntnissen Nur 10 % dieser Teilnehmer (2 Personen) mit Unit-Test Kenntnissen, haben auch bereits selbst einen Unit-Test erstellt. Beide Personen kommen aus der Berufsgruppe der Entwickler. 22 Ergebnisse Patrick Deutsch Abbildung 4.2: Einteilung der Personen mit Unit-Test Kenntnissen gruppiert nach bereits erstellten Unit-Tests Obwohl mehr als die Hälfte der Teilnehmer mit Unit-Test Kenntnissen auch mit einem UnitTest Framework vertraut sind, hat nur eine Person auch Kenntnisse im SAP integrierten Framework ABAP Unit. Diese Person gab auch an Kenntnisse in anderen Frameworks zu haben, konnte aber weder Vor- noch Nachteile von ABAP Unit zu diesen nennen. Tabelle 4.7: Einteilung nach Unit-Test Framework Kenntnissen Unit-Test Framework Kenntnisse ABAP Unit andere Unit-Test Frameworks (zB Java) keine Unit-Test Framework Kenntnisse Summe Anzahl 1 11 9 21 Prozent 4,76% 52,38% 42,86% 100,00% Auf die Frage, mit welcher Teststrategie die geschriebenen/betreuten Programme getestet werden, wurde wie folgt geantwortet: Tabelle 4.8: Gliederung der Personen nach Testabwicklung Testabwicklung manuell automatisiert Summe Anzahl 25 4 29 Prozent 86,21% 13,79% 100,00% Von den vier Personen, welche automatisierte Testverfahren verwenden, gaben drei an, zusätzlich manuell zu testen. 23 Ergebnisse Patrick Deutsch Insgesamt gaben 56 % an, dass sie der Meinung sind, dass automatisierte Unit-Tests ihren Testaufwand reduzieren könnten. Die folgende Tabelle zeigt eine Gruppierung der Begründungen für diese Annahme: Tabelle 4.9: Gründe für reduzierten Testaufwand Begründung für reduzierten Testaufwand Zeitersparnis durch wiederholtes/automatisiertes Ausführen frühzeitige Fehlererkennung Erkennen von Side-Effects weniger Risiko Summe Anzahl 7 5 1 1 14 Prozent 50,00% 35,71% 7,14% 7,14% 100,00% Im Gegensatz dazu können die Antworten jener Personen, welche nicht der Meinung sind, dass Unit-Tests ihren Testaufwand reduzieren könnten, folgendermaßen zusammengefasst werden: Tabelle 4.10: Gründe für keinen reduzierten Testaufwand Begründung für keinen reduzierten Testaufwand mehr Aufwand für die Softwareentwickler kein Ersatz für manuelle Tests keine Antwort Summe Anzahl 5 3 1 9 Prozent 55,56% 33,33% 11,11% 100,00% Als mögliche Gründe, für den derzeitigen Nicht-Einsatz von Unit-Tests bei Swarovski, nannten die teilnehmenden Personen Zeitmangel, zu wenig Wissen über das Prinzip und Budgetknappheit. Abbildung 4.3: mögliche Gründe für den derzeitigen Nicht-Einsatz von Unit-Tests bei Swarovski 4.1.3 Analyse der Programmabbrüche Die Programmabbrüche, welche im Zeitraum von April 2015 bis Juni 2015 aufgetreten sind, können bezogen auf Unit-Testing wie folgt eingeteilt werden: 24 Ergebnisse Patrick Deutsch Tabelle 4.11: Programmabbrüche gruppiert nach Kategorie Fehlerkategorie vermeidbar durch UNIT-Tests nicht vermeidbar durch UNIT-Tests technische Fehler SQL Fehler Summe Anzahl 2471 1954 438 421 5284 Prozent 46,76% 36,98% 8,29% 7,97% 100,00% PROGRAMMABBRÜCHE SQL Fehler; technische 421; 8% Fehler; 438; 8% vermeidbar durch UNITTests; 2.471; 47% nicht vermeidbar durch UNITTests; 1.954; 37% Abbildung 4.4: Einteilung der Programmabbrüche in vermeidbar und nicht-vermeidbar durch UNIT-Testing Es ist ersichtlich, dass knapp die Hälfte der Programmabbrüche im laufenden Betrieb, durch entsprechende Unit-Tests vermieden werden hätte können. Die Programmabbrüche teilen sich folgendermaßen auf die einzelnen Module im SAP System auf: Tabelle 4.12: Gliederung der Programmabbrüche nach Modulen Modul MM (Material Management) SD (Sales and Distribution) PP (Production Planning) FI (Financial Accounting) EAI (Enterprise Application Integration) BA (Business Analytics) CO (Controlling) FORMS (Forms) BW (Business Warehouse) Summe 25 Programmabbrüche 1696 1586 1465 329 133 25 22 15 13 5284 Prozent 32,10% 30,02% 27,73% 6,23% 2,52% 0,47% 0,42% 0,28% 0,25% 100,00% Ergebnisse Patrick Deutsch Es zeigt sich, dass knapp 90 % der Programmabbrüche auf die drei Module „Material Management“, „Sales and Distribution“ und „Production Planning“ entfallen. 4.1.4 Objektklassifikation Tabelle 4.13: Auswertung der Verarbeitungsblöcke im SAP ERP Produktivsystem Methoden Funktionsbausteine 22.848 3.801 Anzahl Objekte 36,65% 6,10% 42.447.806.287 13.668.500.833 Anzahl Aufrufe 65,41% 21,06% Form-Routinen Sonstige Summe 27.851 7.845 62.345 44,67% 12,58% 100,00% 8.741.617.131 33.818.798 64.891.743.049 13,47% 0,05% 100,00% Die größte Anzahl an Objekten bildet die Gruppe der Form-Routinen mit 44,67 %. Die meisten Aufrufe betreffen jedoch die Methoden mit 65,41 %. Während die Methoden als objektorientiert klassifiziert werden, zählen die Funktionsbausteine, Form-Routinen und sonstige Objekte zu den prozeduralen Verarbeitungsblöcken. 4.2 Realisierung 4.2.1 Implementierung von Unit-Tests Es wurden Testfälle für zehn Objekte im Bereich „Sales and Distribution“ erstellt. Diese Objekte teilen sich folgendermaßen auf die verschiedenen Objektkategorien auf: Tabelle 4.14: Anzahl getestete Objekte je Klassifizierung Objektklassifikation Ausführbare Programme Klassenpools Funktionsgruppen Modulpools Summe Anzahl 3 3 2 2 10 Lediglich für ein Objekt aus der Klasse der Modulpools konnten keine Unit-Tests ausgeführt werden. Hier handelte es sich um einen User-Exit im SAP Standardprogramm SAPMV45A. Für SAP Standardprogramme können zwar Unit-Tests erstellt werden, die Ausführung wird aber durch einen entsprechenden Eintrag in der Tabelle TAUNIT_PROG_INFO verhindert. Da ein User-Exit technisch gesehen zum ihn umgebenden SAP Standardprogramm gehört, war eine Ausführung in diesem Fall nicht möglich. Umgangen werden kann dieses Problem durch objektorientierte Programmierung. Bei Klassen handelt es sich um eigenständige Objekte, welche nicht mehr zum aufrufenden Programm gehören. Für die übrigen Objekte wurde jeweils eine Anweisungsüberdeckung von mindestens 70 % erzielt. 26 Ergebnisse Patrick Deutsch Abbildung 4.5 zeigt ein Beispiel für Bedingungsüberdeckung in ABAP Unit. Rote Markierung: Bedingung wurde durch den Test nicht erreicht Gelbe Markierung: die Bedingung wurde in den Tests entweder immer oder nie erfüllt. Grüne Markierung: die Bedingung wurde in den Tests sowohl erfüllt als auch nicht erfüllt. Abbildung 4.5: Beispiel für Code-Highlighting bei Bedingungsüberdeckung in ABAP Unit Abbildung 4.6 und Abbildung 4.7 zeigen das Code-Highlighting sowie die Zusammenfassung eines Testlaufes mit der Messung der Anweisungsüberdeckung. Rote Markierung: die Anweisung wurde bei keinem Testfall ausgeführt. Grüne Markierung: die Anweisung wurde durch mindestens einen Testfall ausgeführt. 27 Ergebnisse Patrick Deutsch Abbildung 4.6: Beispiel für Code-Highlighting bei Anweisungsüberdeckung in ABAP Unit Abbildung 4.7: Zusammenfassung von Anweisungsüberdeckung in ABAP Unit Datenbankzugriffe in Unit-Tests Da Unit-Tests wiederholt ausführbar sein müssen, in einem Entwicklungssystem die Datenbasis aber nicht garantiert werden kann, sollten in einem Unit-Test keine Datenbankzugriffe stattfinden. Eine Änderung der Testdaten könnte zu fehlerhaften Tests führen, obwohl das getestete Objekt korrekt ist. 28 Ergebnisse Patrick Deutsch In Programmiersprachen wie Java, C oder C++ werden Mocking-Frameworks zur Elimination der Datenbank aus den Testfällen verwendet. ABAP Unit unterstützt jedoch kein MockingFramework. Um das Problem der Datenkonsistenz zu umgehen gibt es zwei Möglichkeiten: 1. Fixture Methoden Bei dieser Variante werden in der SETUP Methode der Testklasse, welche vor jedem Testfall ausgeführt wird, jene Datensätze in den Datenbanktabellen erzeugt, welche für den Testfall benötigt werden. In der TEARDOWN Methode (wird nach jedem Testfall aufgerufen) werden die angelegten Datensätze wieder gelöscht, damit wieder der ursprüngliche Datenbestand vorhanden ist. 2. Data Access Objects Bei dieser Methode werden alle Datenbankzugriffe des zu testenden Objektes in ein sogenanntes Data Access Object (DAO) ausgelagert. Das Testobjekt enthält ein Attribut mit der Referenz auf das DAO. In der Testklasse wird nicht das eigentliche DAO verwendet, sondern ein lokales DAO erzeugt, welches vom ursprünglichen DAO erbt, und die Methoden mit Datenbankzugriffen redefiniert und Dummy-Daten zurückliefert. [20] 4.2.2 Risikoanalyse Jedem Prozess werden die beiden Werte Frequency Class (Häufigkeit der Ausführung) und Damage Class (Schaden bei Fehler) zugewiesen. Daraus wird das Prozessrisiko errechnet. In der Spalte Relative Weight (%) wird das Risiko prozentuell vom darüber liegenden Prozess dargestellt. Die Spalte Contribution (%) zeigt den Risikoanteil jedes Prozesses gemessen am Gesamtrisiko. 29 Ergebnisse Patrick Deutsch Abbildung 4.8: Bewertung des Risikos der einzelnen Geschäftsprozesse Auffallend ist, dass die beiden risikoreichsten Prozesse „SD_Sales and Distribution“ und „MM_Material Management“ mit jeweils 30,98 % in Summe bereits 61,96 % am Gesamtrisiko ausmachen. In Abbildung 4.9 wird ersichtlich, dass mit den ca. 12,5 % riskantesten Prozessen (ca. 200) bereits eine Risikoabdeckung von 80 % erreicht wird. Somit würden sich Codefragmente, welche in einem oder im Idealfall sogar mehreren dieser Geschäftsprozesse durchlaufen werden, besonders gut für Unit-Testing eignen. 30 Ergebnisse Patrick Deutsch Abbildung 4.9: Pareto Darstellung der Risikobewertung aller Geschäftsprozesse bei Swarovski 4.3 Zusammenfassung Die ERP Testing Umfrage zeigte, dass nur eine geringe Anzahl an Unternehmen Unit-Tests im ERP Bereich im Einsatz hat. Die firmeninterne Umfrage bei Swarovski ergab, dass die Mehrheit der befragten Personen mit dem Konzept des Unit-Testens vertraut ist und eine Reduktion des Testaufwandes dadurch als realistisch sieht. Als Hauptgründe für den derzeitigen Nicht-Einsatz wurden Budgetknappheit, Zeitmangel sowie fehlendes Wissen über das Prinzip genannt. Die Analyse der Programmabbrüche ergab, dass fast die Hälfte der Fehler mittels Unit-Tests vermieden werden hätte können. Bei der Objektklassifikation zeigte sich, dass rund ein Drittel des kundenspezifischen Quellcodes objektorientiert programmiert ist, was für den Einsatz von Unit-Tests von Vorteil ist. Bei der Implementierung von Unit-Tests in ausgewählten Bereichen im System stellte sich heraus, dass neun von zehn Objekten unit-testbar waren. Um Datenbankzugriffe zu umgehen, können die zur Verfügung stehenden Fixture Methoden oder Data Access Objects verwendet werden. Die Auswertung der Risikoanalyse zeigt, dass die beiden Module „SD_Sales and Distribution“ und „MM_Material Management“ einen Anteil von über 60 % am Gesamtrisiko haben und sich dadurch für den Einsatz von Unit-Tests anbieten. 31 Diskussion Patrick Deutsch 5 Diskussion 5.1 Datenerhebung und -analyse 5.1.1 ERP-Testing Umfrage Es fällt auf, dass Unit-/Modul-/Komponententest jene Teststufe ist, welche bei ERP Projekten am wenigsten realisiert wird. Lediglich 26 befragte Unternehmen gaben an, diese Teststufe bei ERP Projekten im Einsatz zu haben. Allerdings gaben nur 5 Unternehmen an, dass UnitTests Teil jeder Iteration ihres jeweiligen Vorgehensmodells sind. Dies lässt den Schluss zu, dass selbst bei den wenigen Unternehmen, welche diese Teststufe implementiert haben, diese nicht regelmäßig eingesetzt wird. Bei der Gruppe der ERP-Anwender kann argumentiert werden, dass deren Kunden meist unternehmensintern sind. Somit fällt der Kostenpunkt des Imageschadens bei einem Softwarefehler weg. Dies drückt die Fehlerkosten erheblich. Da die Testkosten die Fehlerkosten nicht übersteigen sollen, kann hier ein reduziertes Testmanagement eigesetzt werden. Auffallend ist aber, dass auch bei der Gruppe der ERP-Hersteller diese Teststufe meist nicht zum Einsatz kommt, nämlich lediglich bei vier Unternehmen. Da bei dieser Gruppe das ERP System ein Produkt ist, welches an andere Unternehmen vertrieben wird, sollte hier doch ein sehr ausgeprägtes Testmanagement implementier sein. Eine mögliche Ursache für diesen Umstand könnten aber zum Beispiel ausgedehnte Serviceverträge sowie ein schneller Support bei Fehlern sein. Betrachtet man nur das ERP System SAP, welches auch Swarovski einsetzt, gaben 14 Unternehmen an, diese Teststufe bei ERP Projekten einzusetzen. Dies entspricht lediglich 23,73 % aller Unternehmen, welche SAP verwenden. Die Umfrage zeigt also, dass Unit-Testing sowohl bei ERP-Anwendern als auch bei ERPHerstellern nicht weit verbreitet ist. 5.1.2 Umfrage bei Swarovski Wie die Mitarbeiterbefragung bei Swarovski gezeigt hat, sind 80 % der teilnehmenden Personen mit dem Begriff Unit-/Modul- bzw. Komponententest vertraut. Selbst einen Unit-Test erstellt haben allerdings lediglich 10 % der mit dem Begriff vertrauten Personen. Betrachtet man nur den Personenkreis der Entwickler, welche für das Erstellen von Unit-Tests verantwortlich sind, sind 85 % mit dem Begriff vertraut, wovon 18 % bereits einen Unit-Test erstellt haben. Nur eine Person gab an, mit dem im SAP integrierten Framework ABAP Unit vertraut zu sein. Diese Person konnte weder Vor- noch Nachteile gegenüber anderen xUnitFrameworks nennen. Obwohl 84 % der teilnehmenden Personen die Qualität der von ihnen betreuten Programme mit „hoch“ oder „sehr hoch“ bewerteten, sind 80 % von ihnen der Meinung, dass Unit-Tests die Qualität weiter erhöhen könnten. 32 Diskussion Patrick Deutsch Die Mehrheit der Personen ist also mit dem Prinzip des Unit-Testens vertraut und sieht einen Mehrwert durch den Einsatz dieser Art von Tests. Auf die Frage nach den Gründen, warum derzeit bei Swarovski trotzdem keine Unit-Tests erstellt werden, nannten 92 % einen der folgenden Gründe: - Prinzip ist nicht bekannt Budgetknappheit Zeitmangel Dies deckt sich mit den in [12] genannten Hauptgründen dafür, dass qualitätssichernde Maßnahmen oft vernachlässigt und somit dem Kunden überlassen werden. Diesen Argumenten kann entgegengehalten werden, dass Softwarefehler mehr Kosten verursachen, je später sie entdeckt werden. Vom Kunden entdeckte Fehler sind somit wesentlich teurer, als Fehler welche bereits in der Realisierungsphase der Software gefunden werden. Grob kann gesagt werden, dass sich die Korrekturkosten für einen Softwarefehler mit jeder Teststufe gegenüber der vorherigen Stufe verdoppeln. [21] Insgesamt sind 56 % der Meinung, dass automatisierte Unit-Tests ihren Testaufwand reduzieren könnten. Als Begründung für diese Annahme wurden größtenteils Zeitersparnis, durch das wiederholte automatisierte Ausführen der Tests, sowie frühzeitige Fehlererkennung angegeben. Diese Antworten stehen somit im Widerspruch zu den Vermutungen für den derzeitigen Nicht-Einsatz von Unit-Tests. Eine mögliche Ursache für diesen Widerspruch könnte sein, dass die Softwareentwickler und -tester über Unit-Testing und dessen Vorteile Bescheid wissen, der Führungsebene diese aber nicht bekannt oder nicht bewusst sind. Eine weitere Möglichkeit könnte sein, dass die teilnehmenden Entwickler lediglich mit dem Begriff des Unit-Testings vertraut sind, aber wenig über den Einsatz sowie dessen Vorteile wissen. Dies würde erklären, warum die Mehrheit einen Mehrwert durch Unit-Tests sieht, derzeit aber nur eine der teilnehmenden Personen jemals einen Unit-Test im SAP erstellt hat. Dieser Mangel könnte leicht durch interne oder externe Schulungen behoben werden. Zusammenfassend kann gesagt werden, dass die Mehrheit der an der Umfrage teilnehmenden Personen dem Einsatz von Unit-Testing positiv gestimmt und offen ist. Vermutlich müsste aber ein genereller Wandel in der IT Organisation stattfinden. Es müsste ein Bewusstsein dafür geschaffen werden, dass zwar zusätzliche Entwicklungskosten für das Erstellen der Tests anfallen, dafür aber viele Fehler bereits in einer sehr frühen Testphase entdeckt werden. Dadurch können aufwändige und kostenintensive Korrekturen vermieden werden. 5.1.3 Analyse der Programmabbrüche Bei der Analyse der Programmabbrüche im Produktivsystem hat sich herausgestellt, dass 47 % durch entsprechendes Unit-Testing vermeidbar gewesen wären. Bei einem Großteil dieser Abbrüche, trat der Fehler an den Grenzwerten des jeweiligen Datenbereiches auf. Oft traten sogenannte Overflow-Exceptions auf, bei denen die Eingabe zu groß für den jeweiligen Datenbereich war und das Programm dies nicht entsprechend behandelt hat. 33 Diskussion Patrick Deutsch Solche Fehler können leicht vermieden werden, wenn vor oder während der Implementierung eine Grenzwertanalyse durchgeführt wird. Bei dieser Methode werden die Grenzwerte von Äquivalenzklassen für die Konstruktion von Testfällen herangenommen. Ein Testfall ist dabei immer ein ungültiger Wert, welcher außerhalb des erlaubten Wertebereiches liegt. [7] Wenn also Unit-Tests auf Basis einer Grenzwertanalyse implementiert werden, wird bereits beim Testen ersichtlich wie ein Programm auf ungültige Eingaben reagiert. Wird dies im Programm nicht entsprechend berücksichtigt, schlägt ein Testfall fehl und der Programmierer muss die entsprechenden Korrekturen vornehmen. Die restlichen 53 % aller Programmabbrüche hätten auch durch entsprechende Unit-Tests nicht vermieden werden können, da hier kein Testfall erstellt werden hätte können. Der häufigste Fehler war ein TIME_OUT, bei dem die Verarbeitungszeit eines Programms zu lang ist. Dieser Fehler tritt auf, wenn ein Benutzer dem Programm eine zu große Menge von Eingabedaten zur Verfügung stellt. Da es sich hier um eine nicht behandelbare Ausnahme handelt, hat der Programmierer keine Möglichkeit darauf entsprechend zu reagieren. Ein ebenfalls beträchtlicher Teil der Programmabbrüche trat in der Verarbeitung von GUIKomponenten auf. Da die Oberfläche für Unit-Testing nicht relevant ist, können dafür auch keine Testfälle erstellt werden. Jeweils ca. 8 % der Programmabbrüche wurden durch technische Fehler bzw. Fehler bei Datenbankzugriffen verursacht. Die technischen Fehler wurden nicht durch einen Fehlerzustand im ausgeführten Programm verursacht, sondern durch einen Systemfehler. Die Fehler bei Datenbankzugriffen können ebenfalls nicht durch Unit-Tests behoben werden, da in den Tests keine Datenbankzugriffe stattfinden sollten. Diese sollten mittels Mocking durch fixe Testdaten ersetzt werden. Es kann gesagt werden, dass knapp die Hälfte aller Programmabbrüche im laufenden Betrieb durch den Einsatz von Unit-Tests vermieden werden hätte können, was doch einen beträchtlichen Teil darstellt und klar aufzeigt, dass Potenzial dafür besteht. Der Fokus sollte dabei auf die Module „Material Management“, „Sales and Distribution“ und „Production Planning“ gelegt werden, da fast 90 % aller Programmabbrüche auf diese drei Module entfallen. 5.1.4 Objektklassifikation Bei der Klassifikation der Verarbeitungsblöcke im System hat sich gezeigt, dass nach der Anzahl der Aufrufe im System mehr objektorientierter als prozeduraler Code durchlaufen wird. Betrachtet man allerdings nur die Anzahl der Objekte, unabhängig davon wie oft diese im System aufgerufen werden, entfallen nur 36,65 % auf objektorientierte Programmierung. Diese Unterscheidung ist deshalb wichtig, da für den Einsatz von Unit-Tests objektorientierte Programmierung empfohlen wird. [12] Nach der Implementierung von Unit-Tests in verschiedenen Bereichen des Systems bei Swarovski kann dies nur bestätigt werden. Meist konnten die Testfälle auch für prozedurale Programme erstellt werden, der Aufwand dafür war aber um einiges höher, da teilweise gewisse Vorarbeiten erledigt werden mussten. Bei Funktionsgruppen und Programmen müssen zB eigene Includes angelegt werden, in denen die Tests zusammengefasst werden. Um den Einsatz von Unit-Tests in Zukunft zu erleichtern, sollte bei neu erstelltem Quellcode darauf geachtet werden, diesen in objektorientiertem Programmierstil zu entwickeln. Den 34 Diskussion Patrick Deutsch gesamten bestehenden prozeduralen Code auf Objektorientierung umzubauen wäre zu viel Aufwand. Es könnte jedoch darüber nachgedacht werden, ob vereinzelt zentrale prozedurale Verarbeitungsblöcke, welche in sensiblen Bereichen des Systems implementiert sind transformiert werden. 5.1.5 Zusammenfassung Generell kann gesagt werden, dass Unit-Testing bei der Implementierung und Erweiterung von ERP Systemen nicht sehr weit verbreitet ist. Nur wenige Unternehmen gaben an, diese Teststufe bei ihren ERP Projekten einzusetzen. Auch bei der Firma Swarovski gibt es derzeit keine Richtlinien für den Einsatz von Unit-Tests in ihrem ERP System. Die intern bei Swarovski durchgeführte Umfrage ergab, dass die Mehrheit der befragten Softwareentwickler zwar mit dem Prinzip des Unit-Testens vertraut ist, jedoch gab lediglich eine Person an, bereits Unit-Tests im SAP System implementiert zu haben. Vor- bzw. Nachteile gegenüber Unit-Testing-Frameworks anderer Programmiersprachen konnten nicht genannt werden. Weiters wurde durch die Umfrage deutlich, dass sich sowohl Entwickler als auch Consultants eine Qualitätsverbesserung durch Unit-Tests erwarten würden. Als Hauptgründe für den Umstand, dass diese Teststufe dennoch nicht realisiert ist, wurden Zeitmangel, Budgetknappheit sowie fehlendes Wissen darüber angegeben. Um diesen Argumenten entgegenzutreten, müsste ein Bewusstsein dafür geschaffen werden, dass die Fehlerkosten rasant ansteigen, je später ein Fehler entdeckt wird. Eine Auswertung der Programmabbrüche im laufenden System von Swarovski hat ergeben, dass knapp die Hälfte der Abbrüche durch den Einsatz entsprechender Unit-Tests vermieden werden hätte können. Die übrigen Fehler gliedern sich in SQL Fehler, Fehler in der GUI Verarbeitung, Systemfehler und Fehler durch eine zu große Menge von Eingabedaten. Für diese Fehler hätten keine Unit-Testfälle erstellt werden können. Die meisten der Programmabbrüche entfallen auf die Module „Material Management“, „Sales and Distribution“ und „Production Planning“. Diese würden sich daher besonders für Unit-Tests eignen. Für die Verwendung von ABAP Unit wird objektorientierte Programmierung empfohlen. Im ERP System der Firma Swarovski sind derzeit gut ein Drittel aller Verarbeitungsblöcke im objektorientierten Programmierstil implementiert. Eine Transformierung der restlichen Verarbeitungsblöcke in Objektorientierung wäre sicherlich zu viel Aufwand. Um den Einsatz von Unit-Tests in Zukunft aber zu erleichtern, sollte bei Neuentwicklungen darauf geachtet werden, diese objektorientiert zu programmieren. 35 Diskussion Patrick Deutsch 5.2 Realisierung 5.2.1 Implementierung von Unit-Tests Bei der Implementierung von Unit-Tests ist aufgefallen, dass jedes getestete Objekt über eine Vielzahl von Datenbankzugriffen verfügt. Dies führt dazu, dass keine konstante Datenbasis, welche bei Unit-Tests essenziell ist, gewährleistet werden kann. In Kapitel 4.2.1 werden zwei Methoden beschrieben, wie dieses Problem umgangen werden kann. Die Verwendung der Fixture Methoden zum Erstellen bzw. Bereinigen der Testdaten ist nicht zu empfehlen, da es bei Problemen in der Testausführung zu inkonsistenten Zuständen auf der Datenbank kommen kann. Bei einem Systemabsturz während der Testausführung würden die vorher erzeugten Testdaten auf der Datenbank nicht mehr gelöscht werden und somit auf der Datenbank stehen bleiben. Die bessere Alternative ist hier, alle Datenbankzugriffe über Data Access Objects zu realisieren, da bei der Testausführung keine Änderungen auf der Datenbank vorgenommen werden. Die bestehenden Programme auf dieses Prinzip auszurichten, würde jedoch sehr viel Aufwand bedeuten. Eine Alternative wäre, Unit-Tests nur für neue Objekte einzuführen. Wenn das Prinzip der Data Access Objects bei der Erstellung von Objekten sofort berücksichtigt wird, bedeutet es relativ wenig Mehraufwand, führt jedoch dazu, dass das Objekt unit-testbar wird. Weiters ist auffallend, dass die getesteten Objekte ein zu hohes Maß an Komplexität aufweisen, was die Erstellung von guten Unit-Tests erschwert. Es wäre ein Refactoring sinnvoll, um die Objekte dahingehend anzupassen, dass eine Routine nur einen Zweck erfüllt. Außerdem sollte auf die Verwendung von globalen Daten verzichtet werden. Jene Daten welche in einer Routine benötigt werden, sollten als Schnittstellenparameter an diese übergeben werden. Dies erleichtert das Erstellen von Unit-Tests erheblich, da in der Schnittstelle der Routine sofort ersichtlich ist, welche Daten benötigt werden. Ein weiteres Problem ist das Vorhandensein von Nachrichten (Fehlermeldungen bzw. Erfolgsmeldungen) in der Geschäftslogik. Beim Auslösen einer Nachricht wird die Programmkontrolle sofort an die GUI übergeben, welche die Nachricht darstellt. In einem UnitTest führt dies zur sofortigen Beendigung des Tests. Beim Ausführen der Tests ist sowohl das Darstellen der Nachricht sowie das Abbrechen des Testfalls nicht erwünscht. Nachrichten sollten daher in der Geschäftslogik vermieden und nur direkt in GUI-Elementen ausgegeben werden. Dies kann entweder durch das Setzen und Weiterreichen von Parametern oder durch das Auslösen von Exceptions geschehen. Da im Test sowohl auf eine Exception, als auch auf einen Rückgabeparameter reagiert werden kann, wird das Erstellen von Unit-Tests ermöglicht. [22] Testdaten Bei der Implementierung von Unit-Tests spielen die Testdaten eine wichtige Rolle. Da in UnitTests keine Datenbankzugriffe erlaubt sind, werden die Testdaten meist direkt im Test hinterlegt. Dies hat den Nachteil, dass bei einer Änderung der Testdaten, alle Unit-Tests welche darauf zugreifen angepasst werden müssen. 36 Diskussion Patrick Deutsch Eine Möglichkeit diesen Umstand zu umgehen bietet das von SAP entwickelte eCATTFramework (extended Computer Aided Test Tool) zur Testautomatisierung, welches direkt in das System integriert ist. [12] Die Verwendung dieses Tools ermöglicht es dem Entwickler, die Testdaten aus einem sogenannten Testdatencontainer zu ermitteln. Die Befüllung dieses Containers kann zB über Excel- oder XML-Files erfolgen. Dies ermöglicht eine saubere Trennung von Test- und Produktivdaten, bietet aber trotzdem die Möglichkeit die Testdaten ohne Programmieraufwand zu verändern. Testautomatisierung Beim Einsatz von Unit-Tests spielt Testautomatisierung eine wichtige Rolle. Da im Laufe der Zeit sehr viele Testfälle erstellt werden, ist es wichtig diese automatisiert ausführen zu können. Durch das regelmäßige wiederholte Ausführen von neuen sowie bestehenden Testfällen, ist sichergestellt, dass keine Side-Effects durch eine Änderung an bestehendem Code ins System gelangt sind. Der Programmierer kann zwar das von ihm angepasste Objekt testen und so sicherstellen, dass es wie gewünscht funktioniert, Probleme bei abhängigen Objekten werden dabei aber leicht übersehen. Im SAP steht für das automatisierte Ausführen von Unit-Tests der sogenannte Code Inspector zur Verfügung. Über diesen kann gesteuert werden, wie oft welche Testfälle ausgeführt werden. Der Code Inspector kann auch so konfiguriert werden, dass bei einem Transport von einem Objekt vom Entwicklungssystem auf das Testsystem oder – noch wichtiger – ins Produktivsystem eine Prüfung ausgeführt wird. Beim Fehlschlagen eines Unit-Tests wird der Transport untersagt. Dies ist eine wichtige Methode zur Qualitätssicherung, da somit sichergestellt ist, dass nach dem Release einer Programmänderung weiterhin alle Unit-Tests erfolgreich durchlaufen werden. 5.2.2 Risikoanalyse Es ist wichtig, dass die Testkosten die Kosten für einen möglichen Fehler nicht übersteigen [7]. Die Kosten für einen Softwarefehler orientieren sich am Risiko des zugrundeliegenden Geschäftsprozesses. Das Risiko für einen Prozess errechnet sich folgendermaßen: 𝑅𝑖𝑠𝑖𝑘𝑜 = 𝑚ö𝑔𝑙𝑖𝑐ℎ𝑒𝑟 𝑆𝑐ℎ𝑎𝑑𝑒𝑛 ∗ 𝐻ä𝑢𝑓𝑖𝑔𝑘𝑒𝑖𝑡 𝑑𝑒𝑟 𝐴𝑢𝑠𝑓üℎ𝑟𝑢𝑛𝑔 [12] Daher sollte mehr Testaufwand in jene Prozesse fließen, welche eine höhere Risikobewertung haben. Bezogen auf Unit-Testing bedeutet dies, dass jene Objekte, welche in riskanten Geschäftsprozessen durchlaufen werden, besser getestet werden sollten, als Objekte, welche ausschließlich in weniger riskanten Prozessen verwendet werden. Bei Swarovski haben die beiden Prozesse „SD_Sales and Distribution“ und „MM_Material Management“ die höchste Risikobewertung. Somit sollte diesen beiden Prozessen bei der Einführung von Unit-Tests besondere Beachtung geschenkt werden. 37 Diskussion Patrick Deutsch 5.2.3 Teststrategie bei Swarovski Swarovski hat derzeit im Bereich SAP keine Teststrategie implementiert. Dies führt dazu, dass es keine Richtlinien dafür gibt, auf welcher Testebene und in welchem Umfang Prozesse getestet werden müssen. Die Tests werden zum größten Teil auf Basis der eigenen Erfahrung (explorativ) erstellt und ausgeführt. Lediglich bei Systemupgrades werden teilweise bereits automatisierte Abnahmetests eingesetzt. Abbildung 5.1: Bewertung des Testprozesses bei Swarovski durch die Firma Software Quality Lab aus dem Jahr 2013 Bei einer Bewertung des Testprozesses bei Swarovski durch die Firma Software Quality Lab im Jahr 2013, wurde das Fehlen einer Teststrategie mit dem größten Handlungsbedarf bewertet. Die Teststrategie sollte den roten Faden von den Systemanforderungen hin zu den jeweiligen Testaktivitäten deutlich machen. In ihr werden die Verteilung des Testaufwandes und der Testabdeckung über die zu testenden Objekte geregelt. Außerdem werden die Teststufen und Testmethoden definiert. Das Ziel der Teststrategie ist es, Fehler so früh und kostengünstig wie möglich zu finden. [23] 5.2.4 Zusammenfassung Beim Erstellen von Beispielimplementierungen von Unit-Tests in verschiedenen Bereichen des SAP Systems von Swarovski hat sich herausgestellt, dass es mit ABAP Unit zwar ein gut integriertes Framework dafür gibt, jedoch einige Punkte für eine effiziente Nutzung beachtet 38 Diskussion Patrick Deutsch werden müssen: neue Funktionalitäten sollten lediglich objektorientiert programmiert werden, Datenbankzugriffe nur mehr über Data Access Objects implementiert werden und die erstellten Programme müssen sehr modular aufgebaut sein. Weiters muss darauf geachtet werden, dass eine saubere Trennung von Business Logik und Oberfläche vorhanden ist (Exceptions statt Messages in der Business Logik). Bei den untersuchten Programmen am System von Swarovski waren meist gleich mehrere dieser Voraussetzungen verletzt. Zwar konnten mit einer Ausnahme in allen ausgewählten Objekten Unit-Tests erstellt werden, allerdings waren oft sehr zeitaufwändige Vorarbeiten dafür notwendig. Außerdem sollte in einem Programm ein gewisses Maß an Business Logik vorhanden sein. Programme welche lediglich Daten aus der Datenbank lesen und entsprechend auf der Oberfläche darstellen eignen sich daher meist nicht für die Implementierung von Unit-Tests. Weiters sollte ein Fehler in einem Objekt ein gewisses Risiko darstellen, da sonst die Testkosten leicht die Fehlerkosten übersteigen können. Bezogen auf Swarovski sollte vor der Einführung von Unit-Tests eine Teststrategie erstellt werden, welche ebenfalls den Einsatz von Unit-Tests regelt. Darin sollten Metriken festgelegt werden, welche den Entwicklern den Umfang der zu erstellenden Tests vorgeben. Als Metrik für die Implementierung von Unit-Tests wird üblicherweise die Testabdeckung verwendet. Diese regelt im Wesentlichen das Verhältnis von getestetem Code zum gesamten Programmcode. Für den Einsatz von Unit-Tests eignen sich jene Objekte am meisten, welche in Geschäftsprozessen mit hoher Risikobewertung vorkommen, entsprechend oft aufgerufen werden und derzeit oft Fehler verursachen. Bei dieser Schnittmenge kann durch die Implementierung relativ weniger Tests eine hohe Qualitätsverbesserung erreicht werden. Konkret sind das vor allem Objekte aus den Modulen „Materials Management“ und „Sales and Distribution“, da diese sowohl bei der Risikoanalyse als auch bei der Liste der derzeitigen Programmabbrüche ganz vorne zu finden sind. 39 Danksagung Patrick Deutsch 6 Danksagung An dieser Stelle möchte ich mich bei Priv.-Doz. Dipl.-Ing. Mag. Dr. Michael Felderer bedanken, der mir während der gesamten Zeit als Betreuer zur Verfügung stand und mir stets weiterhelfen konnte. Ein großes Dankeschön geht an die Firma Swarovski, welche diese Bachelorarbeit erst ermöglicht hat. Ein besonderer Dank gilt hier meinem Vorgesetzten Mag. Stefan Totschnig, der mich sowohl bei der Themenwahl als auch bei der Umsetzung unterstützt hat. Außerdem bedanke ich mich bei meinen Kolleginnen und Kollegen bei der Firma Swarovski, die mir sowohl durch ihre Teilnahme an meiner Mitarbeiterumfrage als auch durch hilfreiche Tipps weitergeholfen haben. Abschließend möchte ich mich noch bei meiner Freundin Nicole bedanken, welche mich während der gesamten Studienzeit immer wieder motiviert hat und stets ein offenes Ohr für meine Sorgen hat. 40 Literaturverzeichnis Patrick Deutsch 7 Literaturverzeichnis [1] P. Gerrard, “Test methods and tools for ERP implementations,” Proc. - Test. Acad. Ind. Conf. Pract. Res. Tech. TAIC PART-Mutation 2007, pp. 40–43, 2007. [2] “ERP-Software - Marktanteile der Anbieter weltweit 2013 | Statistik,” 2013. [Online]. Available: https://de.statista.com/statistik/daten/studie/262342/umfrage/marktanteileder-anbieter-von-erp-software-weltweit/. [Accessed: 16-Nov-2016]. [3] G. J. Myers, C. Sandler, and T. Badgett, The Art of Software Testing. Wiley, 2011. [4] D. W. Hoffmann, Software-Qualität. Springer, 2013. [5] “Softwarefehler kommen die deutsche Wirtschaft teuer zu stehen computerwoche.de,” 2001. [Online]. Available: http://www.computerwoche.de/nachrichten/519152. [Accessed: 23-Oct-2016]. [6] H. M. Sneed and S. Jungmayr, “Mehr Testwirtschaftlichkeit durch Value-DrivenTesting,” Informatik-Spektrum, vol. 34, no. 2, pp. 192–209, Apr. 2011. [7] T. Linz and A. Spillner, Basiswissen Softwaretest: Aus- und Weiterbildung zum Certified Tester - Foundation Level nach ISTQB-Standard. dpunkt.verlag, 2012. [8] M. Pol, T. Koomen, and Andreas Spillner, Management und Optimierung des Testprozesses: Praktischer Leitfaden für erfolgreiches Software-Testen mit TPI und TMap, 2. Heidelberg: dpunkt.verlag, 2002. [9] P. Liggesmeyer, Software-Qualität: Testen, Analysieren und Verifizieren von Software. Spektrum Akademischer Verlag, 2009. [10] A. Al-Hossan and A. S. Al-Mudimigh, “Practical Guidelines for ERP Testing,” J. Theor. Appl. Inf. Technol., vol. 27, pp. 11–18, 2011. [11] R. Osherove, The Art of Unit Testing. mitp Verlag, 2015. [12] D. Majer, Unit-Tests mit ABAP-Unit. dpunkt.verlag, 2009. [13] Wikipedia, “Modultest - Wikipedia, Die freie Enzyklopädie,” 2016. [Online]. Available: https://de.wikipedia.org/w/index.php?title=Modultest&oldid=158478083. [Accessed: 19-Oct-2016]. [14] F. Westphal, Testgetriebene Entwicklung mit JUnit und FIT. dpunkt.verlag, 2005. [15] Wikipedia, “ABAP Unit - Wikipedia, Die freie Enzyklopädie,” 2016. [Online]. Available: https://de.wikipedia.org/w/index.php?title=ABAP_Unit&oldid=155777715. [Accessed: 19-Oct-2016]. [16] M. Felderer and F. Piazolo, “Multidimensional Views on Enterprise Information Systems: Proceedings of ERP Future 2014,” ERP Futur. 2014, p. 183, 2016. [17] C. C. Chen, C. Law, and S. C. Yang, “Managing ERP Implementation Failure: A Project Management Perspective,” IEEE Trans. Eng. Manag., vol. 56, no. 1, pp. 157– 170, Feb. 2009. [18] M. Bradford, Modern ERP: Select, Implement, and Use Today’s Advanced Business Systems. Lulu.com, 2016. [19] SAP, “Help Portal - Code Inspector.” [Online]. Available: https://help.sap.com/saphelp_nw73/helpdata/de/49/205531d0fc14cfe10000000a42189 b/content.htm. [Accessed: 22-Oct-2016]. 41 Literaturverzeichnis Patrick Deutsch [20] A. Krawczyk, “ABAP Unit Tests without database dependency - DAO concept - SAP Blogs,” 2013. [Online]. Available: https://blogs.sap.com/2013/03/21/abap-unit-testswithout-database-dependency-dao-concept/. [Accessed: 03-Nov-2016]. [21] F. Witte, Testmanagement und Softwaretest: Theoretische Grundlagen und praktische Umsetzung. Wiesbaden: Springer Fachmedien Wiesbaden, 2016. [22] R. Plantiko, “Keine Message-Befehle in Geschäftslogik!,” 2010. [Online]. Available: http://ruediger-plantiko.blogspot.co.at/2010/11/keine-message-befehle-ingeschaftslogik.html. [Accessed: 03-Nov-2016]. [23] A. Spillner, T. Roßner, M. Winter, and T. Linz, Praxiswissen Softwaretest Testmanagement – Aus- und Weiterbildung zum Certified Tester – Advanced Level nach ISTQB-Standard. dpunkt.verlag, 2014. 42 Anhang Patrick Deutsch 8 Anhang 8.1 Umfrage: SAP UNIT – Testing bei Swarovski Seite 1 Diese Umfrage zum Thema Softwarequalität mit Schwerpunkt UNIT-Testing bei Swarovski umfasst 9 bis 15 Fragen. Planen Sie ca. 5 bis 10 Minuten zur Beantwortung der Fragen ein. Vielen Dank für Ihre Teilnahme! Seite 2 1. Welche Position innerhalb der Swarovski IT nehmen Sie ein? * Entwickler Consultant Sonstiges (bitte angeben) Seite 3 2. Sind Sie mit dem Begriff UNIT-Test (auch Modul- oder Komponententest) vertraut? * Ja Nein keine Angabe 43 Anhang Patrick Deutsch Seite 4 3. Haben Sie selbst bereits einmal einen UNIT-Test geschrieben? * Ja Nein keine Angabe Seite 5 4. Sind Sie mit dem ABAP UNIT Framework zum Erstellen von UNIT-Tests vertraut? * Ja Nein keine Angabe Seite 6 5. Kennen Sie das Prinzip des UNIT-Testings aus anderen Programmiersprachen (zB Java)? * Ja Nein keine Angabe 44 Anhang Patrick Deutsch Seite 7 6. Können Sie Vor-/Nachteile von ABAP UNIT gegenüber UNIT-Test Frameworks anderer Programmiersprachen (JUnit, NUnit, usw.) nennen? * Ja Nein keine Angabe Seite 8 7. Geben Sie bitte die Vor-/Nachteile von ABAP UNIT gegenüber UNIT-Test Frameworks anderer Programmiersprachen (JUnit, NUnit, usw.) an: * Seite 9 8. Wie testen Sie Ihre Programme? * manuell automatisiert Sonstiges (bitte angeben) 45 Anhang Patrick Deutsch Seite 10 9. Welche Teststrategie verfolgen Sie bei Ihren Tests? * systematisch (Testfallableitung aus der Spezifikation bzw. bestimmte Testdesign- Techniken) explorativ (auf Basis der eigenen Erfahrung) Sonstiges (bitte angeben) Seite 11 10. Sind Sie der Meinung, dass die Entwickler ihre Progamme selbst ausreichend testen? * Ja Nein keine Angabe Sonstiges (bitte angeben) 46 Anhang Patrick Deutsch Seite 12 11. Glauben Sie, dass automatisierte UNIT-Tests die Qualität der von Ihnen betreuten Programme erhöhen könnten? * Ja Nein keine Angabe Sonstiges (bitte angeben) UNIT-Test (Modultest): Vom Entwickler definierte und implementierte Testfälle möglichst kleiner Programmeinheiten (Units) - zB Methoden, Funktionsbausteine, Performs, usw.) Seite 13 12. Glauben Sie, dass automatisierte UNIT-Tests Ihren Testaufwand reduzieren könnten? * Ja Nein keine Angabe Seite 14 13. Nennen Sie Gründe dafür, warum Sie glauben, dass automatisierte UNIT-Tests Ihren Testaufwand reduzieren könnten? * 47 Anhang 14. Patrick Deutsch Nennen Sie Gründe dafür, warum Sie glauben, dass automatisierte UNIT-Tests Ihren Testaufwand nicht reduzieren könnten? * Seite 15 15. Wie schätzen Sie selbst die Qualität der von Ihnen geschriebenen/betreuten Programme ein (gemessen an der Anzahl der Programmabbrüche bzw. von den Usern gemeldeten Fehlern)? * sehr hoch hoch mittel niedrig sehr niedrig 48 Anhang Patrick Deutsch Seite 16 16. Warum glauben Sie, sind derzeit bei Swarovski keine UNIT-Tests im Einsatz? * Prinzip ist nicht bekannt Budgetknappheit Zeitmangel durch UNIT-Tests können vermutlich keine zusätzlichen Fehler gefunden werden technische Gründe (zB Objekte sind nicht UNIT testbar) Sonstiges (bitte angeben) 49 Anhang Patrick Deutsch 8.2 Detailliste der Programmabbrüche Tabelle 8.1: Programmabbrüche vermeidbar durch UNIT-Tests Fehler RAISE_EXCEPTION CONVT_NO_NUMBER CALL_FUNCTION_OPEN_ERROR CALL_FUNCTION_REMOTE_ERROR COMPUTE_BCD_OVERFLOW BCD_ZERODIVIDE DATA_LENGTH_0 TABLE_INVALID_INDEX BCD_FIELD_OVERFLOW GETWA_NOT_ASSIGNED ITAB_LINE_NOT_FOUND CALL_FUNCTION_PARM_MISSING CONVT_OVERFLOW CALL_FUNCTION_CONFLICT_TYPE UNCAUGHT_EXCEPTION BCD_OVERFLOW OBJECTS_OBJREF_NOT_ASSIGNED CONVT_CODEPAGE CALL_FUNCTION_SEND_ERROR STRING_OFFSET_TOO_LARGE CHECK_SELOPT_ILLEGAL_SIGN STRING_OFFSET_LENGTH_TOO_LARGE STRING_OFFSET_NEGATIVE SUM_OVERFLOW COMPUTE_INT_TIMES_OVERFLOW MOVE_TO_LIT_NOTALLOWED_NODATA OBJECTS_OBJREF_NOT_ASSIGNED_NO OPEN_DATASET_NO_AUTHORITY DDIC_TYPE_INCONSISTENCY ASSIGN_TYPE_CONFLICT STRING_LENGTH_TOO_LARGE COLLECT_OVERFLOW_TYPE_P DATA_OFFSET_TOO_LARGE CALL_FUNCTION_RECEIVE_ERROR SET_HANDLER_FOR_NULL TABLE_ILLEGAL_STATEMENT CALL_FUNCTION_NOT_FOUND DYN_CALL_METH_PARAM_TYPE CALL_FUNCTION_CONFLICT_LENG CALL_TRANSACTION_NOT_FOUND IMPORT_ALIGNMENT_MISMATCH EXPORT_TOO_MUCH_DATA DATASET_NOT_OPEN CALL_FUNCTION_NOT_ACTIVE GETWA_WRONG_LENGTH Summe 50 Anzahl 389 296 275 203 147 119 115 104 92 92 71 68 65 57 57 47 47 44 31 25 22 13 13 8 8 8 7 7 6 5 4 3 3 3 3 2 2 2 2 1 1 1 1 1 1 2471 Anhang Patrick Deutsch Tabelle 8.2: Programmabbrüche nicht vermeidbar durch UNIT-Tests Fehler TIME_OUT ITAB_DUPLICATE_KEY CONNE_IMPORT_WRONG_COMP_LENG DYNPRO_FIELD_CONVERSION DYNPRO_SYNTAX_ERROR MESSAGE_TYPE_UNKNOWN DYNP_TOO_MANY_RADIOBUTTONS_ON SYNTAX_ERROR STOP_NO_REPORT DYNPRO_MSG_IN_HELP SPOOL_NO_CONVERSION MESSAGE_TYPE_X_TEXT SYSTEM_NO_ROLL DYNPRO_NOT_FOUND LOAD_NO_ROLL Summe Anzahl 1233 462 104 76 42 6 6 6 6 4 3 3 1 1 1 1954 Tabelle 8.3: Programmabbrüche durch technische Fehler Fehler LOAD_PROGRAM_TABLE_MISMATCH LOAD_PROGRAM_CLASS_MISMATCH TSV_TNEW_PAGE_ALLOC_FAILED ITS_TEMPLATE_NOT_FOUND TSV_TNEW_BLOCKS_NO_ROLL_MEMORY TYPELOAD_NEW_VERSION LIST_TOO_MANY_LPROS STOP_WITHIN_CALLED_DYNPRO LOAD_TYPE_VERSION_MISMATCH SYSTEM_CORE_DUMPED TSV_TNEW_OCCURS_NO_ROLL_MEMORY LOAD_PROGRAM_NOT_FOUND Summe 51 Anzahl 113 78 68 67 45 16 16 15 12 5 2 1 438 Anhang Patrick Deutsch Tabelle 8.4: Programmabbrüche durch SQL Fehler Fehler DBSQL_SQL_ERROR DBSQL_DUPLICATE_KEY_ERROR DBSQL_TABLE_UNKNOWN SQL_CAUGHT_RABAX SAPSQL_PARSE_ERROR SAPSQL_STMNT_TOO_LARGE DBSQL_STMNT_TOO_LARGE SAPSQL_IN_ITAB_ILLEGAL_SIGN SAPSQL_PARSER_TODO_WARNING DBSQL_FAE_STATEMENT_TO_BIG DBSQL_TOO_MANY_OPEN_CURSOR DBIF_REPO_SQL_ERROR DBIF_NTAB_SQL_ERROR Summe Anzahl 142 107 54 35 25 19 17 7 6 5 2 1 1 421 8.3 Abbildungsverzeichnis Abbildung 2.1: Gliederung der Software Qualitätssicherung [4] ................................................... 3 Abbildung 2.2: Kontrollflussgraph für das Zählen von Zeichen ..................................................... 4 Abbildung 2.3: Einteilung der Teststufen nach Prüfebene [4] ....................................................... 6 Abbildung 2.4: Fehlerkorrekturkosten nach Entdeckungszeitpunkt [9] ........................................ 6 Abbildung 2.5: Traditioneller Entwicklungszyklus [11] .................................................................... 9 Abbildung 2.6: Testgetriebener Entwicklungszyklus [11] ............................................................... 9 Abbildung 2.7: Phasen der Testgetriebenen Entwicklung............................................................ 10 Abbildung 2.8: Beispiel einer Testklasse in ABAP Unit ................................................................ 11 Abbildung 2.9: ERP Systemlandschaft [18] .................................................................................... 12 Abbildung 2.10: ERP Systemlandschaft bei Swarovski................................................................ 13 Abbildung 4.1: Einteilung der Personen nach Unit-Test Kenntnissen........................................ 22 Abbildung 4.2: Einteilung der Personen mit Unit-Test Kenntnissen gruppiert nach bereits erstellten Unit-Tests ........................................................................................................................... 23 Abbildung 4.3: mögliche Gründe für den derzeitigen Nicht-Einsatz von Unit-Tests bei Swarovski............................................................................................................................................. 24 Abbildung 4.4: Einteilung der Programmabbrüche in vermeidbar und nicht-vermeidbar durch UNIT-Testing ....................................................................................................................................... 25 Abbildung 4.5: Beispiel für Code-Highlighting bei Bedingungsüberdeckung in ABAP Unit .... 27 Abbildung 4.6: Beispiel für Code-Highlighting bei Anweisungsüberdeckung in ABAP Unit.... 28 Abbildung 4.7: Zusammenfassung von Anweisungsüberdeckung in ABAP Unit ..................... 28 Abbildung 4.8: Bewertung des Risikos der einzelnen Geschäftsprozesse ............................... 30 Abbildung 4.9: Pareto Darstellung der Risikobewertung aller Geschäftsprozesse bei Swarovski............................................................................................................................................. 31 Abbildung 5.1: Bewertung des Testprozesses bei Swarovski durch die Firma Software Quality Lab aus dem Jahr 2013 ....................................................................................................... 38 52 Anhang Patrick Deutsch 8.4 Tabellenverzeichnis Tabelle 2.1: xUnit-Implementierungen verschiedener Programmiersprachen [5] ...................... 7 Tabelle 2.2: eingesetzte ERP Module bei Swarovski ................................................................... 13 Tabelle 4.1: Personenklassifizierung der ERP-Testing Umfrage ................................................ 19 Tabelle 4.2: Teststufen in der ERP Umfrage.................................................................................. 19 Tabelle 4.3: ERP System Verteilung ............................................................................................... 20 Tabelle 4.4: Aufteilung von Unit-/Modul-/Klassen-/Komponententest in die jeweiligen ERP Systeme ............................................................................................................................................... 21 Tabelle 4.5: Qualitätssicherung im jeweiligen Vorgehensmodell ................................................ 21 Tabelle 4.6: Teilnahme an der Mitarbeiterbefragung .................................................................... 22 Tabelle 4.7: Einteilung nach Unit-Test Framework Kenntnissen ................................................ 23 Tabelle 4.8: Gliederung der Personen nach Testabwicklung ...................................................... 23 Tabelle 4.9: Gründe für reduzierten Testaufwand ......................................................................... 24 Tabelle 4.10: Gründe für keinen reduzierten Testaufwand .......................................................... 24 Tabelle 4.11: Programmabbrüche gruppiert nach Kategorie ....................................................... 25 Tabelle 4.12: Gliederung der Programmabbrüche nach Modulen .............................................. 25 Tabelle 4.13: Auswertung der Verarbeitungsblöcke im SAP ERP Produktivsystem ............... 26 Tabelle 4.14: Anzahl getestete Objekte je Klassifizierung ........................................................... 26 Tabelle 8.1: Programmabbrüche vermeidbar durch UNIT-Tests ................................................ 50 Tabelle 8.2: Programmabbrüche nicht vermeidbar durch UNIT-Tests....................................... 51 Tabelle 8.3: Programmabbrüche durch technische Fehler .......................................................... 51 Tabelle 8.4: Programmabbrüche durch SQL Fehler ..................................................................... 52 53