Softwaretest

Künstliche Intelligenz für den Softwaretest

30. Mai 2023, 6:00 Uhr | Von Igor Kirilenko
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 1

Automatisiertes Erstellen und Parametrisieren von Unit-Tests mit KI

Dieses Beispiel findet sich in Jtest, einem Testtool von Parasoft für Java-Entwickler, das statische Analyse, Unit-Tests, Abdeckung und Nachvollziehbarkeit usw. beinhaltet. Mithilfe von KI wurde eine automatische Testfallgenerierung eingeführt, mit der Entwickler die Lücken füllen können, wenn sie mit einem spärlichen Unit-Testgerüst beginnen. Das IDE-Plug-in von Jtest ergänzt die Unit-Testing-Praxis um eine nützliche Automatisierung mit einfachen Ein-Klick-Aktionen zum Erstellen, Skalieren und Warten von Unit-Tests.

Durch den Einsatz des KI-fähigen Jtest können Benutzer eine höhere Codeabdeckung erzielen und zugleich den Zeit- und Arbeitsaufwand für den Aufbau einer umfassenden und aussagekräftigen Suite von Unit-Testfällen deutlich senken. Dies geschieht unter anderem durch ein leichteres Erstellen von Stubs und Mocks zur Isolierung des zu testenden Codes. Dank der zugrundeliegenden KI kann Jtest die zu testende Einheit beobachten, um ihre Abhängigkeiten von anderen Klassen zu ermitteln. Wenn Instanzen dieser Abhängigkeiten geschaffen werden, schlägt das Tool dem Benutzer Mocks vor, um isoliertere Tests zu gestalten. Das automatische Anlegen der notwendigen Mocks und Stubs senkt den Aufwand für einen der zeitaufwendigsten Teile der Testerstellung.

Außerdem erkennt Jtest automatisch Code, der von bestehenden Testsuiten nicht abgedeckt wird, und durchforstet den Steuerungspfad des Quellcodes, um herauszufinden, welche Parameter an eine zu testende Methode übergeben werden müssen, und wie Subs/Mocks zu initialisieren sind, um diesen Code zu erreichen. Wird diese KI aktiviert, kann Jtest automatisch neue Unit-Tests generieren und dabei geänderte Parameter anwenden, um die Codeabdeckung des gesamten Software-Entwicklungsprojekts zu erhöhen.

Automatisiertes Erstellen und Warten von API-Tests mit KI und ML

Ein weiteres Beispiel für den Einsatz von ML ist der API-Testgenerator SOAtest von Parasoft. Er geht über das Aufzeichnen und Abspielen von Tests hinaus und setzt – mithilfe von KI und maschinellem Lernen – UI-Tests in vollständige, automatisierte API-Testszenarien um. Der Smart-API-Testgenerator nutzt Schlussfolgerungen, um die Muster und Beziehungen in den verschiedenen API-Aufrufen zu verstehen, die während der Ausführung der Benutzeroberfläche erfolgen. Aus dieser Analyse wird eine Reihe von API-Aufrufen erstellt, die die zugrunde liegenden Schnittstellenaufrufe während des UI-Programmablaufs darstellen.

Dann wendet das Tool ML an, indem es die verschiedenen API-Ressourcen beobachtet und sie als Vorlage in einer proprietären Datenstruktur speichert. Das Update dieser internen Struktur erfolgt durch Prüfen anderer Testfälle in der Bibliothek des Benutzers, um verschiedene Verhaltensweisen bei der Ausführung der APIs zu lernen, z. B. eine Zusicherung (Assertion) oder das Hinzufügen eines bestimmten Vorspanns (Headers) an der richtigen Stelle.

Das Ziel der KI besteht darin, fortgeschrittenere Tests zu schaffen und nicht nur zu wiederholen, was ein Nutzer gemacht hat, wie es bei einfachen Aufzeichnungs- und Wiedergabetests der Fall ist. Und so funktioniert der Smart API-Testgenerator:

  • Erkennt Muster im Datenverkehr
  • Erstellt ein umfassendes Datenmodell der beobachteten Parameter
  • Generiert und aktiviert automatisierte API-Tests und wendet gelernte Muster auf andere API-Tests an, um diese zu verbessern und Anwender bei der Erstellung anspruchsvollerer automatisierter Testszenarien zu unterstützen.

Die daraus resultierenden automatisierten API-Tests sind vollständiger, wiederverwendbar, skalierbar und widerstandsfähig gegenüber Änderungen.

Selbstheilung per ML bei der Ausführung von Selenium-Tests

