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.

TabNine Erfahrungsbericht – Wo hilft die KI beim Coding?

Mittwoch, 26.2.2020

Texterkennung und Textvorhersage sind im Alltag angekommen – in jedem Smartphone. Das Start-up TabNine tritt an, die Möglichkeiten des GPT-2-Modells für Entwickler zu erschließen. Hält das Werkzeug was es verspricht? Ein Erfahrungsbericht.

KI Texterkennung

Im letzten Jahr gab es viel Aufregung um das GPT-2-Modell. Es verlängert Sätze um einzelne Wörter – auch mehrfach. Auf diese Weise entstehen Texte, die man kreativ nennen kann. Das Ganze ist bedenklich, denn eine automatische Erkennung solcher Texte ist sehr schwer: Produkt-Reviews in großer Zahl zu fälschen ist einfacher geworden, weshalb die Autoren das Modell auch nur zögerlich publiziert hatten.

Das US-amerikanische Start-up TabNine hat mit dem gleichen Verfahren Quellcodes der gängigen Programmiersprachen auf GitHub „gelesen“ und so ein Modell erstellt, das verspricht, den Programmierer durch Code-Vorschläge bei der Arbeit zu unterstützen. Wir waren neugierig und haben das Produkt einen Monat lang in einem unserer Java-Projekte erprobt, das auch Markdown und SQL enthält.

Ermöglicht wurde das erst durch die Offline-Version der Software, die sich in die gängigen IDEs als Plugin integrieren lässt (Wir haben mit IntelliJ IDEA getestet).

Lessons Learned: TabNine - Wo hilft die KI beim Coding?

Die generierten Vorschläge sind beeindruckend: Es bildet erst einmal sinnvolle Namen für Funktionen und Klassen, schlägt Bezeichnungen für Argumente vor und schafft es grundsätzlich, die Sprachstruktur abzubilden. Das Team hat sich dennoch entschieden, das Werkzeug zunächst nicht weiter zu verwenden. Die Gründe:

  1. Seine Stärken spielt das Werkzeug beim Schreiben von natürlich-sprachlichem, technischem Text in Code-Kommentaren und Dokumentationstexten in Markdown aus. Hier schöpft die semantische Ergänzung aus dem Vollen, beschleunigt das Schreiben und macht Lust auf ausführlichere Kommentar-Texte.
  2. Der gleiche text-basierte Mechanismus kommt im Code wie auch in Kommentarblöcken zum Zuge. Generell macht das Tool einigermaßen plausible Vorschläge für Bezeichner, wenn es schon ähnliche Wörter im Projekt gefunden hat, egal ob in Dokumentation oder Quellcode.
  3. Die Vorschläge sind allerdings zwar semantisch überzeugend, aber leider nicht mit dem bestehenden Code syntaktisch abgeglichen: Ein Vorschlag für einen als nächstes aufzurufenden Methodennamen könnte „speichern“ heißen, obwohl es schon eine „save“ Methode gibt. Muss die Methode noch angelegt werden, ist der Vorschlag oft gut.
  4. Die von TabNine generierten Vorschläge reihen sich – in IntelliJ IDEA - oben in die Vorschlagsliste der Auto-Vervollständigung ein. Sie bekommen damit visuell Vorrang vor den Vorschlägen, die man von seiner IDE gewohnt ist. Das wird umso mehr stören, je mehr Code schon geschrieben ist. Insbesondere mit dem im folgenden Punkt beschriebenen Verhalten von TabNine ist die Ordnung der Vorschläge problematisch.
  5. Will man explizit eine schon geschriebene Klasse oder Methode nutzen, kann es sein, dass TabNine einen Textvorschlag generiert, der sich minimal von der tatsächlichen Klasse oder Methode unterscheidet: Zum Beispiel wird „DayofWeek“ anstatt „DayOfWeek“ vorgeschlagen. Wenn dann die unvermeidbare rote Linie unter dem Wort erscheint, wundert man sich: DayOfWeek gibt es doch? Und so kommt es vor, dass man sich über vermeintlich nicht existierende Klassen wundert, bis einem ein fehlender Buchstabe oder (wie hier) eine falsche Groß-/Kleinschreibung auffällt.
  6. Auch im Detail ist hier noch Integrationsarbeit zu leisten: Folge ich dem Vorschlag meiner IDE, eine Klasse zu nutzen, kümmert diese sich auch um das Import-Statement dazu. TabNine macht vielleicht den gleichen Vorschlag, weiß aber nicht, dass der Vorschlag Änderungen an anderen Stellen nach sich ziehen muss. Der Algorithmus betrachtet zwar den Kontext des Vorschlags, gemeint ist damit aber der Code kurz vor dem Cursor. Notwendige Integrationsschritte versteht TabNine (noch?) nicht.

Vereinzelt hat TabNine für uns als Alarmsignal funktioniert: Wenn größere, sinnvolle und vollständige Statements vorgeschlagen werden ist es ein Indikator für einen Refactoring-Bedarf: Identischer Code wird offensichtlich mehrfach verwendet und verletzt damit das DRY-Prinzip, was TabNine in aufdringlicher Weise sichtbar macht. Gut so!

Textvorhersage

Ausblick: TabNine - Wo kann KI beim Coding helfen?

Wir freuen uns auf die Weiterentwicklung des Tools. Auf der Feature-Wunschliste steht ein intelligenteres Zusammenspiel mit den Ergänzungsvorschlägen der IDE. Zumindest für das Schreiben von Dokumentationstexten ist hier, zum Preis einiger GPU-Zyklen, eine Produktivitätssteigerung zu erwarten: vergleichbar zur Schreib-Erfahrung auf modernen Smartphones. Der Wechsel zwischen den beiden Vorschlag-Gebern müsste aber noch reibungsloser sein, um unser Team zu überzeugen.

Der automatische Software-Entwickler scheint insgesamt noch in weiter Ferne. Der Ansatz Coding per Machine-Learning zu erlernen ist fragwürdig: Dass viele Menschen auf GitHub einen bestimmten Lösungsweg wählen, macht diesen Lösungsweg noch nicht gut. Auch API-Änderungen können Prinzip-bedingt nur langsam erlernt werden und man möchte ja nicht unter den letzten sein, die dazulernen.


Jetzt Blog abonnieren!
zum Blog
Dominic Steffen

Dominic Steffen

Dominic Steffen ist Berater bei der viadee IT-Unternehmensberatung. Er hat langjährige Erfahrung in der Konzeption und Entwicklung von geschäfts- und kundenorientierten Webapplikationen. Seine Schwerpunkte liegen im Bereich JavaEE & Spring und er interessiert sich für alles rund um den Softwareentwicklungsprozess.