Generative KI: ChatGPT für Software Testing und Testautomatisierung

🕒 Lesedauer: 5 Minuten

Als OpenAI sein neues Large Language Model “ChatGPT” veröffentlichte entstand ein regelrechter Hype um das Thema KI. Hatte OpenAI die Grundlagen für eine General Purpose AI gelegt? Kann AI ganze Berufsgruppen überflüssig machen? Wir wollten es wissen und haben versucht, ChatGPT in useren Arbeitsalltag als Test Automation Engineers zu integrieren und haben hierbei interessante Erfahrungen gemacht.

 

ChatGPT im Software Testing

Dieser Artikel bezieht sich konkret auf ChatGPT und vergleicht die Modelle 3.5 und 4.0. Für eine umfassendere Betrachtung der aktuellen Möglichkeiten, Chancen und Herausforderungen von KI im Software Testing sowie einer Vielzahl konkreter Use Cases haben wir einen neuen Artikel erstellt: KI im Software Testing: Wie Künstliche Intelligenz (KI) und LLMs das Testen verändern (inkl. Prompts)

Was ist ChatGPT?

ChatGPT ist ein KI-Modell, das durch maschinelles Lernen mit riesigen Datensätzen trainiert wurde. Es versteht menschliche Sprache und antwortet mit sinnvollen, grammatisch korrekten Texten. Die KI kann sich auf vorherige Fragen im Gesprächsverlauf beziehen und kontextbezogen antworten. Diese Fähigkeit macht sie besonders wertvoll für Codegenerierung und Software Testing.

Image
ChatGPT für Software Testing und Testautomatisierung

 

Generative KI wie ChatGPT für Software Testing und Testautomatisierung

  • Erstellen von Testfällen: Mit einer einfachen Anfrage und wenigen Stichpunkten generiert ChatGPT einen detaillierten Testplan mit Setup-Anweisungen und verschiedenen Testfällen.
  • Schreiben von Testskripten: ChatGPT kann aus einem gegebenen Code-Snippet automatisch passende Unit-Tests erstellen, die sich in den CI/CD-Prozess integrieren lassen.
  • Erklärung von Testergebnissen: ChatGPT analysiert eingegebene Fehlermeldungen und liefert verständliche Erklärungen. Der dialogorientierte Ansatz ermöglicht dabei gezielte Nachfragen.
     

Was ist ein ChatGPT Prompt?

Ein Prompt ist eine präzise Eingabe an ChatGPT, die eine gezielte Antwort oder Reaktion hervorruft. Prompts sind vielseitig einsetzbar und flexibel gestaltet. 

Mit ihrer Hilfe lassen sich von ChatGPT gezielte Informationen abrufen, kreative Lösungen entwickeln und komplexe Aufgaben bewältigen.

ChatGPT Prompts für Software Testing

Diese Prompts unterstützen Software-Tester und Testautomatisierer bei ihrer täglichen Arbeit:

  • Agiere als leitender QA-Ingenieur und überprüfe die "Anforderung" sowie den zugehörigen "Testfall". Identifiziere und ergänze fehlende Testszenarien.
  • Agiere als leitender Testingenieur und verfasse einen detaillierten Fehlerbericht auf Basis der vorliegenden "Beschreibung".
  • Agiere als Testingenieur und bewerte die Testabdeckung des "Testfalls" gegenüber den "aufgeführten Anforderungen".
  • Agiere als Senior SDET in Java und analysiere den "Testautomatisierungscode". Prüfe auf Codevereinfachung, saubere Struktur und Einhaltung von Codestandards.
  • Agiere als DevOps Experte und erstelle eine präzise Schritt-für-Schritt-Anleitung zur Integration der "automatisierten Tests" in die GitHub Actions Pipeline.
     

Unser Experiment mit ChatGPT in der Testautomatisierung

