Warum Maschinen die Qualitätssicherung von Code übernehmen sollten

Publish date:

Machine Learning kann Qualität von Code sicherstellen und Fehler bereits in der Entwicklung erkennen.

Eldar Sultanow, Capgemini

Drei Generationen SCA, ein Schwachpunkt: die Vorab-Regeldefinition

Die Idee, Maßnahmen zur Qualitätssicherung von Code zu automatisieren, ist nicht neu, die Statische Code Analyse (SCA) reicht bis in die späten Siebziger Jahre zurück. Was sind Statische Code Analysen, kurz SCAs? Statische Code Analysen sind Verfahren die, im Gegensatz zur Dynamischen Code Analyse (DCA) Qualitätsprüfungen an der Software vornehmen, ohne dass diese ausgeführt wird. Dies geschieht während der Kompilierungszeit, d. h. in der Zeitspanne zwischen der Verarbeitung des Inputs bis zum Output. In unserem Fall: Die Zeit, bis überprüft wurde, ob der Code korrekt ist. Je nachdem, wie gut die Regeln und Muster festgelegt sind, erkennt das System vorhandene Fehler schneller oder später und sichert die Qualität des Codes. Allen drei Vorgängergenerationen ist jedoch gemein, dass die qualitätssichernden Regeln von der Software nicht selbstständig erkannt, sondern bereits im Vorfeld definiert sein müssen. Die selbstlernende Maschine hingegen findet die Regeln selbst. Um nicht zu sehr in technische Details abzudriften, seien die drei Generationen an dieser Stelle nur kurz genannt.

  1. Generation: Lint, das erste Tool zur Analyse von Quellcode schaffte nur eine Datei pro Scan
  2. Generation: ganzheitliche Betrachtung des Datenflusses über mehrere Codedateien hinweg
  3. Generation: Continous Integration – die automatisierte Zusammenführung von geändertem Code und zentralem Hauptcode

Alle drei Generationen identifizieren Code-Schwachstellen über Verletzungen vordefinierter Regeln. Heute werden zwar komplexere Regelwerke genutzt, das Prinzip bleibt jedoch gleich. Prüfregeln im Vorfeld zu definieren hat leider einen entscheidenden Nachteil: Die identifizierten Fehler haben meist im Produktivbetrieb zuvor stattgefunden, resultierende Regelsätze sind daraus abgeleitet. Somit ist es quasi unmöglich, Regeln im Vorfeld aufzustellen, die alle – auch zuvor unbekannte – Fehler während der Kompilierungszeit erkennen. Machine Learning kann dieses Defizit gut ausgleichen, dazu ein Beispiel.

Video: Machine Learning for Software Testing

Praxisbeispiel: Iteratives Lernen aus Fehlern ist schmerzhaft und kostspielig

Aus Fehlern lernen, nachdem sie aufgetreten sind, kann schmerzlich sein – vor allem je, kritischer und größer das Softwareprojekt ist. Ein Beispiel: Bei einem umfangreichen öffentlichen IT-Verfahren mit 80 Entwicklern, 800.000 Code-Zeilen und zwei Milliarden Euro an monatlichen Transaktionen musste ein Hotfix für einen Fehler im Produktivbetrieb her. Im Flurfunk wurde das Problem thematisiert und es zeigte sich, dass bereits an vier Stellen ähnlicher Code im System vorhanden war und an der verursachenden Stelle lediglich eine Anweisung abwich. Allerdings überblickt man bei 800.000 Zeilen Code derartige Muster nicht mehr ohne Weiteres. Dies brachte uns auf die Idee, Machine Learning als Tool in Betracht zu ziehen. Die resultierende Lösung haben wir im Oktober 2017 entwickelt und sie ist mittlerweile im Einsatz.

4. Generation: Statische Code Analyse mit Hilfe künstlicher Intelligenz

Unser Ansatzpunkt: Müssen Fehler erst passieren, um das Regelwerk erweitern zu können? Maschinelles Lernen (ML) als Teilgebiet der Künstlichen Intelligenz (KI) bietet hier einen Ausweg, da sich das z.B. für eine Warenkorbanalyse beliebte Prinzip der Mustererkennung auch auf SCA anwenden lässt. Die Warenkorbanalyse trifft Aussagen wie „Ein Kunde, der Lachs kauft, kauft mit hoher Wahrscheinlichkeit auch Zitronen“. Der Vorteil solcher Regeln ist die Vorhersehbarkeit. Im Kontext der statischen Codeanalyse bedeutet dies „auf die Codeanweisung X muss die Codeanweisung Y folgen“.

In unserem SCA-Ansatz definieren wir als häufiges Muster ein wiederkehrendes Vorkommnis von Codeanweisungen innerhalb der Transaktionen. Transaktionen sind als Funktionen (Prozeduren) oder bei Java als Methoden definiert. Treten also gleiche Codeanweisungen  innerhalb verschiedener Methoden wiederkehrend auf, sind es häufige Muster im Sinne unseres Ansatzes. Variablen sollten dabei beispielsweise anhand ihres Typs und nicht ihres Namens definiert werden, da letztere in der Programmierung „Schall und Rauch“ sind. Relevante Eigenschaften werden dann im Code via Mining ausgelesen. Der entscheidende Vorteil des Verfahrens: Fehler können bereits implizit aus der gegebenen Codebasis identifiziert werden und müssen nicht erst im Produktivbetrieb auftreten.

Fazit: Leistungs- und ausbaufähiges Potenzial

Die von uns als 4. Generation bezeichnete statische Code-Analyse zeigt bereits heute ihre Vorteile. Entwickler müssen dank maschinellem Lernen nicht mehr alle Prüfregeln im Vorfeld kennen und Vorschläge vereinfachen es, Variablen und Methoden zu benennen. Auch zur Identifizierung von Sicherheitslücken besitzt das Konzept viel Potenzial. Der nächste vielversprechende Schritt ist es, die Vielzahl der gefundenen Regeln zu gewichten, um einen noch besseren Fokus auf die wesentlichen Aspekte zu ermöglichen.

Blog per E-Mail abonnieren
RSS-Feed abonnieren

Weitere Posts

Digitalisierung

IT Trends: Das Ende der Effizienz?

Thomas Heimann
Date icon April 5, 2019

Unternehmen müssen schnell digitalisieren. Das ist teuer – und erstes Opfer wird die...

IT-Trends

Künstliche Aufregung um KI? Eindrücke vom Handelsblatt KI Summit

Luca Cito
Date icon März 29, 2019

Künstliche Intelligenz (KI) ist in aller Munde – aber was kann KI heute liefern und was...

Capgemini Invent

Smart Digital Stores: Die digitalen Chancen für Modehändler

Julia Preukschat
Date icon März 28, 2019

Kunden erwarten heute im stationären Handel die gleichen Möglichkeiten wie online....

cookies.

Mit dem Fortsetzen des Besuchs dieser Website akzeptieren Sie die Verwendung von Cookies.

Für mehr Informationen und zur Änderungen der Cookie-Einstellungen auf Ihrem Computer, lesen Sie bitte Privacy Policy.

Schließen

Cookie Information schließen