Direkt zum Inhalt wechseln

Zwischen Hype und echtem Potenzial: KI in der Softwareentwicklung

KI verändert die Art und Weise, wie Software entwickelt wird – mit großem Potenzial, aber auch neuen Herausforderungen in Datenschutz und Sicherheit.

von Florian Haßler und Yvonne Marneth, BSc

Inhalt

  • Anwendungs-Methodologien und Zweck
  • Datenschutz & Datensicherheit
  • Code Qualität
  • Regeln für die Verwendung
  • Fazit
  • Quellen
  • Weitere Quellen
  • Autor*innen
  • Weiterlesen

Die rasante Entwicklung von Künstlicher Intelligenz (KI) hat die Softwareentwicklung revolutioniert und neue Horizonte eröffnet. Im Streben nach Effizienz und Innovation setzen Unternehmen bereits vermehrt auf die Integration dieser Technologien, um ihre Produkte zu verbessern, den Entwicklungsprozess zu beschleunigen und ihren Kunden und Kundinnen einzigartige Lösungen zu bieten.

Automatisierte Prozesse ermöglichen es, Produkte schneller auf den Markt zu bringen und von neuen Chancen zu profitieren. KI-gesteuerte Tools beschleunigen Aufgaben wie Code-Analyse und Fehlerbehebung, wodurch Entwicklerteams effizienter arbeiten und Produkte früher bereitstellen können.

Parallel zu den Vorteilen, die KI mit sich bringt, wachsen auch die Bedenken – vor allem hinsichtlich des Datenschutzes und -sicherheit. Auch die Frage nach geistigem Eigentum stellt sich insbesondere in Bezug auf automatische Code-Generierung und die potenzielle ungewollte Verwendung von lizensierten Codebasen oder Algorithmen.

Angesichts der heutigen herausfordernden Datenschutzlandschaft ist es von entscheidender Bedeutung, diese Anliegen ernst zu nehmen und proaktiv Maßnahmen zu ergreifen, um die Integrität und Vertraulichkeit der Daten zu gewährleisten. Insbesondere Geschäftsgeheimnisse oder andere sensible Informationen, die in Code enthalten sein könnten, müssen hierbei geschützt werden, da eine Verletzung nicht nur das Unternehmen selbst, sondern auch weitere Partner*innen oder Endnutzer*innen erheblich gefährden könnte.

Anwendungs-Methodologien und Zweck

Softwareentwickler*innen stehen verschiedene Arten von KI-Tools für die Code-Generierung zur Verfügung. Dazu zählen IDE-Plugins wie Copilot, die direkt in die Entwicklungsumgebung integriert sind und Echtzeit-Codierungsvorschläge bieten, ebenso wie Web-Interfaces, die über browserbasierte Plattformen KI-unterstützte Hilfen bereitstellen. Zusätzlich dazu gibt es CLI und API-basierte Tools, die es Entwickler*innen ermöglichen, programmatischen Zugriff auf KI-Funktionen zu erhalten und diese in ihre Arbeitsabläufe zu integrieren.  Jede dieser Varianten hat ihre Vor- und Nachteile.

Beispiel für ein KI-Tool in der Softwareentwicklung ist Github Copilot. Das Tool ist direkt in die beliebtesten Entwicklungsumgebungen (Jetbrains und Visual Studio Code) integriert, analysiert den aktuell sichtbaren Source-Code und macht, ähnlich wie IntelliSense, Codierungsvorschläge und vervollständigt Funktionen. Dabei unterstützt es in verschiedenen Programmiersprachen wie JavaScript/TypeScript, Java/Kotlin, Python, Go, C#, C++.  und vielen mehr. Zusätzlich hat es eine Chat-Funktion und erübrigt so den Besuch im Webinterface von OpenAI’s Chat-GPT.

