Simple Science

Hochmoderne Wissenschaft einfach erklärt

# Computerwissenschaften# Software-Entwicklung# Kryptographie und Sicherheit

Automatisierung von Deep Learning Tests: Ein neuer Ansatz

Diese Technik verbessert die Generierung von Testfällen für Deep-Learning-Anwendungen.

― 6 min Lesedauer


Neue Technik imNeue Technik imDL-TestingDeep-Learning-Operatoren.Revolutioniere die Fehlersuche in
Inhaltsverzeichnis

Deep Learning (DL) wird heute in vielen Bereichen eingesetzt, zum Beispiel bei der Bilderkennung und der Sprachverarbeitung. Anwendungen nutzen Bibliotheken, die helfen, DL-Modelle zu erstellen und auszuführen. Im Kern dieser Bibliotheken stehen DL-Operatoren, die für Berechnungen auf mehrdimensionalen Daten, bekannt als Tensoren, unerlässlich sind. Aber wie jede Software können auch diese Operatoren Bugs haben, was zu grossen Problemen führen kann. Deshalb ist Testen ein entscheidender Teil, um die Qualität und Zuverlässigkeit von Deep-Learning-Anwendungen sicherzustellen.

Die Bedeutung von Tests im Deep Learning

Bugs in DL-Operatoren können grosse Auswirkungen haben, da sie oft mit Speicherfehlern und potenziellen Sicherheitsrisiken zu tun haben. Testen ist eine der Methoden, um diese Bugs zu finden und zu beheben. Damit das Testen effektiv ist, müssen Testfälle generiert werden, die die ersten Prüfungen bestehen und die tatsächliche Funktion der Operatoren erreichen. Das erfordert ein Verständnis der Einschränkungen, die gültige Eingaben für die Operatoren definieren, und hier entstehen Probleme.

Früher erforderten Techniken zur Extraktion dieser Einschränkungen entweder viel manuelle Arbeit oder basierten auf Dokumentationen, die möglicherweise nicht vollständig mit dem tatsächlichen Code übereinstimmen. Das kann dazu führen, dass unvollständige oder falsche Einschränkungen verwendet werden, was es schwierig macht, qualitativ hochwertige Testfälle zu generieren.

Herausforderungen bei traditionellen Testmethoden

Bestehende Methoden stossen oft auf Probleme, weil sie darauf angewiesen sind, dass Menschen Eingabebeschränkungen bereitstellen oder eine detaillierte Dokumentation des Codes erforderlich ist, die nicht immer verfügbar ist. Das kann dazu führen, dass komplexe Einschränkungen übersehen werden oder Testfälle produziert werden, die keine gültigen Eingaben darstellen. Infolgedessen kann das Finden von Bugs in der tatsächlichen Funktion der DL-Operatoren eine schwierige Aufgabe werden.

Viele der aktuellen Lösungen haben Schwierigkeiten mit Skalierbarkeit und Komplexität, insbesondere bei grossen Codebasen und komplexen Eingabewalidierungslogik. Das macht sie weniger effektiv für Deep-Learning-Bibliotheken, wo die zugrunde liegende Logik der Operatoren ziemlich komplex sein kann.

Automatisierte Einschränkungsextraktion

Um diese Herausforderungen zu bewältigen, stellen wir eine neue Technik vor, die automatisch Eingabebeschränkungen aus dem Code von DL-Operatoren extrahiert. Diese Technik zielt darauf ab, vielfältige und gültige Testfälle zu generieren, die effektiv Bugs in der grundlegenden Funktionslogik der Operatoren identifizieren.

Der Prozess besteht aus ein paar wesentlichen Schritten:

  1. Informationen sammeln: Das Tool sammelt zuerst grundlegende Informationen über die DL-Operatoren aus dem Quellcode.
  2. Eingabewalidierungscode identifizieren: Dann verfolgt es den Kontrollfluss im Code des Operators, um Bereiche zu finden, in denen Eingabewalidierung erfolgt. Das ist entscheidend, da der Eingabewalidierungscode normalerweise die Logik zur Überprüfung der Gültigkeit der Eingaben vor der Verarbeitung enthält.
  3. Einschränkungen extrahieren: Nachdem die relevanten Codeabschnitte identifiziert wurden, extrahiert das Tool die Einschränkungen, die mit diesen Eingaben verbunden sind.

