künstliche intelligenz
  • Hogarama
  • KI
  • Learning Friday

Wie kann uns KI in der Software Entwicklung unterstützen?

Für uns hat sich die KI (Künstliche Intelligenz) als ein neues, aber sehr mächtiges Tool erwiesen, das bei fast allen Aufgaben in unserem Beruf behilflich sein und uns viel Zeit sparen kann. Denn bei bestimmten Aufgaben ist es schneller und weniger fehleranfällig. Außerdem macht es viel Spaß, gemeinsam mit KI Probleme zu lösen.

Unterstützung durch Künstliche Intelligenz

In der Softwareentwicklung, DevOps, dem Schreiben von Dokumentationen, Berichten und E-Mails erledigen wir täglich verschiedene Aufgaben. Einige davon erfordern viel Kreativität und Know-how, wie beispielsweise Architekturentscheidungen oder Performance-Optimierungen. Andere Aufgaben können weniger komplex sein, etwa die Umsetzung einer Benutzeroberfläche in einer Webanwendung mit einem vorgegebenen Design und Spezifikationen, insbesondere wenn es bereits ähnliche Masken gibt. Oder das Refactoring, wenn klar ist, was zu tun ist.

Wenn dabei die richtigen Tools eingesetzt werden, können wir mehr Aufgaben in kürzerer Zeit erledigen und die Produktivität erhöhen. Ein solches Tool ist die KI-Unterstützung.

Begriffe

Natürlich gibt es bereits mehrere Unternehmen und KI-Systeme auf dem Markt. Unsere Erfahrungen konzentrieren sich jedoch hauptsächlich auf OpenAI und ChatGPT. In diesem Abschnitt möchten wir einige Begriffe erläutern, die wir häufig verwenden.

AI steht für Artificial Intelligence. Englischer Begriff, der auf Deutsch als „künstliche Intelligenz“ (KI) übersetzt wird

OpenAI ist ein US-amerikanisches Unternehmen, das sich mit der Erforschung von künstlicher Intelligenz beschäftigt. Die gewinnorientierte Tochtergesellschaft OpenAI LP wird dabei durch das Non-Profit-Mutterunternehmen OpenAI Inc. kontrolliert.

GPT (Generative Pre-trained Transformers) sind von OpenAI entwickelte Sprachmodelle, die auf großen Textmengen trainiert werden, um Text zu erzeugen, der Texten von menschlichen Autoren sehr ähnlich ist. Sie können für verschiedene Aufgaben angepasst werden und profitieren von einem Vortrainingsprozess, der ihnen eine Grundlage für nachgelagerte Aufgaben mit begrenzten Datenmengen bietet.

GPT-2 ist ein KI-Modell, das englischsprachige Texte selbstständig vervollständigen kann. Seine Erzeugnisse sind teilweise nicht von menschengeschriebenen Texten zu unterscheiden. 

GPT-3, eine Weiterentwicklung von GPT-2, wurde erstmals am 28. Mai 2020 präsentiert. Die darauf basierende OpenAI-API ist das erste kommerzielle Produkt von OpenAI. Mit über 175 Milliarden Parametern ist es wesentlich größer als das zuvor größte Modell von Microsoft mit 17 Milliarden Parametern. 

ChatGPT ist ein Prototyp eines Chatbots, der auf maschinellem Lernen basiert und von OpenAI entwickelt wurde. Veröffentlicht im November 2022, verwendet er das Sprachmodell GPT-3.5, eine verbesserte Version von GPT-3.

GPT-4, ein multimodales Sprachmodell von OpenAI, wurde im März 2023 vorgestellt. Es kann nicht nur Texte verarbeiten, sondern auch Bilder erkennen und dazu passende Beschreibungen erstellen.

Eine Integrierte Entwicklungsumgebung (IDE) ist eine Softwareanwendung, die Entwicklern eine Sammlung von Werkzeugen zur Verfügung stellt, um den Programmierprozess zu erleichtern. Ein IDE-Plugin ist eine zusätzliche Erweiterung, die in die IDE integriert wird, um deren Funktionsumfang zu erweitern oder zu optimieren.