Die tatsächliche Nutzung von KI-Tools in der Softwareentwicklung variiert je nach den Vorlieben und Anforderungen der einzelnen Entwickler*innen. Einige wählen einen sporadischen Ansatz, indem sie KI-Tools gelegentlich verwenden, um spezifische Probleme zu lösen oder neue Denkansätze zu erhalten, andere integrieren KI-Tools kontinuierlich in ihren Arbeitsablauf und erhalten fortlaufend Vorschläge und Unterstützung. Es gibt jedoch auch Entwickler*innen, die sich bewusst gegen die Verwendung von KI-Tools entscheiden und sich stattdessen auf traditionelle Methoden verlassen.

In der RISC Software GmbH setzen wir gezielt auf KI-Tools, um unsere Entwicklungsprozesse zu optimieren. Durch die Integration verschiedener Tools in unsere Arbeitsabläufe können wir nicht nur effizienter arbeiten, sondern auch die Entwicklung hochwertiger Softwareprodukte beschleunigen.

Datenschutz & Datensicherheit

Datenschutz und Datensicherheit sind in einem Unternehmen wie der RISC Software GmbH, die sowohl Forschung- als auch auf Kundinnen- und Kundenprojekte umsetzt, von entscheidender Bedeutung. Die Sicherheit der Daten hat oberste Priorität! Gerade bei der Nutzung von KI-Tools in der Softwareentwicklung muss sichergestellt werden, dass die Datenschutzbestimmungen eingehalten werden und die Vertraulichkeit der Daten unserer Kunden jederzeit gewahrt bleibt.

Obwohl GitHub in vielen Bereichen ISO-zertifiziert ist, gilt dies bislang nicht für den Coding-Assistenten Copilot. Es gibt derzeit eine Klage gegen Microsoft, weil angeblich GPL-geschützter Code in durch Copilot generiertem Code aufgetaucht ist[1]. Obwohl allgemein angenommen wird, dass maschinengenerierter Code kein abgeleitetes Werk ist[2], und auch davon ausgegangen werden kann, dass die meisten generierten Source-Codes keine urheberrechtlichen Konflikte entstehen lassen, hat Gitlab reagiert und bietet in der Business-Variante das automatisch aktive Feature: Blocks suggestions matching public code. Im zugehörigen FAQ-Beitrag wird zugegeben, dass generierter Code mit Code im Trainingsset übereinstimmen kann und deshalb nun ein Filter nachgeschaltet ist, der die Antwort bei Übereinstimmungen mit öffentlichem Code in GitHub-Repositories blockiert[3].

Laut dem GitHub Copilot Trust Center[4] verwendet GitHub weder Daten von Copilot Business noch von Copilot Enterprise für das Training seiner Modelle. Zudem werden Eingaben und Vorschläge, die durch den IDE-Chat oder die Code-Vervollständigung erstellt werden, nicht gespeichert.

ChatGPT verwendet standardmäßig den Ansatz, seine Modelle von eingegebenen Daten lernen zu lassen. Dies geht aus den FAQs hervor: […]we may use your content to train our models[…][5] Nutzende können sich jedoch über das Datenschutzportal abmelden, um zu verhindern, dass ihre Inhalte zum Training der Modelle verwendet werden. Für Geschäftskunden im Modell ChatGPT Team oder ChatGPT Enterprise werden Inhalte jedoch nicht zum Trainieren des Modells genutzt.

Am 30.04.2024 fand ein Vortrag zum Thema „AI & Urheber*innenrecht“[6]  der creative region statt. Der Rechtsanwalt Mag. Markus Gaderer, LL.M., äußerte sich im Anschluss im persönlichen Gespräch an den Vortrag zum Thema Datensicherheit und erklärte, dass die Nutzung von KI-Tools auch in der Softwareentwicklung in drei bis fünf Jahren so alltäglich sein wird, dass sich niemand mehr darüber Gedanken machen wird.

Code Qualität

Produktivität

Der Einsatz von Code-Generierung in der Softwareentwicklung ermöglicht es, in kurzer Zeit große Mengen an Code zu erzeugen. Doch mehr Code bedeutet nicht automatisch höhere Produktivität. Kürzere und klarere Implementierungen erleichtern vor allem Qualitätssicherungsmaßnahmen wie Code-Reviews und reduzieren die Wahrscheinlichkeit, dass Fehler in komplexen Strukturen übersehen werden, welche sonst zu einem späteren Zeitpunkt viel Zeit kosten könnten.

