Prompt Engineering für Testgenerierung bedeutet, einem Large Language Model durch gezielte Prompt-Muster schrittweise bessere Testfälle zu entlocken. Bewährte Techniken sind Few-Shot-Beispiele für Robustheit, eingebettete Bibliotheksspezifikationen für Korrektheit und das ReAct-Pattern für stabile Konversationssequenzen. Korrektheit bleibt dabei die zentrale ungelöste Schwäche.
Das Wichtigste in Kürze
- Prompt Engineering ersetzt kein menschliches Review: Selbst nach iterativer Verbesserung mit mehreren Prompt-Patterns blieben von elf generierten Testfällen zwei fehlerhaft, weil das Modell Korrektheit nicht zuverlässig garantiert.
- Few-Shot-Beispiele im Prompt erhöhen die Robustheit messbar: Sie verhindern, dass das Modell bei minimalen Prompt-Änderungen komplett andere oder absurde Ergebnisse liefert.
- Domänenspezifisches Wissen direkt im Prompt verankern verbessert die Korrektheit stärker als allgemeines Prompt-Tuning: Das Einfügen einer konkreten Bibliotheks-Spezifikation hat die Trefferquote der Testfälle deutlich gesteigert.
- Das ReAct-Pattern (Reasoning plus Action) ist das robusteste Prompt-Muster aus Davids Experimenten: In der Handvoll Versuche trat damit keine Halluzination auf, und die Prompts blieben gegenüber Abwandlungen stabil.
- Tester sind für Prompt Engineering besser qualifiziert als viele andere Rollen, weil sie gewohnt sind, Korrektheit zu prüfen, Anforderungen zu spezifizieren und repräsentative Beispiele zu konstruieren.
Prompt Engineering ist die Disziplin, die Sprachmodelle für Qualitätsarbeit brauchbar macht
Prompt Engineering bezeichnet die gezielte Gestaltung von Anweisungen an ein Sprachmodell, damit es eine konkrete Aufgabe zuverlässig erfüllt. Es ist die Alternative zum Fine-Tuning, bei dem man ein Modell mit gesammelten und gelabelten Daten nachtrainiert. Beim Prompt Engineering bleibt das Modell unverändert, die Steuerung passiert allein über den Text der Anfrage.
David Faragó nutzt diesen Ansatz seit dem Erscheinen von GPT-3. Sein erster ernsthafter Versuch betraf die Bewertung von Commit-Nachrichten. Statt ein Modell aufwendig zu fine-tunen, formulierte er eine Spezifikation auf Basis bestehender Guidelines und ergänzte sie um Beispiele. Das Modell vergab daraufhin Noten für die Qualität von Commit-Nachrichten, mit erstaunlich guten Ergebnissen.
Für Tester ist das Thema näher dran, als es zunächst klingt. Viele Prompt-Patterns drehen sich um Qualität und nicht-funktionale Aspekte. Genau das ist das tägliche Brot im Testing.
Warum du dich auf die Korrektheit generierter Tests nicht verlassen kannst
Sprachmodelle liefern bei der Testgenerierung keine garantiert korrekten Ergebnisse. Das ist die zentrale Einschränkung, und sie wiegt schwer, sobald es um etwas Spezifisches statt um etwas Kreatives geht.
David beschreibt zwei Momente, die seine anfängliche Euphorie gedämpft haben. Beim Commit-Nachrichten-Experiment lieferte das Modell zunächst eine schlechte Note mit einer überzeugenden Begründung. Eine minimale Änderung, ein Komma zu einem Semikolon, kippte das Urteil komplett: Dieselbe schwache Commit-Nachricht bekam plötzlich eine Bestnote. Das Ergebnis war schlicht falsch.
Den zweiten Dämpfer brachte ChatGPT bei einem statistischen Problem. Die Antwort klang durchgehend plausibel, enthielt aber in der Mitte einen Fehler von etwa zehn Prozent. David wandte die vorgeschlagene Methode an und rannte ein bis zwei Tage in eine Sackgasse, weil er das Ergebnis nicht genug hinterfragt hatte.
Bei kreativen Aufgaben wie einem Gedicht ist eine inhaltliche Abweichung verkraftbar. Bei Testfällen nicht. Wenn ein generierter Test fehlschlägt, suchst du den Fehler im System under Test, dabei steckt er im Test selbst.
Das Ding kann viel, aber meine Hand dafür ins Feuer legen, dass es immer ein korrektes Ergebnis liefert, würde ich nicht. (David Faragó)
Wie sich ein Prompt Schritt für Schritt verbessern lässt
Ein guter Prompt entsteht iterativ, indem man bewährte Prompt-Patterns einzeln anwendet und das Ergebnis vergleicht. Ähnlich wie es Design-Patterns in der Softwareentwicklung gibt, existieren dokumentierte Prompt-Patterns, und es kommen wöchentlich neue dazu.
David hat etwa fünf bis zehn Patterns ausgewählt, die sich in seiner Praxis bewährt haben, und sie an einem einzelnen Beispiel zur Testgenerierung sukzessive ergänzt. Das Beispiel war bewusst klein gehalten, eine String-Verarbeitung mit Python und PyTest.
Bei jeder Iteration wurde ein Aspekt besser, ein anderer dafür schlechter. Testabdeckung und Strukturierung der Tests verbesserten sich merklich. Die Korrektheit blieb der wunde Punkt. Das Endergebnis war deutlich besser als der erste Versuch, aber nicht einwandfrei.
Zwei Hebel entscheiden über die Qualität: Robustheit und Korrektheit
Die größte Wirkung auf die Testqualität hatten zwei Stellschrauben. Robustheit beschreibt, ob das Modell bei leichter Änderung oder bloßer Wiederholung des Prompts ein vergleichbares Ergebnis liefert, statt etwas völlig anderes auszuwerfen.
Konkrete Beispiele im Prompt erhöhen die Robustheit. Dieser Ansatz heißt Few-Shot Learning. Er sorgt nicht für immer identische oder immer korrekte Tests, aber er unterbindet die absurden Fälle: dass das Modell den gesamten System-under-Test-Code in die Testdatei kopiert, unnötige Imports einbaut oder vor und nach dem Testcode lange Erklärtexte schreibt.
Der zweite Hebel ist die Korrektheit, und hier half eine simple Maßnahme. David arbeitete mit einer Abhängigkeit namens difflib. Das Modell kannte das Modul und beschrieb auf Nachfrage den zugrunde liegenden Algorithmus, blieb aber vage. Erst als er die difflib-Spezifikation, etwa vier bis fünf Absätze Text, direkt in den Prompt kopierte, wurde die Korrektheit der generierten Tests spürbar besser.
Die Faustregel daraus: Verlass dich nicht darauf, dass das Modell sein eigenes Wissen präzise abruft. Liefere die relevante Spezifikation mit, auch wenn das Modell den Inhalt theoretisch kennt.
Konversation schlägt Einzelprompt: das Modell als eigener Prüfer
Ein einzelner Prompt ist nicht das Ende. Mit Coverage-Kriterien im Prompt erzeugte David aus dem String-Beispiel elf Testfälle. Die Vorstufe ohne die zusätzliche Abdeckungsanforderung hatte fünf Tests geliefert, alle korrekt. Mit der Aufforderung, die Testabdeckung zu erhöhen, kamen elf teils schwierigere Tests heraus, von denen zwei wieder fehlerhaft waren.
Statt diesen einen Prompt weiter zu optimieren, ging David in eine Konversation über. Dafür gibt es ein eigenes Pattern: Man lässt das Modell selbst beurteilen, ob seine vorherige Ausgabe die gestellte Aufgabe erfüllt hat.
Das ist intuitiv nachvollziehbar. Ein generatives Sprachmodell produziert Wort für Wort. Ein fertiges Ergebnis im Nachhinein zu beurteilen ist eine leichtere Aufgabe als es fehlerfrei zu erzeugen. Beim Menschen ist es genauso: Zu bewerten, ob etwas gut oder schlecht ist, fällt leichter, als selbst etwas Gutes zu schaffen. In Davids Fall erkannte das Modell die zwei fehlerhaften Testfälle als solche.
Welche Ansätze gegen Halluzination wirklich helfen
Korrektheit verbessert sich am ehesten über durchdachte Prompt-Sequenzen, weniger über spezialisierte Modelle. David hat das Constitutional-AI-Modell Claude von Anthropic ausprobiert, einem Unternehmen ehemaliger OpenAI-Mitarbeiter. Auf die Frage, ob es halluziniere, antwortete das Modell, es sei ein Constitutional-AI-Modell und halluziniere nicht. Die generierten Testfälle hatten dann etwa die Qualität von Davids erstem, schwachem ChatGPT-Versuch. Beim Thema Korrektheit war das Ergebnis enttäuschend.
Mehr überzeugt hat ihn das ReAct-Pattern. ReAct steht für Reasoning und Action und hat nichts mit dem Frontend-Framework zu tun. Der Reasoning-Teil ähnelt Chain of Thought, bei dem man das Modell anweist, Schritt für Schritt zu denken, bevor es ein Ergebnis ausgibt. Der Action-Teil bringt dem Modell bei, externe Aufrufe zu machen oder Informationen von außen einzuholen.
Bei einem Chatbot-Experiment für MediForm erlebte David mit einem sauber geschriebenen ReAct-Pattern eine sehr hohe Robustheit. Er konnte einen einzelnen Aspekt im Prompt korrigieren, alles andere blieb stabil. In der Handvoll Experimente, die er gemacht hat, trat keine Halluzination auf.
Das ReAct-Pattern findet sich auch in verbreiteten Werkzeugen wieder. Auto-GPT, ein Werkzeug auf dem Weg zum GPT-basierten Agenten, kombiniert eine ganze Sequenz von Prompts mit Plugins und externen API-Aufrufen. Die Bibliothek LangChain, mit der sich solche Agenten programmieren lassen, nutzt unter der Haube ein ReAct-ähnliches Pattern.
Tester sind als Prompt Engineers im Vorteil
Wer testet, bringt genau die Denkweise mit, die Prompt Engineering verlangt. Korrektheit ist die zentrale Schwäche der Modelle, und Qualität ist die Kernkompetenz im Testing.
Viele Prompt-Patterns zielen auf Qualität und nicht-funktionale Aspekte. Gute Few-Shot-Beispiele für einen Prompt auszuwählen oder eine saubere Anforderungsspezifikation zu formulieren, liegt Testern. Der prüfende, skeptische Blick auf ein Ergebnis ist im Prompt Engineering ein Vorteil, kein Hindernis.
So fängst du im Kleinen an
Der Einstieg lohnt sich schon mit kleinen, täglichen Aufgaben. Der Return on Invest ist hoch, der Aufwand gering.
David nutzt ChatGPT nebenher für überschaubare Probleme: eine Bibliothek wieder ins Gedächtnis holen, die er länger nicht verwendet hat, oder einen langen, unbekannten Stacktrace deuten lassen. Häufig nennt das Modell die Fehlerursache direkt. Wo man früher zu Stack Overflow oder Google gewechselt ist, kann heute ein Wechsel zum Sprachmodell stehen.
Der Dialog ist der eigentliche Vorteil gegenüber einer Suchanfrage. Wenn ein Thema mehr Interaktion verlangt und du Teilaspekte in Folgefragen klären willst, ist das Modell nützlicher als eine einzelne Google-Suche. Auf diesem Weg sammelt sich Erfahrung an, die später beim systematischen Prompt Engineering trägt.
Wohin sich das Feld bewegt: offene Modelle und effizienteres Fine-Tuning
Die Weiterentwicklung läuft stark über offene Modelle und neue Fine-Tuning-Techniken. Meta hat Llama als Open Source veröffentlicht, wenn auch nicht für kommerzielle Nutzung. Anders als beim reinen Prompt Engineering hat man hier das Modell selbst zur Verfügung und kann es fine-tunen, um Eigenschaften wie Korrektheit zu verbessern.
Modellgrößen reichen von etwa drei oder sechs Milliarden Parametern bis zu 13, 30 oder 60 Milliarden. Größere Modelle zu fine-tunen ist hardwareseitig schwierig. Dagegen entstehen wöchentlich neue Optimierungen: Quantisierung, das Fine-Tuning nur bestimmter Parameter oder das Merken von Gewichtsunterschieden statt der Gewichte selbst.
Ein geleaktes Google-Dokument mit dem Titel “We have no moat” argumentiert, dass weder Google noch OpenAI einen dauerhaften Vorsprung haben, weil Open-Source-Entwicklung und offen publizierte Forschung den Abstand rasch aufholen. David hält das Dokument für einseitig, sieht darin aber einen wahren Kern.
Wie viel noch nötig ist, um ein so robustes und korrektes System zu bauen, dass man es guten Gewissens in einem sicherheitskritischen Bereich einsetzen kann, lässt sich in dieser disruptiven Phase kaum prognostizieren. Manches mit großem Wow-Effekt erweist sich in der Praxis als untauglich, während unscheinbarere Ansätze richtig nützlich werden.
Häufig gestellte Fragen
Was unterscheidet Prompt Engineering vom Fine-Tuning eines Sprachmodells?
Beim Prompt Engineering bleibt das Modell unverändert, die Steuerung passiert allein über den Text der Anfrage. Fine-Tuning trainiert ein Modell mit gesammelten und gelabelten Daten nach und setzt Zugriff auf das Modell selbst voraus. Meta stellte Llama 2023 als Open Source bereit, allerdings ohne kommerzielle Nutzung, womit Fine-Tuning zur Verbesserung von Eigenschaften wie Korrektheit möglich wurde.
Warum wiegen Fehler in generierten Testfällen schwerer als bei kreativen Texten?
Bei einem Gedicht ist eine inhaltliche Abweichung verkraftbar, bei einem Testfall nicht. Schlägt ein fehlerhafter Test fehl, suchst du den Fehler im System under Test, obwohl er im Test steckt. Wie labil solche Urteile sein können, zeigte ein Experiment zur Bewertung von Commit-Nachrichten: Ein Komma, zu einem Semikolon geändert, kippte eine schlechte Note in eine Bestnote.
Wie verhindert man, dass ein Modell bei minimal geänderten Prompts völlig andere Ergebnisse liefert?
Konkrete Beispiele im Prompt erhöhen die Robustheit, ein Ansatz, der Few-Shot Learning heißt. Identische oder immer korrekte Tests garantiert er nicht, er unterbindet aber die absurden Ausreißer: dass das Modell den gesamten Code des Systems under Test in die Testdatei kopiert, unnötige Imports einbaut oder vor und nach dem Testcode lange Erklärtexte schreibt.
Lohnt es sich, eine Bibliotheksspezifikation in den Prompt zu kopieren, wenn das Modell die Bibliothek kennt?
Ja. Bei einer Testgenerierung mit der Python-Abhängigkeit difflib kannte das Modell das Modul und beschrieb den Algorithmus, blieb aber vage. Erst als vier bis fünf Absätze der difflib-Spezifikation direkt im Prompt standen, wurde die Korrektheit der Tests spürbar besser. Verlass dich nicht darauf, dass ein Modell sein eigenes Wissen präzise abruft.
Kann ein Sprachmodell seine eigene Ausgabe sinnvoll prüfen?
Ja, dafür existiert ein eigenes Prompt-Pattern: Man lässt das Modell beurteilen, ob seine vorherige Antwort die gestellte Aufgabe erfüllt hat. Ein fertiges Ergebnis zu bewerten ist leichter, als es Wort für Wort fehlerfrei zu erzeugen. In einem Experiment mit elf generierten Testfällen erkannte das Modell die beiden fehlerhaften Tests im zweiten Schritt selbst.
Was macht das ReAct-Pattern gegenüber einem einzelnen Prompt aus?
ReAct steht für Reasoning und Action und hat nichts mit dem Frontend-Framework zu tun. Der Reasoning-Teil ähnelt Chain of Thought, das Modell denkt schrittweise vor der Ausgabe. Der Action-Teil holt Informationen von außen ein. In einem Chatbot-Experiment blieb ein sauber geschriebenes ReAct-Pattern gegenüber Änderungen einzelner Aspekte stabil, Halluzinationen traten in dieser Handvoll Versuche nicht auf.
Lösen spezialisierte Modelle mit eingebauten Prinzipien das Halluzinationsproblem?
Nein. 2023 getestet, antwortete Claude von Anthropic auf die Frage nach Halluzinationen, es sei ein Constitutional-AI-Modell und halluziniere nicht. Die generierten Testfälle hatten dann etwa die Qualität eines ersten, schwachen ChatGPT-Versuchs. Korrektheit verbesserte sich eher über durchdachte Prompt-Sequenzen als über die Wahl eines besonders beworbenen Modells.
Welche Vorerfahrung hilft beim Prompt Engineering?
Testerfahrung. Korrektheit ist die zentrale Schwäche der Modelle, und Qualität ist die Kernkompetenz im Testing. Viele Prompt-Patterns zielen auf Qualität und nicht-funktionale Aspekte. Gute Few-Shot-Beispiele auszuwählen und eine saubere Anforderungsspezifikation zu formulieren, sind vertraute Tätigkeiten. Der prüfende, skeptische Blick auf ein Ergebnis ist hier ein Vorteil, kein Hindernis.


