Skip to main content
Top

20. Künstliche Intelligenz in der Softwareentwicklung

  • Open Access
  • 2026
  • OriginalPaper
  • Chapter
Published in:

Activate our intelligent search to find suitable subject content or patents.

search-config
loading …

Zusammenfassung

Der Einsatz generativer KI verändert die Arbeitsgewohnheiten in der Softwareentwicklung erheblich. Große Sprachmodelle wie ChatGPT ermöglichen die Generierung von Quellcode und die Automatisierung weiterer Teile des Softwarelebenszyklus. Bereits vor ChatGPT wurden KI-Techniken genutzt, um Code auf Schwachstellen zu analysieren. Dieses Kapitel bietet einen Überblick über aktuelle und zukünftige Einsatzfelder von KI in der Softwareentwicklung. Anhand konkreter Beispiele wird gezeigt, welche Möglichkeiten und Potentiale KI heute bietet, was künftig zu erwarten ist und welche Einschränkungen bestehen. Neben der Perspektive der Programmierer wird auch betrachtet, wie Designer, Produkt- und Projektmanager sowie Anforderungsmanager von KI profitieren können. Die Analyse zeigt, wie sich die Aufgaben dieser Rollen durch den verstärkten KI-Einsatz wandeln und welche Auswirkungen dies auf die Softwareentwicklung haben kann.
Bereits seit einigen Jahren ist der Einfluss der Künstlichen Intelligenz auf die Softwareentwicklung ein wichtiges Thema in Wissenschaft und Praxis. Während in der Zeit nach der Jahrtausendwende hauptsächlich intelligente Suchmethoden und probabilistisches Reasoning als wichtige Techniken auf der Agenda standen (z. B. Harman, 2012), kamen später Entwicklungen im Machine Learning und der automatischen Sprachverarbeitung hinzu (Feldt et al., 2018). Bereits nach der Einführung des ersten großen Sprachmodells BERT im Jahre 2018 (Devlin et al., 2019) kamen neue Anwendungen hinzu, doch spätestens seit der Veröffentlichung von ChatGPT und dem darunterliegenden Sprachmodell im November 2022 haben die Diskussionen über das Potential, das diese Technologien zur Veränderung des Arbeitsalltags von Entwicklern haben, die breite Masse erreicht.
Allerdings sind nicht nur Entwickler an der Produktion von Software beteiligt. Auch Produkt- und Projektmanager, Tester, Sicherheitsexperten und Experten für User Experience Design (UX) sind von den Produkten und Ideen, die innovative KI-Lösungen mit sich bringen, betroffen und können von ihnen im Arbeitsalltag profitieren.
In diesem Kapitel zeigen wir auf, welche Möglichkeiten Künstliche Intelligenz während des Entwicklungszyklus eines Softwareproduktes für verschiedene Aktivitäten der Softwareentwicklung anbietet. Dabei gehen wir auf das Anforderungsmanagement, die Entwicklung der Benutzerschnittstellen, die Produktion von Quellcode, die Analyse der produzierten Software, die Validierung und Verifizierung des Produktes und schließlich die Softwaresicherheit ein. Wir beenden das Kapitel mit einer kurzen Analyse der voraussichtlichen Auswirkungen innovativer KI-Techniken auf die Softwareentwicklung. Dabei erheben wir selbstverständlich im Folgenden keinen Anspruch auf Vollständigkeit – der Markt ist aktuell viel zu volatil, um einen umfassenden Überblick geben zu können. Stattdessen ist unser Anspruch, wichtige Trends zu erfassen, aufzuzeigen, wo KI (oft schon seit Jahren) im Einsatz ist und wo die Reise hingehen könnte.

20.1 KI im Anforderungsmanagement

Dadurch dass Anforderungen, z. B. in einem Ticketingsystem oder Lasten- oder Pflichtenheft, in natürlicher Sprache verfasst sind, werden schon seit einigen Jahren Methoden des Natural Language Processing (NLP) verwendet, um sie aufzubereiten und zu managen. In der Forschung sind dabei etliche Lösungen entstanden, von denen allerdings nur wenige in Produkten bzw. in der Praxis angekommen sind.
So wurde die Verarbeitung natürlicher Sprache etwa zur Identifikation von Fehlern in Anforderungsspezifikationen eingesetzt (Körner et al., 2014), um Zweideutigkeiten zu identifizieren, die zu Missverständnissen führen können (Ferrari et al., 2014, 2018), um Anforderungen zu validieren (Dell’Anna et al., 2018) oder um diese zu klassifizieren (Chatterjee et al., 2020; Anish et al., 2019). Einige Ansätze haben bereits vor der weiten Verbreitung großer Sprachmodelle generative Elemente integriert. So lassen sich aus natürlichsprachigen Anforderungen beispielsweise UML-Diagramme generieren (Sharma et al., 2015; Shen & Breaux, 2022), Domänenwissen aus Anforderungen gewinnen (Abad et al., 2018) oder Anforderungen selbst aus anderen Artefakten extrahieren (Guo et al., 2018; Rahman et al., 2023).
Deep-Learning-Verfahren, die von Grund auf trainiert werden – also mehrschichtige neuronale Netzwerke, die mit den verfügbaren anwendungsspezifischen Daten trainiert werden – werden seltener eingesetzt, mutmaßlich weil die benötigten Datenmengen für das Anlernen von neuronalen Netzen oft schwer zu beschaffen sind. Eine Ausnahme stellen Habib et al. (2021) dar, die einen Ansatz zur Anforderungsanalyse beschreiben.
Große Sprachmodelle (engl. Large Language Models, LLMs), die auf Deep Learning basieren und Transformer-Architekturen verwenden (Vaswani et al., 2017), haben insbesondere in den zuletzt genannten Use Cases schnell Anwendung gefunden, beispielsweise in der Klassifizierung von Anforderungen (Mehder & Aydemir, 2022). Es zeigt sich, dass große Sprachmodelle hierbei deutlich bessere Ergebnisse erzielen als die auf klassischen NLP-Architekturen basierenden Vorgänger. Die fortschreitende Verbesserung von LLMs, die z. B. beim Schritt von GPT-3.5 auf GPT-4 deutlich wurde, wird den Abstand noch weiter wachsen lassen. Aber vornehmlich generative Anwendungen werden durch LLMs auch künftig Aufwind erfahren. So sind bereits erste Arbeiten erschienen, die aus Sicherheitsanforderungen zumindest die Grundgerüste von Safety Assurance Cases, also strukturierten Argumentationen, warum ein System sicher ist, automatisch erzeugen (Sivakumar et al., 2024). LLMs bieten auch Lösungen für die Erhebung von Anforderungen: Gudaparthi et al. (2023) beschreiben eine Technik, um neue, kreative Alternativen für Anforderungen aus dem Korpus der existierenden Anforderungen zu generieren.
Eine der großen Herausforderungen im Requirements Engineering ist die Nachverfolgbarkeit (Traceability) der Anforderungen. In vielen Projekten, insbesondere solchen, die sicherheitskritisch sind, ist es notwendig oder gar vorgeschrieben, nachweisen zu können, an welchen Stellen im Quellcode Anforderungen umgesetzt wurden, wie sie validiert wurden und dass die Validierung erfolgreich war. Traceability ist und bleibt ein Problem in der Industrie (Maro et al., 2018), unter anderem weil der manuelle Aufwand, die Verbindungen zwischen Anforderungen und anderen Entwicklungsartefakten zu erstellen und zu pflegen, sehr hoch ist. Deswegen wurden bereits vor Jahren Methoden entwickelt, um NLP für diesen Zweck einzusetzen (Borg et al., 2014; Guo et al., 2024). Jedoch blieb bisher die Qualität in diesen Arbeiten immer so niedrig, dass ein produktiver Einsatz nicht sinnvoll war. Das Gleiche gilt für einen Ansatz, der die Verknüpfungen zwischen Entwicklungsartefakten als Netzwerk interpretiert und Ideen aus der Netzwerktheorie für die Erstellung neuer Verknüpfungen verwendet (Nicholson et al., 2020). Ansätze, die von Grund auf trainiertes Deep Learning verwenden (z. B. Guo et al., 2017), sind zwar vielversprechend, jedoch in der Praxis aufgrund der geringen Datenmengen, die kein effektives Training dieser anwendungsspezifischen Deep-Learning-Modelle erlauben, nicht einsetzbar. Erste Ideen, für die Erstellung von Verknüpfungen LLMs zu verwenden, wurden bereits publiziert (Rodriguez et al., 2023; Hassine, 2024). Eine genaue Überprüfung der Skalierbarkeit und Performance dieser Ansätze, besonders im industriellen Kontext, steht aber noch aus.
Ein für das Alltagsgeschäft von Entwicklungsteams relevanter Themenbereich ist das Backlog-Management. Anforderungen werden in der agilen Softwareentwicklung oft in priorisierten Listen vorgehalten, häufig in Form von User Stories oder Epics. Diese User Stories müssen geschrieben und angepasst, priorisiert und ggf. geschätzt werden. Außerdem müssen Querverbindungen zu anderen Stories und zu Testfällen erstellt werden (siehe oben). Häufig erledigen Product Owner diese Arbeiten. Das Backlog enthält also sehr viele Informationen, wobei eine Mischung aus natürlicher Sprache (Anforderungen, Akzeptanzkriterien) und strukturierten Daten (z. B. die Querverbindungen) vorliegt. Es existieren erste kommerzielle Ansätze, das Backlog-Management mithilfe von generativer KI zu automatisieren, etwa Zen.AI,1 der Product Copilot von DevBoost2 oder der Copilot4DevOps von Modern Requirements.3 Diese Lösungen stecken allerdings aktuell noch in den Kinderschuhen. In der Forschung wird derzeit an ähnlichen Themen gearbeitet, z. B. an der Schätzung des Aufwands einer User Story mit Machine Learning (Abadeer & Sabetzadeh, 2021) oder an der Verbesserung von User Stories mithilfe von LLMs (Zhang et al., 2024).
Fazit
KI-Methoden zur natürlichen Sprachverarbeitung für Anforderungen sind in der wissenschaftlichen Literatur weitverbreitet. Große Sprachmodelle haben hier enormes Potential und werden bisherige Ansätze mittelfristig ablösen. Es gibt bereits erste kommerzielle Angebote, deren Reifegrad allerdings noch zu wünschen übriglässt. In den nächsten Jahren ist aber damit zu rechnen, dass das Anforderungsmanagement massiv von kommerziellen Produkten, die LLMs integrieren, unterstützt werden wird.