GitHub Copilot ist ein KI Pair Programmer, der dabei hilft, schneller und mit weniger Aufwand Code zu schreiben. Basierend auf Kommentaren und Code liefert es sofortige Vorschläge für einzelne Zeilen und ganze Funktionen. GitHub Copilot wird durch OpenAI GPT Modelle angetrieben. Es ist als IDE-Plugin für IDEs wie Visual Studio Code, Visual Studio, Neovim und die JetBrains-Suite verfügbar.

Unsere Erfahrung

Ein großer Hype rund um das Thema „künstliche Intelligenz“ entstand nach der Veröffentlichung von ChatGPT im November 2022. Erfahrungen mit KI sammeln wir jedoch schon seit Winter 2021/22, seitdem wir Zugang zur Beta-Version von GPT-3 erhalten haben (siehe zum Beispiel unser Blog-Video). Schon GPT-3 lieferte beeindruckende Ergebnisse. So konnten wir die Qualität der GPT-Modelle kontinuierlich beobachten und GPT-3 mit GPT-3.5 (ChatGPT) sowie später mit dem neuesten Modell GPT-4 vergleichen.

Jedes neue Modell zeigte einen signifikanten Sprung in der Ergebnisqualität. Allein aufgrund dieser Erfahrung sind wir überzeugt, dass KI-Systeme sich weiterhin intensiv entwickeln werden. Man könnte den Fortschritt mit der Verbreitung von PCs oder dem Internet vergleichen. Die Geschwindigkeit der Entwicklung ist natürlich schwer einzuschätzen, aber eines ist klar: KI-Systeme werden sich immer stärker in unseren Alltag integrieren. Es ist wichtig, zu lernen, wie wir sie als effektives Werkzeug nutzen können, um in unserem Beruf noch besser zu werden.

Beispiele

In Folge beschreiben wir einige konkrete Beispiele für die Anwendung der KI in unserem Alltag.

1. Advent of Code 

Advent of Code ist ein Adventskalender mit kleinen Programmieraufgaben, die in jeder Programmiersprache gelöst werden können. Wir haben ChatGPT einfach die Beschreibung des ersten Puzzles inklusive Testinput gegeben und um eine Lösung in Java gebeten. Die vorgeschlagene Lösung konnte das Puzzle sowohl für den Input aus der Beschreibung als auch für einen großen Input korrekt lösen. Das zeigt, dass ChatGPT in der Lage ist, sofort funktionierenden Quellcode für eine Spezifikation zu erzeugen. Dabei ist es auch hilfreich, dass es ausreichende Kommentare schreibt und zusätzlich erklärt, warum das Problem auf eine bestimmte Weise gelöst wurde.

Lösung von ChatGPT:

public class AdventCalendarDay1 {
   public static void main(String[] args) { 
      // Read input from user
      Scanner scanner = new Scanner(System.in);
      String input = scanner.nextLine();
      scanner.close();

      // Split the input string into an array of integers
      String[] depthStrings = input.split("\n");
      int[] depths = new int[depthStrings.length];
      for (int i = 0; i < depthStrings.length; i++) {
         depths[i] = Integer.parseInt(depthStrings[i]);
       }

       // Count the number of times the depth increases
       int numIncreases = 0;
       for (int i = 1; i < depths.length; i++) { 
          if (depths[i] > depths[i-1]) {
             numIncreases++;
          }
    
       } 

       // Print the result
       System.out.println(numIncreases);
   }

}

2. Code Review

In der Praxis sehen wir, wie wichtig Code-Reviews sind. Bei Code-Reviews werden viele Fehler gefunden – von kleinen Tippfehlern bis hin zu falschen Architekturentscheidungen. Normalerweise werden Code-Reviews von anderen Teammitgliedern durchgeführt. Uns interessierte, ob ChatGPT ein Review für eine Klasse im Projekt Hogarama durchführen kann. Hogarama ist unser Learning-Friday-Projekt, bei dem wir verschiedene Technologien, Plattformen, Programmiertechniken und Softwareentwicklungseinsätze erkunden und üben.

Auszug aus Lösung von ChatGPT:

public class WateringService {
}
Make a review of the code above.
The code is a Java class named WateringService that provides the main logic for watering plants based on sensor data. Here’s a review of the code:
The class has several instance variables that are injected using the @Inject annotation, including SensorDataDAO, WateringRuleDAO, SensorNormalizer, ActorControlService, WateringStrategy, ActorCache, and SensorCache. The WateringService class has a nested enum Config that defines default values for watering duration and low water threshold.
Overall, the code is well-organized and follows standard Java conventions. The use of dependency injection and caching improves performance and makes the code more modular. However, the WateringRule class and its associated WateringRuleDAO are not included in the code snippet, so it’s unclear how the watering configuration data is persisted. Also, the WateringStrategy class is not included, so it’s unclear how the watering duration is calculated.
Are there some improvements according to java coding convention and clean code?
There are a few improvements that could be made to the code according to Java coding conventions and clean code principles:
The WateringStrategy class should be renamed to WateringDurationCalculator to better reflect its purpose. Why do you think, that The WateringStrategy class should be renamed to `WateringDurationCalculator?
I think that renaming the WateringStrategy class to WateringDurationCalculator would make the purpose of the class clearer and more descriptive.
The name „WateringStrategy“ is somewhat vague and could refer to any number of things related to watering plants. On the other hand, „WateringDurationCalculator“ more clearly indicates that the class is responsible for calculating the duration of watering based on some input data, which is a more specific and descriptive name.
Using more specific and descriptive names for classes and methods is one of the key principles of clean code. It makes the code easier to understand and maintain, as well as making it easier to reason about the behavior of the system as a whole.

Natürlich kann das Review durch KI-Systeme wie ChatGPT das Review von Teamkollegen nicht ersetzen. Dennoch kann die KI bereits frühzeitig Feedback zum Code geben, sodass Entwickler die meisten Fehler im Code finden können, bevor es zum eigentlichen Review geht. Dadurch steigt auch die Codequalität. Überraschend war, dass ChatGPT nicht nur Review-Feedback ähnlich einer statischen Codeanalyse geben konnte, sondern auch die Aufgabe und den Zweck der Klasse ohne weiteren Kontext identifizierte und korrekte Vorschläge für Namensänderungen machte.

3. Migration JavaEE 8 nach JakartaEE 10

Wir legen großen Wert darauf, unsere Lösungen kontinuierlich durch Upgrades der Runtimes (beispielsweise Java, Node), Bibliotheken und Frameworks (wie Java EE, Angular) sowie Runtimes und Plattformen (etwa JBoss EAP, Quarkus oder Openshift) auf den neuesten Stand zu bringen. Dies ist von entscheidender Bedeutung, da es Sicherheit und Stabilität gewährleistet. Upgrades schließen häufig Sicherheitslücken, steigern die Leistung und fügen neue Funktionen hinzu, die es uns ermöglichen, zeitgemäße Technologien und bewährte Methoden einzusetzen. Dadurch sind wir in der Lage, sowohl eine höhere Codequalität als auch ein verbessertes Benutzererlebnis für unsere Kunden sicherzustellen.

Ein Upgrade, das sowohl für unsere internen Projekte als auch für Kundenprojekte von Bedeutung ist, ist die Umstellung von Java EE 8 auf Jakarta EE 9/10. Im Folgenden wird ein Beispiel dargestellt, wie ChatGPT bei derartigen Migrationen unterstützen kann:

public class WateringService {
}
Migrate to jakarta ee 9 without explanations
To migrate this code to Jakarta EE 9, you’ll need to update the import statements for the javax.inject package to use the jakarta.inject package. This is because the package names have changed in Jakarta EE 9 from javax to jakarta. Here’s the updated code:
package com.gepardec.hogarama.domain.watering;
import com.gepardec.hogarama.domain.metrics.Metrics;
import jakarta.inject.Inject; // Updated import statement
import java.util.Optional;
public class WateringService {
// … Rest of the code remains the same
}
Make sure to update your project dependencies to use Jakarta EE 9 libraries, and update the build system accordingly. This might include updating your Maven or Gradle configuration files to include the new Jakarta EE 9 dependencies.

Das Besondere an ChatGPT ist nicht nur, dass es Anweisungen für die erforderlichen Schritte liefert, sondern auch, dass es lediglich denjenigen Code ändert, bei dem eine Anpassung notwendig ist. Bei unveränderten Codezeilen fügt es Kommentare hinzu, die darauf hinweisen, dass keine Änderungen erforderlich sind. Dadurch können Entwickler unmittelbar erkennen, welche Code-Bereiche bei der Migration zu beachten sind.

4. Pair Programming mit KI

Für uns ist es üblich, Pair-Programming mit Kollegen durchzuführen. Aber die Interaktion mit ChatGPT ist diesem Prozess manchmal sehr ähnlich. Oft kann ChatGPT keine sofortige, passende Lösung anbieten. Bei einfachen Problemen fällt das schnell auf. Bei komplexeren Fragestellungen oder weniger verbreiteten Frameworks gestaltet sich der Prozess jedoch wie folgt: Der Entwickler schildert ein Problem, ChatGPT schlägt eine Lösung vor. Der Entwickler testet diese und gibt Rückmeldung, ob es funktioniert hat oder nicht. Dabei beschreibt er auch eventuell aufgetretene Fehler oder fehlende Bibliothekversionen. Durch diesen „Dialog“ mit ChatGPT gelangt man in mehreren Schritten zu einer funktionierenden Lösung, genauso wie bei Pair-Programming.

Ein Beispiel aus der Praxis: Ein Entwickler musste eine Suchabfrage für eine AWS-Datenbank DynamoDB erstellen, hatte jedoch keine große Erfahrung damit. Vor der Veröffentlichung von ChatGPT musste er viel Zeit in die Erstellung von Abfrage-Quellcode investieren. Für eine Klasse, die korrekte Datensätze nach IDs liefert, benötigte er etwa 2 Stunden, was ein normaler Prozess ist, bei dem viel im Internet recherchiert und Dokumentation gelesen wird.

Einige Zeit nach der Veröffentlichung von ChatGPT musste der Entwickler erneut eine Klasse erstellen, die Datensätze aus DynamoDB abruft, die bestimmte Werte in gegebenen Feldern enthalten. In einer „Pair-Programming“-Session mit ChatGPT wurde die Lösung innerhalb von 10 Minuten programmiert. Der größte Zeitaufwand bestand darin, den Code kompilierbar zu machen, weil ChatGPT zunächst auf eine falsche Bibliotheksversion verwiesen hatte. Sobald die KI jedoch verstand, welche Version verwendet werden sollte, generierte sie sofort korrekten, funktionsfähigen Code.

In diesem Beispiel wird deutlich, dass mit ChatGPT eine Lösung in Minuten statt in Stunden gefunden werden kann. Das ist besonders hilfreich in Bereichen, in denen ein Entwickler kein Experte ist, aber den generierten Code erfolgreich evaluieren und integrieren kann.

5. KI und falsche Ergebnisse

Seit Kurzem wird die KI-Chat-Funktionalität in Suchmaschinen integriert. Ein Beispiel hierfür ist Bing-Chat, der ebenfalls auf OpenAI GPT-Modellen basiert. Obwohl der Chat noch in der geschlossenen Beta-Phase ist, haben wir uns für seine Funktionsweise interessiert und Bing dazu befragt:

Einige der Ergebnisse sind einfach falsch. Unabhängig davon, ob es um Bing-Chat oder ChatGPT geht, müssen wir diese Technologien mit Vorsicht genießen. Häufig generieren sie fehlerhafte Lösungen oder erfinden sogar alternative Realitäten, die mit unserer Welt nichts gemein haben. Es ist wahr, dass diese Tools uns extrem gut unterstützen können, doch unsere äußerst wichtige Aufgabe bleibt, die Vorschläge der KI zu überprüfen, zu validieren und zu integrieren. Wie bei IDEs sind KI-Systeme lediglich Werkzeuge. Die volle Verantwortung für die Lösungen liegt bei uns.

Datenschutz und Privacy

Bei der Nutzung von KI-Systemen wie ChatGPT ist besondere Vorsicht im Umgang mit Daten nötig, da wir Teile von Quellcode oder Spezifikationen versenden können, die für unsere Kunden oder uns selbst bei internen Projekten sensibel sein können. In den ChatGPT-FAQ finden wir bereits Antworten auf wichtige Fragen:

  • Who can view my conversations?
    As part of our commitment to safe and responsible AI, we review conversations to improve our systems and to ensure the content complies with our policies and safety requirements. 
  • Will you use my conversations for training?
    Yes. Your conversations may be reviewed by our AI trainers to improve our systems.
  • Can I use output from ChatGPT for commercial uses?
    Subject to the Content Policy and Terms, you own the output you create with ChatGPT, including the right to reprint, sell, and merchandise – regardless of whether output was generated through a free or paid plan.

Wir besitzen also alle Rechte an den ChatGPT-Ausgaben. Sollten wir das System für Kundenprojekte einsetzen, gehören alle generierten Ergebnisse üblicherweise dem Kunden. Es ist aber zu beachten, dass alle Eingaben gespeichert und wiederverwendet werden können. OpenAI, ein US-amerikanisches Unternehmen mit Servern in den USA, kann als Datenverarbeiter angesehen werden. Daher müssen wir sorgfältig prüfen, welche Daten wir an ChatGPT senden. Wir sollten vermeiden, sensible Quellcode-Bereiche zu übermitteln.

Falls wir persönliche oder sensible Daten teilen, die unter die DSGVO fallen, sollten wir OpenAI kontaktieren, um eine Datenverarbeitungsvereinbarung abzuschließen. Eventuell sollte die Übermittlung personenbezogener Daten an OpenAI gänzlich ausgeschlossen werden. Ob dies zentral oder auf Nutzerebene geregelt werden sollte, bleibt noch offen.

Auch wenn wir Plugins für IDEs wie GitHub Copilot einsetzen, sollten wir die Datenschutzaspekte berücksichtigen. Gemäß der Datenschutzerklärung von GitHub werden die Code-Teile nicht gespeichert. Es ist jedoch wichtig zu wissen, dass GitHub Copilot im Hintergrund auf OpenAI GPT-Modelle zurückgreift.

Preise

Im April 2023 sind die Preise für die Nutzung der bekanntesten KI-Systeme im Grunde mit den Kosten für andere Entwicklerwerkzeuge (wie zum Beispiel IntelliJ IDEA) vergleichbar. Hier einige Beispiele:

  • ChatGPT Plus: 20 $ pro Monat
  • GitHub Copilot Individual: 10 $ pro Monat
  • GitHub Copilot Business: 19 $ pro Monat

Conclusio und Erwartungen für die Zukunft

KI Systeme wie ChatGPT verbreiten sich derzeit mit hoher Geschwindigkeit. Nicht nur, aber auch in der IT. Der Stand ist bereits heute beeindruckend. Die Entwicklung steht am Anfang und wir können die Zukunft nicht vorhersagen, aber diese Systeme sind gekommen, um zu bleiben. Wir erwarten eine vermehrte Integration in die Entwicklungswerkzeuge, wobei mehr und mehr Aufgaben, die derzeit von Menschen erledigt werden, an die KI übergehen werden. Als Modus erwarten wir eine Art Pair-Programming zwischen Mensch und Maschine, wobei der Mensch  Aufgaben stellt und die Maschine versucht, sie zu lösen.

Wichtig ist zu verstehen, dass eine KI weder allwissend noch unfehlbar ist. Wie Menschen auch, kann die KI aus unterschiedlichen Gründen zu falschen Ergebnissen kommen. Die Aufgabe des Menschen wird zunehmend sein, zu entscheiden, ob die Ergebnisse der KI den Anforderungen entsprechen. So wie heute eine der wichtigsten Fähigkeiten eines Entwicklers ist, wie man effektiv im Internet Informationen findet, so wird in Zukunft der Umgang mit KIs zu den Kernkompetenzen von Entwicklern gehören.

geschrieben von:
Egor
WordPress Cookie Plugin von Real Cookie Banner