Unsere Lösungen,
ob Start-Up oder etabliertes Unternehmen

Agile Methoden

Business-Intelligence

Business Process Management

Clean Code

Cloud

IT-Sicherheit

Java

Künstliche Intelligenz

Mobile- und Weblösungen

Robotic Process Automation

Testautomatisierung

vivir

viadee Blog

In unserem Blog finden Sie Fachartikel, Success-Stories, News, Messeberichte und vieles mehr... vor allem aber hoffentlich wertvolle Informationen, die Ihnen in Ihrem konkreten Projekt und in Ihrem Business weiterhelfen. Bei Fragen und Anregungen nehmen Sie gerne Kontakt zu uns auf. Bitte benutzen Sie dazu die Kommentarfunktion unter den Blogbeiträgen.

Predictive Code Maintenance – Kommentare helfen

30.07.19 08:30

In Software-Projekten ist es wichtig den Code dauerhaft flexibel und stabil zu halten, um ihn schnell an neu-aufkommende Anforderungen anpassen zu können. Um dies zu gewährleisten, sollte effiziente Softwarewartung dort erfolgen, wo größere Änderungen erwartet werden - mit Machine Learning und NLP.

Predictive Code Maintenance
Predictive Maintenance – 2 Beispiele aus dem intellij-Projekt

Entwickler deuten selbst häufig in ihren Kommentaren darauf hin, dass an der einen oder anderen Stelle noch Änderungen bzw. Verbesserungen notwendig sind. Sei es mit einem expliziten ToDo-Kommentar oder durch Ausdruck von Unsicherheit, dass die Funktion jetzt so funktionieren könnte.

Machine Learning-Verfahren können hierbei verwendet werden, um anhand dieser Kommentare Vorhersagen zu treffen, welche Dateien sich in (naher) Zukunft ändern werden. Je sicherer sich das Vorhersagemodell ist, dass sich die Datei ändern wird, desto höher sollte die Wartungsarbeit hierfür priorisiert werden: Viele Code-Smells haben auch Missverständnisse zur Folge. Vielleicht kann man Missverständnisse schon vorab durch Predictive Code Maintenance verhindern?
Wir haben ein Machine Learning-Modell dazu trainiert und anhand der Kommentare des intellij-Projektes erfolgreich getestet. Es zeigt auf, dass hier eine Überarbeitung der Datei sinnvoll ist:

„dirty hack because of dummy implementation of org.gradle.native
platform.toolchain.internal.msvcpp.VisualCppPlat
formToolProvider.isToolAvailable“ (97,1% Confidence)

Commit ba9c53190ebe4ca99913ea0f302f8697a8ac1ff2

Folgender Kommentar lässt keine weiteren Änderungen erwarten, denn der dazugehörige Code wurde mit diesem Commit offenbar gerade erst gewartet:

„cleanup, simplify, remove unnecessary fields.“ (90,3% Confidence)
Commit c7e6d17df2ab61477e1a752006656ca43add33b2

Mit den übrigen Eigenschaften einer Java-Klasse haben wir die Idee bereits erprobt: Große Klassen, komplexe Klassen sowie bestimmte Packages und Typen von Klassen geben schon Hinweise auf Änderungswahrscheinlichkeiten wie auch der letzte Commit am Freitagabend. Was lässt sich aber nur mit den hier 81.712 Commit-Kommentaren erreichen?

Das Vorgehen

Um Machine Learning-Algorithmen auf Textdaten anwenden zu können, müssen die Kommentare entsprechend mit Natural Language Processing-Techniken (NLP) bearbeitet und als numerische Vektoren repräsentiert werden. Die angewendeten NLP-Techniken beinhalten sowohl die Tokenisierung der Kommentare und das Filtern der Stop- und Short-words („und“, „aber“ etc.), als auch die Reduzierung der Worte zu ihrer Stammform. Ziel dieser Techniken ist es, die Wortvielfalt zu reduzieren und somit das Repräsentations-Modell präziser zu machen.