20.2 KI in der Entwicklung von Benutzerschnittstellen

Benutzerschnittstellen oder, etwas weiter gefasst, die User Experience (UX) behandeln, wie die Endnutzer das entstehende System vor der Nutzung, während der Nutzung und nach der Nutzung erleben. Dieses Erlebnis beruht auf der Benutzerschnittstelle des Systems, aber auch auf dem Markenbild, den Vorlieben und den Kompetenzen der Nutzer und zahlreichen anderen Elementen (DIN EN ISO 9241-210, 2011). In vielen Fällen sind in der modernen Softwareentwicklung das Erheben von Anforderungen und das Erstellen von Benutzerschnittstellen eng miteinander verzahnt: Bereits früh im Prozess entstehen in Kollaboration mit den Interessenvertretern sowohl Anforderungen als auch Entwürfe der Benutzerschnittstelle, z. B. im Rahmen von Design Thinking (Hehn & Uebernickel, 2018) oder User-centred Design (Preece et al., 2023).
Einen Überblick über den Einsatz von KI im Entwurf von Benutzerschnittstellen geben Stige et al. (2023). Sie differenzieren verschiedene Arten, in denen KI in UX genutzt wird. Ansätze wie Computational Creativity (Feldman, 2017; Mateja & Heinzl, 2021) unterstützen UX-Experten dabei, neue, kreative Ideen und Ansätze zu entwickeln. Andererseits existieren Methoden, um Personas (Beschreibungen der archetypischen Benutzer eines Systems) automatisch generieren zu lassen (Salminen et al., 2019) oder um aus einfachen Skizzen einer Benutzeroberfläche mithilfe von KI komplexe und detaillierte Entwürfe zu generieren (Suleri et al., 2019). Viele Ansätze beschäftigen sich mit der tatsächlichen Generierung von Benutzerschnittstellen. Dabei reichen die Ideen vom Vorschlagen von Entwurfsmustern auf Basis der Anforderungen (Silva-Rodríguez et al., 2020) bis hin zur Optimierung von Layouts (Duan et al., 2020). Interessanterweise haben Stige et al. (2023) keine Ansätze gefunden, die das Design vollständig automatisieren. Außerdem wurden etliche Arbeiten identifiziert, in denen sich menschliche Designer kritisch gegenüber Automatisierung im Design geäußert haben – sei es, weil sie das Gefühl hatten, die Kontrolle zu verlieren (O’Donovan et al., 2015) oder weil die KI das Problem nicht vollständig erfasste (Feldman, 2017). Die Evaluation von Benutzerschnittstellen mithilfe von KI ist ebenfalls möglich (Yang et al., 2020), allerdings zeigt die Evaluation, dass mithilfe der KI manche Aspekte der User Experience (Lernen, Effektivität) nicht verbessert werden können.
Weiterhin gibt es einige Ansätze, um direkt aus Entwürfen für Benutzerschnittstellen Code zu generieren. Dave et al. (2021) vergleichen drei davon, die alle auf Deep Learning basieren. Keiner der vorgestellten Ansätze hat allerdings eine Qualität, die für den produktiven Einsatz notwendig wäre. Es ist erwähnenswert, dass auch ChatGPT seit März 2024 eine ähnliche Funktionalität anbietet, allerdings gibt es aktuell noch keine wissenschaftliche Evaluation dieser Fähigkeit. Ähnliche Möglichkeiten werden derzeit auch in andere kommerzielle Werkzeuge integriert. Das beliebte Tool Figma zum Erstellen von Entwürfen für Benutzerschnittstellen bietet beispielsweise eine entsprechende Erweiterung an, die sich allerdings bei Redaktionsschluss noch im Beta-Test befindet.4
Fazit
Auch bei der Erstellung von Benutzerschnittstellen und bei der Generierung von Code aus Entwürfen gibt es bereits seit einiger Zeit vielversprechende Ansätze, die allerdings nie das notwendige Niveau für den produktiven Einsatz erreicht haben. Generative KI hat das Potential, viele dieser Ansätze abzulösen und menschliche UX-Experten zu unterstützen, doch die konkreten Fähigkeiten und Beschränkungen sind aktuell noch nicht klar.

20.3 Coding Assistants

Wenn in der Berichterstattung von der Ablösung des Softwareentwicklers die Rede ist, dann beziehen sich die Journalisten normalerweise auf generative KIs, die als sogenannte Coding Assistants in der Softwareprogrammierung Einzug halten. Bei einem Coding Assistant handelt es sich meist um ein Plugin, das direkt in der Entwicklungsumgebung, also dem Programm, in dem Entwickler Quellcode schreiben, KI-Funktionalitäten bereitstellt. Von den Anbietern werden diese auch als „AI Pair Programmerbeworben,5 um die Idee zu vermitteln, dass eine zweite „Person“ jederzeit mit auf den Code schaut und Vorschläge macht.
Im Folgenden beziehen wir uns auf den Marktführer6 GitHub Copilot5. Die Handhabung der Konkurrenzprodukte wie Tabnine,7 Codeium,8 qodo,9 Amazon Q10 oder Continue11 ist jedoch sehr ähnlich.
Die Benutzerschnittstelle von Coding Assistants besteht üblicherweise aus zwei Teilen: einer Integration in den Quelltexteditor, mit der ein Entwickler direkt im Quellcode mit dem Coding Assistant interagieren kann, und einem Chatfenster, das in einer Seitenleiste der Entwicklungsumgebung fest angedockt wird.12
Das Sprachmodell, mit dem hier kommuniziert wird, wurde durch sogenanntes „Fine-Tuning“ auf Programmierthemen spezialisiert. Des Weiteren steht dem Sprachmodell der vorhandene Projektcode als Kontext zur Verfügung. Codevorschläge durch das Sprachmodell können direkt in das Projekt übernommen und Kommandozeilenbefehle direkt ausgeführt werden.13
Die Integration in den Editor bietet weitere KI-basierte Features. Während Code geschrieben wird, generiert das Sprachmodell im Hintergrund Vorschläge, wie die Zeile beendet werden kann und wie die folgenden Zeilen aussehen können. Diese werden als blasser Text direkt im Code eingeblendet und lassen sich mit nur einem Tastendruck übernehmen. Über spezialisierte Menüeinträge ist es möglich, bestimmte Anfragen zu stellen, ohne eine Chatnachricht schreiben zu müssen.14 So gibt es z. B. Funktionen, um Fehler suchen zu lassen oder Dokumentation zu generieren. Dieselben Funktionen lassen sich, ähnlich wie in Chatprogrammen, auch durch Schrägstrichbefehle wie „/fix“ auslösen.15
In Abschn. 20.3.1 werden zunächst die Verwendungsmöglichkeiten von Coding Assistants beschrieben. Anschließend wird in Abschn. 20.3.2 deren Einfluss auf die Produktivität von Entwicklern untersucht.