Durch die Automatisierung dieser Schritte können wir qualitativ hochwertige Testfälle effizienter generieren, was zur Entdeckung von mehr Bugs führt.

Schritte für effektives Testen

Schritt 1: Informationen über Operatoren sammeln

Der erste Schritt besteht darin, Metadaten über die DL-Operatoren zu sammeln, einschliesslich ihrer Namen, Parameter und Typen. Diese Informationen dienen als Grundlage für die späteren Phasen.

Schritt 2: Eingabewalidierungslogik identifizieren

Als nächstes sucht das Tool nach Eingabewalidierungslogik, indem es von den Fehlerbehandlungsabschnitten des Codes rückwärts arbeitet. Dieser Prozess umfasst den Aufbau eines Kontrollflussdiagramms, das hilft, zu visualisieren, wie verschiedene Teile des Codes interagieren. Ziel ist es, die Teile des Codes zu identifizieren, die überprüfen, ob Eingaben gültig sind.

Schritt 3: Einschränkungen extrahieren

Sobald die Eingabewalidierungswege identifiziert sind, extrahiert das Tool Einschränkungen, die mit benutzerkontrollierbaren Eingaben verknüpft sind. Das bedeutet, dass nur auf die Werte gefokussiert wird, die die Funktion der DL-Operatoren beeinflussen. Ein allgemeines Modell und spezifische Regeln leiten diesen Extraktionsprozess, sodass relevante Einschränkungen identifiziert werden können, ohne unnötige Werte zu berücksichtigen.

Schritt 4: Testfälle generieren

Nach der Extraktion der Einschränkungen nutzt das Tool diese, um Testfälle zu generieren. Dabei wird ein EinschränkungsSolver verwendet, um gültige Eingabewerte zu erzeugen, die den extrahierten Einschränkungen entsprechen, während auch Zufälligkeit eingeführt wird, um die Vielfalt der Testfälle zu gewährleisten. Der letzte Schritt beinhaltet die Ausführung dieser generierten Testfälle gegen die Operatoren, um auf Abstürze oder unerwartetes Verhalten zu überwachen.

Experimentelle Ergebnisse

Bewertung der vorgeschlagenen Technik

Um die Effektivität dieser neuen Technik zur Einschränkungsextraktion zu bewerten, wurden Tests an zwei weit verbreiteten DL-Bibliotheken durchgeführt: TensorFlow und PyTorch. Die Ergebnisse waren vielversprechend. Das Tool konnte Einschränkungen mit deutlich höherer Qualität extrahieren als bestehende Methoden.

Insbesondere extrahierte es 96,4 % mehr Einschränkungen als die führenden Methoden. Diese Verbesserung ermöglicht die Generierung besserer Testfälle, die mehr Wege in der Operatorlogik abdecken. Die generierten Testfälle waren wahrscheinlicher, die Eingabewalidierungsprüfungen zu bestehen und Bugs in den zugrunde liegenden Funktionen der DL-Operatoren aufzudecken.

Bug-Erkennungsfähigkeit

Eine der wichtigsten Kennzahlen für Testwerkzeuge ist ihre Fähigkeit zur Erkennung von Bugs. In den Experimenten fand die neue Technik 108 zuvor unbekannte Bugs in den getesteten Bibliotheken, von denen 87 von den Entwicklern bestätigt wurden. Fünf dieser Bugs waren ernst genug, um formelle Sicherheitsidentifikatoren zu erhalten, wegen ihrer potenziellen Auswirkungen.

Im Vergleich der neuen Technik mit anderen modernen Methoden zeigte sich, dass sie diese erheblich übertraf, indem sie zwischen 1,95 und 55 Mal mehr Bugs in verschiedenen Kategorien entdeckte. Das demonstriert klar den Wert der automatisierten Einschränkungsextraktion zur Verbesserung des Testprozesses für Deep-Learning-Anwendungen.

Fallstudien

Beispielanalyse von Conv2D

Um die Fähigkeit dieser Technik weiter zu veranschaulichen, wurde ein spezifischer Operator, Conv2D aus TensorFlow, untersucht. Dieser Operator hat mehrere Parameter mit komplexen Eingabewalidierungsregeln. Das Tool erzeugte erfolgreich Testfälle, die alle Validierungsprüfungen bestanden und Bugs entdeckten, die tief in der Kernlogik des Operators lagen. Eine solche detaillierte Analyse ist ein Beweis für die Effektivität der automatisierten Einschränkungsextraktion.