Als Test Automation Engineers interessierte uns vor allem, ob uns ChatGPT dabei helfen kann, einfache Aufgaben wie das Schreiben von Testcode zu übernehmen. Eine langwierige und nicht unbedingt spannende Aufgabe in der Testautomatisierung einer Applikation besteht zunächst darin, das Softwaregrundgerüst für die Automatisierung zu erstellen. Hierzu muss Code geschrieben werden, welcher mit den UI-Elementen wie etwa Buttons, Formulare, etc. einer Webapplikation interagieren kann. Hier sahen wir das größte Potential einen Testprozess mittels einer KI zu beschleunigen, da diese Aufgabe hauptsächlich Fließarbeit darstellt und der Lösungsweg meist eindeutig ist. Wir wollten nun wissen, ob ChatGPT für gegebenen HTML-Code Java-Code zum ansteuern der HTML-Element schreiben kann und wie zuverlässig die Ergebnisse sind.

Image
ChatGPT Software Testing und Testautomatisierung
Bild: ChatGPT in der Testautomatisierung [Quelle: Kreiert mit ChatGPT mit dem Prompt “Create a schematic picture of ChatGPT doing test automation”]

 

Der Versuchsaufbau

Für unser Experiment entwickelten wir eine kleine Webanwendung mittels des Python-Frameworks Streamlit, in die ein Nutzer HTML-Code in ein Formular einfügen und anschließend sich Selenium-Code generieren lassen konnte. Unser Tool unterstützt hierbei die Sprachen Java, Python und JavaScript. Serverseitig baut unsere Applikation anschließend einen Prompt zusammen, d.h. einen natürlichsprachigen Text, welcher anschließend an die API von ChatGPT geschickt wird. Da der Chatbot neben dem generierten Code meist auch noch eine Erklärung des generierten Skripts sendet, mussten wir den Code noch aus der Antwort von ChatGPT extrahieren. Dies stellte sich jedoch als einfach heraus, da ChatGPT Code üblicherweise mit einer speziellen Annotation versieht, sodass dieser mit einem einfachen regulären Ausdruck extrahiert werden kann.

Die Prompts für die Testautomatisierung

Eine Herausforderung bei der Bedienung eines Chatbots ist die möglichst präzise Formulierung der Aufgabe, die durch einen Chatbot erledigt werden soll. Zunächst experimentierten wir mittels der Weboberfläche von ChatGPT, um möglichst gute Prompts für unsere Probleme zu generieren. So fiel uns beispielsweise schnell auf, dass ChatGPT keine Kommentare im Code erzeugt, sofern es nicht explizit dazu aufgefordert wird. Auch die Art der Kommentierung des Codes mussten wir in unseren Prompts beschreiben, da es beispielsweise für Python mehrere Kommentarstile wie etwa Google Style oder etwa NumpyDoc gibt. Auch generierte ChatGPT einige Male einfache, einzeilige Kommentare statt ausführlichen Docstrings für Funktionen.

Nachdem wir aus unseren Experimenten mit ChatGPT gute Prompts erzeugt hatten bauten wir mittels Python eine Funktion, welche aus einem Template, in dem einige Platzhalter für Variablen eingebaut wurden, Prompts generieren konnte. Da es im Bereich der UI-Automatisierung Konzepte wie etwa Tabellen, Formulare, etc. gibt, welche in nahezu allen Anwendungen zu finden sind, bauten wir für jedes dieser Konzepte einen spezifischen Prompt. So konnten die Nutzer unserer Webapplikation beispielsweise über die Webanwendung auswählen, welches Konzept der übergebene HTML-Code repräsentiert. Unsere Prompts enthielten spezifische Anforderungen zu diesen Konzepten, wie etwa dass für Formulare für jedes Textfeld eine Methode zum Einfügen neuer und zum Auslesen der aktuellen Werte generiert werden sollte. Für Tabellen wollten wir hingegen Methoden generiert bekommen, welche die Anzahl der Spalten und der Zeilen der Tabelle ausgeben sowie die Inhalte von spezifischen Zellen lesen konnten.

 