20.3.1 Features von Coding Assistants

Im Folgenden werden die Verwendungsmöglichkeiten von Coding Assistants genauer beleuchtet.
Codegenerierung/Vervollständigung
Der wichtigste Einsatzzweck eines Coding Assistants ist die Generierung von Code. Die Benutzeroberfläche bietet hierfür zwei Einstiegsmöglichkeiten.
  • Der Programmierer beschreibt im angedockten Chatfenster die gewünschte Funktionalität, die Anforderungen und die zu verwendenden Bibliotheken. Wenn bereits vorhandene Funktionalität integriert werden soll, bietet es sich an, diese ebenfalls direkt zu erwähnen. Das Sprachmodell antwortet darauf mit einem Code-Vorschlag und einer Erklärung. Der Programmierer prüft den Code und stellt Rückfragen, worauf das Sprachmodell mit einem überarbeiteten Vorschlag antwortet. Der generierte Code kann dann direkt in den Projektquellcode übernommen werden.16
  • Während der Programmierer tippt, bietet der Coding Assistant direkt Vorschläge an, die im Codeeditor in blasserem Text angezeigt werden. Diese Vorschläge erfolgen auf Basis des umliegenden Kontextes. So kann der Programmierer z. B. einen Kommentar schreiben, der eine noch nicht implementierte Funktion beschreibt, und die KI generiert dann die Implementierung der Funktion. Je nach Ausmaß des vorhandenen Kontexts umfasst der Vorschlag nur den Rest der Zeile oder mehrere Zeilen. Der Programmierer kann den Vorschlag mit einem Tastendruck akzeptieren oder durch mehrere alternative Vorschläge durchwechseln.17 Es findet keine direkte Diskussion mit dem Coding Assistant statt. Stattdessen wird der Vorschlag im Nachhinein als Text bearbeitet, oder der Programmierer eröffnet einen neuen Chat auf Basis des neuen Codeabschnitts.
Refactoring
Der Coding Assistant bietet die Möglichkeit, ein Refactoring vorzunehmen, also Umstellungen des vorhandenen Codes. Dabei reicht es, dem Coding Assistant eine allgemeine Anweisung wie „Verbessere die Fehlerbehandlung“ zu geben.18 Gemäß Erfahrungsberichten19 ist es auch möglich, die Vorschläge im Programmcode für Refactoring zu nutzen. In diesem Fall nimmt der Programmierer die ersten Änderungen des Refactorings, wie z. B. das Extrahieren von sich wiederholendem Code, von Hand vor. Bei weiteren Vorkommen macht der Coding Assistant dann direkt den entsprechenden Vorschlag, und der Programmierer muss diesen lediglich bestätigen.
Generierung von Dokumentation
Es ist möglich, den Coding Assistant zu verwenden, um Dokumentation für vorhandenen undokumentierten Code zu erstellen. Dafür reicht es aus, den vorhandenen Code auszuwählen und die Dokumentationsfunktion auszulösen.20 Daraufhin generiert der Coding Assistant auf Basis von Namen und weiterem Kontext einen Dokumentationsvorschlag. Die Dokumentation erfolgt in derselben Datei wie der Code und kann mit anderen (nicht-KI) Werkzeugen in eine Website umgewandelt werden.21
Beantworten von Fragen
Coding Assistants können Fragen zu vorhandenem Code beantworten. Dafür kann im Chatfenster auf vorhandenen Code verwiesen und eine entsprechende Frage gestellt werden.22 Auch weitere Rückfragen sind möglich. In begrenztem Umfang ist es auch möglich, den Coding Assistant zu Code zu befragen, der nicht im aktuellen Fenster sichtbar ist. Heutige Sprachmodelle sind nicht in der Lage, ein komplettes Projekt gleichzeitig zu erfassen. Stattdessen verwendet GitHub Copilot einen vorher erstellten semantischen Index,23 um die Frage zu beantworten.
Fehlersuche
Coding Assistants können zum Finden und Lösen aller möglichen Arten von Programmierfehlern benutzt werden. In manchen Fällen reicht es bereits aus, den fehlerhaften Codeabschnitt auszuwählen und die entsprechende Funktion auszulösen24 oder den Link in der Fehlermeldung anzuklicken.25 Bessere Ergebnisse erzielt man jedoch, wenn man dem Coding Assistant weitere Details, wie den Text einer Fehlermeldung, mitteilen kann. Der Coding Assistant versteht dabei sowohl Fehler, die vom Compiler gefunden werden, als auch typische Laufzeitfehler. Es ist ebenfalls möglich, das Fehlverhalten umgangssprachlich zu beschreiben. GitHub Copilot bietet weiterhin die Möglichkeit, die Fehlermeldung des Compilers zu erklären oder den fehlerhaften Code sogar direkt zu reparieren.
Generierung von Testfällen
Es ist möglich, den Coding Assistant zur Generierung von Testfällen zu benutzen. Dabei wird zunächst zu der entsprechenden Codestelle navigiert. Anschließend wird dem Coding Assistant eine kurze Beschreibung, meist ein Satz oder weniger, übergeben. Auf dieser Basis wird dann ein Testfall generiert,26 meist in Form eines sogenannten Unit Tests. Dies ist eine relativ simple Form der Testgenerierung. In Abschn. 20.5 werden weitere Ansätze beschrieben, wie KI zur Unterstützung bei der Validierung und Verifizierung genutzt werden kann.
Abarbeiten von Tickets
Es wird z. B. in Form von GitHub Copilot Workspace27 daran gearbeitet, dass Coding Assistants in Zukunft ganze Tickets selbst abarbeiten können. Ein Ticket beschreibt entweder einen Fehler im Programm oder ein neues Feature. Dabei formuliert der Coding Assistant aus dem Tickettext einen Plan, wie die Umsetzung aussehen könnte. Dieser Plan kann vom Entwickler noch angepasst werden. Anschließend nimmt der Coding Assistant die komplette Umsetzung selbstständig vor.
Fazit
Coding Assistants sind direkt in die Entwicklungsumgebung integriert und ermöglichen es Entwicklern, mit einem Sprachmodell über den Code zu chatten. Sie können außerdem bei einer Vielzahl von Aufgabenstellungen, wie z. B. Codegenerierung, Refactoring, Dokumentation, Fehlersuche und Testen, Vorschläge machen. Diese Vorschläge müssen aktuell immer noch von einem Entwickler validiert und freigegeben werden. Es wird jedoch daran gearbeitet, dass Coding Assistants zukünftig Tickets autonom abarbeiten können.

20.3.2 Einfluss auf die Produktivität

