Entwicklung eines Prototypen zur Berechnung der Grenzwertabdeckung für JVM Sprachen: Bachelorarbeit

Wie bereits einige unserer Kollegen vor ihm (siehe z.B. hier), hat auch Aykut seine Bachelorarbeit im Anschluss an seine Werkstudententätigkeit bei Faktor Zehn geschrieben. Hierbei hat er sich mit der Entwicklung eines Prototypen zur Berechnung der Grenzwertabdeckung für JVM Sprachen beschäftigt. Wir freuen uns daher sehr, Euch heute einen Artikel von Aykut über seine Bachelorarbeit vorstellen zu können:

„Vor über 2 Jahren habe ich (Aykut Yilmaz) als Praktikant bei Faktor Zehn angefangen und im Anschluss als Werkstudent weitergearbeitet, weswegen ich mich dazu entschloss auch meine Bachelorarbeit bei der Faktor Zehn zu schreiben. In der Bachelorarbeit habe ich mich mit der Entwicklung eines Prototypen zur Berechnung der Grenzwertabdeckung für JVM Sprachen beschäftigt.

In der Softwareentwicklung gibt es mittlerweile eine Vielzahl an Metriken um die Qualität von Quellcode zu messen. Sie helfen den Entwicklern dabei die Funktionalität der Software zu verifizieren und zukünftige Wartungs- und Erweiterungsarbeiten zu erleichtern. Somit halten sie auf lange Sicht den wirtschaftlichen Aufwand niedrig. Eines dieser Metriken ist die Testabdeckung. Jedoch wurden über die Zeit viele verschiedene Testmethoden entwickelt, die die Qualität des Codes aus einem bestimmten Blickwinkel überprüft. Einige dieser Testmethoden wurden sogar zum automatisierten Werkzeug und helfen Entwicklern auf der ganzen Welt die Qualität ihrer Software aufrecht zu erhalten und Fehlern auf die Schliche zu kommen.

Mit der Motivation Qualitätsmängel in Software weiter auszumerzen, erkundet meine Bachelorarbeit eine weitere Methode zur Messung der Testabdeckung und versucht diese als automatisiertes Werkzeug zu implementieren. Die Methode mit der diese Testabdeckung gemessen wird nennt sich Grenzwertabdeckung.
Die Grenzwertabdeckung ist ursprünglich eine Methode um Testfälle zu finden und stammt aus der Kategorie der Blackbox-Testverfahren. Sie ist eine Erweiterung der Äquivalenzklassenbildung. Bei der Bildung von Äquivalenzklassen werden alle möglichen Werte eines Eingabeparameters einer Funktion in Gruppen eingeteilt, die äquivalentes Verhalten bei der Funktion verursachen sollen. Dadurch soll ein einzelner Repräsentant der Gruppe ausreichen, um das gesamte Verhalten zu testen. Die Grenzwertabdeckung geht einen Schritt weiter und fordert, dass Testwerte unmittelbar an jeder Grenze zweier aneinander liegenden Äquivalenzklassen verwendet werden müssen. Dies stammt aus der Beobachtung der Praxis, dass Fehler in der Software häufig an den Übergängen von einer zur nächsten Äquivalenzklasse zu finden sind. Des Weiteren ist das Testen an den Grenzen besser darin Fehler aus zukünftigen Änderungen zu detektieren.

Für die Ausarbeitung meiner Bachelorarbeit nahm ich das CodeCoverage-Tool JaCoCo als Basis her, da dessen Sourcecode öffentlich auf GitHub verfügbar ist und auch in der Entwicklung von FaktorZehn selbst verwendet wird. JaCoCo ist, mit Hilfe von Bytecodemanipulation, in der Lage Ausführungsdaten der Software (Tests) zu sammeln und generiert anhand der gesammelten Daten einen Qualitätsbericht, der verschiedenste Testmetriken beinhaltet. Da sich die Erhebung der Ausführungsdaten massiv auf Bytecodemanipulationen stützt, ist ein fundiertes Wissen von JVM-Bytecode, sowie des ASM-Frameworks (Framework für Bytecodemanipulationen), notwendig. Zusätzlich verwendet JaCoCo Java-Agents und die Instrumentation-API um diese Manipulationen zur Laufzeit durchzuführen. Um nun auch die Grenzwertabdeckung in diesen Prozess miteinzubeziehen mussten Anpassungen am Quellcode von JaCoCo vorgenommen werden.
Wie zuvor erwähnt, handelt es sich bei der Grenzwertabdeckung um ein Blackbox-Verfahren. JaCoCo ist jedoch auf Byte-/Sourcecode beschränkt. Hierfür musste die Grenzwertabdeckung erst umdefiniert werden. Dies hat allerdings den Nebeneffekt, dass sich das Werkzeug nur an die eigentliche Grenzwertabdeckung grob annähert, statt sie exakt wieder zu spiegeln. Außerdem beschränkt sich die Bachelorarbeit hauptsächlich auf ganzzahlige Primitivtypen, sowie den Typen char. Nicht nur bei der Umdefinierung, sondern auch bei der Anwendung auf die JVM-Plattform treten Probleme auf, die mit einem pragmatischen Lösungsansatz angegangen werden.

Aufgrund der gewissen Ungenauigkeit die dabei entsteht, eignet sich das Werkzeug nicht als Akzeptanzkriterium für eine CI-Plattform (wie z.B. Jenkins). Jedoch hilft sie bei der Aufdeckung unzureichend getesteten Codes, wodurch die Arbeit zum Schluss kam, dass die Berechnung der Grenzwertabdeckung eher ein separates Werkzeug sein sollte, welches nach Bedarf ausgeführt wird.

Ich bedanke mich bei Faktor Zehn für die Möglichkeit meine Bachelorarbeit bei Ihnen geschrieben haben zu dürfen. Ebenfalls bin ich dankbar für die Freiheit und Flexibilität der Auswahl des Bachelorarbeitsthemas und dessen Ausarbeitung, die mir zur Verfügung gestellt wurde.“

 

Autor: Aykut Yilmaz

Schreiben Sie einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Solve : *
26 + 8 =