Heutzutage kann jeder einfach eine mehr oder minder gezielte Frage an ChatGPT stellen und bekommt in den meisten Fällen auch eine sinnvolle Antwort. Selbst, wenn Sie nur ein einziges Wort eingeben, bekommen Sie eine Antwort. Denn ChatGPT ist so konzipiert, dass der Nutzer immer eine Antwort erhält. Oft ist dies ein Einstieg in einen interessanten Dialog. Doch wenn Sie mehr aus ChatGPT herausholen möchten, kommen Sie nicht darum herum, ein wenig mehr Mühe und Gehirnschmalz in Ihre Prompts zu stecken.
In diesem dritten und letzten Artikel unserer Serie zum Einsatz von ChatGPT für Entwickler (zum Teil 1 der Serie: Mythen und Missverständnisse, zum Teil 2 der Serie: Best Practices und Richtlinien) geht es um die Prompts und Beispiele für den praktischen Gebrauch in der Entwicklung. Und niemand muss ein hochspezialisierter Prompt Engineer sein, um überwiegend gute Ergebnisse auf die eigenen Anfragen an ChatGPT zu erhalten. Nach einigen grundlegenden Tipps zum Aufbau von Prompts gehen wir direkt in die Praxis und schauen, wie Entwickler, Product Owner oder Softwaretester ChatGPT sinnvoll in der täglichen Arbeit einsetzen können.
Grundlegende Tipps
Der wichtigste Tipp zuerst: Bei jedem Prompt zählt die Qualität. Ein guter Prompt ist wie der Schlüssel zu einer Tür, denn er öffnet das Potenzial von ChatGPT. Klarheit, Präzision und ausreichender Kontext in Ihrem Prompt führen zu besseren und präziseren Antworten.
Ein Beispiel: Stellen wir uns vor, jemand schickt den folgenden Prompt an ChatGPT:
Wie kann ich mit PHP einen Chat programmieren?
Die Antwort wird zwar irgendwie die Frage beantworten und gibt sicher auch genug Gelegenheiten, um hier oder da anzuknüpfen oder Detailfragen zu klären. Wahrscheinlich wird bei intensiver Nachfrage am Ende sogar ein irgendwie lauffähiges Programm herauskommen. Einen Schönheitspreis gewinnen Sie damit aber nicht. Wahrscheinlich strotzt der generierte Code vor Sicherheitslücken und nutzt veraltete Programmierpraxis. Bei diesem Prompt fehlt Klarheit, Präzision und Kontext.
Wie wäre es also hiermit:
Wie kann ich in PHP 8.3 einen Chat mit dem Laravel Framework programmieren? Der Fokus soll hierbei vor allem auf Sicherheit und Performance liegen. Wir möchten den Chat mit MariaDB oder einer für Chats optimierten Datenbank implementieren. Wichtig ist, dass die Anwendung sauber zwischen Frontend und Backend getrennt ist. Im Frontend soll ein leistungsstarkes JavaScript Framework eingesetzt werden, während PHP und Laravel lediglich Antworten im JSON Format zurückgeben und empfangen können. Gebe einen Überblick über die Architektur und die Implementierung und lass uns den Chat gemeinsam Schritt für Schritt verbessern. Solltest du weitere Fragen zu den technischen Vorgaben und dem Funktionsumfang haben, und sollten sich die Antworten auf die Architektur und die Implementierung auswirken, stelle diese zuerst.
Der Prompt ist sicher noch nicht optimal und lässt sich bestimmt noch viel mehr verfeinern und ausbauen. Die Antwort wird aber deutlich hilfreicher sein und die folgende Interaktion mit ChatGPT wird ein viel besseres Ergebnis bringen, als der erste sehr platte Versuch. Natürlich wird auch hier die erste Antwort nicht perfekt sein. Aber die Basis für eine Chat Software ist hier viel solider als vorher.
Eine erprobte Vorgehensweise zum Schreiben eines Prompts ist die folgende:
- Beginnen Sie mit einer klaren Aussage oder einer klaren Frage! Je schwammiger die Frage, desto schwammiger wird die Antwort.
- Seien Sie konkret und präzise! Jedes weggelassene Detail führt dazu, dass ChatGPT stillschweigend eigene Annahmen trifft.
- Fügen Sie Kontext hinzu! Fügen Sie nochmal Kontext hinzu. Und dann noch mehr.
- Iterieren und optimieren Sie! Es kann sein, dass Sie Ihren Start-Prompt mehrmals überarbeiten müssen, um eine gute Basis für die Diskussion zu bekommen.
Ergänzend dazu kann es hilfreich sein, wenn der Prompt einer gewissen Struktur auf Situation, Kontext und Frage oder Aufgabe folgt. In diesem gekürzten Beispiel wird zuerst die Situation beschrieben, dann der Kontext hinzugefügt, und zum Schluss folgt eine ganz konkrete Frage.
Unser Webentwicklungsteam bemerkt eine sinkende Code-Qualität in unserem PHP-Projekt.
Wir nutzen PHP 7.4 und möchten auf PHP 8.3 umsteigen. Unsere Anwendung hat verschiedene Legacy-Komponenten und nutzt das Symfony-Framework in Version 4.4.
Wie können wir die Code-Qualität bei der Migration verbessern und welche Best Practices gibt es für PHP 8.3 in Bezug auf Symfony 7.1? Was sollten wir ggf. für das bald erscheinende PHP 8.4 schon jetzt beachten?
Die erste Antwort wird einige interessante Informationen und Tipps enthalten, die dann mit weiteren gezielten Fragen verfeinert werden können. Sollten Sie merken, dass Sie nach den ersten Interaktionen wichtige Detailinformationen vergessen haben, ist das kein Problem. Diese können auch nachgereicht werden mit der Bitte, die Situation auf der Basis der neuen Informationen nochmals zu bewerten.
ChatGPT für Entwickler
In der Regel implementiert ein Entwickler neue Features, behebt Fehler oder optimiert den Code für eine bessere Leistung und Sicherheit. Auch bauen Entwickler neue Projekte auf und müssen sich regelmäßig in neue Technologien einarbeiten. Gerade für Entwickler ist das Thema »Lebenslanges Lernen« ein stetiger Begleiter.
In den Anfangsjahren der professionellen Webentwicklung waren gedruckte Bücher noch eine gute Quelle, um sich z. B. in eine neue Programmiersprache einzuarbeiten. Später kamen Tutorials im Web dazu. Heutzutage sind vor allem Videoschulungen oder die Suche im Internet eine wichtige Quelle beim Lernen oder konkreten Lösen von Problemen. Auch das bekannte »Stack Overflow Driven Development« war in den vergangenen Jahren sehr beliebt. Dabei sucht der Entwickler bei Stack Overflow nach einer Lösung für sein Problem und kopiert den Code des ersten Treffers in seine Anwendung. Anschließendes »Stack Overflow Driven Debugging« inklusive.
Seit dem Aufkommen von ChatGPT besteht natürlich die große Gefahr, dass Anfänger und bequeme Entwickler mit »ChatGPT Driven Development« auf den nächsten Zug aufspringen. Wer bisher ahnungslos Codeschnipsel aus Stack Overflow übernommen hat, wird dies sicher auch mit ChatGPT praktizieren. Dies wird dauerhaft jedoch nicht zu einer erfolgreichen und fehlerfreien Software führen. Denn bei dem Mythos 3, »der perfekte Programmierer«, im ersten Artikel dieser Serie und bei dem ersten Best Practice Tipp »Vertraue den Ergebnissen von ChatGPT nicht blind!« im zweiten Artikel haben wir gelernt, dass wir den Antworten von ChatGPT nicht trauen dürfen und diese oft nicht zum Ziel führen, wenn wir uns nicht einmischen.
Dennoch eignet sich ChatGPT für viele Fragen und Aufgaben bei der täglichen Arbeit eines Entwicklers. Hier ein paar beispielhafte Prompts, mit denen Entwickler sich Unterstützung bei konkreten Problemen holen können. Diese sind bewusst kurz gehalten und sollten in der Regel, wie oben erwähnt, möglichst viel Kontext und viele Details enthalten. Sie wurden hier stark gekürzt, um die unterschiedlichen Problemstellungen zu zeigen.
- Wir arbeiten in einem Projekt noch mit Elasticsearch 5.6.16. Wie baue ich eine AND Suche mit zwei Parametern auf?
- Ein Event-Listener wirft einen Fehler auf, da ein DOM-Element fehlt. Wie debugge ich das?
- Mein Projekt wird unübersichtlich. Wie gehe ich ein Refactoring an, ohne den Betrieb zu stören?
- Wie entwickele ich Schritt für Schritt DDD mit PHP? Welches sind die wichtigsten Konzepte?
Wir haben hier also Fragen zu einer konkreten Implementierung, zum Debugging, zum Refactoring und zum Erlernen neuer Konzepte. Wenn wir einmal den ersten Prompt etwas besser aufbauen und Situation, Kontext und Frage konkretisieren, könnte dieser so aussehen:
Als Entwickler bekomme ich eine Elasticsearch Suche mit zwei Parametern, die mit AND verknüpft werden, nicht gelöst.
In einem PHP Projekt arbeiten wir noch mit dem veralteten Elasticsearch 5.6.16. Wir möchten folgende Suche erstellen: Suche alle Bewerbungen mit dem Status „Approved“, die eine der IDs 1001, 1003, 1005 oder 1007 haben. Die Parameter sollen per AND verknüpft werden.
Wie baue ich so eine Suche mit Elasticsearch 5.6.16 auf?
Diese Frage und vor allem die Antwort hat uns vor einigen Monaten in einem Legacy-Projekt viel Zeit gespart, da wir in der offiziellen Dokumentation und bei einer Suche in Google kaum verwertbare Informationen erhalten haben. Übrigens hat hier ausnahmsweise sogar die erste Antwort zu 100 Prozent gepasst.
Praxisbeispiel Codegenerierung mit ChatGPT
ChatGPT kann auch zum Generieren von Code verwendet werden. Damit lassen sich Schritt für Schritt einzelne Bestandteile einer Anwendung erstellen. Ein Beispiel-Prompt wäre folgender:
Erstelle in PHP 8.3 eine Entität für einen Benutzer. Verwende dabei sinnvolle Wertobjekte. Vermeide das anämische Domänenmodell!
Dieser Prompt ist zwar recht kurz, enthält aber schon sehr konkrete Angaben. Es geht um die Erstellung einer Entität für Benutzer in PHP 8.3. Es sollen zudem Wertobjekte verwendet werden, was darauf schließen lässt, dass der Entwickler Kenntnisse im Domain-Driven Design hat. Auch der Hinweis zum anämischen Domänenmodell, lässt darauf schließen, dass der Fragesteller kein blutiger Anfänger ist. Der Prompt könnte noch durch detailliertere Angaben zu den Eigenschaften und Methoden der zu generierenden Klasse erweitert werden. Aber für das Beispiel ist dies ausreichend.
Jetzt betrachten wir einmal die Antworten in ausgewählten ChatGPT-Modellen:
- Die Antwort im frei verfügbaren und kostenlosen Modell »ChatGPT-4o mini« lässt nicht lange auf sich warten. In wenigen Sekunden werden einige Wertobjekte für E-Mail-Adresse, Benutzernamen und Passwort sowie eine Entität generiert, welche die Wertobjekte direkt einsetzt. Die Vorgabe, das anämische Domänenmodell zu vermeiden, wird zwar eingehalten. Es werden aber keine Methoden zum Aktualisieren von Benutzernamen und E-Mail-Adresse vorgeschlagen. Hier muss der generierte Code durch konstruktive Hinweise weiter verfeinert werden. Dabei empfiehlt es sich, schrittweise Vorschläge zur Verbesserung zu machen.
- Die Antwort beim Modell »ChatGPT-4o« lässt länger auf sich warten. Die generierten Wertobjekte sind komplexer als bei der vorherigen Variante, da sie auch Vergleichsmethoden enthalten und statt eines Benutzernamen ein vollständiger Name aus Vornamen und Nachnamen verwendet wird. Zudem werden Namensräume für die Klassen vorgeschlagen. Die User Entität wirkt robuster und enthält neben einem Zeitstempel für das Erstellungsdatum des Benutzers auch eine praktische Authentifizierungsmethode. Auch wenn das Ergebnis besser als im vorherigen Modell ist, muss es ebenfalls durch weitere Rückfragen und Vorschläge verfeinert werden.
- Das Modell »ChatGPT o1-preview« braucht satte 21 Sekunden für eine Antwort. Interessanterweise verwendet es teilweise deutschsprachige Begriffe für Eigenschaften und Methoden. Es fügt als einziges Modell aber ein Wertobjekt für eine User ID ein, das auf einer UUID basiert. Die User Entität ist von allen Varianten am komplexesten und erlaubt z. B. das Ändern des Passworts nur unter Angabe des alten Passworts. Insgesamt muss aber auch diese Variante vor einem echten Einsatz noch mehrfach überarbeitet werden, bevor sie wirklich praxistauglich ist.
- Sehr spannend ist das Ergebnis mit dem Anfang Oktober 2024 veröffentlichten Modell »ChatGPT-4o with canvas«. Hier rückt der generierte Code in den Vordergrund und wird im Hauptteil des Bildschirms angezeigt. Den Chatverlauf kann man nun in einer Spalte auf der linken Seite verfolgen. Anders als bei den anderen Modellen kann hier auch ein Teil des Codes markiert werden und es kann gezielt hier eine Rückfrage gemacht oder ein Verbesserungsvorschlag platziert werden. So kann beim Einsatz eines Strings für die User ID angemerkt werden, dass ein Wertobjekt verwendet werden soll, oder der öffentliche Konstruktor der Klasse kann gezielt in eine statische Factory-Methode umgewandelt werden.
Allen Modellen gemein ist die Tatsache, dass das erste Ergebnis niemals ausreichend ist. Es muss immer nachgebessert werden. Dies zeigt auch, dass der Einsatz von ChatGPT in der Codegenerierung immer von einem erfahrenen Entwickler begleitet werden sollte. Nur dieser kann die Ergebnisse auch kritisch begutachten und durch seine Erfahrung ein besseres Ergebnis erzielen.
Der Traum, dass wegen ChatGPT und anderen KIs in Zukunft keine Entwickler mehr gebraucht werden, wird sich wohl bis auf Weiteres nicht erfüllen. Dennoch sollte ChatGPT als weiteres Tool in keinem Entwicklerwerkzeugkasten fehlen.
ChatGPT für Product Owner
Auch ein Product Owner kann ChatGPT in der täglichen Arbeit beim Erstellen von Tickets, EPICs oder User Stories unterstützen und helfen, die vielfältigen Anforderungen zu bündeln und zu priorisieren.
Dabei kann der Product Owner ganz unterschiedliche Fragen oder Aufgaben an ChatGPT stellen. Diese Prompts sind ebenfalls stark gekürzt, um die unterschiedlichen Einsatzzwecke zu zeigen. Selbstverständlich sollten die Prompts mit so vielen Details und so viel Kontext wie möglich ausgestattet werden.
- Wie kann ich das MoSCoW-Prinzip effektiv nutzen, um Features zu priorisieren? Gibt es Alternativen dazu?
- Erstelle mir für die Entwicklung eines MVPs für eine neue Kundenverwaltung alle erforderlichen EPICs!
- Wie kann ich Stakeholder effektiv in den Entwicklungsprozess einbinden, ohne den Entwicklungsfluss zu stören?
- Welche Strategien gibt es, um Features für zukünftige Releases effizient zu planen und zu kommunizieren?
Beispielhaft erweitern wir mal ein wenig die Aufgabe zur Erstellung von EPICs, fügen Situation und Kontext hinzu, und konkretisieren die Frage:
Als Product Owner soll ich eine moderne Kundenverwaltung verantworten, die unser veraltetes System ersetzen soll.
Die wachsenden Unternehmensanforderungen fordern eine zukunftssichere Lösung. Die Stakeholder erwarten zügig einen MVP, der die Grundfunktionen für das Anlegen und Bearbeiten von Kundendaten abdeckt.
Erstelle mir alle zentralen EPICs für den MVP für diese Kundenverwaltung! Stelle sicher, dass die EPICs aufeinander aufbauen, sodass sie sequentiell abgearbeitet werden können!
Auch bei der Arbeit an Dokumenten, EPICs oder User Stories kann das neue Modell »ChatGPT-4o with canvas« sehr hilfreich sein. Aber auch die anderen Modelle eignen sich dafür.
Kleiner Zusatztipp: Teilen Sie ChatGPT mit, dass Sie die Texte gerne als Code zum Kopieren im GitLab Flavored Markdown (GLFM) haben möchten. Dann können Sie die Texte in GitLab kopieren, und sie sind direkt formatiert.
ChatGPT für Softwaretester
Spannend ist auch der Einsatz von ChatGPT für Softwaretester. Diese können ChatGPT nutzen, um für vorhandene Klassen Unit-Tests erstellen zu lassen. Es ist aber auch möglich, ChatGPT im Rahmen der testgetriebenen Entwicklung zu nutzen, um geeignete Testfälle zu erstellen.
Aber aufpassen: Verwenden Sie ChatGPT immer nur für eine Seite, also entweder für den Code oder für den Test. Niemals sollten Sie beide Seiten durch eine KI generieren lassen, da Sie sonst die Kontroller aus der Hand geben.
Die Anfragen an ChatGPT für Softwaretester können ebenfalls recht abwechslungsreich sein. Auch diese Beispiele sind gekürzt, zeigen aber die Bandbreite der möglichen Fragestellungen:
- Ich möchte mit PHPUnit einen Test für einen Authentifizierungsservice erstellen. Schlage sinnvolle Testfälle vor!
- Wie kann ich per BDD meine Warenkorbfunktion mit Behat testen, um deren Funktionalität abzusichern?
- Wie kann ich mit Cypress die Performance meiner interaktiven Meerschweinchen-Community testen?
- Sollte ich als PHP Entwickler für meine End-to-End-Tests lieber Codeception oder Cypress einsetzen?
Auch hier ein ausführliches Beispiel. Wir erweitern den Prompt zum Vorschlagen sinnvoller Testfälle um weitere Details, fügen Situation und Kontext hinzu, und konkretisieren die Frage:
Ich arbeite als Tester in unserem Softwareteam intensiv daran, die Qualität unserer Produkte durch systematische Tests zu gewährleisten.
Aktuell möchte ich einen neuen Authentifizierungsservice testen. Dieser Service ist
entscheidend für die Sicherheit unserer Anwendung, da er sowohl die Registrierung neuer Benutzer als auch das Einloggen bestehender Benutzer handhabt. Es ist unerlässlich, dass dieser Service fehlerfrei funktioniert.
Ich möchte mit PHPUnit einen Test für diesen Authentifizierungsservice erstellen. Welche sinnvollen Testfälle könnten Sie mir vorschlagen?
Nach dem Vorschlagen sinnvoller Testfälle kann ChatGPT auch konkrete Tests als Code erstellen. Dafür sind aber sehr viele Details zur vorhandenen oder geplanten Implementierung erforderlich. Zumindest ein Interface, welches die wesentlichen Methoden definiert, sollte übergeben werden, damit die Tests auch sinnvoll sind. Aber nochmals der Hinweis: Niemals Code und Tests zusammen von ChatGPT erstellen lassen!
In der Praxis haben aber Fragen nach zusätzlichen Testfällen unserem Team immer gute Ideen geliefert, um auch die Funktionen abseits des Happy Paths testen zu können. Dabei lassen wir uns auch oft nur die leeren Methoden inkl. Testdox erstellen und schreiben den Code des Tests meistens selber. Nur bei ganz kniffligen Tests fragen wir ChatGPT noch direkt nach Testcode.
ChatGPT Prompts – Fazit: Der Beruf des Entwicklers wird nicht aussterben
In der täglichen Praxis hat sich ChatGPT als zusätzliches Tool bei unseren Entwicklern mittlerweile etabliert. Während früher bei Problemen meistens Google bemüht wurde, kommt inzwischen meistens direkt ChatGPT zum Einsatz. Erst vor kurzem habe ich mir mit ChatGPT ein Bash-Skript erstellen lassen, das für ein komplexeres Projekt mehrere Git Repositories auf meinem Rechner aktualisiert und die Docker Container hochfährt. Das hat nur wenige Minuten gedauert.
Wer ChatGPT als zusätzliches Werkzeug für die Entwicklung versteht, sollte sich keine Sorgen um die eigene Zukunft machen. Sinnvoll lässt sich dies auf lange Sicht nur einsetzen, wenn der Anwender über entsprechende Erfahrung verfügt. Wer hofft, mit wenigen Programmierkenntnissen komplexe Projekte hochziehen zu können, wird schnell auf den Boden der Tatsachen geholt werden.
Titelmotiv: Photo by Antonio Janeski on Unsplash
- ChatGPT für Entwickler – Teil 3: ChatGPT Prompts und Beispiele - 11. Januar 2025
- ChatGPT für Entwickler – Teil 2: Best Practices und empfohlene Richtlinien - 7. Januar 2025
- ChatGPT für Entwickler – Teil 1: Mythen und Missverständnisse - 6. Dezember 2024