Die Ergebnisse - Software Testing mit ChatGPT in der Testautomatisierung

Nach der Implementierung des Prototypen begannen wir unser Tool in unseren Arbeitsalltag zu integrieren. Zunächst schien uns ChatGPT sehr viel Arbeit abzunehmen, jedoch merkten wir bald, dass der generierte Code immer noch nachgebessert werden musste. Vor allem folgende Punkte fielen uns bei der Codegenerierung auf:

1. Die randomisierten Antworten

Erhält ein Large Language Model wie ChatGPT mehrfach die gleiche identische Anweisung, so wird das Tool trotzdem jedes mal eine andere Antwort generieren. Dies ist jedoch bei der Codegenerierung ein Problem, da die Lösungen für unser spezifisches Problem meist eindeutig sind und es wenig Interpretationsspielraum bei der Generierung des Codes gibt. Mal generierte ChatGPT Code, bei dem die Selektoren für die UI-Elemente als Strings in den Klassenattributen gespeichert wurden, mal wurden diese direkt in den Methoden hart gecoded, was jedoch keinem guten Stil entspricht. Der generierte Code war in den allermeisten Fällen ausführbar, wesentliche Programmierfehler konnten wir nicht entdecken. Jedoch stellte sich als Problem heraus, dass ChatGPT keinem einheitlichen Codingschema folgt, wie beispielsweise bei den Selektoren. In größeren Projekten ist dies jedoch wichtig, da der Code einem einheitlichen Schema folgt, da sonst die Lesbarkeit und Wartbarkeit darunter leidet. Wir konnten dieses Problem teilweise mit präziseren Prompts lösen, jedoch gelang dies nicht immer. Wobei wir beim nächsten Problem angekommnen sind.

2. Ignorierte Anweisungen

Teilweise wurden Anweisungen unserer Prompts von ChatGPT einfach ignoriert. In unseren Prompts waren beispielsweise immer Informationen darüber enthalten, wie wir uns die Kommentierung des Codes vorstellten, nämlich als ausführliche DocStrings, die den offiziellen Designrichtlinien folgten, trotzdem generierte uns ChatGPT teilweise unkommentierten oder nur spärlich kommentierten Code. Auch wurden andere Anweisungen wie etwa das Generieren von Methoden für alle Eingabefelder eines Formulars ignoriert. Stattdessen generierte ChatGPT Methoden, mit denen sich die Werte eines beliebigen Testfelds auslesen ließen, jedoch musste hierfür ein Selektor explizit übergeben werden. Ein Verdacht unsererseits ist hier, dass die Antwortlänge von ChatGPT begrenzt ist und dass ChatGPT daher versucht, möglichst kurze Antworten zu liefern. Das Problem der ignorierten Anweisungen trat gehäuft bei längeren und komplexeren Eingaben auf. Das führt uns zum Problem der begrenzten Kontextlänge.

3. Die beschränkte Kontextlänge

Ein Chatbot wie ChatGPT kann nicht Eingaben unbegrenzter Länge umgehen. Jedes Large Language Model besitzt eine sogenannte Kontextlänge, die beschreibt, wie viele zurückliegende Zeichen der Eingabesequenz für das aktuelle Zeichen derselben beachtet werden können. Wird eine Anfrage zu lang muss das LLM teile der Eingabe unberücksichtigt lassen. Gleiches gilt auch für die Ausgabe von LLMs. Besitzt ein LLM beispielsweise eine Kontextlänge von 4000 Zeichen, muss aber eine Ausgabe von 5000 Zeichen generieren, dann kann es bei der Generierung der letzten 1000 Zeichen nicht mehr berücksichtigen, was es bei der Generierung der ersten 100 Zeichen getan hat. Dieser Effekt hat vor allem dann Auswirkungen auf die Ergebnisse der Codegenerierung, wenn die Eingabe sehr viel HTML-Code enthält und die Prompts zusätzlich sehr viele Anweisungen enthalten. In diesen Fällen ignoriert ChatGPT teilweise die Anforderungen an den generierten Code. Die Lösung besteht hierbei darin, den HTML-Code in kleinere Fragmente zu zerlegen oder den Prompt in mehrere Anweisungen aufzuteilen.

