Künstliche Intelligenz (KI) beeinflusst zunehmend unser tägliches Leben. Spracherkennung und -übersetzung, virtuelle Assistenten wie Siri und Alexa, selbstfahrende Autos und sogar medizinische Diagnosen und Behandlungen profitieren von den Fortschritten in der KI-Forschung. In der Softwareentwicklung wird KI ebenfalls immer wichtiger, da sie dabei helfen kann, schneller und effizienter zu arbeiten. Ich möchte mit euch einen Blick darauf werfen, wie KI für Codegenerierung, automatisierte Tests, und vieles mehr eingesetzt werden kann. Tauchen wir ein in die Welt der künstlichen Intelligenz und erfahren, wie sie die Arbeit im Bereich der Softwareentwicklung revolutionieren kann.
Womöglich ist es bereits zu erahnen. Diesen Absatz hat ChatGPT für uns geschrieben und das Ergebnis kann sich durchaus sehen lassen. Zugegeben, diese Art von Einstieg erzeugt heute wohl kaum mehr als ein müdes Lächeln, aber Anfang 2022 hätte die Qualität dieses KI-Outputs bei vielen Menschen sicher noch ungläubiges Staunen hervorgerufen.
Vergessen wir aber einmal diesen ersten Test mit ChatGPT zu beeindrucken und versuchen stattdessen ganz klassisch mit einem Witz zu beginnen. Also, bitte ChatGPT, generiere einen Witz darüber, wie sich Softwareentwicklung zukünftig durch KI verändern wird?
Warum werden Entwickler in Zukunft nicht mehr müde sein? Weil KI-Systeme alle repetitive Arbeit übernehmen werden, während Entwickler sich zurücklehnen und ihnen zuschauen, wie sie die Programme verbessern!
Während die Comedybranche wohl vorläufig vor ChatGPT sicher zu sein scheint, machen sich manche Softwareentwickelnde womöglich bereits Gedanken über ihre Zukunft. Nach aktuellem Entwicklungsstand sind KI-Tools jedoch in absehbarer Zeit nicht in der Lage, komplexe, sichere und qualitativ hochwertige Softwaresysteme ohne menschliche Hilfe zu bauen. Wer sich allerdings dauerhaft weigert, mit KI-Tools wie bspw. ChatGPT oder GitHub Copilot zu arbeiten, kann in Sachen Geschwindigkeit und Effizienz schnell den Anschluss zur Konkurrenz verlieren.
Falls es tatsächlich noch Menschen gibt, die ChatGPT nicht kennen, haben wir hier die wichtigsten Fakten kompakt zusammengefasst:
Das amerikanische Unternehmen OpenAI hat am 30. November 2022 den Chatbot ChatGPT veröffentlicht. Durch dessen Fähigkeit, natürliche Sprache kontextuell zu verstehen und basierend auf riesigen Datenmengen in natürlicher Sprache zu antworten, sehen viele Forschende hier den Beginn für disruptive Veränderungen in unzähligen Branchen. Es bleibt jedoch abzuwarten, wie schnell und in welchem Ausmaß diese Veränderungen eintreten werden. Eines ist jedoch sicher: ChatGPT hat großes Interesse geweckt. Auch Microsoft, größter Investor bei OpenAI, hat die Suchmaschine Bing mit einem Chatbot ausgestattet, der auf dem gleichen Modell wie ChatGPT basiert. Bemerkenswert ist, dass diese Chatbots auch mit Code trainiert wurden und daher Code generieren und verstehen können.OpenAI und Microsoft spielen auch bei dem zweiten KI-Tool, welches hier im Fokus stehen soll, eine wichtige Rolle: GitHub Copilot. Im Gegensatz zu ChatGPT wurde dieses Tool speziell für Coding trainiert und entwickelt. Copilot basiert auf dem OpenAI-Modell Codex und GitHub (Teil des Microsoft Imperiums) hat diesen KI-Helfer am 21. Juni 2022 freigegeben und seither weit über eine Million aktive Nutzende gewonnen.
Nützliche Helfer
Im Folgenden möchten wir jene Anwendungsfälle genauer unter die Lupe nehmen, bei denen KI-Tools wertvolle Unterstützung im Coding leisten können. Das wohl offensichtlichste Szenario ist, etwas programmieren zu wollen und sich dabei den Code von einer KI generieren zu lassen. Je klarer oder allgemeiner die Aufgabe ist, umso höher sind die Chancen, dass dieser Ansatz auch gelingt. Jedes Programm besteht zu großen Teilen aus Code, den bereits eine Vielzahl an Menschen in dieser oder ähnlicher Form ebenso programmiert hat. Und genau hier liegen die Stärken von generativen KI-Tools. Sie können diesen Code an den jeweiligen Kontext anpassen und zur Verfügung stellen. Aufgrund ihrer riesigen Wissensbasis und des Kontexts, der ihnen durch die Nutzenden beigesteuert wird, fällt diese Aufgabe in ihre Kernkompetenz. Ein Anwendungsbeispiel hierfür könnte sein, unerwartete Leerzeilen aus einer CSV-Datei entfernen zu wollen. Eine präzise Frage an ChatGPT genügt und lauffähiger Code kommt als Antwort zurück.
Quelle: ChatGPT
Quelle: GitHub Copilot
Dabei gilt allerdings, was auch schon vor der KI-Revolution galt: Gibt es eine passende Softwarebibliothek, mit der das bestehende Problem gelöst werden kann, empfehlen wir diese auch zu verwenden. Im Zweifel wird der Code dort gepflegt sowie mögliche Sicherheitslücken geschlossen. Manchmal lohnt es sich jedoch auch, eine Abkürzung zu nehmen und auf KI-Tools zurückzugreifen – vor allem, wenn bspw. Boilerplate Code geschrieben werden muss.
Boilerplate Code bezieht sich auf jene Codeabschnitte, die nicht wirklich das Kernproblem lösen und oftmals aus bereits bestehendem Code kopiert werden, um in angepasster Form eine reibungslose Funktionstüchtigkeit zu gewährleisten. Häufig gleichen sich diese Abschnitte in unterschiedlichen Projekten. Moderne Programmiersprachen und Frameworks zeichnen sich dadurch aus, Boilerplate Code auf ein Minimum zu reduzieren. Dennoch ist dieser Code nicht vollständig zu vermeiden und genau hier kann der Einsatz von KI-Tools erheblich zur Reduktion der Arbeitsbelastung beitragen.
Ein weiterer Anwendungsfall bspw. aus dem Java-Spring-Universum könnte sich aus dem Absichern von Anfragen an eine Applikation ergeben. Softwareentwickelnde mit Spring-Security-Erfahrung wissen nur allzu gut, dass es in diesem Bereich viel Boilerplate Code gibt, der immer wieder neu gesucht und kopiert werden muss. Diese Aufgabe könnte genauso gut ausgelagert und der initiale Entwurf von einem KI-Tool generiert werden.
Größtmögliche Synergieeffekte ergeben sich natürlich, wenn das KI-Tool direkt in die Entwicklungsumgebung integriert ist, wie es bspw. bei GitHub Copilot der Fall ist, aber auch für ChatGPT gibt es bereits IDE Plugins. Hier wird lediglich der Name der Methode eingegeben und Copilot liefert prompt Vorschläge, wie die jeweilige Methode implementiert werden könnte. Bei Kommentaren in natürlicher Sprache versucht Copilot, die darin beschriebene Logik umzusetzen. Wer sich bisher noch nicht an dieses oder ähnliche KI-Tools herangewagt hat, sollte sich auf mitunter beeindruckende Ergebnisse gefasst machen.
Besonders nützlich sind KI-Tools auch dann, wenn man eine neue Programmiersprache oder ein neues Framework entdecken möchte. Aller Anfang ist schwer, aber etwas leichter, wenn man die ersten Schritte mit KI-Code-Vervollständigung gehen kann. Von seinen Nutzenden wird von GitHub Copilot oft als Autovervollständigung auf Steroiden gesprochen. Eine Wortwahl, die durchaus treffend ist. Hat man sich einmal an die Copilot-Rakete gewöhnt, fühlt sich jede standardmäßige Autovervollständigung vergleichsweise wie eine Pferdekutsche an.
Weitere Punkte, an die im Zusammenhang mit KI-Tools vielleicht nicht sofort gedacht wird, sind automatisierte Tests und Dokumentationen. Es ist immer wieder erstaunlich, wie viel Zeit bei der Entwicklung in Testautomatisierung fließt und zwar meist aus einem Grund: Tests bedeuten Stabilität und eine geringe Fehleranfälligkeit, auch dann, wenn das Produkt kontinuierlich wächst. Gerade Unit-Tests (Tests von kleinen, abgeschlossenen Logikeinheiten) gestalten sich immer wieder als besonders zeitaufwendig, da Abhängigkeiten zu anderen Programmteilen simuliert werden müssen (Mocking).
Wer den zu testenden Code an ChatGPT schickt, kann sich eine erste Vorlage für einen Unit-Test generieren lassen. In der Regel wird das Ergebnis zu 99 % nicht sofort so aussehen, wie man sich dieses gewünscht hat. Je nach Komplexität der zu testenden Methode kann es jedoch erheblich schneller sein, diese KI-Vorlage anzupassen, als alles von Grund auf neu zu schreiben. Ähnlich funktioniert es auch mit Dokumentationen. Mit der Frage nach einer passenden Dokumentation wird dem KI-Tool der Code geschickt und man bekommt als Antwort ein erstes Ergebnis zurück. Gewöhnlich hält das KI-Tool dabei auch die Formatierung der entsprechenden Programmiersprache ein. Häufig lässt sich auf dieser Basis schneller ein zufriedenstellendes Ergebnis erzielen, als wenn ganz ohne Vorlage gearbeitet wird.
Unbedingt beachtet werden sollte im Umgang mit ChatGPT, dass man sich genau überlegen muss, welchen Code man mit dem KI-System über die Webanwendung teilt. In den aktuellen Nutzungsbedingungen von OpenAI ist festgehalten, dass die Eingaben an ChatGPT für OpenAI-Mitarbeitende einsehbar sind. Sensible Informationen und kritische Codeteile sollten daher nicht vorbehaltlos mit ChatGPT geteilt werden. Für die GPT API hingegen, die ebenfalls von OpenAI zur Verfügung gestellt wird, gilt der Grundsatz, dass die Inhalte nicht für OpenAI zugänglich aufbewahrt werden. Als Unternehmen sollte man sich daher überlegen, ob man intern eine eigene Version von ChatGPT bspw. über die API anbietet, um die Produktivität in der Softwareentwicklung auf sichere Art und Weise zu erhöhen.
KI-Tools eignen sich übrigens auch gut zur Recherche, um einen ersten Überblick zu erhalten. Mit bspw. ChatGPT lassen sich nicht nur relevante Literaturtipps zu einem bestimmten Thema finden, sondern auch Zusammenfassungen ganzer Bücher generieren.
Fokus auf den Kern des Problems
Grundsätzlich sollte der von KI-Tools geschriebene Code immer geprüft werden. Der generierte Code ist möglicherweise fehlerhaft oder langsam, kann darüber hinaus auch Sicherheitslücken enthalten. Selbst funktionierender Code sollte nicht einfach so übernommen werden, sondern nur, wenn dieser auch verstanden wird und die bestmögliche Lösung für das eigentliche Problem ist.
So beeindruckend generative KI-Tools auch sein mögen, die Fähigkeit, kausale Hintergründe zu prüfen und die Wahrheit bzw. Funktionsfähigkeit des Outputs sicher zu stellen, haben diese Modelle noch nicht. In absehbarer Zukunft werden jedoch sehr wahrscheinlich KI-Tools entwickelt werden, die generierten Code automatisch ausführen und testen können. Trotzdem gibt es auch dann keine Garantie, ob dieser Code tatsächlich den spezifischen Anforderungen entspricht. Deshalb empfehlen wir: Jede Lösung zu prüfen und zu verstehen, bevor diese übernommen wird.
Wer sich mit aktuellen KI-Tools auseinandersetzt, wird relativ schnell feststellen, dass diese in wichtigen Aspekten der Softwareentwicklung durchaus sehr hilfreich sein können. In jenen Bereichen allerdings, die von den Stakeholdern am meisten geschätzt werden bzw. ausschlaggebend für eine Auftragsvergabe sind, ist ihr Einsatz begrenzt. Die Kernfunktionalität und das Besondere an einem Programm oder der Grund dafür, warum überhaupt etwas programmiert werden muss und nicht einfach ein bestehendes Produkt verwendet wird, lässt sich nur schwierig an ein KI-Tool auslagern.
Je näher man sich im Code dieser zentralen Logik annähert, desto weniger hilfreich sind KI-Tools im Allgemeinen. Für eine kreative Lösung, um bspw. noch ein paar Millisekunden aus komplexen Prozessen herausholen zu können, wird ChatGPT nur selten eine Antwort finden. Und auch wenn nutzungsfreundliche Oberflächen aktuell von KI-Tools generiert werden können, so braucht es für tatsächlich innovative Designs immer noch Menschen, die diesen das Besondere verleihen. Software wird von Menschen mithilfe dieser Werkzeuge erschaffen und nicht umgekehrt.
In ein paar Jahren mag es womöglich anders sein, aber im Moment ist die Softwareentwicklung in Menschenhand immer noch an der richtigen Stelle. KI-Tools können jedoch stark dabei unterstützen, wiederkehrende und zeitaufwendige Aufgaben in der Programmierung zu Automatisieren. So können Entwickelnde den Fokus auf spannendere Aufgaben richten und den Rest effizienter abarbeiten. Ein Vorteil, der nicht zu unterschätzen ist.
Abschließen möchten wir unseren Blogbeitrag über die Einsatzmöglichkeiten von KI-Tools in der Softwareentwicklung, so wie wir diesen begonnen haben, mit ChatGPT. Wir haben das Tool darum gebeten, in einem Satz zusammenzufassen, was es von alldem hält:
KI-Werkzeuge optimieren die Softwareentwicklung, doch menschliche Kreativität und kritisches Denken bleiben für erstklassige Lösungen unersetzlich.
Softwareentwicklung
Erfahren Sie mehr über unsere Leistungen