Statische Codeanalyse

Schneller Testen mit KI und ML

2. Mai 2023, 6:00 Uhr | Von Igor Kirilenko, Vice President Development bei Parasoft
Bild 2: Die Integration von AI in den Prozess der statischen Analyse bringt mehrere Vorteile.
© Parasoft

Der ML-Prozess des Lernens und der Anpassung an den Nutzer entspricht genau der Funktionsweise von KI und ML bei der statischen Codeanalyse. Bei der Identifizierung und Priorisierung von Code-Verletzungen wird KI kombiniert mit ML den Ablauf bei statischen Analysen vereinfachen und entstressen.

Parasoft
Bild 1: Die künstliche Intelligenz bringt Vorteile für jede Ebene des Software-Tests.
© Parasoft

Das Ziel der statischen Analyse (SA) ist es, Schwachstellen im Code aufzuspüren, häufig mit branchenüblichen Programmier- und Sicherheitsstandards wie OWASP (Open Worldwide Application-Security-Project) und CWE (Common Weakness-Enumeration). Entwickler sind oftmals nicht in der Lage, ihre eigenen Codes auf Schwachstellen zu analysieren oder zu ermitteln, welche Korrekturen notwendig sind, und diese zu priorisieren. Es gibt tatsächlich keine Abkürzung oder einen »einfachen Modus« für Statische-Analyse-Tests. Um den größtmöglichen Nutzen zu erzielen, müssen sie regelmäßig und gründlich durchgeführt werden. Allerdings können ihre Automatisierung und der Einsatz von Machine-Learning (ML) die Ergebnisse verbessern und die Arbeit für die Entwickler enorm erleichtern.

Die Ergebnisse der statischen Analyse profitieren definitiv von der Automatisierung mithilfe von Tools. Obwohl sich die Arten der Analyse und die Prioritäten unterscheiden können, sind die Arbeitsweise des SA-Tools und die Anwendung seiner Methodik dieselben. Die verschiedenen, derzeit verfügbaren Analysen drehen sich zum Beispiel um diese vier Schlüsselpunkte:

  • Sicherheit: Erkennen von Schwachstellen, die das Sicherheitsrisiko erhöhen
  • Zuverlässigkeit: Aufspüren von Problemen, die beispielsweise zu Speicherlecks führen können
  • Leistung: Auffinden von Fehlern, die die Leistung beeinträchtigen
  • Stil: Überprüfen des Codes, um die Entwickler bei der Übernahme eines einheitlichen Programmierstils zu unterstützen

Durch die kontinuierliche Automatisierung dieser Abläufe können Teams sie besser verwalten, indem sie potenzielle Probleme erkennen, bevor diese zu großen Problemen anwachsen.

Was macht die Einführung der statischen Analyse schwierig und teuer?

Viele Entwickler halten die Einführung der statischen Analyse wegen des Projektumfangs und der Vorgehensweise für kostspielig und abschreckend. Sie möchten die für sie dringlichsten Themen möglichst alle auf einmal angehen und muten sich dabei oft mehr zu, als sie an diesem Punkt bewältigen können.
Die Lösung lautet, die wichtigsten Probleme in kleinen Schritten anzugehen. Natürlich sollten sie nicht so klein sein, dass sie zum Stillstand führen. Aber mit »Babysteps« lässt sich verhindern, dass ein Entwicklerteam mit Tausenden von Verstößen auf einmal überfordert ist, denn in sicherheitskritischen Märkten müssen alle Verstöße behoben werden, um die Konformität mit Standards zu gewährleisten, bevor ein Produkt freigegeben werden kann.

Wie unterstützt AI/ML die statische Analyse?

Bei der statischen Analyse geht es darum, Probleme zu erkennen, noch bevor der Code kompiliert und ausgeführt wird. KI kann auf mehreren Ebenen des Softwaretests eingesetzt werden (Bild 1), beispielsweise bei

  • UI-Tests (User Interface): Verwalten und Warten von flüchtigen automatisierten UI-Tests und Optimieren der Ausführung von manuellen Tests
  • API-Tests (Application Program Interface): Entdecken von API-Nutzungsmustern und automatische Generierung vollständiger Testszenarien
  • Unit-Tests: Erzielen und Pflegen der Code-Abdeckung, insbesondere bei modifiziertem Code
  • Code-Analyse (Zuverlässigkeit und Sicherheit): Bekämpfen von Verstößen in der Codebasis

Künstliche Intelligenz erleichtert das Entwickeln und Verwalten von automatisierten Tests. Zudem kann sie die Testausführung optimieren und die Bereitstellung verwertbarer Ergebnisse maximieren, indem sie die Abläufe auf verschiedene Weise erweitert. Werden Tests automatisiert und Prozesse entwickelt, lassen sich mehr Probleme in kürzerer Zeit bewältigen. Das Vorsortieren sollte jedoch den Statische-Analyse-Tools überlassen werden, wobei Entwickler durch die Arbeit unter der »Aufsicht« von Statische-Analyse-Techniken ihre Fertigkeiten erweitern und somit bessere Programmiertechniken erlernen und sichereren Code schreiben können.

Vorbeugen statt entdecken

Die Codeanalyse bietet Techniken zum Vorbeugen und Erkennen, um die mit der Qualität des Codes verbundenen Risiken zu kontrollieren. Sie hilft zwar, Probleme zu erkennen, aber eine effizientere Strategie ist es, deren Auftreten von vornherein zu verhindern. Durch die Automatisierung der statischen Analyse können Entwicklungsteams Probleme regelmäßig und einfacher erkennen. Die Integration von KI und ML in die statische Analyse erleichtert den Teams die Übernahme dieser Praxis. Es schlägt vor, Verstöße auf eine Weise zu beheben, die die Effizienz fördert, Arbeitsabläufe optimiert und die Produktivität und den Erfolg der Entwickler steigert.

Clustering-Methodik

Neben dem Clustering von Verstößen auf der Grundlage moderner Klassifizierungsalgorithmen kann das KI-Modell verschiedene neuronale Netze, z. B. code2vec, nutzen, um Codeverfahren zu vektorisieren und sie miteinander zu vergleichen und Verstöße entsprechend der semantischen Bedeutung des sie umgebenden Codes zu gruppieren. Das KI-Modell ermöglicht auch, Verstöße innerhalb ähnlichen Codes anzugehen. Dies bietet mehrere Vorteile:

  • Schnellere und effizientere Korrektur von Verstößen
  • Aufforderung zur Behebung aller Verstöße in semantisch ähnlichem Code
  • Verringert die Zeit, die Entwickler mit der Analyse des Quellcodes verbringen, um Probleme zu lösen
  • Erhöht das Vertrauen der Entwickler in das Verstehen des Quellcodes

Anbieter zum Thema

zu Matchmaker+

  1. Schneller Testen mit KI und ML
  2. Netflix für die statische Analyse

Verwandte Artikel

Parasoft