1 Punkte von GN⁺ 2024-02-25 | 1 Kommentare | Auf WhatsApp teilen

Metas neuer LLM-basierter Testgenerator bietet einen Ausblick auf die Zukunft der Entwicklung

  • Meta hat ein Paper mit dem Titel "Automated Unit Test Improvement using Large Language Models at Meta" veröffentlicht.
  • Das Paper zeigt, wie sich mit KI die Entwicklung beschleunigen und die Zahl von Softwarefehlern reduzieren lässt.
  • Durch die Integration von LLMs in den Workflow von Entwicklerinnen und Entwicklern werden präzise und vollständige Verbesserungsvorschläge für Software gemacht, die die aktuelle Code Coverage erhöhen.

Wichtige Punkte

  • TestGen-LLM verwendet den Ansatz „Assured LLM-based Software Engineering“ (Assured LLMSE).
  • Es nutzt einen Ensemble-Ansatz, bei dem mehrere LLMs, Prompts und Hyperparameter verwendet werden, um Code-Verbesserungen zu erzeugen und anschließend die beste Verbesserung auszuwählen.
  • TestGen-LLM wurde speziell dafür entwickelt, bestehende von Menschen geschriebene Tests zu verbessern.

Statistiken

  • Bei der Auswertung der Produkte Reels und Stories auf Instagram wurden 75 % der von TestGen-LLM erzeugten Testfälle erfolgreich gebaut, 57 % bestanden zuverlässig, und 25 % erhöhten die Coverage.
  • TestGen-LLM konnte 10 % aller angewendeten Klassen verbessern, und Entwicklerinnen und Entwickler übernahmen 73 % der Testverbesserungen und setzten sie in Production ein.
  • Bei einem „test-a-thon“, bei dem Meta-Ingenieurinnen und -Ingenieure Tests erzeugten, um die Test Coverage von Instagram zu erhöhen, lag der Median der von TestGen-LLM-Tests hinzugefügten Codezeilen bei 2,5.

Praktisch nutzbare Erkenntnisse

  • Dies ist ein gutes Beispiel dafür, wie sich mit LLMs die Produktivität in der Entwicklung und die Zuverlässigkeit von Software effizient steigern lassen.
  • Der eigentliche Wert von LLMs liegt darin, unerwartete Edge Cases zu finden und abzufangen.
  • Um LLMs in Production einzusetzen, sind Orchestrierung, Pipelines und Verarbeitung erforderlich.

Wie TestGen-LLM funktioniert

  • TestGen-LLM wendet auf von Metas internem LLM erzeugte Kandidatenlösungen eine Reihe semantischer Filter an, um nur die wertvollsten Tests zu behalten.
  • Filter 1: Build-Fähigkeit, Filter 2: Ausführung (ob Tests bestehen), Filter 3: Flakiness, Filter 4: Verbesserung der Coverage.
  • Diese Verarbeitungsfilter stellen eine Verbesserung der Test-Suite sicher.

Fazit

  • Dieses Paper ist eine gute Möglichkeit, die Fortschritte von LLMs im Bereich Software-Zuverlässigkeit nachzuverfolgen, da viele Entwicklerinnen und Entwickler LLMs bereits nutzen.
  • LLMs werden zunehmend in der Lage sein, Bugs in immer komplexeren Softwaresystemen zu finden und zu testen.

Meinung von GN⁺

  • Dieser Artikel bietet interessante Einblicke darin, welchen Einfluss Künstliche Intelligenz auf die Zukunft der Softwareentwicklung haben kann.
  • Tools wie TestGen-LLM können eine große Hilfe dabei sein, die Arbeit von Entwicklerinnen und Entwicklern zu automatisieren und die Effizienz zu steigern.
  • Die Weiterentwicklung solcher Technologien geht in Richtung geringerer Komplexität in der Softwareentwicklung, höherer Qualität und Zeitersparnis für Entwicklerinnen und Entwickler.