Grundlegend unterscheidet man zwischen zwei Arten an Vektor-Repräsentations-Modellen: Häufigkeitsbasierte Modelle und vorhersagebasierte Modelle. Da die Häufigkeit eines Wortes in einem Kommentar nicht entscheidend darüber ist, ob sich die dazugehörige Datei in Zukunft ändern wird, sondern eher die semantische und syntaktische Gegebenheit, wurde ein vorhersagebasiertes Repräsentations-Modell erstellt. Hierfür wurde der Word2Vec Algorithmus von Mikolov et al. (1) gewählt. Mithilfe eines trainierten Word2Vec-Modells können nun die Kommentare als numerische Vektoren repräsentiert und als Input-Features für ein Änderungsvorhersage-Modell verwendet werden. Die Vektoren stellen den Durchschnittsvektor aller Worte, die in dem Kommentar vorkommen, dar. Das Verfahren ist nicht neu, sondern eher ein alter Bekannter – mit vielen Einsatzgebieten: Auch für Chat-Bots oder das Input-Management von Dokumenten und Nachrichten in Unternehmen nützen dieses Verfahren und seine Geschwister.

Getestet wurde das Vorgehen anhand von fünf verschiedenen Projekten und evaluiert hinsichtlich unterschiedlicher Einflussfaktoren.

Ergebnisse

Die Ergebnisqualität variiert stark zwischen den Projekten – worauf kommt es an?
  1. Im Allgemeinen lässt sich sagen: Je weniger Personen an einem Software-Projekt arbeiten, desto besser kann das Modell in den Kommentaren Muster identifizieren, die eine zukünftige Änderung einer Datei vorhersagen.
  2. Für jedes Git-Projekt muss ein eigenes Modell erstellt werden, weil die Kommentare und Nutzungsstile sehr Projekt-spezifisch sind – viele deutsche Projekte nutzen ein Gemisch aus Deutsch und Englisch, was die Nutzung von generischen Modellen erschwert.
  3. Einige Projekte haben sehr kurze, komprimierte Kommentare, die nur auf Ticket-Systeme verweisen („closed #123“) oder nahezu inhaltsleer sind („fixed“). An dieser Stelle möchten wir also auch eine Lanze für sprechende, inhaltliche Git-Kommentare brechen: Diese erleichtern menschlichen wie auch künstlichen Lesern deutlich das Leben.
Wichtig für eine Nutzung der Idee in Produktion erscheinen insbesondere die Konfidenz-Werte: Anders als menschliche Reviewer, sind Machine Learning-Modelle konsequent offen und geben zu jeder Einzel-Bewertung an, als wie sicher die getroffene Prognose eingeschätzt wird. Hierauf lässt sich gut weiterrechnen und priorisieren: Klassen mit hoher Änderungswahrscheinlichkeit und vielen Code-Smells verdienen maximale Aufmerksamkeit in der Wartung.

Wir freuen uns auf Ideen und Erfahrungsaustausch!


Quellen:
  • Mikolov, T., Chen, K., Corrado, G., and Dean, J. 2013. “E_cient estimation of word representations in vector space,” arXiv preprint arXiv:13013781 .

Hinweis: Der Artikel fasst im Wesentlichen Erkenntnisse aus Literatur-Recherche, eigenen Experimenten und Experten-Interviews aus der Master-Arbeit von Maren Reuter an der WWU Münster 2018 zusammen.


Jetzt Blog abonnieren!
zum Blog
Dr. Frank Köhne

Dr. Frank Köhne

Dr. Frank Köhne ist Senior-Berater bei viadee IT-Unternehmensberatung, Leiter des F&E-Bereichs Java, zuständig für Hochschulkooperationen im Raum Münster, Daten-Liebhaber und Agilist.

Frank Köhne bei Xing  Frank Köhne auf Twitter