Eingabe löschen

Kopfbereich

Schnellnavigation

Hauptnavigation

Bachelorarbeit Informatik: Fehler im Java-Code automatisch erkennen

Aus Fehlern lernen

Je komplexer Softwaresysteme werden, desto schwieriger wird es auch, Fehler darin zu finden. Die Informatik-Absolventen Tobias Meier und Yacine Mekesser haben eine Methode untersucht, um die Fehleranfälligkeit eines Programmcodes vorauszusagen, während er entsteht. Sie verwenden dabei Methoden aus dem Maschinellen Lernen.

Es ist ein ungeschriebenes Gesetz: Wo gearbeitet wird, da passieren Fehler. Das gilt nicht nur für Maurer, Bäckerinnen, Texter oder Bankangestellte, sondern auch für Informatiker, wenn sie Computerprogramme schreiben. Einfache Programme von ein paar wenigen Zeilen können dabei noch problemlos von Auge kontrolliert werden. Doch kommen heute immer komplexere Softwaresysteme zur Anwendung. Deshalb wird es zunehmend schwieriger, die Code-Qualität zu kontrollieren und allfällige Fehler erkennen und korrigieren zu können. «Umso vielversprechender wäre es, wenn ein System schon während des Schreibens vorhersagen könnte, wie wahrscheinlich Fehler im Code sind», sagt Informatikdozent Mark Cieliebak. Dieser Idee sind die beiden Informatik-Absolventen Tobias Meier und Yacine Mekesser in ihrer Bachelorarbeit nachgegangen. Sie haben es sich zur Aufgabe gemacht, für diese Herausforderung ein Toolset zu entwickeln.

Training für das System

Das Toolset analysiert dabei den Code und seine Metadaten in sogenannten Git-Repositories. Die Git-Repositories dienen der Versionsverwaltung von Softwareprojekten und zeichnen die Geschichte des gesamten Projekts nach. Daraus sollen die Tools der Absolventen ganz bestimmte Daten extrahieren und die Wahrscheinlichkeit von Bugfixes für die kommenden Monate errechnen. Als Bugfix bezeichnet man eine neue Version der Software, die einen konkreten Fehler behebt. Anders als viele andere Methoden, basiert das Vorgehen der beiden Informatik-Absolventen auf Maschinellem Lernen. Das bedeutet, dass ein System anhand von Beispielen auf einem zuvor festgelegten Datensatz trainiert wird und ganz bestimmte Regeln erlernt. Sobald das Training abgeschlossen ist, soll das System die erlernten Regeln auch auf neue, unbekannte Fälle anwenden können.

«Damit könnten Entwickler Fehler schneller finden und Projektmanager ihre Ressourcen effizienter auf kritische Komponenten einplanen.»

Tobias Meier

Methoden aus der Textanalyse

Zudem untersuchten die beiden Absolventen, ob sich auch Methoden aus der automatischen Textanalyse für die Fehlervorhersage nutzbar machen lassen. Hierzu unterteilten sie den Code in N-Grams, das heisst in Wortketten von bestimmter Länge. Diese untersuchten sie danach auf Ähnlichkeiten und Regelmässigkeiten, die Aufschluss über mögliche Fehler im Code geben könnten. «Den Nutzen dieser N-Grams konnten wir in unserer Arbeit leider nicht nachweisen», räumt Yacine Mekesser ein. «Aber wir konnten zeigen, dass in der Tat signifikante Zusammenhänge zwischen den Daten in den Repositories und der Fehleranfälligkeit des Codes bestehen. Diese Ergebnisse haben unsere anfänglichen Erwartungen sogar übertroffen.» Die beiden Absolventen sind überzeugt, dass eine Weiterentwicklung ihres Ansatzes lohnenswert ist.

Die Entwicklung geht weiter

Das Fernziel einer solchen Automatisierung ist klar: «Entwickler könnten damit Fehler schneller finden und Projektmanager ihre Ressourcen effizienter für kritische Komponenten einplanen», erklärt Tobias Meier. Bis es aber soweit ist, sind noch viele Entwicklungsschritte nötig. Yacine Mekesser ergänzt: «In unserer Arbeit ging es noch nicht darum, die Qualität der Fehlervorhersage zu überprüfen, sondern in einem ersten Schritt zu zeigen, dass die Fehlervorhersage mit unserem Toolset grund sätzlich funktioniert.» Die Entwicklung am Institut für angewandte Informationstechnologie geht auf jeden Fall weiter. «Es ist bereits eine weitere Projektarbeit auf diesem Gebiet ausgeschrieben», sagt Dozent Mark Cieliebak.