1 Kommentare

 
GN⁺ 2024-02-25
Hacker News-Kommentare
  • Es gibt die Ansicht, dass es interessant ist, dass beim Schreiben von Testcode mit LLMs (Large Language Models) die Tests eher vor der Implementierung kommen. Da Tests beschreiben, wie ein System funktionieren soll, gibt es die Perspektive, dass dies ein Teil ist, der von Menschen definiert werden sollte. Allerdings können LLMs nützlich sein, um nicht explizit festgelegte Bereiche aufzuzeigen, und das Vorschlagen von Unit-Tests für solche Bereiche könnte ein sinnvoller Einsatz von LLMs sein.
  • Es gibt Kritik an einem Blogpost, wonach die meisten von Metas TestGen-LLM generierten Testfälle nur 2,5 zusätzliche Zeilen Code abgedeckt hätten, während ein einzelner Testfall ganze 1326 Zeilen abdeckte. Dies sei ein Ausnahmefall, und im Paper werde ausdrücklich erwähnt, dass die meisten Testfälle deutlich unter der erwarteten Code-Coverage liegen. Die Autoren des Papers bezeichnen dies als einen „Jackpot“ und machen klar, dass solche Ergebnisse nicht typisch sind.
  • Es gibt die Ansicht, dass es schwierig ist, gute Tests zu schreiben. Code-Coverage ist nicht zwangsläufig etwas Gutes, und zu viele Tests können ein Programm unflexibel machen. Das Regenerieren von Tests mit LLMs mag wie Fortschritt aussehen, könnte am Ende aber nur darauf hinauslaufen, ein Programm zur Änderungserkennung zu bauen.
  • Es wird darauf hingewiesen, dass die Zusammenfassung des Papers zu TestGen-LLM nicht mit dem tatsächlichen Inhalt übereinstimmt. Die Zusammenfassung erwähnt eine Erfolgsquote für Testfälle, während sich der eigentliche Bericht mit Erfolgsraten für Testklassen befasst, was eine ganz andere Aussage ist. Auch in der Schlussfolgerung werde dieser Unterschied falsch dargestellt.
  • Es gibt Mitgefühl mit den künftigen Entwicklern, die den von LLMs generierten Code warten müssen. Es besteht die Sorge, dass solcher Code schwer zu pflegen sein wird.
  • Es gibt Bedenken, dass von LLMs generierter Testcode ein entwicklerfeindliches Umfeld schaffen könnte. Es könnte dazu kommen, dass man jedes Mal schwer wartbaren, von LLMs erzeugten Testcode freigeben muss. Das Schreiben von Tests kann zwar beschleunigt werden, aber die Wartung wird dadurch nicht zwingend einfacher. Tests helfen dabei, das Code-Design zu überprüfen, und wenn Tests nicht einfach zu schreiben sind, ist das Design womöglich nicht gut. Tests bieten automatisierte Sicherheit und helfen, potenzielle Fehler zu verhindern, aber je höher die Coverage wird, desto geringer ist der Nutzen im Verhältnis zum Aufwand. LLMs können nur dann Zeit sparen, wenn erfahrene Entwickler ohnehin schon wissen, was getestet werden sollte.
  • Es wird von einer Erfahrung berichtet, bei der mit GPT-4 Unit-Tests für ein TypeScript-Modul erzeugt wurden und dabei erfolgreich funktionierende Tests herauskamen.
  • Es gibt Zweifel daran, wie AI wissen soll, welche Tests geschrieben werden müssen. Der beste Weg, wie AI bei der Softwareentwicklung helfen kann, sei, Antworten zu liefern, wenn Programmierer Fragen zum Code stellen, manchmal mit Code-Vorschlägen und manchmal ohne. AI sollte dabei helfen können, Code zu verstehen und zu erkennen, wie er verbessert werden kann.
  • Es gibt die Ansicht, dass Meinungen zu AI-Code ohne praktische Erfahrung mit echten Tools und ohne Überprüfung der Ausgaben in einer gut bekannten Codebasis wenig Wert haben. AI-Code ist ein stark politisiertes Thema, und viele Menschen haben dazu starke Meinungen. Dennoch besteht der Wunsch, es tatsächlich auszuprobieren. Da diese Technologien sehr hohe Entwicklungskosten verursachen, könnte es schwer sein, diese zu rechtfertigen, wenn sich AI-Tools nicht deutlich verbessern. Trotzdem gibt es Optimismus hinsichtlich dessen, was in Zukunft erreicht werden kann.
  • Es wird ein Link zu einer Hörbuch-Zusammenfassung des Papers bereitgestellt.