Security

Generierter Code kann unbemerkt Sicherheitslücken einführen, insbesondere weil Sprachmodelle oft auf veralteten Versionen von Bibliotheken basieren. Diese Modelle berücksichtigen oft keine bekannten Schwachstellen, was potenzielle Angriffsvektoren schafft. Ohne gezielte Sicherheitsprüfungen erhöht der unkontrollierte Einsatz von generiertem Code das Risiko von Sicherheitsproblemen.

Reliability & Maintainability

LLMs haben keine Möglichkeit den generierten Code auf seine Zuverlässigkeit und Funktionalität zu überprüfen. Große Codemengen erhöhen auch den „Churn“, das heißt dem Anteil an Codezeilen, die kurz nach ihrer Erstellung wieder geändert oder ersetzt werden, was langfristig zu höherer Komplexität führen oder bestehende Funktionalität brechen kann. Ein weiteres großes Problem ist auch das Halluzinieren der Sprachmodelle, die auch Algorithmen entwerfen, die nur teilweise oder gar nicht funktionieren. Außerdem lernen sie vor allem von öffentlich verfügbarem Code, wo es keine oder nur sehr uneinheitliche Benchmarks für verständlichen, sicheren und effizienten Code gibt.

Code-Dokumentation

Die detaillierte und umfangreiche Dokumentation von Code wird in der Praxis oft aus Zeitgründen vernachlässigt und gehört traditionell auch nicht zu den beliebtesten Aufgaben für Entwickler. Hier können Sprachmodelle helfen, auch in sehr kurzer Zeit bessere Dokumentationen zu erstellen, um die Nachvollziehbarkeit von erstelltem Code zu unterstützen.

Test-Generierung

Auch Tests, vor allem Unit-Tests, werden oft aufgrund von Zeitdruck nicht ausführlich implementiert. Auch hier können Sprachmodelle helfen, indem sie Testfälle vorschlagen oder Unit Tests erzeugen. Das kann Entwickler*innen entlasten, sodass sie sich auf die Feature-Entwicklung konzentrieren können, während gleichzeitig die Code-Qualität steigt.

Regeln für die Verwendung

Regel 1: Entwickler*innen sind auch für generierten Code verantwortlich

Das Modell soll den Entwickler unterstützen und nicht umgekehrt. Alles, was unter dem eigenen Namen in einer Code-basis eingeführt wird, sollte behandelt werden, als wäre es selbst geschrieben.

Regel 2: Nicht zu viel Code auf einmal generieren

Große Mengen an Codezeilen sind schwieriger zu überprüfen, was dazu führt, dass Fehler und Sicherheitsrisiken leichter übersehen werden. Es kann sich auszahlen komplexe Algorithmen oder große Features schrittweise aufzubauen.

Regel 3: Aufstellen von einheitlichen Qualitätsstandards

Einheitliche Standards helfen, neuen Code schneller zu überprüfen. Dazu können Linter verwendet werden, um Code-Stil und Syntax zu vereinheitlichen und (automatisierte) Review-Prozesse können die Verständlichkeit & Zuverlässigkeit sicherstellen.

Regel 4: Automatisierte Prüfungen

Mithilfe von automatisierten Tools können bereits viele Probleme abgefangen werden und Qualitätsstandards mit wenig Zeitverlust sichergestellt werden. Dazu eignen sich besonders statische Code-Analysen, Dependency-Checks etc. und deren Implementierung in Pipelines.

Regel 5: Umfassende Testabdeckung

Nicht alle Probleme können automatisiert mit statischen Analysen abgefangen werden. Vor allem, was Funktionalität und User Experience angeht, benötigt es oft eine gute Abdeckung mit Unit Tests und die Einbindung von QA-Teams wo notwendig.

Kontakt









    Autor*innen

    Florian Haßler

    Software Engineer

    Yvonne Marneth, BSc

    Software Developer