KI Quality Gate: Wie ChatGPT und KI Code-Qualität verbessern
Geschrieben am von jt
Eine Softwarelösung sollte stets im Fluss sein. Deshalb beschäftigen wir uns in diesem Blogbeitrag mit dem Thema Quality Gate und KI. Die Frage nach Wartung und Weiterentwicklung steht zusammen mit dem Betrieb an erster Stelle. Durch diverse Ansätze (Organisation im Team, Firmen-Mindset) versucht man oft den Auslieferungszyklus möglichst kurz zu halten. Solche Dynamiken können nur dann verlässlich funktionieren, wenn ein hoher Grad an Automatismus und Transparenz vorhanden ist. Ein wichtiger Teil davon ist das Quality Gate, das dazu beiträgt, die Code-Qualität zu verbessern.
Was bedeutet Quality Gate
Bei einem Quality Gate (deutsch Qualitätsprüfpunkte) wird die Freigabe der nächsten Projektschritte anhand von Qualitätskriterien im Voraus eindeutig bestimmt. Wie kann in diesem Zusammenhang die Qualität von Code beurteilt werden? Im Allgemeinen drehen sich viele Techniken, die unter "Clean Code" fallen, um folgende Frage: Wie kann in einem Team von Programmierern Code geschrieben werden, sodass neue Teammitglieder sofort mit Ihrer Arbeit loslegen können ohne lange Einarbeitungszeit? Neben der statischen Code Analyse (Komplexität, Bug-Heuristik, usw. - Stichwort Sonarqube) ist Code Review eine mögliche Lösung.
Wer ist verantwortlich für Code Review?
Code Review ermöglicht Know-How Transfer von erfahrenen Arbeitskollegen an neue Teammitglieder.
Oft ist es eine Tätigkeit, die viel Zeit in Anspruch nimmt. Deshalb sollten sich in erster Linie Software Architekten um diese Aufgabe kümmern.
Kommen wir zum Thema Deployment Pipeline. Diese sieht wie folgt aus:
- Code Schreiben & Commit
- Trigger Build (Unit Tests, Akzeptanztests, Integrationstests, ...)
- Quality Gate (Clean Code Standards, Security, Lizenzen, ...)
Erst danach entsteht der Code Review.
Die Rolle der KI
Lass uns eine Code Completion Schnittelle von Open AI ausprobieren, die bei Code Qualität Checks unterstützen kann. Unser Beispielprojekt hat 2 verschiedene Methoden. Einmal in Typescript, einmal in Java. Typescript ist eine simple Funktion zum Addieren:
function add(x, y) { return x + y;}
Die Java Klasse an sich ist ziemlich unverständlich, mit Namenskonventionen die uns nichts sagen:
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class SomeClass {
static boolean sA(final String s) {
String bKram = s;
String sFe = fo(bKram);
return bKram.equals(sFe);
}
static String fo(String bKram) {
List<String> faef = Stream.of(bKram).map(c-> c).collect(Collectors.toList());
StringBuilder dram = new StringBuilder(bKram).reverse();
if(Objects.nonNull(faef)) {
return dram.toString();
}
return null;
}
Versuchen wir unser Glück:
const question = "Can you write Unit Test for this Code : ";
Wir nutzen die createCompletion
API von OpenAI
const completion = await openai.createCompletion({
model: "text-davinci-003",
prompt: question + fileContents,
temperature: 0,
max_tokens: 3600,
});
Here we are:
@Test
public void testSA() {
String s = "test";
assertTrue(SomeClass.sA(s));
}
@Test
public void testFo() {
String s = "test";
assertEquals("tset", SomeClass.fo(s));
}
Es ist zwar immer noch nicht klar, was die Klasse so macht, aber die Funktionalität wurde rausgepresst, und zwar in Sekunden.
Das Gleiche lässt sich für Typescript abfragen:
describe('add function', () => {
it('should add two numbers', () => {
expect(add(1, 2)).toEqual(3);
});
});
Hierbei bemerkt OpenAI - ChatGPT, dass es sich um Palyndrome handelt. Die künstliche Intelligenz versteht infolgedessen das Ziel der Funktion:
KI Quality Gate
Kommen wir zum Thema zurück und analysieren den Nutzen von KI für Quality Gate. Bedeutet also neuer Code, dass eine KI dafür Tests schreiben kann?
Wenn eine Methode kurzgefasst wurde und wenig Nebeneffekte aufweist, ist sie vermutlich durch KI interpretierbar und testbar.
Dies beutet im Umkehrschluss, dass KI als Filter fungieren kann, um Stellen hervorzuheben, die eine Relevanz für Code Review darstellen.
Durch den Einsatz von Künstlicher Intelligenz sieht unsere Pipeline gleich anders aus:
- Code schreiben & Commit
- Trigger Build (Unit Tests, Akzeptanztests, Integrationstests, ...)
- AI Code Review
- Quality Gate (Clean Code Standards, Security, Lizenzen, ..)
Auf diese Art kann KI in Deployment Pipelines integriert werden und findet zudem Anwendung bei Security Aspekten im Hinblick auf unseren geschriebenen Code. Infolgedessen wird die Stabilität, Wartbarkeit und die Qualität der ausgelieferten Software erhöht. Das Wichtigste Ergebnis das durch den Einsatz von KI in Hinblick auf Quality Gate erzielt wird, ist die Steigerung der Produktivität von einem Development Zyklus.