Während sich Coding Assistants zumindest gemessen an Downloadzahlen und Präsenz in den (sozialen) Medien großer Beliebtheit erfreuen, steckt die Erforschung ihrer Auswirkung auf die Produktivität von Entwicklern noch in den Kinderschuhen. Yetiştiren et al. (2023) zeigen, dass die Qualität des produzierten Codes noch recht niedrig ist. Das bedeutet, dass Entwickler, die Coding Assistants benutzen, den generierten Code verstehen und überprüfen müssen. Insbesondere sind zuverlässige Testfälle notwendig. Ziegler et al. (2024) weisen Produktivitätsgewinne besonders bei unerfahrenen Entwicklern nach. Allerdings sind die verwendeten Metriken in gewissem Maße fragwürdig. Wie Ziegler et al. (2024) selbst schreiben, verändern erfahrene Entwickler die generierten Vorschläge stärker als unerfahrene. Tatsächliche Zeitersparnisse und Effizienzsteigerungen sind nur schwer zu quantifizieren, vor allem weil simple Metriken, wie produzierte Codezeilen, den qualitativen Charakter des Programmierens nicht erfassen.
Eine weitere Schwachstelle der aktuellen Forschung ist, dass sich die meisten Studien zu Codequalität mit sehr einfachen Programmierbeispielen beschäftigen, die nicht der Komplexität tatsächlicher Programmieraufgaben aus der Praxis entsprechen (z. B. in Yetiştiren et al., 2023). Auf der anderen Seite sind mögliche Anwendungsfelder noch kaum erforscht: So bieten Coding Assistants beispielsweise die Möglichkeit, Code aus nicht mehr gewarteten Programmen (sog. Legacy Code) für Entwickler leichter zugänglich zu machen. Die Wartung von Legacy Code stellt erhebliche Herausforderungen dar (Langer, 2016), die aus dem Mangel an Wissen über das Altsystem und der Verwendung von überholten Technologien und Architekturen resultieren. Coding Assistants können Entwickler bei der Analyse des Systems unterstützen und Code in ungewohnten Programmiersprachen und für veraltete Technologien erzeugen. Erste Ergebnisse zeigen, dass Entwickler Coding Assistants in solchen Szenarien bereits einsetzen (Davila et al., 2024), aber es fehlen empirische Evaluationen der Effektivität und der Grenzen von Coding Assistants in diesem Anwendungsfall.
Auch die Migration von Quellcode, beispielsweise hin zu neuen Versionen einer Programmiersprache (was auch stets mit einer Migration zu neuen Versionen der verwendeten Bibliotheken einhergeht), ist ein spannender Anwendungsfall von Coding Assistants (Ishaani et al., 2024). Selbst wenn die Programmiersprache die gleiche bleibt, kommt es in der Industrie zu Migrationen, z. B. zu einer neuen Technologie für die Benutzerschnittstelle. Inwiefern Coding Assistants in diesem Bereich unterstützen können, ist noch offen. Bisherige Arbeiten setzen hier eher auf etablierte nicht-KI Techniken wie Modelltransformationen (s. z. B. Fleurey et al., 2007).
Eine weitere offene Frage ist die Qualität der Vorschläge von Coding Assistants für verschiedene Programmiersprachen und verschiedene eingesetzte Technologien. Die vorliegenden Studien benutzen weitverbreitete Sprachen wie C++ und JavaScript und wenige oder sehr populäre Frameworks. Es ist unklar, wie sich die Codequalität und die Güte der Vorschläge bei Nischensprachen oder mit weniger weitverbreiteten Frameworks verhalten. Abseits des wissenschaftlichen Diskurses vernimmt man aus der Praxis aber Stimmen, die von guter Unterstützung beim Erlernen von Programmiersprachen berichten, die den Entwicklern bisher unbekannt waren.
Schließlich gibt es verschiedene Untersuchungen, die sich mit der Sicherheit des generierten Codes beschäftigen. Während Sandoval et al. (2023) im Vergleich zu manuell geschriebenem Code keine signifikante Verschlechterung von generiertem Code feststellen, finden Perry et al. (2023) das genaue Gegenteil. Hier sind u. U. die Kohorten der Studien signifikant: Während Sandoval et al. (2023) mit Studenten gearbeitet haben, rekrutierten Perry et al. (2023) ihre Studienteilnehmer aus erfahrenen Entwicklern. Dass Studenten Code mit geringerer Qualität produzieren als erfahrene Entwickler, ist wenig erstaunlich.
Insgesamt ergibt sich aus den Studien zu Produktivität und Codequalität, dass es einen großen Unterschied macht, ob unerfahrene oder erfahrene Entwickler Coding Assistants einsetzen. Während erfahrene Entwickler in der Lage sind, die Vorschläge zu verändern und anzupassen, übernehmen unerfahrene Entwickler Vorschläge eher direkt. Allerdings tendieren auch erfahrene Entwickler dazu, Sicherheitslücken in generiertem Code zu übernehmen (Perry et al., 2023).
Fazit
Während erste Ergebnisse zeigen, dass Coding Assistants in gewissem Umfang zu Produktivitätsgewinnen führen können, ist noch offen, in welchen Situationen und für welche Benutzergruppe die Produktivität von Entwicklern für realistische Beispiele tatsächlich steigt. Kritisch zu sehen ist die Gefahr, durch die Verwendung von Coding Assistants zusätzliche Sicherheitslücken oder andere Qualitätsprobleme in Software zu integrieren. In der Praxis möchten aber sowohl erfahrene als auch unerfahrene Entwickler die Unterstützung durch Coding Assistants nicht mehr missen.

20.4 Statische und dynamische Codeanalyse

Um sicherzustellen, dass Quellcode keine typischen Programmierfehler oder Schwachstellen enthält, wird er häufig einer statischen oder dynamischen Codeanalyse unterworfen. Bei statischen Verfahren wird der Quellcode direkt auf bestimmte Muster hin untersucht, die auf häufige Programmierfehler oder Sicherheitsschwachstellen hinweisen. Bei der dynamischen Codeanalyse wird der Quellcode zu einem gewissen Grad ausgeführt, um komplexere Fehler, wie z. B. Interaktionen mit anderen Systemteilen, detektieren zu können. Beide Analysearten sind sehr aufwendig und bringen oft eine große Anzahl von Falschmeldungen mit sich, die von Entwicklern dann mit viel Aufwand manuell überprüft werden müssen.
Giray et al. (2023) geben einen Überblick zu KI-Ansätzen, um Fehler in Quellcode zu finden. Die meisten der gefundenen Ansätze verwenden dabei Machine Learning oder Deep Learning. Diesen Methoden ist gemein, dass hochqualitative Datensätze notwendig sind, um gute Ergebnisse zu erzielen. Daran mangelt es in der Praxis jedoch. Die Autoren stellen auch fest, dass es wenig Evidenz dafür gibt, dass die Ansätze in der Praxis eingesetzt werden. Eine genauere Analyse der verwendeten KI-Methoden liefern Sharma et al. (2021). Sie beschreiben auch die Herausforderungen für den Einsatz von Machine Learning für diesen Einsatzzweck. Dabei erwähnen sie, dass die Reproduzierbarkeit der Ergebnisse oft nicht gewährleistet ist, weisen aber auch darauf hin, dass vortrainierte Modelle Probleme mit Datensicherheit und Privatsphäre mit sich bringen können.
Auch LLMs werden für die statische Codeanalyse eingesetzt, wobei hier in den meisten Fällen noch keine Automatisierung stattfindet, sondern Forscher manuell Code in das LLM einspeisen. Dies eignet sich nicht für die praktische Softwareentwicklung: Statische Analysewerkzeuge sind üblicherweise in den kontinuierlichen Integrationsprozess eingewoben, so dass Entwickler vollautomatisch und ohne Benutzung separater Tools Rückmeldung zur Codequalität bekommen. Solche praktischen Ansätze befinden sich gerade noch in der Entstehung.
Ein weiterer Anwendungsfall für LLMs ist die Überprüfung der Ergebnisse von statischen Analysetools. Um Falschmeldungen abzufangen, bevor sie die Entwickler erreichen und von diesen manuell aussortiert werden müssen, verwenden Li et al. (2024) beispielsweise GPT-4 mit spezialisierten Prompting-Techniken, um die Ergebnisse eines statischen Analysetools auszuwerten.
Weitere Ansätze, bei denen LLMs gezielt zur Identifikation von Sicherheitslücken eingesetzt werden, sind in Abschn. 20.6 beschrieben.
Fazit
Während traditionelle KI-Methoden bereits in der statischen und dynamischen Codeanalyse eingesetzt werden, steckt die Verwendung von modernen LLMs zu diesem Zweck noch in den Kinderschuhen. Insbesondere fehlt noch die Einbindung in die Automatisierung des Integrationsprozesses. Große Sprachmodelle zeigen allerdings vielversprechende Fähigkeiten, vornehmlich auch zur Bewertung der Resultate anderer Analysetools.

20.5 KI in der Validierung und Verifizierung

