Since this post accompanies a talk in German, it is written in German, too.
In der heutigen Softwareentwicklung ist der Einsatz externer Bibliotheken kaum mehr wegzudenken. Leider sind die Schnittstellen (APIs) dieser Bibliotheken nicht immer intuitiv und ausreichend dokumentiert. Daher kommt es immer wieder zu Fehlern, weil Entwickler eine API anders verwendet haben als es der API-Entwickler vorgesehen hat. Solche Fehler werden auch »API Misuses« genannt. Ein klassisches Beispiel für einen API Misuse ist, wenn ein weiteres Element aus einem Iterator
abgerufen wird ohne vorher zu überprüfen, dass ein weiteres Element existiert. Eine Studie hat gezeigt, dass API Misuses sowohl während der Entwicklung als auch in Releases immer wieder Probleme bereiten und in 7 von 10 Fällen Programmabstürze verursachen.
Leider ist es nicht generell möglich API Misuse durch das Design von APIs auszuschließen, denn statische Typsysteme, wie das von Java, sind nicht mächtig genug um API Misuse allgemein zu verhindern. Und auch statische Checker, wie FindBugs, finden nur wenige API Misuses, da oft keine entsprechenden Checks vorhanden sind. Wir brauchen also andere Ansätze um dem Problem zu begegnen.
In den letzten fünf Jahren habe ich an der TU Darmstadt automatisierte Verfahren zur Identifikation von API Misuse (API-Misuse Detektoren) erforscht und entwickelt. Solche Detektoren versuchen die korrekte Verwendung von APIs mithilfe maschineller Lernverfahren selbstständig zu erlernen und anschließend API Misuses zu erkennen. Mit ihrer Hilfe konnte ich erfolgreich API Misuses selbst in gut gepflegten Projekten wie dem Google Closure Compiler und TestNG finden.
In meinem Vortrag möchte ich über meine Erfahrungen, die Stärken und die Grenzen von API-Misuse Detektoren berichten. Ich werde diskutieren inwiefern maschinelles Lernen Entwickler sinnvoll bei der Qualitätssicherung unterstützen kann und ob Entwickler in Zukunft von solchen Ansätzen ersetzt werden können.