DE102022202542A1 - Method for testing a computer program - Google Patents

Method for testing a computer program Download PDF

Info

Publication number
DE102022202542A1
DE102022202542A1 DE102022202542.3A DE102022202542A DE102022202542A1 DE 102022202542 A1 DE102022202542 A1 DE 102022202542A1 DE 102022202542 A DE102022202542 A DE 102022202542A DE 102022202542 A1 DE102022202542 A1 DE 102022202542A1
Authority
DE
Germany
Prior art keywords
input data
computer program
representations
data set
program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102022202542.3A
Other languages
German (de)
Inventor
Martin Ring
Irina Nicolae
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Robert Bosch GmbH
Original Assignee
Robert Bosch GmbH
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Robert Bosch GmbH filed Critical Robert Bosch GmbH
Priority to DE102022202542.3A priority Critical patent/DE102022202542A1/en
Priority to CN202310259875.2A priority patent/CN116775455A/en
Publication of DE102022202542A1 publication Critical patent/DE102022202542A1/en
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • G06N3/0455Auto-encoder networks; Encoder-decoder networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0475Generative networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Biomedical Technology (AREA)
  • Computational Linguistics (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Software Systems (AREA)
  • Biophysics (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Debugging And Monitoring (AREA)

Abstract

Gemäß verschiedenen Ausführungsformen wird ein Verfahren zum Testen eines Computerprogramms beschrieben, aufweisend Ausführen des Computerprogramms für jeden Eingabedatensatz für das Computerprogramm einer Vielzahl von Eingabedatensätzen und jeweils Ermitteln einer Abdeckung des Computerprogramms, die mit bei der Ausführung des Computerprogramms für den jeweiligen Eingabedatensatz erreicht wurde, Erzeugen, für jeden Eingabedatensatz, eines Trainingsdatenelements, das die für den Eingabedatensatz ermittelte Abdeckung als Trainingseingabe und den Eingabedatensatz als Zielausgabe enthält, Trainieren eines maschinellen Lernmodells mittels überwachten Lernens unter Verwendung der erzeugen Trainingsdatenelemente, wobei das maschinelle Lernmodell einen Kodierer gefolgt von einem Dekodierer aufweist, wobei der Kodierer eingerichtet ist, aus Abdeckungen Repräsentationen in einem Repräsentationsraum zu erzeugen und der Dekodierer eingerichtet ist, aus ihm zugeführten Repräsentationen aus dem Repräsentationsraum Eingabedatensätze für das Computerprogramm zu erzeugen, Auswählen von Repräsentationen aus dem Repräsentationsraum, Erzeugen von zusätzlichen Eingabedatensätzen durch Zuführen der ausgewählten Repräsentationen zu dem Dekodierer und Testen des Computerprogramms durch Ausführen des Computerprogramms für die zusätzlichen Eingabedatensätze.According to various embodiments, a method for testing a computer program is described, comprising executing the computer program for each input data set for the computer program of a plurality of input data sets and in each case determining a coverage of the computer program that was achieved when executing the computer program for the respective input data set, generating, for each input data set, a training data element containing the coverage determined for the input data set as training input and the input data set as target output, training a machine learning model using supervised learning using the generated training data elements, the machine learning model having an encoder followed by a decoder, wherein the The encoder is set up to generate representations in a representation space from covers and the decoder is set up to generate input data sets for the computer program from representations supplied to it from the representation space, selecting representations from the representation space, generating additional input data sets by supplying the selected representations to the Decoder and test the computer program by running the computer program on the additional input data sets.

Description

Stand der TechnikState of the art

Die vorliegende Offenbarung bezieht sich auf Verfahren zum Testen von Computerprogrammen.The present disclosure relates to methods for testing computer programs.

Ein wesentlicher Bestandteil der Entwicklung von Softwareanwendungen ist das Testen. Insbesondere sollten Fehler, die zum Versagen einer Anwendung führen, identifiziert und korrigiert werden. Ein Beispiel für das Testen von Software ist das dynamische Software-Testverfahren Fuzzing.An essential part of developing software applications is testing. In particular, errors that cause an application to fail should be identified and corrected. An example of software testing is the dynamic software testing method fuzzing.

Fuzzing ermöglicht effizientes Testen mit guter Testabdeckung, sein Einsatz ist jedoch schwierig für zustandsbehaftete Computerprogramme, d.h. Computerprogramme, die einen internen Speicherzustand speichern, insbesondere aus dem Grund, dass typischerweise nicht bekannt ist, welche Zustände ein jeweiliges Computerprogramm annehmen kann.Fuzzing enables efficient testing with good test coverage, but its use is difficult for stateful computer programs, i.e. computer programs that store an internal memory state, especially for the reason that it is typically not known which states a given computer program can assume.

Es sind deshalb Herangehensweisen wünschenswert, die es ermöglichen, das Verhalten eines Computerprogramms in verschiedenen Zuständen zu Testen (z.B. mittels Fuzzing) bzw. die Zustände des Computerprogramms zu erforschen, wenn diese nicht explizit bekannt sind.It is therefore desirable to have approaches that make it possible to test the behavior of a computer program in different states (e.g. using fuzzing) or to research the states of the computer program if these are not explicitly known.

Offenbarung der ErfindungDisclosure of the invention

Gemäß verschiedenen Ausführungsformen wird ein Verfahren zum Testen eines Computerprogramms bereitgestellt, aufweisend Ausführen des Computerprogramms für jeden Eingabedatensatz für das Computerprogramm einer Vielzahl von Eingabedatensätzen und jeweils Ermitteln einer Abdeckung des Computerprogramms, die mit bei der Ausführung des Computerprogramms für den jeweiligen Eingabedatensatz erreicht wurde, Erzeugen, für jeden Eingabedatensatz, eines Trainingsdatenelements, das die für den Eingabedatensatz ermittelte Abdeckung als Trainingseingabe und den Eingabedatensatz als Zielausgabe enthält, Trainieren eines maschinellen Lernmodells mittels überwachten Lernens unter Verwendung der erzeugen Trainingsdatenelemente, wobei das maschinelle Lernmodell einen Kodierer gefolgt von einem Dekodierer aufweist, wobei der Kodierer eingerichtet ist, aus Abdeckungen Repräsentationen in einem Repräsentationsraum zu erzeugen und der Dekodierer eingerichtet ist, aus ihm zugeführten Repräsentationen aus dem Repräsentationsraum Eingabedatensätze für das Computerprogramm zu erzeugen, Auswählen von Repräsentationen aus dem Repräsentationsraum, Erzeugen von zusätzlichen Eingabedatensätzen durch Zuführen der ausgewählten Repräsentationen zu dem Dekodierer und Testen des Computerprogramms durch Ausführen des Computerprogramms für die erzeugten zusätzlichen Eingabedatensätze.According to various embodiments, a method for testing a computer program is provided, comprising executing the computer program for each input data set for the computer program of a plurality of input data sets and in each case determining a coverage of the computer program that was achieved when executing the computer program for the respective input data set, generating, for each input data set, a training data element containing the coverage determined for the input data set as training input and the input data set as target output, training a machine learning model using supervised learning using the generated training data elements, the machine learning model having an encoder followed by a decoder, wherein the The encoder is set up to generate representations in a representation space from covers and the decoder is set up to generate input data sets for the computer program from representations supplied to it from the representation space, selecting representations from the representation space, generating additional input data sets by supplying the selected representations to the Decoder and test the computer program by executing the computer program on the additional input data sets generated.

Das oben beschriebene Verfahren ermöglicht die Erfassung der Zustandsabhängigkeit eines Computerprogramms aus Daten, die während der Ausführung des Computerprogramms beobachtet werden und die Nutzung dieses Wissens für das Testen des Computerprogramms ohne vorheriges Wissen über die Zustände des Computerprogramms.The method described above enables the state dependence of a computer program to be captured from data observed during execution of the computer program and the use of this knowledge to test the computer program without prior knowledge of the states of the computer program.

Dabei werden neue Testfälle auf der Grundlage der intrinsischen generativen Fähigkeit des ML-Modells (d.h. des maschinellen Lernmodells) erzeugt, ohne dass von einem Benutzer entwickelte Testfall-Mutationsstrategien erforderlich sind.It creates new test cases based on the intrinsic generative capability of the ML model (i.e. machine learning model) without the need for user-developed test case mutation strategies.

Im Folgenden werden verschiedene Ausführungsbeispiele angegeben.Various exemplary embodiments are given below.

Ausführungsbeispiel 1 ist ein Verfahren zum Testen eines Computerprogramms, wie oben beschrieben.Embodiment 1 is a method for testing a computer program as described above.

Ausführungsbeispiel 2 ist das Verfahren nach Ausführungsbeispiel 1, wobei die Repräsentationen aus dem Repräsentationsraum zufällig ausgewählt werden.Embodiment 2 is the method according to embodiment 1, where the representations are randomly selected from the representation space.

Repräsentationen werden in anderen Worten aus dem Repräsentationsraum gesampelt. Da nach dem Training erwartet werden kann, dass unterschiedliche Repräsentationen unterschiedlichen Zuständen des Programmes entsprechen, können so mit den zusätzlichen Eingabedatensätzen mit hoher Wahrscheinlichkeit bisher beim Testen noch nicht erreichte Zustände erreicht werden.In other words, representations are sampled from the representation space. Since it can be expected after training that different representations correspond to different states of the program, states that have not yet been reached during testing can be achieved with a high degree of probability with the additional input data sets.

Ausführungsbeispiel 3 ist das Verfahren nach Ausführungsbeispiel 1 oder 2, wobei andere Repräsentationen aus dem Repräsentationsraum ausgewählt werden als die, auf die der Kodierer die Abdeckungen der Trainingsdatenelemente abbildet.Embodiment 3 is the method according to embodiment 1 or 2, with representations other than those onto which the encoder maps the coverages of the training data elements being selected from the representation space.

Beispielsweise können die bekannten Repräsentationen, also die auf die der Kodierer die Abdeckungen der Trainingsdatenelemente abbildet, zufällig mittels Rauschen gestört werden. Damit werden durch die von dem Dekodierer aus den ausgewählten Repräsentationen erzeugten zusätzlichen Eingabedatensätzen mit hoher Wahrscheinlichkeit bisher unerforschte (nicht getestete) Zustände des Computerprogramms erreicht und getestet.For example, the known representations, i.e. those onto which the encoder maps the coverages of the training data elements, can be randomly disturbed using noise. This means that previously unexplored (untested) states of the computer program are most likely reached and tested by the additional input data sets generated by the decoder from the selected representations.

Ausführungsbeispiel 4 ist das Verfahren nach einem der Ausführungsbeispiele 1 bis 3, wobei das maschinelle Lernmodell ein Variations-Autoencoder ist.Embodiment 4 is the method according to one of embodiments 1 to 3, where the machine learning model is a variational autoencoder.

Das Training eines Variations-Autoencoder (engl. variational autoencoder, VAE) bewirkt, dass der Kodierer so auf den Repräsentationsraum abbildet, dass der Repräsentationsraum zu großen Teilen in dem Sinne sinnvoll strukturiert ist, dass aus diesen Teilen beliebig ausgewählte Repräsentationen durch den Dekodierer auf sinnvolle Eingabedatensätze abgebildet werden. Damit können für das Testen des Computerprogramms nützliche Eingabedatensätze erzeugt werden.The training of a variational autoencoder (VAE) causes the encoder to map onto the representation space in such a way that the representation space is largely structured in a meaningful way in the sense that representations selected from these parts can be interpreted in a meaningful way by the decoder Input data sets are mapped. This allows useful input data sets to be generated for testing the computer program.

Ausführungsbeispiel 5 ist das Verfahren nach einem der Ausführungsbeispiele 1 bis 4, wobei jeder Eingabedatensatz für das Computerprogramm eine Sequenz von Eingabedatenelementen für das Computerprogramm aufweist und das Ausführen des Computerprogramms für den Eingabedatensatz eine Ausführen des Computerprogramms aufweist, wobei die Eingabedatenelemente gemäß der Sequenz dem Computerprogramm sequentiell zugeführt werden.Embodiment 5 is the method according to one of embodiments 1 to 4, wherein each input data set for the computer program has a sequence of input data elements for the computer program and executing the computer program for the input data set comprises executing the computer program, the input data elements sequentially according to the sequence of the computer program be supplied.

Auf diese Weise kann mit frühen Elementen der Sequenz ein bestimmter Zustand erreicht werden, der durch die weiteren Elemente der Sequenz genauer erforscht wird.In this way, a certain state can be achieved with early elements of the sequence, which is explored in more detail by the further elements of the sequence.

Ausführungsbeispiel 6 ist das Verfahren nach einem der Ausführungsbeispiele 1 bis 5, wobei der Repräsentationsraum mehrdimensional ist, wobei das maschinelle Lernmodell derart trainiert wird, dass es Repräsentationen von Abdeckungen in entwirrter Form lernt und wobei das Auswählen der Repräsentationen aus dem Repräsentationsraum durch Setzen das Setzen von Komponenten der Repräsentationen in ausgewählten Dimensionen erfolgt.Embodiment 6 is the method according to any one of embodiments 1 to 5, wherein the representation space is multidimensional, wherein the machine learning model is trained to learn representations of covers in disentangled form, and wherein selecting the representations from the representation space by setting means setting Components of the representations take place in selected dimensions.

Dadurch können Zustände (oder zumindest Bereiche von Zuständen) des Computerprogramms in einem gewissen Maß gezielt erreicht werden.This allows states (or at least areas of states) of the computer program to be achieved in a targeted manner to a certain extent.

Ausführungsbeispiel 7 ist ein Software-Testsystem, das eingerichtet ist, ein Verfahren nach einem der Ausführungsbeispiele 1 bis 6 durchzuführen.Embodiment 7 is a software test system that is set up to carry out a method according to one of embodiments 1 to 6.

Ausführungsbeispiel 8 ist ein Computerprogramm mit Befehlen, die, wenn sie durch einen Prozessor ausgeführt werden, bewirken, dass der Prozessor ein Verfahren nach einem der Ausführungsbeispiele 1 bis 6 durchführt.Embodiment 8 is a computer program with instructions that, when executed by a processor, cause the processor to perform a method according to any of Embodiments 1 to 6.

Ausführungsbeispiel 9 ist ein Computerlesbares Medium, das Befehle speichert, die, wenn sie durch einen Prozessor ausgeführt werden, bewirken, dass der Prozessor ein Verfahren nach einem der Ausführungsbeispiele 1 bis 6 durchführt.Embodiment 9 is a computer-readable medium that stores instructions that, when executed by a processor, cause the processor to perform a method according to any of Embodiments 1 to 6.

In den Zeichnungen beziehen sich ähnliche Bezugszeichen im Allgemeinen auf dieselben Teile in den ganzen verschiedenen Ansichten. Die Zeichnungen sind nicht notwendigerweise maßstäblich, wobei die Betonung stattdessen im Allgemeinen auf die Darstellung der Prinzipien der Erfindung gelegt wird. In der folgenden Beschreibung werden verschiedene Aspekte mit Bezug auf die folgenden Zeichnungen beschrieben.

  • 1 zeigt einen Computer für die Entwicklung und/oder das Testen von Softwareanwendungen.
  • 2 zeigt eine Anordnung zum Testen eines Fuzz-Targets mittels eines Fuzzers.
  • 3 zeigt ein ML-Modell gemäß einer Ausführungsform.
  • 4 zeigt ein Ablaufdiagramm, das ein Verfahren zum Testen eines Computerprogramms gemäß einer Ausführungsform darstellt.
In the drawings, similar reference numbers generally refer to the same parts throughout the several views. The drawings are not necessarily to scale, emphasis instead being placed generally on illustrating the principles of the invention. In the following description, various aspects will be described with reference to the following drawings.
  • 1 shows a computer for developing and/or testing software applications.
  • 2 shows an arrangement for testing a fuzz target using a fuzzer.
  • 3 shows an ML model according to an embodiment.
  • 4 shows a flowchart illustrating a method for testing a computer program according to an embodiment.

Die folgende ausführliche Beschreibung bezieht sich auf die begleitenden Zeichnungen, die zur Erläuterung spezielle Details und Aspekte dieser Offenbarung zeigen, in denen die Erfindung ausgeführt werden kann. Andere Aspekte können verwendet werden und strukturelle, logische und elektrische Änderungen können durchgeführt werden, ohne vom Schutzbereich der Erfindung abzuweichen. Die verschiedenen Aspekte dieser Offenbarung schließen sich nicht notwendigerweise gegenseitig aus, da einige Aspekte dieser Offenbarung mit einem oder mehreren anderen Aspekten dieser Offenbarung kombiniert werden können, um neue Aspekte zu bilden.The following detailed description refers to the accompanying drawings, which show by way of explanation specific details and aspects of this disclosure in which the invention may be practiced. Other aspects may be used and structural, logical and electrical changes may be made without departing from the scope of the invention. The various aspects of this disclosure are not necessarily mutually exclusive, as some aspects of this disclosure may be combined with one or more other aspects of this disclosure to form new aspects.

Im Folgenden werden verschiedene Beispiele genauer beschrieben.Various examples are described in more detail below.

1 zeigt einen Computer 100 für die Entwicklung und/oder das Testen von Softwareanwendungen. 1 shows a computer 100 for developing and/or testing software applications.

Der Computer 100 weist eine CPU (Central Processing Unit) 101 und einen Arbeitsspeicher (RAM) 102 auf. Der Arbeitsspeicher 102 wird zum Laden von Programmcode verwendet, z.B. von einer Festplatte 103, und die CPU 101 führt den Programmcode aus.The computer 100 has a CPU (Central Processing Unit) 101 and a main memory (RAM) 102. The main memory 102 is used to load program code, for example from a hard drive 103, and the CPU 101 executes the program code.

Im vorliegenden Beispiel wird davon ausgegangen, dass ein Benutzer beabsichtigt, mit dem Computer 100 eine Softwareanwendung zu entwickeln und/oder zu testen.This example assumes that a user intends to use computer 100 to develop and/or test a software application.

Dazu führt der Benutzer eine Softwareentwicklungsumgebung 104 auf der CPU 101 aus.To do this, the user runs a software development environment 104 on the CPU 101.

Die Softwareentwicklungsumgebung 104 ermöglicht es dem Benutzer, eine Anwendung (d.h. eine Software) 105 für verschiedene Geräte 106, also ein Ziel-Hardware, wie eingebettete Systeme zum Steuern von Robotervorrichtungen, inklusive Roboterarme und autonome Fahrzeuge, oder auch für mobile (Kommunikations-)Geräte, zu entwickeln und zu testen. Dazu kann die CPU 101 als Teil der Softwareentwicklungsumgebung 104 einen Emulator ausführen, um das Verhalten des jeweiligen Geräts 106 zu simulieren, für das eine Anwendung entwickelt wird oder wurde. Wird sie nur zum Testen einer Software aus anderer Quelle eingesetzt, kann die Softwareentwicklungsumgebung 104 auch als Softwaretestumgebung angesehen werden bzw. ausgestaltet sein.The software development environment 104 allows the user to create an application (ie, software) 105 for various devices 106, i.e. target hardware, such as embedded systems for controlling robotic devices, including robotic arms and autonomous vehicles, or even for mobile (communications) devices , develop and test. For this purpose, the CPU 101 can run an emulator as part of the software development environment 104 to simulate the behavior of the respective device 106 for which an application is or was developed. If it is only used to test software from another source, the software development environment 104 can also be viewed or designed as a software testing environment.

Der Benutzer kann die fertige Anwendung über ein Kommunikationsnetzwerk 107 an entsprechende Geräte 106 verteilen. Statt über ein Kommunikationsnetzwerk 107 kann dies auch auf andere Weise erfolgen, beispielsweise mittels eines USB-Sticks.The user can distribute the finished application to corresponding devices 106 via a communication network 107. Instead of via a communication network 107, this can also be done in another way, for example using a USB stick.

Bevor dies geschieht, sollte der Benutzer jedoch die Anwendung 105 testen, um zu vermeiden, dass eine nicht ordnungsgemäß funktionierende Anwendung an die Geräte 106 verteilt wird. Dies kann auch der Fall sein, wenn der Benutzer die Anwendung 105 nicht selbst auf dem Computer 100 geschrieben hat. Insbesondere kann der Fall auftreten, dass der Benutzer nicht über den Quellcode der Anwendung, sondern lediglich über ihren ausführbaren Code (d.h. das Binärprogramm) verfügt.However, before this happens, the user should test the application 105 to avoid distributing an improperly functioning application to the devices 106. This can also be the case if the user did not write the application 105 himself on the computer 100. In particular, the case may arise that the user does not have the source code of the application, but only its executable code (i.e. the binary program).

Ein Testverfahren ist das sogenannte Fuzzing. Fuzzing oder Fuzz-Testing ist ein automatisiertes Software-Testverfahren, bei dem einem zu testenden Computerprogramm ungültige, unerwartete oder zufällige Daten als Eingaben zugeführt werden. Das Programm wird dann auf Ausnahmen wie Abstürze, fehlende fehlgeschlagene integrierte Code-Assertions oder potenzielle Speicherlecks hin überwacht.One test method is so-called fuzzing. Fuzzing or fuzz testing is an automated software testing procedure in which invalid, unexpected or random data is fed as input to a computer program under test. The program is then monitored for exceptions such as crashes, missing failed built-in code assertions, or potential memory leaks.

Typischerweise werden Fuzzers (d.h. Testprogramme, die Fuzzing verwenden) zum Testen von Programmen verwendet, die strukturierte Eingaben verarbeiten. Diese Struktur ist z. B. in einem Dateiformat oder einem Dateiformat oder Protokoll spezifiziert und unterscheidet zwischen gültigen und ungültigen Eingaben. Ein effektiver Fuzzer erzeugt halb-gültige Eingaben die „gültig genug“ sind, um nicht direkt vom Eingabeparser des zu testenden Programms zurückgewiesen zu werden, aber „ungültig genug“ sind, um unerwartete Verhaltensweisen und Grenzfälle aufzudecken, die im zu testenden Programm nicht richtig behandelt werden.Typically, fuzzers (i.e. test programs that use fuzzing) are used to test programs that process structured input. This structure is e.g. B. specified in a file format or a file format or protocol and distinguishes between valid and invalid inputs. An effective fuzzer produces semi-valid inputs that are "valid enough" not to be directly rejected by the program under test's input parser, but "invalid enough" to reveal unexpected behaviors and edge cases that are not properly handled in the program under test become.

Im Folgenden wird im Zusammenhang mit Fuzzing verwendete Terminologie beschrieben:

  • • Fuzzing oder Fuzz-Testing ist der automatisierte Test-Prozess, zufällig generierte Eingaben an ein Zielprogramm (zu testendes Programm) zu senden und seine Reaktion zu beobachten.
  • • Ein Fuzzer oder eine Fuzzing-Engine ist ein Programm, das automatisch Eingaben generiert. Es ist also nicht mit der zu testenden Software verknüpft (z.B. durch Instrumentierung). Der Fuzzer hat jedoch die Fähigkeit, Code zu instrumentieren, Testfälle zu erzeugen und zu testende Programme auszuführen. Bekannte Beispiele sind afl und libfuzzer.
  • • Ein Fuzz-Target ist ein Softwareprogramm oder eine Funktion, die durch Fuzzing getestet werden soll. Ein Hauptmerkmal eines Fuzz-Targets sollte sein, dass es potenziell nicht vertrauenswürdige Eingaben annimmt, die vom Fuzzer während des während des Fuzzing-Prozesses erzeugt wird.
  • • Ein Fuzz-Test ist die kombinierte Version eines Fuzzers und eines Fuzz-Targets. Ein Fuzz-Target kann dann instrumentierter Code sein, bei dem ein Fuzzer mit seinen Eingaben verknüpft ist (d.h. diese liefert). Ein Fuzz-Test ist ausführbar. Ein Fuzzer kann auch mehrere Fuzz-Tests starten, beobachten und stoppen, d.h. mehrere Testdurchläufe durchführen (normalerweise Hunderte oder Tausende pro Sekunde), jeder mit einer etwas anderen Eingabe, die vom Fuzzer erzeugt wird.
  • • Ein Testfall ist eine bestimmte Eingabe und ein bestimmter Testdurchlauf aus einem Fuzz-Test. Normalerweise werden für die Reproduzierbarkeit interessante Läufe (Finden von neuen Codepfaden oder Abstürzen) gespeichert. Auf diese Weise kann ein bestimmter Testfall mit der entsprechenden Eingabe auch auf einem Fuzz-Target ausgeführt werden, das nicht mit einem Fuzzer verbunden ist, z.B. die Release-Version eines Programms.
  • • Abdeckungsgesteuertes Fuzzing (engl. coverage-guided fuzzing) verwendet Code-Abdeckungsinformationen als Feedback während des Fuzzings, um zu erkennen, ob eine Eingabe die Ausführung neuer Code-Pfade oder Blöcke verursacht hat.
  • • Generator-basiertes Fuzzing (engl. generation-based fuzzing) verwendet vorheriges Wissen über das Zielprogramm (Fuzz-Target), um Testeingaben zu erstellen. Ein Beispiel für ein solches Vorwissen ist eine Grammatik, die der Eingabespezifikation des Fuzz-Targets entspricht, d.h. die Eingabe-Grammatik des Fuzz-Targets (d.h. des zu testenden Programms).
  • • Statische Instrumentierung ist das Einfügen von Anweisungen in ein (zu testendes) Programm, um Feedback über die Ausführung zu erhalten. Sie wird meist durch den Compiler realisiert und kann zum Beispiel die erreichten Codeblöcke während der Ausführung angeben.
  • • Dynamische Instrumentierung ist die Steuerung der Ausführung eines (zu testenden) Programms während der Laufzeit, um Feedback aus der Ausführung zu generieren. Sie wird meist durch Betriebssystem-Systemfunktionalitäten oder durch die Verwendung von Emulatoren realisiert.
  • • Ein Debugger ist eine Vorrichtung oder ein Programm, das ein Zielgerät oder Zielprogramm steuern kann und Funktionen bereitstellen kann, z.B. zum Abrufen von Register- oder Speicherwerten und zum Pausieren und Ausführen es Zielprogramms in Einzelschritten.
  • • Ein Breakpoint wird über einen Debugger auf eine Anweisung des Zielprogramms oder Geräts gesetzt, um die Ausführung bei Erreichen zu stoppen und den steuernden Prozess darüber zu informieren.
  • • Ein Daten-Watchpoint wird über einen Debugger auf eine Speicheradresse eines Zielprogramms oder Zielgeräts gesetzt, um die Ausführung anzuhalten, wenn auf die Speicheradresse zugegriffen wird, und den steuernden Prozess darüber zu informieren, indem ein Interrupt ausgelöst wird.
The following describes terminology used in the context of fuzzing:
  • • Fuzzing or fuzz testing is the automated testing process of sending randomly generated inputs to a target program (program under test) and observing its response.
  • • A fuzzer or fuzzing engine is a program that automatically generates input. So it is not linked to the software under test (e.g. through instrumentation). However, the fuzzer has the ability to instrument code, generate test cases, and execute programs under test. Well-known examples are afl and libfuzzer.
  • • A fuzz target is a software program or function to be tested through fuzzing. A key feature of a fuzz target should be that it accepts potentially untrusted input generated by the fuzzer during the fuzzing process.
  • • A fuzz test is the combined version of a fuzzer and a fuzz target. A fuzz target can then be instrumented code, where a fuzzer is associated with (i.e. provides) its inputs. A fuzz test can be carried out. A fuzzer can also start, observe, and stop multiple fuzz tests, i.e., perform multiple test runs (typically hundreds or thousands per second), each with a slightly different input produced by the fuzzer.
  • • A test case is a specific input and test run from a fuzz test. Typically, runs that are interesting for reproducibility (finding new code paths or crashes) are saved. In this way, a specific test case with the corresponding input can also be executed on a fuzz target that is not connected to a fuzzer, e.g. the release version of a program.
  • • Coverage-guided fuzzing uses code coverage information as feedback during fuzzing to detect whether an input has caused the execution of new code paths or blocks.
  • • Generator-based fuzzing uses prior knowledge about the target program (fuzz target) to create test inputs. An example of such prior knowledge is a grammar that conforms to the input specification of the fuzz target, i.e., the input grammar of the fuzz target (i.e., the program under test).
  • • Static instrumentation is the insertion of instructions into a program (under test) to obtain feedback on execution. It is usually implemented by the compiler and can, for example, specify the code blocks reached during execution.
  • • Dynamic instrumentation is the control of the execution of a program (under test) during runtime in order to generate feedback from the execution. It is usually implemented through operating system functionalities or through the use of emulators.
  • • A debugger is a device or program that can control a target device or target program and can provide functions such as retrieving register or memory values and pausing and executing the target program in individual steps.
  • • A breakpoint is set via a debugger to an instruction of the target program or device in order to stop execution when reached and to inform the controlling process of this.
  • • A data watchpoint is set to a memory address of a target program or device via a debugger to halt execution when the memory address is accessed and to inform the controlling process by triggering an interrupt.

Wenn ein Debugger an ein eingebettetes Gerät angeschlossen ist, können Anweisungs-Breakpoints verwendet werden, um die Ausführung an einer gewünschten Codestelle anzuhalten, und Daten-Watchpoints können verwendet werden, um die Ausführung anzuhalten, wenn auf eine bestimmte Speicherstelle zugegriffen wird. Die Anzahl der Break- und Watchpoints ist jedoch typischerweise begrenzt und hängt von dem verwendeten System ab, beispielsweise ist die maximale Anzahl für einen typischen Mikrocontroller vier Breakpoints und zwei Daten-Watchpoints.When a debugger is connected to an embedded device, instruction breakpoints can be used to pause execution at a desired code location, and data watchpoints can be used to pause execution when a specific memory location is accessed. However, the number of breakpoints and watchpoints is typically limited and depends on the system used, for example the maximum number for a typical microcontroller is four breakpoints and two data watchpoints.

Ein Computerprogramm 105 kann zustandsbehaftet (engl. stateful) oder zustandslos (engl. stateless) sein, je nachdem, ob es einen internen Speicherzustand speichert oder nicht.A computer program 105 may be stateful or stateless, depending on whether or not it stores internal memory state.

Ein zustandsbehaftetes Programm akzeptiert wohldefinierte Sequenzen von Eingaben, die sich auf den internen Zustand des Programms auswirken. Beispiele für zustandsbehaftete Programme sind Server-Programme, Implementierungen von Kommunikationsprotokollen, Webdienste sowie die Software für die meisten eingebetteten Geräte.A stateful program accepts well-defined sequences of inputs that affect the internal state of the program. Examples of stateful programs include server programs, communication protocol implementations, web services, and the software for most embedded devices.

Es gibt mehrere Schwierigkeiten bei Anwendung von Fuzzing-Ansätzen wie Black-Box-Fuzzing oder abdeckungsbasiertes Greybox-Fuzzing auf zustandsbehaftete Software:

  • • Zustandsbehaftete Programme nehmen als Eingaben Sequenzen von Nachrichten auf. Standard-Fuzzer sind nicht in der Lage, diese zu erzeugen oder zu analysieren. Aus der Sicht des Fuzzers zeigt das Programm ein nichtdeterministisches Verhalten, da seine Reaktion von früheren Eingaben abhängt, die es gesehen hat.
  • • Die Menge aller möglichen Zustände eines zustandsabhängigen Programms ist in der Regel unbekannt.
  • • Wenn das Programm eine Implementierung eines Protokolls mit einer formalen Spezifikation ist, kann eine Liste aller Zustände aus dieser Spezifikation abgeleitet werden. Jedoch tritt häufig der Fall auf, dass ein Programm nicht das gesamte Protokoll implementiert oder es implementiert das Protokoll nicht exakt, wodurch die formale Spezifikation für das Fuzzing weniger nützlich wird. Außerdem könnten die durch Fuzzing zu entdeckenden Schwachstellen gerade in den Diskrepanzen zwischen der Spezifikation und der Implementierung des Protokolls liegen.
There are several difficulties in applying fuzzing approaches such as black box fuzzing or coverage-based greybox fuzzing to stateful software:
  • • Stateful programs take sequences of messages as input. Standard fuzzers are unable to generate or analyze these. From the fuzzer's perspective, the program exhibits nondeterministic behavior because its response depends on previous inputs that it has seen.
  • • The set of all possible states of a state-dependent program is usually unknown.
  • • If the program is an implementation of a protocol with a formal specification, a list of all states can be derived from that specification. However, it is often the case that a program does not implement the entire protocol or does not implement the protocol exactly, making the formal specification less useful for fuzzing. In addition, the vulnerabilities that can be discovered through fuzzing could lie precisely in the discrepancies between the specification and the implementation of the protocol.

Gemäß verschiedenen Ausführungsbeispielen wird eine Test-Eingabe (und damit zugehörige Testfälle) erzeugt, die es ermöglichen, die Zustände eines Programms zu erforschen, ohne dass dafür explizite Kenntnis der Programmzustände erforderlich ist.According to various embodiments, a test input (and associated test cases) is generated, which makes it possible to explore the states of a program without requiring explicit knowledge of the program states.

2 zeigt eine Anordnung zum Testen eines Fuzz-Targets 202 mittels eines Fuzzers 201. 2 shows an arrangement for testing a fuzz target 202 using a fuzzer 201.

Der Fuzzer 201 erzeugt eine Eingabe 203 für das Fuzz-Target 202 und das Fuzz-Target 202 liefert in Reaktion auf die Eingabe Feedback 204 an den Fuzzer 201. Auf diese Weise wird eine Fuzzing-Feedback-Schleife gebildet.The fuzzer 201 generates an input 203 for the fuzz target 202, and the fuzz target 202 provides feedback 204 to the fuzzer 201 in response to the input. In this way, a fuzzing feedback loop is formed.

Der Fuzzer 201 und das Fuzz-Target 202 können auf demselben Computer (z.B. beide auf dem Computer 100) laufen oder auf unterschiedlichen Computern laufen (z.B. Fuzzer auf dem Computer 100, Fuzz-Target auf einem Zielgerät 106). In diesem Beispiel läuft der Fuzzer 201 auf einem Testcomputer 205 (auf dem das Fuzz-Target 202 auch laufen kann oder auch nicht). Der Testcomputer 205 bildet, ggf. mit einem weiteren Computer oder Gerät, auf dem das Fuzz-Target 202 ausgeführt wird, ein Testsystem.The fuzzer 201 and the fuzz target 202 may run on the same computer (e.g., both on the computer 100) or run on different computers (e.g., fuzzer on the computer 100, fuzz target on a target device 106). In this example, the fuzzer 201 is running on a test computer 205 (which may or may not also be running the fuzz target 202). The test computer 205 forms a test system, possibly with another computer or device on which the fuzz target 202 is executed.

Im Folgenden wird angenommen, dass das Fuzz-Target 202 zustandsbehaftet ist und dafür Testfälle (mit jeweiliger Eingabe 203) generiert werden sollen.In the following it is assumed that the fuzz target 202 is stateful and for this test cases (with respective input 203) should be generated.

Gemäß verschiedenen Ausführungsbeispielen implementiert dazu der Testcomputer 205 ein generatives Maschinelles-Lernen(ML-)Modell 206, insbesondere den Dekodierer eines ML-Modells (z.B. den Dekodierer eines Autoencoders).According to various exemplary embodiments, the test computer 205 implements a generative machine learning (ML) model 206, in particular the decoder of an ML model (e.g. the decoder of an autoencoder).

Der Testcomputer 205 trainiert das ML-Modell, sodass es implizit die (versteckten) Zustände des Zielprogramms (d.h. des Fuzz-Targets) 202 lernt. Ein generatives ML-Modell erlaubt es, neue Eingaben 203 zu erzeugen, mit denen bestimmte Programmzustände erreicht werden können, für die das ML-Modell Repräsentationen gelernt hat.The test computer 205 trains the ML model so that it implicitly learns the (hidden) states of the target program (i.e. the fuzz target) 202. A generative ML model allows new inputs 203 to be generated with which specific program states can be achieved for which the ML model has learned representations.

3 zeigt ein ML-Modell 300 gemäß einer Ausführungsform. 3 shows an ML model 300 according to one embodiment.

In diesem Beispiel hat das ML-Modell 300 die klassische Architektur eines Autoencoders. Es können auch andere Architekturen verwendet werden, wie z.B. eine UNet-Architektur oder eine Sequenz-zu-Sequenz-Architektur (engl. sequence-tosequence).In this example, the ML Model 300 has the classic architecture of an autoencoder. Other architectures can also be used, such as a UNet architecture or a sequence-to-sequence architecture.

Zunächst trainiert der Testcomputer 205 das ML-Modell 300 mittels überwachten Lernens. Dazu werden Trainingsdaten durch Ausführung des Zielprogramms 202 für verschiedene Eingaben erzeugt. Die Trainingsdaten weisen eine Vielzahl von Trainingsdatenelementen auf, die jeweils aus einer Trainingseingabe für das ML-Modell und einem zugehörigen (Ground-Truth-)Label (d.h. einer Zielausgabe) bestehen. Das Training des ML-Modells 300 kann mit Standardmethoden für überwachtes Lernen erfolgen, d.h. Standard-Optimierungsverfahren für diesen Zweck wie z.B. stochastischer Gradientenabstieg.First, the test computer 205 trains the ML model 300 using supervised learning. For this purpose, training data is generated by executing the target program 202 for various inputs. The training data has a variety of training data elements, each consisting of a training input for the ML model and an associated (ground truth) label (i.e. a target output). Training the ML model 300 can be done using standard methods for supervised learning, i.e. standard optimization methods for this purpose such as stochastic gradient descent.

Nach dem Training kann der Testcomputer 205 das ML-Modell 300 dazu verwenden, neue Testeingaben (und damit Testfälle) zu erzeugen, die der Testcomputer 205 dem Zielprogramm 202 zuführt und wofür er die Reaktion des Zielprogramms 202 in Form des Feedbacks 204 beobachtet. Abhängig von dem Feedback 204 ermittelt der Testcomputer 205, ob das Zielprogramm 202 wie beabsichtigt, also fehlerfrei, funktioniert.After training, the test computer 205 can use the ML model 300 to generate new test inputs (and thus test cases), which the test computer 205 feeds to the target program 202 and for which it observes the reaction of the target program 202 in the form of feedback 204. Depending on the feedback 204, the test computer 205 determines whether the target program 202 is functioning as intended, i.e. without errors.

Die Trainingsdaten werden erzeugt, indem der Testcomputer 205 das Zielprogramm 202 für verschiedene Eingaben ausführt und für jede Eingabe eine (Code-)Abdeckung des Zielprogramms 202 beobachtet.The training data is generated by the test computer 205 executing the target program 202 for various inputs and observing (code) coverage of the target program 202 for each input.

Jedes Trainingsdatenelement der Trainingsdaten ist somit ein Paar aus Abdeckung und (Programm-)Eingabe für das Computerprogramm (auch als (Programm-)Eingabedatensatz bezeichnet), mit dem diese Abdeckung erreicht wird. Die Abdeckung ist die Trainingseingabe für das ML-Modell und die Programm-Eingabe ist die Zielausgabe des ML-Modells (in anderen Worten: Das Label für die Trainingseingabe).Each training data element of the training data is thus a pair of coverage and (program) input to the computer program (also referred to as a (program) input data set) with which this coverage is achieved. The coverage is the training input for the ML model and the program input is the target output of the ML model (in other words: the label for the training input).

Die Abdeckung kann als der Wert einer Abdeckungsmetrik ausgedrückt werden, wie sie beispielsweise beim Fuzzing verwendet wird. Sie kann aber auch explizit (z.B. in Form einer Bitmap) angeben, welche Teile des Programms (d.h. Code-Teile, wie beispielsweise Funktionen oder Methoden) bei der Ausführung des Programms 202 mit dem jeweiligen Eingabedatensatz als Eingabe für das Programm 202 ausgeführt wurden.Coverage can be expressed as the value of a coverage metric, such as that used in fuzzing. However, it can also explicitly state (e.g. in the form of a bitmap) which parts of the program (i.e. code parts, such as functions or methods) were executed when the program 202 was executed with the respective input data set as input for the program 202.

Die Abdeckung für einen Eingabedatensatz kann also in verschiedenen Formen ausgedrückt werden. Je nachdem gibt sie explizit an, welche Programmteile durch den Eingabedatensatz erreicht wurden (also bei der Ausführung des Programms 202 mit dem Eingabedatensatz als Programmeingabe ausgeführt wurden) oder gibt an, welcher Anteil des Programms durch den Eingabedatensatz erreicht wurde. Abdeckungen werden typischerweise beim Greybox-Fuzzing eingesetzt.So the coverage for an input data set can be expressed in different forms. Depending on the case, it explicitly indicates which parts of the program were reached by the input data set (i.e. were executed when the program 202 was executed with the input data set as program input) or indicates which part of the program was reached by the input data set. Covers are typically used in greybox fuzzing.

Ein (Programm-)Eingabedatensatz kann eine Sequenz von Eingabedatenelementen enthalten. Für jeden Testfall, d.h. jeden Eingabedatensatz, werden die Eingabedatenelemente dann sequentiell (gemäß der Sequenz) dem Programm 202 zugeführt. Für jeden Testfall wird die Abdeckung ermittelt und gespeichert. Diese Abdeckung wird als Repräsentation des Zustands des Programms 202 angesehen, der mit diesem Eingabedatensatz erreicht wird, und somit aufgezeichnet wird.A (program) input data set may contain a sequence of input data elements. For each test case, i.e. each input data set, the input data elements are then fed sequentially (according to the sequence) to the program 202. The coverage is determined and saved for each test case. This coverage is viewed as a representation of the state of the program 202 achieved with this input data set and is thus recorded.

Der Zustand, der mit einem Eingabedatenzsatz, der eine Sequenz von Eingabedatenelementen erreicht wird, kann insbesondere zu einem großen Teil von den ersten Eingabedatenelementen der Sequenz abhängen. In anderen Worten: Die ersten Eingabedatenelemente definieren grob den Zustand des Programms und die weiteren Eingabedatenelemente führen dann in Unterzustände dieses Zustands oder führen zur Ausführung von bestimmten Teilen des Programms in diesem Zustand.The state that is achieved with an input data set, which is a sequence of input data elements, can in particular depend to a large extent on the first input data elements of the sequence. In other words: The first input data elements roughly define the state of the program and the further input data elements then lead to substates of this state or lead to the execution of certain parts of the program in this state.

Nach der Ausführung des Programms 202 für einen Eingabedatensatz setzt der Testcomputer 205 das Programm 202 zurück.After executing program 202 on an input data set, test computer 205 resets program 202.

Wie oben erwähnt besteht jedes Trainingsdatenelement (i, c) aus der Abdeckung i, die für einen (Programm-)Eingabedatensatz beobachtet wurde, als Trainings-ML-Eingabedatenelement für das ML-Modell und aus dem Eingabedatensatz c als Label (Zielausgabe). Das ML-Modell weist einen Kodierer (engl. encoder) 302, bezeichnet mit e, auf, der ein ML-Eingabedatenelement 301 auf eine Repräsentation, bezeichnet mit z, abbildet. Die Repräsentation für ein ML-Eingabedatenelement 301 kann als komprimierte Version des ML-Eingabedatenelements 301 angesehen werden. Die Repräsentation ist ein Element (z.B. Vektor) in einem Repräsentationsraum 303 (der als latenter Raum gesehen werden kann).As mentioned above, each training data item (i, c) consists of the coverage i observed for a (program) input data set, as a training ML input data item for the ML model, and the input data set c as a label (target output). The ML model has an encoder 302, labeled e, which is a ML input data element 301 maps to a representation labeled z. The representation for an ML input data item 301 can be viewed as a compressed version of the ML input data item 301. The representation is an element (e.g. vector) in a representation space 303 (which can be seen as a latent space).

Ein Dekodierer (engl. decoder) 304, bezeichnet mit d, bildet ein ihm zugeführtes Element des Repräsentationsraums 303 auf einen (Programm-)Eingabedatensatz 305 für das Programm 202 ab. Im Training werden Kodierer 302 und Dekodierer 304 (welche beispielsweise neuronale Netze sind) derart trainiert, dass der Dekodierer 304 für jedes Trainingsdatenelement möglichst den Eingabedatensatz 305 erzeugt, der zu dem Trainingsdatenelement gehört, aus dessen Abdeckung 301 der Kodierer die Repräsentation erzeugt, aus der der Dekodierer 304 den Eingabedatensatz 305 erzeugt.A decoder 304, designated d, maps an element of the representation space 303 supplied to it onto a (program) input data set 305 for the program 202. During training, encoders 302 and decoders 304 (which are, for example, neural networks) are trained in such a way that the decoder 304 generates, if possible, the input data set 305 for each training data element, which belongs to the training data element, from whose coverage 301 the encoder generates the representation from which the Decoder 304 generates the input data set 305.

Es kann ein ML-Modell aus der Sequenz-zu-Sequenz-Familie verwendet werden, d.h. ein Modell, das eine Abbildung zwischen Folgen von Eingaben und Ausgaben lernt.An ML model from the sequence-to-sequence family can be used, i.e. a model that learns a mapping between sequences of inputs and outputs.

Da die Elemente des Repräsentationsraums 303 zur Erzeugung (durch den Dekodierer 304) von Eingabedatensätzen für das Zielprogramm 202 dienen sollen, werden gemäß verschiedenen Ausführungsformen neue Eingabedatensätze auf stochastische Art erzeugt. Dies kann beispielsweise unter Verwendung eines Variations-Autoencoders (engl. variational autoencoder, VAE) erfolgen. Ein VAE lernt keine feste Repräsentation für eine ML-Eingabe (hier eine Abdeckung), sondern bildet jede ML-Eingabe auf eine Wahrscheinlichkeitsverteilung ab. Zur Erzeugung eines Eingabedatensatzes 305 für das Zielprogramm 202 wird dann aus solcher einer Wahrscheinlichkeitsverteilung ein Wert ein Element aus dem Repräsentationsraum gezogen (gesampelt). Die Wahrscheinlichkeitsverteilung, auf die eine Abdeckung abgebildet wird, repräsentiert implizit den Zustand des Programms, in dem diese Abdeckung erreicht wird (wobei diese Abbildung speziell für Abdeckung und Eingabedatensatz aus einem Trainingsdatenelement beobachtet wird).Since the elements of the representation space 303 are intended to be used to generate (by the decoder 304) input data sets for the target program 202, according to various embodiments, new input data sets are generated in a stochastic manner. This can be done, for example, using a variational autoencoder (VAE). A VAE does not learn a fixed representation for an ML input (here a cover), but rather maps each ML input to a probability distribution. To generate an input data set 305 for the target program 202, a value and an element from the representation space is then drawn (sampled) from such a probability distribution. The probability distribution to which a coverage is mapped implicitly represents the state of the program in which that coverage is achieved (where this mapping is specifically observed for coverage and input data set from a training data item).

Ein VAE liefert gute generative Fähigkeiten auf großen Teilen des Repräsentationsraums 303 (solchen Teilen, die durch Abdeckungen aus den Trainingsdaten erreicht wurden). Zur Erzeugung eines neuen (bisher im Test des Programms 202 noch nicht verwendeten) Eingabedatensatzes für das Programm für einen neuen Testfall kann der Testcomputer 205 (nach dem Training) einfach aus dem Repräsentationsraum 303 sampeln (z.B. unter Verwendung von zufälligem Rauschen) und das Sample mittels des Dekodierers auf einen Eingabedatensatzes für das Programm abbilden.A VAE provides good generative capabilities on large parts of the representation space 303 (those parts reached by coverages from the training data). To generate a new (not previously used in the test of the program 202) input data set for the program for a new test case, the test computer 205 can (after training) simply sample from the representation space 303 (e.g. using random noise) and the sample using of the decoder to an input data set for the program.

Der Testcomputer 205 kann auch zur Erzeugung eines neuen Eingabedatensatzes für das Programm (zum Testen des Programms) eine Abdeckung wählen, die bisher noch nicht erreicht wurde. Beispielsweise kann der Testcomputer 205 in dem Fall, in dem die Abdeckung in einer Form angegeben ist, die spezifiziert, welche Codeteile erreicht wurden, eine Abdeckung wählen, in der Codeteile angegeben sind, die bisher noch nicht erreicht wurden. Der Testcomputer 205 kann dann die gewählte Abdeckung mittels des Kodierers 302 auf eine Repräsentation abbilden und die Repräsentation mittels des Dekodierers 304 auf einen Eingabedatensatz abbilden mit dem (idealerweise) diese Abdeckung erreicht wird (z.B. neue, d.h. im Test bisher noch nicht erreiche, Codeteile erreicht werden können).The test computer 205 may also select a coverage that has not yet been achieved to generate a new input data set for the program (for testing the program). For example, in the case where the coverage is specified in a form that specifies which parts of code have been reached, the test computer 205 may select a coverage in which parts of code that have not yet been reached are indicated. The test computer 205 can then map the selected coverage onto a representation using the encoder 302 and map the representation onto an input data set using the decoder 304 with which (ideally) this coverage is achieved (e.g. new code parts, i.e. not yet achieved in the test, are achieved can be).

Das ML-Modell 300 kann so ausgestaltet sein und trainiert werden, dass es Repräsentationen von Abdeckungen in entwirrter (engl. distentangled) Form lernt. Dabei erfolgt das Training derart, dass das ML-Modell angeregt wird, unterschiedliche Dimensionen des Repräsentationsraums (d.h. unterschiedliche Komponenten von Vektoren aus dem Repräsentationsraum) für unterschiedliche Eigenschaften der von ihm erzeugen Eingabedatensätze zu erzeugen. Dies kann beispielsweise dadurch erreicht werden, dass bei der Verlustfunktion für das Training des Autoencoders (z.B. Variations-Autoencoders) ein entsprechender Regularisierungsterm hinzugefügt wird. Es können verschiedene bekannte Ansätze für die Entwirrung (d.h. das „Disentanglement“) eines VAE verwendet werden.The ML model 300 can be designed and trained to learn representations of covers in a distentangled form. The training takes place in such a way that the ML model is stimulated to generate different dimensions of the representation space (i.e. different components of vectors from the representation space) for different properties of the input data sets it generates. This can be achieved, for example, by adding a corresponding regularization term to the loss function for training the autoencoder (e.g. variational autoencoder). Various well-known approaches can be used to disentangle a VAE.

Hat der Testcomputer 201 das ML-Modell 300 auf diese Weise (mit einer Entwirrung des Repräsentationsraums) trainiert, kann er neue neuen Eingabedatensätze für das Programm (zum Testen des Programms) erzeugten, indem er bestimmte Komponenten der Repräsentationen variiert (z.B. auf Bereiche setzt, die für die bisher im Training Eingabedatensätze noch nicht aufgetreten sind) und mittels des Kodierers 305 auf neue Eingabedatensätze abbildet. So kann der Testcomputer 201 gezielt neue Zustände des Zielprogramms 202 beim Testen erreichen und das Verhalten des Zielprogramms 202 für diese Zustände testen. Dadurch wird eine genauere Steuerung der Erforschung des Zustandsraums erreicht und der Testcomputer 201 kann auch für Zustände, die von höherem Interesse sind, öfter Eingabedatensätze erzeugen als für andere.Once the test computer 201 has trained the ML model 300 in this way (with a disentanglement of the representation space), it can generate new new input data sets for the program (for testing the program) by varying certain components of the representations (e.g. relying on areas, which have not yet occurred for the input data sets so far in training) and maps them to new input data sets using the encoder 305. In this way, the test computer 201 can specifically reach new states of the target program 202 during testing and test the behavior of the target program 202 for these states. This provides more precise control over the exploration of the state space and allows the test computer 201 to generate input data sets more often for states that are of higher interest than for others.

Zusammengefasst wird gemäß verschiedenen Ausführungsformen ein Verfahren bereitgestellt, wie in 4 dargestellt.In summary, according to various embodiments, a method is provided as in 4 shown.

4 zeigt ein Ablaufdiagramm, das ein Verfahren zum Testen eines Computerprogramms gemäß einer Ausführungsform darstellt. 4 shows a flowchart illustrating a method for testing a computer program according to an embodiment.

In 401 wird das Computerprogramms für jeden Eingabedatensatz für das Computerprogramm einer Vielzahl von Eingabedatensätzen ausgeführt und jeweils eine Abdeckung des Computerprogramms ermittelt, die mit bei der Ausführung des Computerprogramms für den jeweiligen Eingabedatensatz erreicht wurde.In 401, the computer program is executed for each input data set for the computer program of a plurality of input data sets and a coverage of the computer program is determined in each case, which was achieved when executing the computer program for the respective input data set.

In 402 wird für jeden Eingabedatensatz ein Trainingsdatenelement erzeugt, das die für den Eingabedatensatz ermittelte Abdeckung als Trainingseingabe und den Eingabedatensatz als Zielausgabe enthält.In 402, a training data element is created for each input data set, which contains the coverage determined for the input data set as the training input and the input data set as the target output.

In 403 wird ein maschinelles Lernmodell mittels überwachten Lernens unter Verwendung der erzeugen Trainingsdatenelemente trainiert, wobei das maschinelle Lernmodell einen Kodierer gefolgt von einem Dekodierer aufweist, wobei der Kodierer eingerichtet ist, aus Abdeckungen Repräsentationen in einem Repräsentationsraum zu erzeugen und der Dekodierer eingerichtet ist, aus ihm zugeführten Repräsentationen aus dem Repräsentationsraum Eingabedatensätze für das Computerprogramm zu erzeugen.In 403, a machine learning model is trained using supervised learning using the generated training data elements, the machine learning model comprising an encoder followed by a decoder, the encoder being configured to generate representations in a representation space from covers and the decoder being configured from it supplied representations from the representation space to generate input data sets for the computer program.

In 404 werden von Repräsentationen aus dem Repräsentationsraum ausgewählt.In 404, representations are selected from the representation space.

In 405 werden zusätzliche Eingabedatensätze durch Zuführen der ausgewählten Repräsentationen zu dem Dekodierer erzeugt.At 405, additional input data sets are generated by feeding the selected representations to the decoder.

In 406 wird das Computerprogramm durch Ausführen des Computerprogramms für die erzeugten zusätzlichen Eingabedatensätze getestet.At 406, the computer program is tested by executing the computer program on the additional input data sets generated.

Das Ermitteln der Abdeckung kann das Ermitteln des Werts einer Abdeckungsmetrik und/oder einer Datenstruktur (insbesondere einer Bitmap), die die Abdeckung angibt, sein.Determining the coverage may be determining the value of a coverage metric and/or a data structure (in particular a bitmap) that indicates the coverage.

Das Verfahren von 4 kann durch einen oder mehrere Computer mit einer oder mehreren Datenverarbeitungseinheiten durchgeführt werden. Der Begriff „Datenverarbeitungseinheit“ kann als irgendein Typ von Entität verstanden werden, die die Verarbeitung von Daten oder Signalen ermöglicht. Die Daten oder Signale können beispielsweise gemäß mindestens einer (d.h. einer oder mehr als einer) speziellen Funktion behandelt werden, die durch die Datenverarbeitungseinheit durchgeführt wird. Eine Datenverarbeitungseinheit kann eine analoge Schaltung, eine digitale Schaltung, eine Logikschaltung, einen Mikroprozessor, einen Mikrocontroller, eine Zentraleinheit (CPU), eine Graphikverarbeitungseinheit (GPU), einen Digitalsignalprozessor (DSP), eine integrierte Schaltung einer programmierbaren Gatteranordnung (FPGA) oder irgendeine Kombination davon umfassen oder aus dieser ausgebildet sein. Irgendeine andere Weise zum Implementieren der jeweiligen Funktionen, die hierin genauer beschrieben werden, kann auch als Datenverarbeitungseinheit oder Logikschaltungsanordnung verstanden werden. Es können ein oder mehrere der im Einzelnen hier beschriebenen Verfahrensschritte durch eine Datenverarbeitungseinheit durch eine oder mehrere spezielle Funktionen ausgeführt (z. B. implementiert) werden, die durch die Datenverarbeitungseinheit durchgeführt werden.The procedure of 4 can be carried out by one or more computers with one or more data processing units. The term “data processing unit” can be understood as any type of entity that enables the processing of data or signals. For example, the data or signals may be treated according to at least one (ie, one or more than one) specific function performed by the data processing unit. A data processing unit may be an analog circuit, a digital circuit, a logic circuit, a microprocessor, a microcontroller, a central processing unit (CPU), a graphics processing unit (GPU), a digital signal processor (DSP), a programmable gate array integrated circuit (FPGA), or any combination include it or be formed from it. Any other way to implement the respective functions described in more detail herein may also be understood as a data processing unit or logic circuitry. One or more of the method steps described in detail here can be carried out (e.g. implemented) by a data processing unit through one or more special functions that are carried out by the data processing unit.

Die Herangehensweise von 4 dient zum Testen eines Programms, beispielsweise einer Steuersoftware für eine Robotervorrichtung. Der Begriff „Robotervorrichtung“ kann als sich auf irgendein technisches System beziehend verstanden werden, wie z. B. eine computergesteuerte Maschine, ein Fahrzeug, ein Haushaltsgerät, ein Elektrowerkzeug, eine Fertigungsmaschine, einen persönlichen Assistenten oder ein Zugangssteuersystem. Die Steuersoftware kann auch für datenverarbeitende Systeme wie z.B. ein Navigationsgerät verwendet werden. Beim Testen gefundene Fehler können bereinigt werden und so je nach Art der Software die Zuverlässigkeit und/oder Sicherheit der jeweiligen Robotervorrichtung erhöht werden.The approach of 4 is used to test a program, for example control software for a robot device. The term “robotic device” can be understood as referring to any technical system, such as: B. a computer-controlled machine, a vehicle, a household appliance, a power tool, a manufacturing machine, a personal assistant or an access control system. The control software can also be used for data processing systems such as a navigation device. Errors found during testing can be corrected and, depending on the type of software, the reliability and/or safety of the respective robot device can be increased.

Obwohl spezielle Ausführungsformen hier dargestellt und beschrieben wurden, wird vom Fachmann auf dem Gebiet erkannt, dass die speziellen Ausführungsformen, die gezeigt und beschrieben sind, gegen eine Vielfalt von alternativen und/oder äquivalenten Implementierungen ausgetauscht werden können, ohne vom Schutzbereich der vorliegenden Erfindung abzuweichen. Diese Anmeldung soll irgendwelche Anpassungen oder Variationen der speziellen Ausführungsformen abdecken, die hier erörtert sind. Daher ist beabsichtigt, dass diese Erfindung nur durch die Ansprüche und die Äquivalente davon begrenzt ist.Although specific embodiments have been shown and described herein, it will be recognized by those skilled in the art that the specific embodiments shown and described may be substituted for a variety of alternative and/or equivalent implementations without departing from the scope of the present invention. This application is intended to cover any adaptations or variations of the specific embodiments discussed herein. Therefore, it is intended that this invention be limited only by the claims and the equivalents thereof.

Claims (9)

Verfahren zum Testen eines Computerprogramms, aufweisend: Ausführen des Computerprogramms für jeden Eingabedatensatz für das Computerprogramm einer Vielzahl von Eingabedatensätzen und jeweils Ermitteln einer Abdeckung des Computerprogramms, die mit bei der Ausführung des Computerprogramms für den jeweiligen Eingabedatensatz erreicht wurde; Erzeugen, für jeden Eingabedatensatz, eines Trainingsdatenelements, das die für den Eingabedatensatz ermittelte Abdeckung als Trainingseingabe und den Eingabedatensatz als Zielausgabe enthält; Trainieren eines maschinellen Lernmodells mittels überwachten Lernens unter Verwendung der erzeugen Trainingsdatenelemente, wobei das maschinelle Lernmodell einen Kodierer gefolgt von einem Dekodierer aufweist, wobei der Kodierer eingerichtet ist, aus Abdeckungen Repräsentationen in einem Repräsentationsraum zu erzeugen und der Dekodierer eingerichtet ist, aus ihm zugeführten Repräsentationen aus dem Repräsentationsraum Eingabedatensätze für das Computerprogramm zu erzeugen; Auswählen von Repräsentationen aus dem Repräsentationsraum; Erzeugen von zusätzlichen Eingabedatensätzen durch Zuführen der ausgewählten Repräsentationen zu dem Dekodierer; und Testen des Computerprogramms durch Ausführen des Computerprogramms für die erzeugten zusätzlichen Eingabedatensätze.Method for testing a computer program, comprising: executing the computer program for each input data set for the computer program of a plurality of input data sets and in each case determining a coverage of the computer program that was achieved when executing the computer program for the respective input data set; Generating, for each input data set, a training data element containing the coverage determined for the input data set as training input and the input data set as target output; Training a machine learning model using supervised learning using the generated training data elements, the machine learning model comprising an encoder followed by a decoder, the encoder being set up is to generate representations in a representation space from covers and the decoder is set up to generate input data sets for the computer program from representations supplied to it from the representation space; selecting representations from the representation space; generating additional input data sets by feeding the selected representations to the decoder; and testing the computer program by executing the computer program on the additional input data sets generated. Verfahren nach Anspruch 1, wobei die Repräsentationen aus dem Repräsentationsraum zufällig ausgewählt werden.Procedure according to Claim 1 , where the representations are randomly selected from the representation space. Verfahren nach Anspruch 1 oder 2, wobei andere Repräsentationen aus dem Repräsentationsraum ausgewählt werden als die, auf die der Kodierer die Abdeckungen der Trainingsdatenelemente abbildet.Procedure according to Claim 1 or 2 , where representations other than those to which the encoder maps the coverages of the training data elements are selected from the representation space. Verfahren nach einem der Ansprüche 1 bis 3, wobei das maschinelle Lernmodell ein Variations-Autoencoder ist.Procedure according to one of the Claims 1 until 3 , where the machine learning model is a variational autoencoder. Verfahren nach einem der Ansprüche 1 bis 4, wobei jeder Eingabedatensatz für das Computerprogramm eine Sequenz von Eingabedatenelementen für das Computerprogramm aufweist und das Ausführen des Computerprogramms für den Eingabedatensatz eine Ausführen des Computerprogramms aufweist, wobei die Eingabedatenelemente gemäß der Sequenz dem Computerprogramm sequentiell zugeführt werden.Procedure according to one of the Claims 1 until 4 , wherein each input data set for the computer program has a sequence of input data elements for the computer program and executing the computer program for the input data set comprises executing the computer program, wherein the input data elements are sequentially supplied to the computer program according to the sequence. Verfahren nach einem der Ansprüche 1 bis 5, wobei der Repräsentationsraum mehrdimensional ist, wobei das maschinelle Lernmodell derart trainiert wird, dass es Repräsentationen von Abdeckungen in entwirrter Form lernt und wobei das Auswählen der Repräsentationen aus dem Repräsentationsraum durch Setzen das Setzen von Komponenten der Repräsentationen in ausgewählten Dimensionen erfolgt.Procedure according to one of the Claims 1 until 5 , wherein the representation space is multidimensional, wherein the machine learning model is trained to learn representations of covers in disentangled form, and wherein selecting the representations from the representation space is done by setting components of the representations in selected dimensions. Software-Testsystem, das eingerichtet ist, ein Verfahren nach einem der Ansprüche 1 bis 6 durchzuführen.Software testing system that is set up to implement a method according to one of the Claims 1 until 6 to carry out. Computerprogramm mit Befehlen, die, wenn sie durch einen Prozessor ausgeführt werden, bewirken, dass der Prozessor ein Verfahren nach einem der Ansprüche 1 bis 6 durchführt.Computer program containing instructions that, when executed by a processor, cause the processor to carry out a method according to one of the Claims 1 until 6 carries out. Computerlesbares Medium, das Befehle speichert, die, wenn sie durch einen Prozessor ausgeführt werden, bewirken, dass der Prozessor ein Verfahren nach einem der Ansprüche 1 bis 6 durchführt.A computer-readable medium that stores instructions that, when executed by a processor, cause the processor to perform a method according to one of the Claims 1 until 6 carries out.
DE102022202542.3A 2022-03-15 2022-03-15 Method for testing a computer program Pending DE102022202542A1 (en)

Priority Applications (2)

Application Number Priority Date Filing Date Title
DE102022202542.3A DE102022202542A1 (en) 2022-03-15 2022-03-15 Method for testing a computer program
CN202310259875.2A CN116775455A (en) 2022-03-15 2023-03-13 Method for testing a computer program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE102022202542.3A DE102022202542A1 (en) 2022-03-15 2022-03-15 Method for testing a computer program

Publications (1)

Publication Number Publication Date
DE102022202542A1 true DE102022202542A1 (en) 2023-09-21

Family

ID=87849258

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102022202542.3A Pending DE102022202542A1 (en) 2022-03-15 2022-03-15 Method for testing a computer program

Country Status (2)

Country Link
CN (1) CN116775455A (en)
DE (1) DE102022202542A1 (en)

Also Published As

Publication number Publication date
CN116775455A (en) 2023-09-19

Similar Documents

Publication Publication Date Title
DE69831732T2 (en) METHOD AND DEVICE FOR CORRECTING ERRORS IN A COMPUTER SYSTEM
DE102008012337A1 (en) Method for tracking of program code, involves implementing in processor and signature value is produced, which indicates sequence of implemented instructions
DE10039538A1 (en) Device for measuring and analyzing the output capacity of computer program, includes processor and memory coupled to at least one processor, with computer program having number of code segments stored in memory
EP0674784A1 (en) Process for testing at least one class of an object-oriented program on a computer.
DE102014102551A1 (en) Machine and method for evaluating failed software programs
DE102006019292A1 (en) Modeling programmable devices
DE3341766A1 (en) METHOD AND DEVICE FOR TIME-COORDINATING DATA
DE19959157A1 (en) Improved function testing for computer software by first stage filtering out of large bugs or defects in source code by insertion of large syntax errors into source code modules to be detected by the testing system
DE202016008043U1 (en) Apparatus for creating, collecting, storing and loading debug information for failed test scripts
DE112014002960T5 (en) Derivation of generalized test cases
EP3306295A1 (en) Method and device for testing electronic controls, in particular for testing of automobile control systems
DE102013114558A1 (en) Cut-to-Diagnosis (CID) - A method to improve the throughput of the yield increase process
DE202016008006U1 (en) Generation of integration tests on a small scale
DE102022202542A1 (en) Method for testing a computer program
DE102020213890A1 (en) Computer-implemented method and device for selecting a fuzzing method for testing a program code
DE102022202338A1 (en) Method for testing a computer program
DE2441486C2 (en) Method for automatic fault checking of an electrical circuit and device for carrying out the method
DE102020213809A1 (en) Method for operating a control device when testing software in the control device and method for operating a test computer when testing software in a control device
DE102022206900A1 (en) Method for testing a computer program in several compositions of computer program modules
DE102022202339A1 (en) Software troubleshooting procedure
WO2010034548A1 (en) Test module and method for testing an o/r imaging middleware
EP2567295B1 (en) Method for selectivly recording, reconstructing and analysing the execution of a control program
DE102022204717A1 (en) Method for testing a computer program
DE102022202697A1 (en) Method for providing a blockchain
DE102022212020A1 (en) Checking programs