Die Generierung von Softwaretests ist schon seit vielen Jahren aufgrund der hohen Komplexität und der Schwierigkeit, alle möglichen Fehlerfälle abzudecken, ein wichtiges Automatisierungsthema (z. B. Anand et al., 2013; Ricca et al., 2021). Dabei spielen auch schon lange bestimmte KI-Techniken eine Rolle, z. B. die Verwendung neuronaler Netze, um das korrekte Verhalten eines Systems vorherzusagen (das sogenannte „Test-Orakel“) (Shahamiri et al., 2011), vereinfachte Verwaltung großer Testsuiten mithilfe von generierten Kontrollflussgraphen (Baral et al., 2021), die Priorisierung von Testfällen in sehr großen Testsuiten (Bertolino et al., 2020) oder die Verarbeitung natürlichsprachiger Testbeschreibungen (Sarmiento et al., 2014).
Gerade Letzteres ist auch das Anwendungsgebiet großer Sprachmodelle, die in den letzten Jahren an Bedeutung bei der Validierung und Verifizierung gewonnen haben. Einen Überblick über aktuelle Entwicklungen geben Wang et al. (2024). Dabei spielt die Generierung von Testfällen eine wichtige Rolle, die unter anderem durch Fine-Tuning der LLMs und durch geschicktes Prompt-Engineering verbessert werden kann. Auch die Generierung von Testorakeln aus natürlichsprachigen Anforderungen und die Generierung von Eingabedaten für die Tests werden diskutiert.
Einen Schritt weiter gehen Jensen et al. (2024): Sie beschreiben die Verwendung von LLMs zur Automatisierung von Code Reviews. Dieser wichtige Schritt in der Überprüfung der Codequalität kann sehr aufwendig sein, bietet aber neben Vorteilen für das Endprodukt auch weiteren Nutzen, z. B. indem erfahrene Entwickler ihr Wissen weitergeben können (Badampudi et al., 2023). Statische Analyseverfahren (s. Abschn. 20.4) stellen eine Möglichkeit dar, zumindest den Teil der Reviews zu automatisieren, der sich mit Fehlern im Code beschäftigt. In der Vergangenheit wurde aber auch Deep Learning verwendet, um aus existierenden Code Reviews und den dazugehörigen Quellcode-Abschnitten direkt zu lernen und das Review für unbekannten Code vorherzusagen (Gupta & Sundaresan, 2018). LLMs haben in solchen Fällen den Vorteil, dass neuer, sinnvoller Text produziert wird, anstatt existierende Bausteine neu zu kombinieren. Während die Ergebnisse von Jensen et al. (2024) für die Bewertung der Funktionalität des Codes vielversprechend sind, ist die tatsächliche Nutzbarkeit des Feedbacks für die Entwickler noch eine offene Frage. Frömmgen et al. (2024) berichten über einen Assistenten, der aus den Kommentaren der Reviewer Codevorschläge generiert. Diese Vorschläge werden aktuell in 7,5 % der Fälle von den Entwicklern akzeptiert. Dies ist ein erster Schritt hin zu (teil-)automatisierten Reviews.
Fazit
LLMs werden in den nächsten Jahren eine große Rolle bei der Generierung von Testfällen spielen, besonders direkt aus Anforderungen, sowie bei der Analyse von Quellcode. Diese wichtigen Aktivitäten bei der Validierung und Verifizierung lassen sich bereits mit der aktuellen Technologie zu einem hohen Grad automatisieren. Noch offen ist, inwiefern automatisiertes Feedback von KIs konstruktive, hochqualitative Verbesserungsvorschläge für Entwickler liefern kann.

20.6 Software Security

Sicherheitsfragen spielen während des gesamten Softwareentwicklungsprozesses eine Rolle. Nina et al. (2021) untersuchten 586 Publikationen, die sich mit sicherer Softwareentwicklung beschäftigten, und fanden, dass sich 20 % davon mit Anforderungen, 24 % mit dem Design, 42 % mit der Konstruktion und 14 % mit dem Testing auseinandersetzten. KI-Methoden werden dabei ebenso in allen Phasen eingesetzt. Im Folgenden diskutieren wir kurz die verschiedenen Phasen an, die wir auch bereits in vorhergehenden Kapiteln behandelt haben, dort aber nicht aus Sicherheitsperspektiven. Im Allgemeinen wird für sicherheitskritische Systeme zunächst eine sogenannte TARA (Threat Analysis and Risk Assessment) durchgeführt. Dabei werden potenzielle Bedrohungen und die damit verbundenen Risiken systematisch gesichtet. Dann werden für die wichtigsten Bedrohungen entsprechende Gegenmaßnahmen definiert, die wiederum in Sicherheitsanforderungen münden.
Im Kontrast zur Entwicklung sicherer Software steht Cybersicherheit im Allgemeinen, also z. B. bei der Absicherung von Computernetzwerken. Auch dort werden vermehrt KI-Techniken eingesetzt. Einen guten Überblick zu diesen Themen bieten Sarker et al. (2021).
Anforderungen
Ein wichtiger Schritt in der Anforderungsanalyse ist die Identifikation von Anforderungen, die Sicherheitsaspekte beinhalten und entsprechend z. B. in der Risikoanalyse berücksichtigt werden müssen. Mohamad et al. (2022) verwenden Natural Language Processing, um Sicherheitsanforderungen in regulatorischen Dokumenten zu identifizieren. Noch einen Schritt weiter gehen Silvestri et al. (2023): Die Autoren verwenden NLP, um einen großen Korpus von Dokumenten, die unter anderem Sicherheitslücken beschreiben, auszuwerten und die gefundenen Schwachstellen und Sicherheitslücken direkt auf die Artefakte eines Systems aus dem Gesundheitswesen zu mappen. Dies ermöglicht es den Entwicklern, die TARA kontinuierlich semi-automatisch weiterzuentwickeln und das System so aktuell zu halten.
Design
Ahmed et al. (2024) verwenden ein LLM, um direkt aus Sicherheitsanforderungen Metriken zu generieren, die zur Überwachung eines Systems verwendet werden können. Das LLM schlägt z. B. vor, zu messen, wie oft ein Benutzer sich neu authentifiziert und wie viele Details im Benutzerprofil ausgefüllt sind, um bösartige Logins zu detektieren. Solche Ansätze sind hilfreich beim Design von Sicherheitssystemen und bei der Reaktion auf Sicherheitsrisiken. Sie können menschliche Entwickler dabei unterstützen, auch Randfälle abzudecken.
Konstruktion
Aktuelle Arbeiten zeigen auf, dass von LLMs generierter Code Sicherheitsschwachstellen enthalten kann. Tihanyi et al. (2023) ließen von GPT-3.5 Turbo insgesamt 112.000 Beispiele mit einer Durchschnittslänge von 79 Zeilen in der Programmiersprache C generieren, die verschiedene Aufträge (etwa Sortieren) und verschiedene Programmierstile (etwa Verwendung mehrerer Threads) abdeckten. Mehr als 50 % dieser Beispiele wurden von einem statischen Analysetool als verwundbar identifiziert. Viele der Beispiele enthielten gleich mehrere Schwachstellen. Auch wenn Analysetools dafür bekannt sind, viele falsch-positive Antworten zu liefern, ist diese Anzahl alarmierend. Die häufigsten Probleme waren verschiedene Overflows, die zu den typischen Programmierfehlern gehören und gerade von Programmierneulingen nur schwer zu entdecken sind.
Validierung
Rajapaksha et al. (2022) stellen ein Codeanalyse-Werkzeug vor, das mithilfe zweier Klassifizierer zunächst überprüft, ob der Code verwundbar ist, und dann mithilfe einer Multiklassifikation die dazugehörigen Schwachstellen identifiziert. Die Ergebnisse werden durch Methoden der erklärbaren KI aufbereitet, um dem Benutzer Einblick in die Entscheidung zu geben. Die Lösung zeigt dabei eine Genauigkeit, die gut genug für den Praxiseinsatz ist.
Einen direkten Vergleich zwischen statischen Codeanalyse-Werkzeugen und ChatGPT nehmen Ozturk et al. (2023) vor. Sie stellen fest, dass ChatGPT für PHP-Quellcode bessere Ergebnisse bei der Identifikation von Sicherheitsschwachstellen erzielt als zehn verbreitete Analysewerkzeuge. Die Autoren nennen zwar nicht die konkrete Version von GPT, die verwendet wurde, doch das Veröffentlichungsdatum legt nahe, dass es sich um die Originalversion von ChatGPT handelte, also GPT-3.5. Aktuelle OpenAI LLMs, wie z. B. ChatGPT-4o, sind deutlich leistungsfähiger (Li & Murr, 2024), was nahelegt, dass sich die Ergebnisse weiter verbessert haben.
Sicherheit von LLMs
Der vermehrte Einsatz von großen Sprachmodellen, speziell als Chatbots, bringt selbst einige neue Sicherheitsherausforderungen mit sich. So sind LLMs anfällig für Prompt-Injection-Attacken, bei denen ein Angreifer über den natürlichsprachigen Input (den Prompt) das Verhalten des LLMs verändert, so dass es sich außerhalb des vorgesetzten Einsatzzweckes verhält. Dies nennt man auch einen „Jailbreak“ (Wei et al., 2023). Die sich daraus ergebenden Sicherheitsanforderungen sind aktuell noch unklar, auch wenn erste Arbeiten existieren, die dieses Thema adressieren (z. B. Varshney et al., 2023).
Fazit
KI-Methoden haben das Potential, komplexe Softwareanwendungen sicherer und robuster gegen Angriffe zu machen. Besonders die Unterstützung bei der Threats and Risk Analysis und der darauf aufbauenden Formulierung von Sicherheitsmaßnahmen kann hierbei eine große Hebelwirkung haben, auch wenn kommerzielle Angebote hier noch auf sich warten lassen. Eine weitere vielversprechende Anwendung ist die Generierung von Sicherheitstests, wobei hierbei insbesondere LLMs großes Potential zeigen. Der Einsatz großer Sprachmodelle bringt allerdings ebenfalls Sicherheitsprobleme mit sich, die wir gerade erst verstehen lernen.

