DE102022202542A1 - Method for testing a computer program - Google Patents
Method for testing a computer program Download PDFInfo
- 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
Links
- 238000012360 testing method Methods 0.000 title claims abstract description 88
- 238000004590 computer program Methods 0.000 title claims abstract description 63
- 238000000034 method Methods 0.000 title claims abstract description 41
- 238000012549 training Methods 0.000 claims abstract description 42
- 238000010801 machine learning Methods 0.000 claims abstract description 41
- 238000013522 software testing Methods 0.000 claims description 5
- 238000012545 processing Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 7
- 230000006399 behavior Effects 0.000 description 5
- 238000013459 approach Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- 238000009826 distribution Methods 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 235000000334 grey box Nutrition 0.000 description 2
- 244000085685 grey box Species 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 239000013598 vector Substances 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000035772 mutation Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000010561 standard procedure Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000010998 test method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
- G06N3/0455—Auto-encoder networks; Encoder-decoder networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0475—Generative networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/084—Backpropagation, 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.
-
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.
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
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
Dazu führt der Benutzer eine Softwareentwicklungsumgebung 104 auf der CPU 101 aus.To do this, the user runs a
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
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
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
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.
- • 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
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.
- • 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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Zusammengefasst wird gemäß verschiedenen Ausführungsformen ein Verfahren bereitgestellt, wie in
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
Die Herangehensweise von
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)
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) |
-
2022
- 2022-03-15 DE DE102022202542.3A patent/DE102022202542A1/en active Pending
-
2023
- 2023-03-13 CN CN202310259875.2A patent/CN116775455A/en active Pending
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 |