Die automatische Validierung der UI-Schicht ist eine weitere wichtige Komponente der Teststrategie, um die vollständige Verifizierung des Produkts zu gewährleisten, bevor es in Produktion geht. Das Selenium-Framework hat sich für UI-Tests durchgesetzt, aber die Benutzer kämpfen immer noch mit den üblichen Herausforderungen des Selenium-Tests, wie Wartbarkeit und Stabilität. Hier können KI-Techniken und insbesondere ML helfen, indem sie eine Selbstheilung zur Laufzeit ermöglichen, um die mit der Ausführung von UI-Tests verbundenen Probleme der Wartbarkeit zu lösen.

Diese Funktion ist Teil des Tools Selenic von Parasoft. Es kann während der regulären Ausführung von Selenium-Tests etwas über die interne Datenstruktur »lernen«. Die Selenic-Engine überwacht jeden Lauf und erfasst detaillierte Informationen über den Web-UI-Inhalt der zu testenden Anwendung. Sie extrahiert DOM-Elemente (Document Object Model), deren Attribute, Locators und ähnliches und korreliert sie mit Aktionen, die von UI-gesteuerten Tests ausgeführt werden. Selenic nutzt den proprietären Datenmodellierungsansatz von Parasoft und speichert diese Informationen in seiner KI-Engine. Durch die kontinuierliche Aktualisierung des Modells und die Analyse der bisherigen Ausführung aller Tests wird das Tool immer »intelligenter«.

Dies bringt einen entscheidenden Zeitgewinn in Fällen, in denen UI-Elemente von Webseiten verschoben oder erheblich verändert werden, wodurch Tests fehlschlagen. Mit Selenic kann die von der Engine verwendete KI-Heuristik diese geänderten Elemente mit den vom Modell dargestellten historischen Daten »abgleichen« und automatisch »intelligente Platzhalter« generieren. Diese sind resistent gegen Änderungen, um die Ausführung von Selenium-Tests zur Laufzeit wiederherzustellen. Informationen über diese Änderungen werden automatisch über das Modell weitergegeben, und die künftige Generierung neuer Locators erfolgt auf der Grundlage dieser Änderungen.
 
Zudem kann Selenic verschiedene Arten von »Wartebedingungen«, die Instabilitäten im Zusammenhang mit den Leistungsmerkmalen der zu testenden Systeme betreffen, selbst heilen. Selenic misst auch die Zeit, die mit der Ausführung jedes Testfalls auf Webseiten verbunden ist, und vergleicht sie mit dem Durchschnittswert der vorangegangenen Läufe. Überschreitet die Abweichung einen bestimmten Schwellenwert, erscheint im Bericht eine Warnung, um den Benutzer über wichtige Änderungen zu informieren.

Optimieren der Testdurchführung mit der Testauswirkungsanalyse
 
Die Test Impact Analysis (TIA) bewertet die Auswirkungen von Änderungen am Code. Sie unterstützt bei der Ermittlung der von den Codeänderungen betroffenen Testfälle. Ihr Hauptvorteil besteht darin, dass nach Änderungen keine Tests mehr für die gesamte Codebasis durchgeführt werden müssen. Das spart Zeit und Kosten und sorgt für einen effizienten Entwicklungsprozess. Man kann von der TIA-Technik bei der Ausführung manueller Tests profitieren oder durch die Integration von TIA-basierten Tools in CI/CD-Pipelines Vorteile erzielen. Das optimiert die Ausführung der automatisierten Tests, zugleich erhalten die Entwickler eine schnellere Rückkopplung über die Auswirkungen von Änderungen auf die Qualität ihres Projekts.

Abhängig von der Art der Produkte und der Art der auszuführenden Tests bietet sich die KI-gestützte Technik von Parasoft zur Optimierung der Ausführung von Java-Unit-Tests, Selenium-Web-UI-Tests und API-Tests an.

 

Der Autor

 

passend zum Thema

Igor Kirilenko von Parasoft
Igor Kirilenko von Parasoft.
© Parasoft

Igor Kirilenko

ist als VP of Development bei Parasoft für die technische Strategie, Architektur und Entwicklung der Parasoft-Produkte verantwortlich. Er verfügt über mehr als 20 Jahre Erfahrung in der Leitung von Entwicklungsteams, mit einer Spezialisierung auf die Einführung und Förderung der besten agilen Praktiken in Umgebungen für Softwareentwicklung.


  1. Künstliche Intelligenz für den Softwaretest
  2. Automatisiertes Erstellen und Parametrisieren von Unit-Tests mit KI

Lesen Sie mehr zum Thema


Das könnte Sie auch interessieren

Jetzt kostenfreie Newsletter bestellen!

Weitere Artikel zu Parasoft Corp.

Weitere Artikel zu Parasoft

Weitere Artikel zu Entwicklungswerkzeuge

Weitere Artikel zu Echtzeit-/Embedded Software