20.7 Auswirkungen auf die Softwareentwicklung

Lücken der aktuellen Lösungen
In diesem Kapitel haben wir die Einsatzmöglichkeiten von KI in der Softwareentwicklung sehr breit beleuchtet. Dabei haben wir Anwendungsfälle aus verschiedenen Phasen des Entwicklungsprozesses herausgearbeitet. In fast allen Fällen finden sich klassische KI-Methoden und vermehrt große Sprachmodelle als die Techniken der Wahl wieder. Die rasante Entwicklung von LLMs hat dabei zu einer Vielzahl neuer Ideen geführt. Viele der Ideen für den Einsatz von LLMs sind dabei aber noch nicht sehr ausgereift. Zwar werden viele Produkte angekündigt und viel Forschung wird betrieben, aber es gibt (von Coding Assistants abgesehen) wenige Produkte, die wirklich Marktreife haben, und die Forschung weist noch erhebliche Lücken auf. Zwei wichtige Lücken sind dabei der Mangel an Automatisierung und die fehlende Integration.
Der Entwicklungsprozess ist an vielen Stellen hochautomatisiert. Ein Entwickler stellt einen Codeabschnitt fertig und veröffentlicht seine Änderung in einem Repository der Versionsverwaltung, also dort, wo der gesamte Quellcode des Projektes liegt. Ein sogenannter Continuous Integration Server stellt daraufhin den aktuellen Quellcode zusammen, kompiliert diesen (überführt ihn also in Maschinensprache), lässt Tests sowie statische und dynamische Analyse laufen und installiert anschließend den aktuellen Stand auf einem Server zum manuellen Testen. Der Entwickler kann sich dann nach Abschluss dieses automatischen Durchlaufs die Testergebnisse und die Ergebnisse der Analysen ansehen und entsprechend reagieren. Den aktuellen KI-Lösungen fehlt noch die Möglichkeit, sich in diesen automatischen Prozess zu integrieren. So müssen die auf LLMs basierenden Ansätze zur Codeanalyse (Abschn. 20.4) und für die Security (Abschn. 20.6) aktuell noch manuell bedient werden.
Weiterhin fällt auf, dass die Anwendungsfälle noch recht spezifisch sind. In der Zukunft werden wir aber Integrationen benötigen, in denen Anforderungen, Benutzerschnittstelle, Architektur, Code und Validierung zusammen angegangen werden. Änderungen in den Anforderungen schlagen sich auf alle Bereiche durch. Separate KI-Tools für jeden der Bereiche machen es schwieriger, Änderungen durch das gesamte System zu propagieren, da es zwischen den Tools Bruchstellen gibt, die u. U. manuell überwunden werden müssen. Bisher sind integrierte Lösungen allerdings noch nicht in Sicht. Aktuelle Vorschläge beschränken sich auf einen, höchstens zwei Bereiche im Fall der Tools für das Anforderungsmanagement. Auch hier gibt es bereits erste Versuche einer höheren Integration. Allerdings wurde der laut seinem Hersteller „erste AI Software Engineer“ Devin nach seiner Veröffentlichung schnell entzaubert (s. z. B. Xia et al., 2024).
Entwicklungsteam der Zukunft
Schon jetzt verwenden Entwickler KI-Tools, beispielsweise zur Codevervollständigung oder zur Codeanalyse. Der Einsatz dieser Tools wird sich in Zukunft noch stärker verbreiten und neue Felder, wie die Softwarearchitektur oder die Dokumentation der Software, erschließen. Coding Assistants und die anderen in diesem Kapitel vorgestellten Tools und Ansätze sind nur erste Schritte in diese Richtung.
Daher wird das Entwicklungsteam der Zukunft ein hybrides Team aus KI und menschlichen Entwicklern sein. Dabei werden die KI-Tools zunächst Aufgaben übernehmen, die für den Menschen schwierig oder uninteressant sind, wie z. B. das Schreiben von Dokumentation oder das Entwickeln von Testfällen. Nach und nach werden sicherlich auch die Codeproduktion und eventuell auch einige Aufgaben des Anforderungsmanagements abgelöst werden. Dabei werden sich „Ökosysteme von Bots“ (Platis et al., 2024) herausbilden, welche unterschiedliche Aufgaben übernehmen und andere KI-Tools oder menschliche Entwickler mit Informationen füttern. Insbesondere wird dies den Arbeitsablauf verändern, indem das Lernen der Entwickler und die Abarbeitung uninteressanter oder sich wiederholender Arbeitsschritte von der KI unterstützt wird (Ulfsnes et al., 2024). Gleichzeitig besteht die Chance, dass die Qualität der ausgelieferten Software steigt.
Auf mittlere und auch längere Sicht werden Softwareentwickler durch KI nicht obsolet werden. Darauf deuten einige der aktuellen Forschungsergebnisse hin. Auch wenn in der Softwareentwicklung das Fehlen eines Konzeptes von „Wahrheit“ in LLMs nicht ganz so relevant ist wie in anderen Domänen (Hicks et al., 2024), so ist doch eine sorgfältige Überprüfung der Outputs solcher Systeme von größter Wichtigkeit, um zu vermeiden, dass sich Fehler oder sogar Sicherheitslücken einschleichen. Diese Fähigkeit wird auch in Zukunft gefragt sein. Entwickler müssen weiterhin die Fähigkeiten haben, die Vorschläge der KI zu bewerten und abzuändern. ChatGPT und Co. sind daher hauptsächlich als Werkzeuge für Experten anzusehen (Azaria et al., 2024; Spinellis, 2024). Außerdem müssen menschliche Entwickler weiterhin für die Orchestrierung des Ökosystems an KI-Tools sorgen und Aufgaben auf höherer kognitiver Ebene, wie z. B. zur Systemarchitektur, übernehmen. Es wird von äußerster Wichtigkeit sein, Nachwuchsentwickler für diese Aufgaben auszubilden und zu trainieren.
Open Access Dieses Kapitel wird unter der Creative Commons Namensnennung - Nicht kommerziell - Keine Bearbeitung 4.0 International Lizenz (http://creativecommons.org/licenses/by-nc-nd/4.0/deed.de) veröffentlicht, welche die nicht-kommerzielle Nutzung, Vervielfältigung, Verbreitung und Wiedergabe in jeglichem Medium und Format erlaubt, sofern Sie den/die ursprünglichen Autor(en) und die Quelle ordnungsgemäß nennen, einen Link zur Creative Commons Lizenz beifügen und angeben, ob Änderungen vorgenommen wurden. Die Lizenz gibt Ihnen nicht das Recht, bearbeitete oder sonst wie umgestaltete Fassungen dieses Werkes zu verbreiten oder öffentlich wiederzugeben.
Die in diesem Kapitel enthaltenen Bilder und sonstiges Drittmaterial unterliegen ebenfalls der genannten Creative Commons Lizenz, sofern sich aus der Abbildungslegende nichts anderes ergibt. Sofern das betreffende Material nicht unter der genannten Creative Commons Lizenz steht und die betreffende Handlung nicht nach gesetzlichen Vorschriften erlaubt ist, ist auch für die oben aufgeführten nicht-kommerziellen Weiterverwendungen des Materials die Einwilligung des jeweiligen Rechteinhabers einzuholen.
Download
Title
Künstliche Intelligenz in der Softwareentwicklung
Authors
Jan-Philipp Steghöfer
Rico Amslinger
Richard Nordsieck
Copyright Year
2026
Publisher
Springer Berlin Heidelberg
DOI
https://doi.org/10.1007/978-3-662-71567-3_20
go back to reference Abad, Z. S. H., et al. (2018). ELICA: An automated tool for dynamic extraction of requirements relevant information. In E. C. Groen et al. (Hrsg.), 5th International Workshop on Artificial Intelligence for Requirements Engineering, AIRE@RE 2018, 21. August 2018 (S. 8–14). IEEE.
go back to reference Abadeer, M., & Sabetzadeh, M. (2021). Machine learning-based estimation of story points in agile development: Industrial experience and lessons learned. In T. Yue & M. Mirakhorli (Hrsg.), 29th IEEE International Requirements Engineering Conference Workshops, RE 2021 Workshops, 20.–24. September 2021 (S. 106–115). IEEE.
go back to reference Ahmed, M., et al. (2024). Prompting LLM to enforce and validate CIS critical security control. In Proceedings of the 29th ACM symposium on access control models and technologies (S. 93–104).CrossRef
go back to reference Anand, S., et al. (2013). An orchestrated survey of methodologies for automated software test case generation. Journal of Systems and Software, 86(8), 1978–2001.CrossRef
go back to reference Anish, P. R., et al. (2019). Implementation-centric classification of business rules from documents. In 27th IEEE international requirements engineering conference workshops, RE 2019 Workshops, 23.–27. September 2019 (S. 227–233). IEEE.
go back to reference Azaria, A., et al. (2024). ChatGPT is a remarkable tool – For experts. Data Intelligence, 6(1), 240–296.CrossRef
go back to reference Badampudi, D., et al. (2023). Modern code reviews – Survey of literature and practice. ACM Transactions on Software Engineering and Methodology, 32(4), 1–61.CrossRef
go back to reference Baral, K., et al. (2021). Self determination: A comprehensive strategy for making automated tests more effective and efficient. In 14th IEEE conference on software testing, verification and validation (ICST) (S. 127–136). IEEE.CrossRef
go back to reference Bertolino, A., et al. (2020). Learning-to-rank vs ranking-to-learn: strategies for regression testing in continuous integration. In G. Rothermel & D. Bae (Hrsg.), ICSE’20: 42nd international conference on software engineering, 27. Juni – 19. Juli 2020 (S. 1–12). ACM.
go back to reference Borg, M., et al. (2014). Recovering from a decade: A systematic mapping of information retrieval approaches to software traceability. Empirical Software Engineering, 19(6), 1565–1616.CrossRef
go back to reference Chatterjee, R., et al. (2020). Identification and classification of architecturally significant functional requirements. In 7th IEEE international workshop on artificial intelligence for requirements engineering, AIRE@RE 2020., 1. September 2020 (S. 9–17). IEEE.
go back to reference Dave, H., et al. (2021). A survey on Artificial Intelligence based techniques to convert User Interface design mock-ups to code. In 2021 international conference on artificial intelligence and smart systems (ICAIS) (S. 28–33). IEEE.CrossRef
go back to reference Davila, N., et al. (2024). An industry case study on adoption of AI-based programming assistants. In Proceedings of the 46th international conference on software engineering: software engineering in practice (S. 92–102).CrossRef
go back to reference Dell’Anna, D., et al. (2018). Validating Goal Models via Bayesian Networks. In E. C. Groen et al. (Hrsg.), 5th international workshop on artificial intelligence for requirements engineering, AIRE@RE 2018, 21. August 2018 (S. 39–46). IEEE.
go back to reference Devlin, J., et al. (2019). BERT: Pre-training of deep bidirectional transformers for language understanding. In J. Burstein et al. (Hrsg.), Proceedings of the 2019 conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, Volume 1 (Long and Short Papers) (S. 4171–4186). Association for Computational Linguistics.
go back to reference DIN EN ISO 9241-210. (2011). DIN EN ISO 9241-210:2011-01, Ergonomie der Mensch-System-Interaktion – Teil 210: Prozess zur Gestaltung gebrauchstauglicher interaktiver Systeme.
go back to reference Duan, P., et al. (2020). Optimizing user interface layouts via gradient descent. In Proceedings of the 2020 CHI conference on human factors in computing systems (S. 1–12).
go back to reference Feldman, S. S. (2017). Co-Creation: Human and AI Collaboration in Creative Expression. In Electronic Visualisation and the Arts (EVA 2017). BCS Learning & Development.
go back to reference Feldt, R., et al. (2018). Ways of applying artificial intelligence in software engineering. In Proceedings of the 6th international workshop on realizing artificial intelligence synergies in software engineering (S. 35–41).CrossRef
go back to reference Ferrari, A., et al. (2014). Pragmatic ambiguity detection in natural language requirements. In N. Bencomo et al. (Hrsg.), IEEE 1st international workshop on artificial intelligence for requirements engineering, AIRE 2014, 26. August 2014 (S. 1–8). IEEE Computer Society.
go back to reference Ferrari, A., et al. (2018). Identification of cross-domain ambiguity with language models. In E. C. Groen et al. (Hrsg.), 5th international workshop on artificial intelligence for requirements engineering, AIRE@RE 2018, 21. August 2018 (S. 31–38). IEEE.
go back to reference Fleurey, F., et al. (2007). Model-driven engineering for software migration in a large industrial context. In Model driven engineering languages and systems: 10th international conference, MoDELS 2007, 30. September – 04. Oktober 2007. Proceedings 10 (S. 482–497). Springer.CrossRef
go back to reference Frömmgen, A., et al. (2024). Resolving code review comments with machine learning. In Proceedings of the 46th international conference on software engineering: software engineering in practice (S. 204–215).CrossRef
go back to reference Giray, G., et al. (2023). On the use of deep learning in software defect prediction. Journal of Systems and Software, 195, 111537.CrossRef
go back to reference Gudaparthi, H., et al. (2023). Prompting creative requirements via traceable and adversarial examples in deep learning. In K. Schneider et al. (Hrsg.), 31st IEEE international requirements engineering conference, RE 2023, 04.–08. September 2023 (S. 134–145). IEEE.
go back to reference Guo, H., et al. (2018). Extraction of natural language requirements from breach reports using event inference. In E. C. Groen et al. (Hrsg.), 5th international workshop on artificial intelligence for requirements engineering, AIRE@RE 2018, 21. August 2018 (S. 22–28). IEEE.
go back to reference Guo, J., et al. (2017). Semantically enhanced software traceability using deep learning techniques. In 2017 IEEE/ACM 39th international conference on software engineering (ICSE) (S. 3–14). IEEE.CrossRef
go back to reference Guo, J. L., et al. (2024). Natural language processing for requirements traceability. arXiv preprint, arXiv, 2405.10845.
go back to reference Gupta, A., & Sundaresan, N. (2018). Intelligent code reviews using deep learning. In Proceedings of the 24th ACM SIGKDD international conference on knowledge discovery and data mining (KDD’18) deep Learning Day.
go back to reference Habib, M. K., et al. (2021). Detecting Requirements Smells With Deep Learning: Experiences, Challenges and Future Work. In T. Yue & M. Mirakhorli (Hrsg.), 29th IEEE international requirements engineering conference workshops, RE 2021 Workshops, 20.–24. September 2021 (S. 153–156). IEEE.
go back to reference Harman, M. (2012). The role of artificial intelligence in software engineering. In 2012 first international workshop on realizing AI synergies in software engineering (RAISE) (S. 1–6).
go back to reference Hassine, J. (2024). An LLM-based approach to recover traceability links between security requirements and goal models. In Proceedings of the 28th international conference on evaluation and assessment in software engineering (S. 643–651).CrossRef
go back to reference Hehn, J., & Uebernickel, F. (2018). Towards an understanding of the role of design thinking for requirements elicitation – Findings from a multiple-case study. In Proceedings of the 24th Americas conference on information systems.
go back to reference Hicks, M. T., et al. (2024). ChatGPT is bullshit. Ethics and Information Technology, 26(2), 38.CrossRef
go back to reference Ishaani, M., et al. (2024). Evaluating human-AI partnership for LLM-based code migration. In CHI 2024.
go back to reference Jensen, R. I. T., et al. (2024). Software vulnerability and functionality assessment using LLMs. arXiv preprint, arXiv, 2403.08429.
go back to reference Körner, S. J., et al. (2014). Transferring research into the real world: how to improve RE with AI in the automotive industry. In 2014 IEEE 1st international workshop on artificial intelligence for requirements engineering (AIRE) (S. 13–18). IEEE.CrossRef
go back to reference Langer, A. M. (2016). Legacy systems and integration. In Guide to software development: designing and managing the life cycle (S. 179–213). Springer.CrossRef
go back to reference Li, D., & Murr, L. (2024). HumanEval on Latest GPT Models – 2024. arXiv preprint, arXiv, 2402.14852.
go back to reference Li, H., et al. (2024). Enhancing static analysis for practical bug detection: An LLM-integrated approach. Proceedings of the ACM on Programming Languages, 8(OOPSLA1), 474–499.MathSciNetCrossRef
go back to reference Maro, S., et al. (2018). Software traceability in the automotive domain: Challenges and solutions. Journal of Systems and Software, 141, 85–110.CrossRef
go back to reference Mateja, D., & Heinzl, A. (2021). Towards machine learning as an enabler of computational creativity. IEEE Transactions on Artificial Intelligence, 2(6), 460–475.CrossRef
go back to reference Mehder, S., & Aydemir, F. B. (2022). Classification of issue discussions in open source projects using deep language models. In 30th IEEE international requirements engineering conference workshops, RE 2022 – Workshops, 15.–19. August 2022 (S. 176–182). IEEE.
go back to reference Mohamad, M., et al. (2022). Identifying security-related requirements in regulatory documents based on cross-project classification. In S. McIntosh et al. (Hrsg.), Proceedings of the 18th international conference on predictive models and data analytics in software engineering, PROMISE 2022, 17. November 2022 (S. 82–91). ACM.
go back to reference Nicholson, A., et al. (2020). Traceability network analysis: A case study of links in issue tracking systems. In 2020 IEEE Seventh international workshop on artificial intelligence for requirements engineering (AIRE) (S. 39–47). IEEE.CrossRef
go back to reference Nina, H., et al. (2021). Systematic mapping of the literature on secure software development. IEEE Access, 9, 36852–36867.CrossRef
go back to reference O’Donovan, et al. (2015). DesignScape: Design with interactive layout suggestions. In Proceedings of the 33rd annual ACM conference on human factors in computing systems (S. 1221–1224).CrossRef
go back to reference Ozturk, O. S., et al. (2023). New tricks to old codes: Can AI chatbots replace static code analysis tools? In Proceedings of the 2023 European interdisciplinary cybersecurity conference (S. 13–18).
go back to reference Perry, N., et al. (2023). Do users write more insecure code with AI assistants? In Proceedings of the 2023 ACM SIGSAC conference on computer and communications security (S. 2785–2799).CrossRef
go back to reference Platis, D., et al. (2024). The lion, the ecologist and the plankton: A classification of species in multi-bot ecosystems. In Companion proceedings of the 32nd ACM international conference on the foundations of software engineering (S. 482–486).CrossRef
go back to reference Preece, J., et al. (2023). Interaction design: Beyond human-computer interaction (6. Aufl.). John Wiley.
go back to reference Rahman, S., et al. (2023). Mining Reddit Data to Elicit Students’ Requirements During COVID-19 Pandemic. In K. Schneider et al. (Hrsg.), 31st IEEE international requirements engineering conference, RE 2023 – Workshops, 04.–05. September 2023 (S. 76–84). IEEE.
go back to reference Rajapaksha, S., et al. (2022). AI-powered vulnerability detection for secure source code development. In International Conference on Information Technology and Communications Security (S. 275–288). Springer.
go back to reference Ricca, F., et al. (2021). AI-based test automation: A grey literature analysis. In 2021 IEEE international conference on software testing, verification and validation workshops (ICSTW) (S. 263–270). IEEE.CrossRef
go back to reference Rodriguez, A. D., et al. (2023). Prompts matter: Insights and strategies for prompt engineering in automated software traceability. In 2023 IEEE 31st international requirements engineering conference workshops (REW) (S. 455–464). IEEE.CrossRef
go back to reference Salminen, J., et al. (2019). Design issues in automatically generated persona profiles: A qualitative analysis from 38 think-aloud transcripts. In Proceedings of the 2019 conference on human information interaction and retrieval (S. 225–229).CrossRef
go back to reference Sandoval, G., et al. (2023). Lost at C: A user study on the security implications of large language model code assistants. In 32nd USENIX Security Symposium (USENIX Security 23) (S. 2205–2222).
go back to reference Sarker, I. H., et al. (2021). AI-Driven cybersecurity: An overview, security intelligence modeling and research directions. SN Computer Science, 2(3), 173.CrossRef
go back to reference Sarmiento, E., et al. (2014). C&l: Generating model based test cases from natural language requirements descriptions. In 2014 IEEE 1st international workshop on requirements engineering and testing (ret) (S. 32–38). IEEE.CrossRef
go back to reference Shahamiri, S. R., et al. (2011). An automated framework for software test oracle. Information and Software Technology, 53(7), 774–788.CrossRef
go back to reference Sharma, R., et al. (2015). From natural language requirements to UML class diagrams. In 2015 IEEE second international workshop on artificial intelligence for requirements engineering, AIRE 2015, 24. August 2015 (S. 25–32). IEEE Computer Society.
go back to reference Sharma, T., et al. (2021). A survey on machine learning techniques for source code analysis. arXiv preprint, arXiv, 2110.09610.
go back to reference Shen, Y., & Breaux, T. D. (2022). Domain model extraction from user-authored scenarios and word embeddings. In 30th IEEE international requirements engineering conference workshops, RE 2022 – Workshops, 15.–19. August 2022 (S. 143–151). IEEE.
go back to reference Silva-Rodríguez, V., et al. (2020). Classifying design-level requirements using machine learning for a recommender of interaction design patterns. IET Software, 14(5), 544–552.CrossRef
go back to reference Silvestri, S., et al. (2023). A machine learning approach for the NLP-based analysis of cyber threats and vulnerabilities of the healthcare ecosystem. Sensors, 23(2), 651.CrossRef
go back to reference Sivakumar, M., et al. (2024). Exploring the Capabilities of large language models for the generation of safety cases: The case of GPT-4. In 2024 IEEE 10th international workshop on artificial intelligence for requirements engineering (AIRE).
go back to reference Spinellis, D. (2024). Pair programming with generative AI. IEEE Software, 41(3), 16–18.CrossRef
go back to reference Stige, Å., et al. (2023). Artificial intelligence (AI) for User Experience (UX) design: A systematic literature review and future research agenda. Information Technology & People.
go back to reference Suleri, S., et al. (2019). Eve: A sketch-based software prototyping workbench. In Extended abstracts of the 2019 CHI conference on human factors in computing systems (S. 1–6).
go back to reference Tihanyi, N., et al. (2023). The FormAI dataset: Generative AI in software security through the lens of formal verification. In Proceedings of the 19th international conference on predictive models and data analytics in software engineering (S. 33–43).CrossRef
go back to reference Ulfsnes, R., et al. (2024). Transforming software development with generative AI: Empirical insights on collaboration and workflow. In Generative AI for effective software development (S. 219–234). Springer.CrossRef
go back to reference Varshney, N., et al. (2023). The art of defending: A systematic evaluation and analysis of LLM defense strategies on safety and over-defensiveness. arXiv preprint, arXiv, 2401.00287.
go back to reference Vaswani, A., et al. (2017). Attention is all you need. Advances in neural information processing systems (S. 30).
go back to reference Wang, J., et al. (2024). Software testing with large language models: Survey, landscape & vision. IEEE Transactions on Software Engineering.
go back to reference Wei, Z., et al. (2023). Jailbreak and Guard aligned language models with only few in-context demonstrations. arXiv preprint, arXiv, 2310.06387.
go back to reference Xia, C. S., et al. (2024). Agentless: Demystifying LLM-based software engineering agents. arXiv preprint, arXiv, 2407.01489.
go back to reference Yang, B., et al. (2020). Measuring and improving user experience through artificial intelligence-aided design. Frontiers in Psychology, 11, 595374.CrossRef
go back to reference Yetiştiren, B., et al. (2023). Evaluating the code quality of AI-assisted code generation tools: An empirical study on GitHub Copilot, Amazon CodeWhisperer, and ChatGPT. arXiv preprint, arXiv, 2304.10778.
go back to reference Zhang, Z., et al. (2024). LLM-based agents for automating the enhancement of user story quality: An early report. In International conference on agile software development (S. 117–126). Springer Nature Switzerland.
go back to reference Ziegler, A., et al. (2024). Measuring GitHub Copilot’s impact on productivity. Communications of the ACM, 67(3), 54–63.CrossRef

Premium Partner

    Image Credits
    Neuer Inhalt/© ITandMEDIA, Nagarro GmbH/© Nagarro GmbH, AvePoint Deutschland GmbH/© AvePoint Deutschland GmbH, AFB Gemeinnützige GmbH/© AFB Gemeinnützige GmbH, USU GmbH/© USU GmbH, Ferrari electronic AG/© Ferrari electronic AG