4. GPT4 ist wesentlich besser als GPT 3.5

In unseren Experimenten setzten wir zunächst auf die Version 3.5 von ChatGPT. Diese bietet jedoch gegenüber der Version 4 den Nachteil, dass die Kontextlänge des Modells auf 4000 Zeichen beschränkt ist. Version 4 hingegen besitzt eine Kontextlänge von 16000 Zeichen. Da uns in unseren Experimenten aufgefallen war, dass sich ChatGPT 3.5 mit längeren Eingaben schwerttat, probierten wir nun dieselben Prompts mit Version 4 aus. Die Ergebnisse waren um einiges besser als die Ergebnisse der Version 3.5. Uns fiel auf, dass ChatGPT 4 teilweise bis zu 400 Zeilen Code für komplexere Anfragen generierte, wohingegen ChatGPT 3.5 meistens weniger als 200 Zeilen Code ausgab. Dies erhöhte auch die Qualität des Codes deutlich.

 

Fazit: Software Testing mit ChatGPT in der Testautomatisierung

ChatGPT hat das Potential, die Arbeit von Software Testers und Test Automation Engineers erheblich zu vereinfachen. Das größte Problem um dieses Ziel zu erreichen ist die hohe Varianz in dem durch ChatGPT generierten Code. Auch die geringe Kontextlänge aktueller Modelle wie etwa GPT-4 ist ein Problem bei der Generierung von Code für die Testautomatisierung, da der HTML-Code die maximale Kontextlänge der Modelle deutlich überschreitet. Dieses Problem wird jedoch mit der Weiterentwicklung der Modelle zukünftig behoben worden sein.

 

 

FAQ: Häufige Fragen zu ChatGPT im Software Testing

Was ist ChatGPT und wie funktioniert es?

ChatGPT ist ein Large Language Model (LLM), das von OpenAI entwickelt wurde. Es versteht und generiert natürliche Sprache und kann auf Textanfragen kontextbezogen antworten. Durch maschinelles Lernen wurde es mit riesigen Datensätzen trainiert, was ihm ermöglicht, menschenähnliche Antworten zu liefern. Im Software Testing wird ChatGPT verwendet, um Aufgaben wie Testfallgenerierung, Code-Analyse und Fehlererklärung zu automatisieren.

Wie hilft ChatGPT bei der Testautomatisierung?

ChatGPT kann Testfälle automatisch erstellen, Testcode generieren und sogar Fehlerberichte verfassen. Mit spezifischen Prompts lässt sich die KI dazu anweisen, automatisierte Tests zu schreiben, die mit der Benutzeroberfläche einer Anwendung interagieren. Dies spart Zeit und erleichtert die Erstellung von Tests, insbesondere für sich wiederholende Aufgaben.

Was ist ein ChatGPT Prompt und wie wird er im Software Testing verwendet?

Ein Prompt ist die Eingabe, die an ChatGPT gesendet wird, um eine gezielte Antwort zu erhalten. Im Software Testing werden Prompts verwendet, um ChatGPT Anweisungen zu geben, wie Testfälle zu erstellen, Fehler zu diagnostizieren oder Code zu analysieren. Beispiele für Prompts im Testen sind das Überprüfen von Testabdeckung oder das Erstellen von spezifischen Testmethoden für UI-Elemente.

Welche Vorteile bietet der Einsatz von ChatGPT in der Testautomatisierung?

  • Automatisierung von Routineaufgaben: ChatGPT hilft, sich wiederholende Aufgaben wie das Schreiben von Testcode und das Generieren von Testfällen zu automatisieren.
  • Fehlerdiagnose und Erklärung: Die KI kann Fehlerprotokolle analysieren und verständliche Erklärungen liefern, wodurch die Fehlerbehebung schneller und effizienter wird.
  • Zeiteinsparungen: KI-gesteuerte Testfallgenerierung beschleunigt den gesamten Testprozess und ermöglicht es Testern, sich auf komplexere Aufgaben zu konzentrieren.