Auswirkungen auf zukünftige Forschung

Die Ergebnisse eröffnen Möglichkeiten für weitere Forschungen zu automatisierten Testtechniken für Deep-Learning-Anwendungen. Die Fähigkeit, automatisch effektive Testfälle zu generieren, kann die Arbeitslast für Entwickler erheblich verringern und die Gesamtqualität und Zuverlässigkeit von Deep-Learning-Modellen verbessern.

Ausserdem wird es notwendig sein, diese Techniken kontinuierlich zu verfeinern, um mit den Anforderungen der Industrie Schritt zu halten, da immer fortschrittlichere und komplexere DL-Operatoren entstehen. Zukünftige Arbeiten könnten erkunden, wie man den automatisierten Ansatz auf eine breitere Palette von DL-Bibliotheken ausdehnen und anpassen kann, um zusätzliche Arten von Bugs über Abstürze hinaus zu verfolgen.

Fazit

Zusammenfassend ist das Testen von Deep-Learning-Operatoren entscheidend, um die Zuverlässigkeit und Sicherheit von Anwendungen sicherzustellen. Aktuelle Methoden stehen vor Herausforderungen durch manuelle Einschränkungsextraktion und Probleme mit der Skalierbarkeit, was zu möglichen Übersehen von Bugs führen kann. Die hier vorgeschlagene Technik zur automatisierten Einschränkungsextraktion adressiert diese Herausforderungen effektiv. Sie verbessert erheblich die Fähigkeit, gültige Testfälle zu generieren, und damit die Erkennungsraten von Bugs.

Während sich die Technologie weiterentwickelt, wird die Anwendung solcher automatisierten Techniken entscheidend sein, um die Integrität von Deep-Learning-Systemen aufrechtzuerhalten und zu sichereren sowie zuverlässigeren Anwendungen in verschiedenen Bereichen beizutragen.

Originalquelle

Titel: ACETest: Automated Constraint Extraction for Testing Deep Learning Operators

Zusammenfassung: Deep learning (DL) applications are prevalent nowadays as they can help with multiple tasks. DL libraries are essential for building DL applications. Furthermore, DL operators are the important building blocks of the DL libraries, that compute the multi-dimensional data (tensors). Therefore, bugs in DL operators can have great impacts. Testing is a practical approach for detecting bugs in DL operators. In order to test DL operators effectively, it is essential that the test cases pass the input validity check and are able to reach the core function logic of the operators. Hence, extracting the input validation constraints is required for generating high-quality test cases. Existing techniques rely on either human effort or documentation of DL library APIs to extract the constraints. They cannot extract complex constraints and the extracted constraints may differ from the actual code implementation. To address the challenge, we propose ACETest, a technique to automatically extract input validation constraints from the code to build valid yet diverse test cases which can effectively unveil bugs in the core function logic of DL operators. For this purpose, ACETest can automatically identify the input validation code in DL operators, extract the related constraints and generate test cases according to the constraints. The experimental results on popular DL libraries, TensorFlow and PyTorch, demonstrate that ACETest can extract constraints with higher quality than state-of-the-art (SOTA) techniques. Moreover, ACETest is capable of extracting 96.4% more constraints and detecting 1.95 to 55 times more bugs than SOTA techniques. In total, we have used ACETest to detect 108 previously unknown bugs on TensorFlow and PyTorch, with 87 of them confirmed by the developers. Lastly, five of the bugs were assigned with CVE IDs due to their security impacts.

Autoren: Jingyi Shi, Yang Xiao, Yuekang Li, Yeting Li, Dongsong Yu, Chendong Yu, Hui Su, Yufeng Chen, Wei Huo

Letzte Aktualisierung: 2023-06-04 00:00:00

Sprache: English

Quell-URL: https://arxiv.org/abs/2305.17914

Quell-PDF: https://arxiv.org/pdf/2305.17914

Lizenz: https://creativecommons.org/licenses/by/4.0/

Änderungen: Diese Zusammenfassung wurde mit Unterstützung von AI erstellt und kann Ungenauigkeiten enthalten. Genaue Informationen entnehmen Sie bitte den hier verlinkten Originaldokumenten.

Vielen Dank an arxiv für die Nutzung seiner Open-Access-Interoperabilität.

Mehr von den Autoren

Ähnliche Artikel