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.
Programmieren mit ChatGPT? 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.
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.