Was sind die Herausforderungen bei der Nutzung von ChatGPT im Software Testing?

  • Hohe Varianz im generierten Code: Die von ChatGPT generierten Codebeispiele können uneinheitlich sein, was die Wartbarkeit erschwert.
  • Begrenzte Kontextlänge: Modelle wie GPT-4 haben eine begrenzte Kontextlänge, was bedeutet, dass bei sehr umfangreichen Eingaben wie HTML-Code wichtige Details möglicherweise nicht berücksichtigt werden.
  • Unvollständige Antworten: Manchmal ignoriert ChatGPT spezifische Anweisungen, was zu unvollständigen oder suboptimalen Testskripten führen kann.

Wie lässt sich ChatGPT im Testprozess integrieren?

ChatGPT kann durch spezifische Prompts in den Testprozess integriert werden, z. B. durch das Erstellen von Tests für UI-Elemente oder das Automatisieren von Code-Reviews. Tools wie GitHub Copilot und Selenium können zusammen mit ChatGPT verwendet werden, um automatisierte Tests zu schreiben, die nahtlos in den CI/CD-Prozess integriert werden.

Was ist der Unterschied zwischen ChatGPT 3.5 und ChatGPT 4.0 für Software Testing?

ChatGPT 4.0 bietet eine höhere Kontextlänge (bis zu 16.000 Zeichen) im Vergleich zu 3.5 (bis zu 4.000 Zeichen), was es ermöglicht, größere Mengen an Code oder detailliertere Prompts zu verarbeiten. In den Tests zeigte sich, dass Version 4 auch komplexere Anfragen besser handhaben kann und qualitativ besseren Code liefert.

Welche konkreten Use Cases gibt es für ChatGPT im Software Testing?

  • Erstellung von Testfällen: ChatGPT kann Testpläne und spezifische Testfälle automatisch generieren, basierend auf Anforderungen oder Spezifikationen.
  • Codegenerierung: ChatGPT erstellt aus HTML-Code automatisch Testcode für die Testautomatisierung, beispielsweise mit Selenium.
  • Fehleranalyse: ChatGPT kann Fehlerberichte generieren und analysieren, um Testergebnisse schnell zu interpretieren und Lösungsvorschläge zu bieten.

Kann ChatGPT die vollständige Testautomatisierung übernehmen?

Momentan ist ChatGPT eine wertvolle Unterstützung, aber nicht die vollständige Lösung für die Testautomatisierung. Obwohl es dabei hilft, viele Aufgaben zu automatisieren, bleibt der menschliche Input entscheidend, um die Qualität und Relevanz der Testergebnisse zu gewährleisten.

Ist der Einsatz von ChatGPT datenschutztechnisch problematisch?

Ja, Datenschutz kann ein Problem sein, besonders wenn sensible Daten in die Cloud übermittelt werden. Selbstgehostete Open-Source KI-Modelle bieten hier eine Lösung, da sie es Unternehmen ermöglichen, ihre Daten lokal zu verarbeiten und so besser zu kontrollieren, was mit den Informationen passiert.

 

Veröffentlicht am 06.Januar 2025

Aktualisiert am 25.Februar 2025

Tilo Flasche

Test Automation Engineer

Tilo war Werkstudent bei Qytera. Er studierte Information an der Goethe Universität Frankfurt und legte den Schwerpunkt seines Masterstudiums u.a. auf die Themen Maschinelles Lernen und Computer Vision. Bei Qytera hat er u.a. das QTAF-Testing-Framework mitentwickelt. Zuvor sammelte er als Werkstudent und freiberuflicher Entwickler bereits Erfahrungen in der Softwareentwicklung.

Finden Sie weitere interessante Artikel zum Thema: