Entwickeln mit KI: IntelliJ IDEA, Visual Studio IntelliCode und Tabnine im Test

Seite 3: Geeignete Datenbasis ist Voraussetzung

Inhaltsverzeichnis

Die nächste Abbildung zeigt ein Beispiel: Die Anweisung auf der rechten Seite soll erneut die Einträge eines Verzeichnisses im Dateisystem ermitteln und einem Array aus Elementen des Typs String zuweisen. Der erste Eintrag der Programmierhilfe von IntelliJ (rosa Icon) schlägt vor, die Methode list() zu verwenden. Dieser Vorschlag entspricht genau der Implementierung der Vorlage und ist syntaktisch korrekt. Der vierte Vorschlag von Tabnine (blaues Icon), stattdessen die Methode listFiles() zu verwenden, ist hingegen syntaktisch falsch, weil listFiles() ein Array mit Elementen des Typs File zurückliefert. Man kann Tabnine über die Eingabe von Tabnine::sem so konfigurieren, dass solche Fehler ausgeschlossen sind. Trotzdem kam es in den Tests immer wieder zu syntaktisch falschen Vorschlägen.

IntelliJ IDEA mit Tabnine: Das KI-Tool macht hier einen syntaktisch falschen Vorschlag (blaues Icon); die Treffergenauigkeit hängt allerdings von der Datenbasis ab.

Wie Tabnine mit fachlichen Klassen zurechtkommt, auf die es nicht angelernt werden konnte, sollte der abschließende Testlauf mit dem Java-Programm zur Bestellaufnahme untersuchen. Bei den fachlichen Klassen dieses Programms konnte Tabnine wie zu erwarten anfangs keine sinnvollen deutschen Namensvorschläge und Komplettierungen anbieten, da es dem Tabnine-Modell an einer geeigneten Datenbasis fehlt. Stattdessen ergänzte Tabnine die eingegebenen Anfänge der Bezeichner zu englischen Namen. Implementiert man die Klasse mehrmals erneut und versucht danach nochmals, die gleichen Attribute einzufügen, bemerkt man den Lerneffekt: Die Vorschläge entsprechen nun oftmals exakt der Implementierungsvorlage. Die Treffergenauigkeit der Vorschläge hängt also nur von den Modellen ab, mit denen Tabnine arbeitet.

Der weitere Verlauf der Implementierung erweist sich als durchwachsen. Die ersten Vorschläge für das Hauptprogramm mit den komplettiert implementierten fachlichen Klassen bringen häufig fehlerhafte Vorschläge. Hier wirkt sich negativ aus, dass Tabnine den Quellcode nicht analysiert, sondern "nur" versucht, plausible Vorschläge auf Basis seiner Modelle anzuzeigen.

Ein Beispiel: Nimmt man den Tabnine-Vorschlag an, bei einem Objekt der Klasse Bestellung die Methode erzeugen() aufzurufen, führt das zu einem Fehler, weil diese Methode überhaupt nicht existiert. Der Vorschlag von IntelliJ IDEA, die Methode erzeugeBestellposition(…) aufzurufen, ist hingegen passgenau.

Der Vorschlag von Tabnine, erzeugen zu verwenden, ist falsch. IntelliJ IDEA liefert hingegen an der zweiten Position den richtigen Methodenvorschlag.

Es stellt sich die Frage, warum die unsichere Tabnine-Prognose an erster Stelle der Vorschläge steht und nicht der Vorschlag der Entwicklungsumgebung. Weiterhin ist unklar, warum an der Stelle des Rückgabewerts "tabnine" steht. Das Tabnine-Icon zeigt ja bereits an, dass der Vorschlag von Tabnine stammt. Weil der Rückgabewert der Methode durch den Toolnamen verdeckt ist, fehlt eine wichtige Zusatzinformation. In vielen Fällen lässt sich nicht sofort erkennen, ob der Vorschlag syntaktisch richtig ist. Die große Lernfähigkeit der KI-Erweiterung zeigt sich aber, wenn man die Klasse korrekt fertigstellt und dann versucht, sie erneut zu schreiben. Tabnine schlägt eine Codevervollständigung vor, die deutlich besser ist als die der internen Programmierhilfe von IntelliJ.

Im zweiten Anlauf hat die KI-Erweiterung Tabnine gelernt und bringt ein besseres Ergebnis als die IntelliJ-interne Programmierhilfe.

Ein Urteil über das KI-Tool Tabnine zu fällen, ist schwer. Es bringt ohne ausreichend angelerntes lokales Modell besonders bei technisch ausgelegten Programmen sofort einen Mehrwert, da die Trefferquote der Vorschläge dort relativ hoch ist. Bei fachlich orientierten Programmen muss man hingegen eine Lernphase in Kauf nehmen. Danach ergeben sich zum Teil erstaunlich gute Vorschläge. Man sollte allerdings keine Wunder erwarten. Unsichere Programmierer errettet das KI-Tool nicht vor den Untiefen der Syntax einer Programmiersprache, da die Erweiterung bei fehlerhaften Vorschlägen verwirren kann. Trotz dieses Mankos birgt die Technologie ein großes Potenzial. Es wird sich zeigen, wenn die Codebasis der zugrunde liegenden Modelle besser und umfangreicher wird