DE102008015060A1 - Static error analysis method for program, involves starting new iteration with call determined areas as source text areas, and aborting new iteration when no call areas in previous iterations are determined - Google Patents

Static error analysis method for program, involves starting new iteration with call determined areas as source text areas, and aborting new iteration when no call areas in previous iterations are determined Download PDF

Info

Publication number
DE102008015060A1
DE102008015060A1 DE102008015060A DE102008015060A DE102008015060A1 DE 102008015060 A1 DE102008015060 A1 DE 102008015060A1 DE 102008015060 A DE102008015060 A DE 102008015060A DE 102008015060 A DE102008015060 A DE 102008015060A DE 102008015060 A1 DE102008015060 A1 DE 102008015060A1
Authority
DE
Germany
Prior art keywords
error
program
call
determined
source text
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.)
Withdrawn
Application number
DE102008015060A
Other languages
German (de)
Inventor
Gordon Dipl.-Inf. Haak
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.)
Mercedes Benz Group AG
Original Assignee
Daimler AG
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 Daimler AG filed Critical Daimler AG
Priority to DE102008015060A priority Critical patent/DE102008015060A1/en
Publication of DE102008015060A1 publication Critical patent/DE102008015060A1/en
Withdrawn legal-status Critical Current

Links

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/3604Software analysis for verifying properties of programs

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

The method involves identifying source text areas (2.3-2.7) with program instructions in a program source text (6), where the source text areas are applicable as an error cause. An implementation path for each source text part in a function surrounding the source text areas is determined. Call areas of the function are determined. A new iteration with the determined call areas as source text areas is started. The new iteration is aborted when no call areas in previous iterations are determined.

Description

Die Erfindung betrifft ein Verfahren zur statischen Fehleranalyse in einem Programm, umfassend Programmanweisungen, bei dem ein Fehler detektiert, seine Zugehörigkeit zu einer Fehlerklasse bestimmt und seine Ursache ermittelt wird.The The invention relates to a method for static failure analysis in a program that includes program statements that have an error detects its membership in an error class and its cause is determined.

Bei Auftreten von Fehlern in imperativen oder objektorientierten Programmen muss analysiert werden, warum der Fehler, beispielsweise eine Verklemmung nebenläufiger Prozesse, aufgetreten ist. Der Grund für das Auftreten des Fehlers lässt sich nur durch eine Analyse der internen Abläufe erkennen. Diese Untersuchung ist also unabdingbar, um einen Fehler zu beheben. Ziel der Fehleranalyse ist es, die internen Programmabläufe zu verstehen. Häufig ist dabei die Fehlerstelle bekannt. Beispielsweise ist bekannt, dass eine Division durch Null passiert, oder ein Nullpointer dereferenziert wird oder das Programm verhält sich anders als erwartet. Weshalb dies passiert, muss mittels der Analyse ermittelt werden.at Occurrence of imperfections in imperative or object-oriented programs must be analyzed, why the error, for example, a deadlock concurrent processes, has occurred. The reason for the occurrence of the error can only be done by an analysis recognize the internal processes. So this investigation is indispensable to fix an error. Target of error analysis is to understand the internal program flows. Often if the fault is known. For example, it is known that a division passes through zero, or dereferences a null pointer or the program behaves differently than expected. Why this happens must be determined by analysis.

Nicht immer sind die Fehlerursache und die Fehlerstelle lokal (z. B. innerhalb einer Funktion oder einer Datei). So kann es durchaus sein, dass ein Dividend und eine Division an unterschiedlichen Stellen im Programm berechnet werden oder ein Zeiger wird an mehreren Stellen im Programm beschrieben, die fehlerhafte Verwendung ist an einer anderen. All diese Quelltextpositionen können die Fehlerursache enthalten und müssen demzufolge mit in eine Fehleranalyse einbezogen werden. Dies kann eine Fehleranalyse sehr aufwändig machen.Not always the cause of the error and the error location are local (eg within a function or a file). So it may well be that a dividend and a division in different places in the program be calculated or a pointer will appear in several places in the program described, the misuse is at another. Alles these source code locations may contain the cause of the error and must therefore be included in an error analysis become. This can make a fault analysis very expensive.

Aus der DE 695 05 038 T2 ist ein statischer Analysator von Betriebsblockierungsrisiken eines Systems bekannt, der am Eingang Programmdateien dieses Systems und die Nomenklatur von primitiven Funktionen zum Setzen und Freigeben von Sperren dieses Systems empfängt und Nachrichten erzeugt, die die Beseitigung der Verklemmungsrisiken vor dem Einschalten dieses Systems ermöglichen, wobei der Analysator mit einem ersten Werkzeug versehen ist, das einen Steuergraphen für jede in den Programmdateien enthaltene Systemaufruffunktion erzeugt, wobei die Stufen dieses Steuergraphen nur die primitiven Funktionen der Nomenklatur, die die Systembetriebsmittel nutzen, umfassen, wobei der Analysator mit einem zweiten Werkzeug versehen ist, das die Listen der Setzung von Sperren für die Gesamtheit der möglichen Synchronisationen der verschiedenen Prozesse des Systems erzeugt, wobei das zweite Werkzeug einen Algorithmus zum Durchlaufen der Graphen ausführt, die vom ersten Werkzeug erzeugt werden.From the DE 695 05 038 T2 is a static analyzer of operational blocking risks of a system known that receives at the input program files of this system and the nomenclature of primitive functions for setting and releasing locks of this system and generates messages that allow the elimination of deadlock risks before turning this system, the analyzer is provided with a first tool that generates a control graph for each system call function contained in the program files, the stages of this control graph comprising only the primitive functions of the nomenclature that use the system resources, the analyzer being provided with a second tool containing the Lists of sets of locks are generated for the set of possible synchronizations of the various processes of the system, the second tool executing an algorithm for traversing the graphs generated by the first tool.

Es ist eine Aufgabe der Erfindung, ein neuartiges Verfahren zur statischen Fehleranalyse in einem Programm anzugeben.It It is an object of the invention to provide a novel method for static Specify error analysis in a program.

Die Aufgabe wird erfindungsgemäß gelöst durch ein Verfahren mit den Merkmalen des Anspruchs 1.The The object is achieved by a method having the features of claim 1.

Vorteilhafte Weiterbildungen sind Gegenstand der Unteransprüche.advantageous Further developments are the subject of the dependent claims.

Bei einem erfindungsgemäßen Verfahren zur statischen Fehleranalyse in einem Programm, das Programmanweisungen umfasst, wird ein Fehler detektiert, seine Zugehörigkeit zu einer Fehlerklasse bestimmt und seine Ursache ermittelt.at a method according to the invention for static Error analysis in a program that includes program instructions, If an error is detected, its membership in one Error class determines and determines its cause.

Unter einem Fehler wird insbesondere die Abweichung zwischen einer Spezifikation eines Programms und dessen Implementierung verstanden.Under In particular, the deviation between a specification becomes a mistake a program and its implementation.

Eine Fehleranalyse ist dann statisch, wenn zur Analyse eines Programms dessen Ausführung nicht erforderlich ist. Statische Analyse wird für Reverse Engineering, zur Fehleranalyse oder zur Fehlerdetektion eingesetzt.A Error analysis is then static when analyzing a program whose execution is not required. Static analysis is used for reverse engineering, for error analysis or for Error detection used.

Eine Klassifikation von Fehlern kann anhand folgender Fehlerklassen erfolgen:

  • 1. eine notwendige Anweisung fehlt (z. B. wurde eine Initialisierung nicht durchgeführt);
  • 2. eine Anweisung ist falsch, wobei das Programm durch Korrektur oder Löschung der falschen Anweisung korrigiert werden kann;
  • 3. eine Bedingungslogik ist falsch, wodurch ein falscher Programmpfad ausgeführt oder ein Programmpfad nicht wie erwartet ausgeführt wird;
  • 4. eine Anweisungsreihenfolge ist falsch (z. B. wird durch eine falsche Anweisungsreihenfolge eine Initialisierung zu spät ausgeführt).
A classification of errors can be made using the following error classes:
  • 1. a necessary instruction is missing (eg an initialization was not performed);
  • 2. an instruction is wrong, whereby the program can be corrected by correcting or deleting the wrong instruction;
  • 3. a conditional logic is incorrect, causing an incorrect program path to be executed or a program path not being executed as expected;
  • 4. An instruction order is incorrect (eg, an incorrect instruction sequence causes initialization to be too late).

Die Analyse für die Fehlerklassen 1 und 2 weist den geringsten Aufwand auf. So kann eine Quelltextsuche nach entsprechenden Anweisungen durchgeführt werden. Die Fehlerklassen 3 und 4 lassen sich im Allgemeinen nicht so einfach diagnostizieren, da sich die Bedingungslogik und die Anweisungsreihenfolge nicht immer direkt aus einem Programmquelltext ablesen lassen. Dies stellt eine mögliche Art der Klassifizierung dar. Es können auch weitere Fehlerklassen und/oder Fehlerunterklassen definiert und vorgegeben werden.The analysis for the error classes 1 and 2 has the least effort. Thus, a source text search for appropriate instructions can be performed. The error classes 3 and 4 In general, it is not so easy to diagnose because the conditional logic and instruction order can not always be read directly from a program source text. This represents a possible type of classification. Other error classes and / or error subclasses can also be defined and specified.

Bei der erfindungsgemäßen Fehleranalyse erfolgt mindestens eine Iteration folgender Schritte zur Erstellung eines anweisungsbezogenen Aufruf- und Kontrollflussgraphen:

  • – Identifizierung von Quelltextstellen mit Programmanweisungen im Programmquelltext, die als Fehlerursache in Frage kommen. Beispielsweise sind bei einer Division durch Null die Fehlerstelle und alle Quelltextstellen relevant, an denen der Dividend berechnet wird. Diese Quelltextstellen müssen durch eine Suche eines entsprechenden Bezeichners gefunden werden. Die gefundenen Quelltextstellen sind Ausgangspunkte für das weitere Vorgehen.
  • – Ermittlung mindestens eines Ausführungspfades für jede der Quelltextstellen in einer die Quelltextstelle umgebenden Funktion. Für jede der gefundenen Quelltextstellen muss analysiert werden, unter welchen Bedingungen diese innerhalb der umgebenden Funktion ausgeführt wird. Dies ist eine Analyse der Blockstruktur. Ergebnis dieser Analyse sind die Ausführungspfade innerhalb der umgebenden Funktion, die zur Quelltextstelle führen. Enthält die Funktion mindestens zwei solcher Quelltextstellen, so ist die Reihenfolge der Ausführung interessant.
  • – Ermittlung von Aufrufstellen der umgebenden Funktion;
  • – Beginn einer neuen Iteration mit ermittelten Aufrufstellen als Quelltextstellen oder Abbruch, falls keine in den vorherigen Iterationen unberücksichtigten Aufrufstellen ermittelt wurden. Das Verfahren ist beendet, wenn keine weitere bisher unberücksichtigte Aufrufstelle gefunden wird. Bei nicht rekursiven Programmen ist die Aufrufbeziehung zwischen Funktionen ein gerichteter Graph ohne Zyklen. Rekursive Programme können zyklische Aufrufbeziehungen enthalten.
In the error analysis according to the invention, at least one iteration of the following steps for generating an instruction-related call and control flow graph takes place:
  • - Identification of source code locations with program statements in the program source text that can be considered as the cause of the error. For example, with a division by zero, the error location and all the source text locations are relevant where the Dividend is calculated. These source text locations must be found by searching for a corresponding identifier. The found source text points are starting points for the further procedure.
  • Determining at least one execution path for each of the source text locations in a function surrounding the source text location. For each of the source code locations found, it must be analyzed under what conditions it is executed within the surrounding function. This is an analysis of the block structure. The result of this analysis is the execution paths within the surrounding function that lead to the source code location. If the function contains at least two such source text locations, the order of execution is interesting.
  • - determination of call points of the surrounding function;
  • - Beginning of a new iteration with determined call points as source text locations or abort, if no call points were ignored in the previous iterations. The procedure is ended if no further previously ignored call point is found. For non-recursive programs, the call relationship between functions is a directed graph with no cycles. Recursive programs can contain cyclic invocation relations.

Mit dem erfindungsgemäßen Verfahren werden alle Ausführungspfade zu relevanten Quelltextstellen inklusive dabei auszuwertender Bedingungen und die Reihenfolge der Ausführung ermittelt.With the method according to the invention are all execution paths to relevant source text including conditions to be evaluated and determines the order of execution.

Auf diese Weise wird eine besonders sichere Fehleranalyse erreicht, die insbesondere für imperative Programmiersprachen anwendbar ist. Das Verfahren ist auch für andere Problemstellungen des Reverse Engineering (Rekonstruktion) anwendbar. Zeitraubendes und fehlerträchtiges Sammeln von Informationen kann entfallen.On this way, a particularly secure error analysis is achieved, especially applicable for imperative programming languages is. The procedure is also for other problems Reverse engineering (reconstruction) applicable. Time-consuming and error-prone gathering of information can be omitted.

Eine mögliche Ausführungsform der Erfindung sieht vor, dass die Schritte der Iteration wie folgt ausgeführt werden:

  • – Identifizierung von Quelltextstellen mit Programmanweisungen in einem Programmquelltext, die einen Fehler verursachen oder vermeiden können, wobei für die identifizierten Quelltextstellen eine Anfangshypothese derart angenommen wird, dass der Fehler an diesen identifizierten Quelltextstellen nicht auftritt;
  • – Ermittlung mindestens eines oder aller Ausführungspfade für jede der identifizierten Quelltextstellen;
  • – Ermittlung von allen internen Aufrufstellen und/oder Anweisungen, welche von der Anfangshypothese abhängig sind, in dem oder in allen Ausführungspfaden;
  • – Erzeugung eines booleschen Ausdrucks anhand von mindestens einer Bedingung, einer Verknüpfung, einem Wert einer Variablen und/oder einem Wertebereich einer Variablen aller von der Anfangshypothese abhängigen und ermittelten internen Aufrufstellen und/oder Anweisungen als mindestens eine Ausführungshypothese;
  • – Prüfen des booleschen Ausdrucks aller ermittelten internen Aufrufstellen und/oder Anweisungen auf Richtigkeit der betreffenden Bedingung, Verknüpfung, des Wertes einer Variablen und/oder des Wertebereichs einer Variablen unter Annahme mindestens einer oder mehrerer der Ausführungshypothesen;
  • – Beweisen der Anfangshypothese, indem die internen Aufrufstellen und/oder Anweisungen des erzeugten booleschen Aus drucks anhand einer oder mehrerer der Ausführungshypothesen solange geprüft werden, bis alle diejenigen Aufrufstellen und/oder Anweisungen identifiziert sind, die nur von Programmeingängen abhängig sind, oder bis kein Widerspruch identifizier wird, und Prüfen der Abhängigkeit der Programmeingänge anhand der Ausführungshypothese/n derart, dass die Anfangshypothese bewiesen ist, wenn bei Ausführung der Aufrufstellen und/oder Anweisungen die Programmeingänge nicht zu dem erwarteten Fehler führen;
  • – Abbruch, falls die oder alle Anfangs- und/oder Ausführungshypothesen bestätigt werden oder
  • – anderenfalls identifizieren des den erwarteten Fehler verursachenden Programmeingangs und gegebenenfalls Beginn einer neuen Iteration mit ermittelten und/oder neu zu ermittelnden Aufrufstellen und/oder Anweisungen als weitere Quelltextstellen zur Identifizierung weiterer Programmeingänge, die zu dem erwarteten Fehler führen können.
A possible embodiment of the invention provides that the steps of the iteration are carried out as follows:
  • - Identification of source code locations with program statements in a program source text that can cause or avoid an error, whereby an initial hypothesis is assumed for the identified source code locations such that the error does not occur at these identified source code locations;
  • Determining at least one or all of the execution paths for each of the identified source code locations;
  • Determination of all internal call points and / or instructions which are dependent on the initial hypothesis, in the or in all execution paths;
  • - generating a Boolean expression based on at least one condition, a link, a value of a variable and / or a range of values of a variable of all dependent on the initial hypothesis and determined internal call points and / or instructions as at least one execution hypothesis;
  • Checking the Boolean expression of all determined internal call points and / or instructions for the correctness of the condition concerned, linking, the value of a variable and / or the value range of a variable assuming at least one or more of the execution hypotheses;
  • Prove the initial hypothesis by examining the internal call points and / or statements of the generated Boolean expression against one or more of the execution hypotheses until all those call points and / or instructions are identified that depend only on program inputs, or until no inconsistency and checking the dependency of the program inputs on the execution hypothesis (s) such that the initial hypothesis is proven when the program inputs do not result in the expected error upon execution of the call locations and / or instructions;
  • - Termination, if the or all initial and / or execution hypotheses are confirmed or
  • Otherwise identifying the program input causing the expected error and, if appropriate, starting a new iteration with determined call points and / or new call points and / or instructions as further source code points for identifying further program inputs which can lead to the expected error.

Mit anderen Worten: Das Verfahren ermöglicht neben dem Identifizieren von Fehlern durch Programmeingänge in das Programm und/oder in Unterprogramme und/oder in Programmbausteinen auch interne Fehler im Programm, im Unterprogramm und/oder im Programmbaustein selbst, wie beispielsweise Verknüpfungen, Bedingungen und/oder Wertezuweisungen zu Variablen.With In other words, the method allows besides identifying of errors through program inputs in the program and / or in internal programs and / or in program blocks also internal errors in the program, in the subroutine and / or in the program block itself, such as links, conditions, and / or Value assignments to variables.

Hierzu wird bei der statischen Fehleranalyse zweckmäßigerweise jeweils mindestens ein boolescher Wert einer Bedingung, mindestens ein boolescher Wert einer Verknüpfung, mindestens ein Wert einer beteiligten Variable und/oder mindestens ein Wertebereich einer beteiligten Variablen in mindestens einem der oder in allen Ausführungspfade/n ermittelt und anhand einer der angenommenen Hypothesen auf Richtigkeit überprüft.For this is expediently in the static error analysis at least one Boolean value of a condition, at least a Boolean value of a link, at least one value of a link involved variable and / or at least one value range of a variables involved in at least one or all of the execution paths determined and checked for correctness on the basis of one of the assumed hypotheses.

Es können weitere Analysen folgen. Beispielsweise kann untersucht werden, unter welchen Umständen die relevanten Bedingungen welchen booleschen Wert annehmen oder welchen Wert beteiligte Variablen haben können.It may be followed by further analysis. For example, it can be examined under which Circumstances the relevant conditions may take which Boolean value or which value involved variables may have.

Das Verfahren kann durch den Einsatz mindestens eines statischen Analysewerkzeugs unterstützt werden. Die Qualität des Ergebnisses der Fehleranalyse hängt stark von der verwendeten Suchtechnik (einfache Textsuche, Suche nach regulären Ausdrücken etc.) und dem gesuchten Bezeichner ab. Möglicherweise ist das Ergebnis der Suche unvollständig oder fehlerhaft. Wird beispielsweise nach einer globalen Variable gesucht, werden wahrscheinlich auch lokale Variablen gleichen Namens gefunden oder es müssen weitere Suchschritte folgen, da der Bezeichner auch synonym verwendet wurde. Das Suchergebnis muss also interpretiert werden. Die Analyse der Reihenfolge und die Bestimmung der relevanten Funktionen erfordert ein Verstehen der Blockstruktur der umgebenden Funktion. Diese Blockstruktur kann sehr komplex sein, so dass ein Erkennen der relevanten Bedingungen und der Ausführungsreihenfolge erschwert wird. Die Anzahl der für die Fehlerursache relevanten Daten ist beträchtlich und die Daten sind im Quelltext verteilt. Das beschriebene Verfahren ist zur Vermeidung der Verarbeitung und Interpretation großer Datenmenge in einem Analysewerkzeug als ein Softwareprogramm implementiert. Ohne Werkzeugunterstützung ist der Anwender auf zusätzliche Notizen und manuell erstellte grafische Darstellungen angewiesen. Beispielsweise statische Analysewerkzeuge bieten ausgefeilte Techniken und Darstellungen, welche das Suchen nach Bezeichnern und die Analyse der Blockstruktur einer Funktion erleichtern. Kombiniert man diese Techniken und das erfindungsgemäße Verfahren, ergeben sich deutliche Erleichterungen bei der Fehleranalyse.The Procedure may be through the use of at least one static analysis tool get supported. The quality of the result The error analysis depends heavily on the search technique used (simple text search, search for regular expressions etc.) and the desired identifier. Maybe it is the result of the search incomplete or incorrect. Becomes For example, looking for a global variable will likely also found or need local variables with the same name Further search steps follow, since the identifier also uses synonymously has been. The search result must therefore be interpreted. The analysis the order and the determination of the relevant functions requires an understanding of the block structure of the surrounding function. This block structure can be very complex, allowing a recognition of the relevant conditions and the execution order is made more difficult. The number the data relevant to the cause of the error is significant and the data is distributed in the source text. The method described is great for avoiding processing and interpretation Amount of data implemented in an analysis tool as a software program. Without tool support, the user is on additional Mentioned notes and manually created graphical representations. For example, static analysis tools offer sophisticated techniques and representations looking for identifiers and analysis facilitate the block structure of a function. Combine this Techniques and the method according to the invention, There are significant simplifications in error analysis.

Beispielsweise können solche statischen Analysewerkzeuge zur Fehlerdetektion eingesetzt werden. Sie können insbesondere eine maximale Ausführungszeit eines Programms bei gegebener Hardware oder eine abstrakte Interpretation des Programms durchführen.For example can such static analysis tools for error detection be used. In particular, you can have a maximum execution time a program with given hardware or an abstract interpretation of the program.

Weitere statische Analysewerkzeuge können eine interprozedurale Datenflussanalyse durchführen. Dabei werden beispielsweise Fehler bei der Ressourcenverwaltung, Divisionen durch 0 und Ähnliches erkannt.Further static analysis tools can be an inter-procedural Perform data flow analysis. In this case, for example Resource management errors, divide by 0 and so on recognized.

Ebenso können statische Analysewerkzeuge als Rekonstruktionswerkzeuge (im Folgenden Reverse-Engineering-Werkzeuge genannt) ausgebildet sein.As well can use static analysis tools as reconstruction tools (referred to below as reverse engineering tools).

Reverse Engineering bezeichnet den Vorgang, aus einem bestehenden System durch die Untersuchung der Strukturen und der Abläufe wieder verwendbare Konstruktionselemente zu extrahieren. Aufgrund der abstrakteren Darstellung des Quelltextes lassen sich solche Werkzeuge für die Fehleranalyse einsetzen, auch wenn dies nicht ihr primäres Aufgabengebiet ist.Reverse Engineering refers to the process from an existing system reusable by examining structures and processes Extract construction elements. Because of the more abstract Presentation of the source code can be such tools for use the error analysis, even if this is not their primary area of responsibility is.

Für die Fehleranalyse bieten Reverse-Engineering-Werkzeuge Unterstützung bei der Suche nach den Quelltextstellen. Sie stellen Aufrufgraphen und Darstellungen der Blockstruktur von Funktionen zur Verfügung. Diese Informationen sind hilfreich für die Analyse einer Fehlerursache, für sich genommen ohne das erfindungsgemäße Verfahren zur statischen Fehleranalyse jedoch unzureichend.For the error analysis provide reverse engineering tools support in the search for the source text locations. They provide call graphs and Representations of the block structure of functions available. This information is helpful for the analysis of a Cause of error, taken alone without the invention Procedure for static failure analysis but insufficient.

Im Folgenden werden Ausführungsbeispiele der Erfindung anhand von Zeichnungen näher erläutert.in the Below, embodiments of the invention are based on explained in more detail by drawings.

Dabei zeigen:there demonstrate:

1 einen Kontrollflussgraphen einer Funktion in einem Programm, 1 a control flow graph of a function in a program,

2 einen anweisungsbezogenen Aufruf- und Kontrollflussgraphen der Funktion aus 1, 2 an instruction-related call and control flow graph of the function 1 .

3 einen Quelltext eines weiteren Programms, 3 a source code of another program,

4 Kontrollflussgraphen der Funktionen g, j, und main des Programms aus 3 gemäß Stand der Technik, 4 Control flow graphs of functions g, j, and main of the program 3 according to the prior art,

5 einen Aufrufgraphen der Funktion g des Programms aus 3 gemäß Stand der Technik, 5 a call graph of the function g of the program 3 according to the prior art,

6 einen anweisungsbezogenen Aufruf- und Kontrollflussgraphen der Funktionen g, j, und main des Programms aus 3, 6 an instruction-related call and control flow graph of the functions g, j, and main of the program 3 .

7 einen weiteren anweisungsbezogenen Aufruf- und Kontrollflussgraphen der Funktionen g, j, und main des Programms aus 3 mit veränderter Fragestellung, 7 another instruction-related call and control flow graphs of functions g, j, and main of the program 3 with a changed question,

8 ein Ausführungsbeispiel für einen Quelltext eines Programms, und 8th an embodiment of a source code of a program, and

9 einen anweisungsbezogenen Aufruf- und Kontrollflussgraph des Programms gemäß 8. 9 an instruction-related call and control flow graph of the program according to 8th ,

In 1 ist ein mittels eines statischen Analysewerkzeugs erstellter Kontrollflussgraph 1 abgebildet. Als statisches Analysewerkzeug kommt beispielsweise der C/C++-Analysator in Betracht. Der C/C++-Analysator ist ein Werkzeug zur stati schen Analyse von C und C++-Quellen. Er bietet die Möglichkeit, Analysedaten grafisch oder in Form von Listen darzustellen. Weiterhin bietet er eine Abfragesprache, mit Hilfe derer es dem Anwender möglich ist, selbst Listen- oder grafische Darstellungen des Quellcodes zu definieren. Diese Abfragesprache wurde für die Implementierung der nachfolgend vorgestellten Darstellungen verwendet, die so gestaltet ist, dass sie ausschließlich potentiell relevante Informationen grafisch präsentiert.In 1 is a control flow graph created using a static analysis tool 1 displayed. As a static analysis tool, for example, the C / C ++ analyzer is considered. The C / C ++ analyzer is a tool for static analysis of C and C ++ sources. He offers the possibility ability to display analysis data graphically or in the form of lists. Furthermore, it offers a query language, with the help of which it is possible for the user to define even list or graphical representations of the source code. This query language was used to implement the representations presented below, which is designed to graphically present only potentially relevant information.

Ausgangspunkt für das Verfahren ist eine Quelltextstelle 2, die beispielsweise als Ursache eines detektierten Fehlers in Frage kommt. Mit vorhandenen Mitteln des C/C++-Analysators lassen sich beteiligte Variablen leicht identifizieren. Ebenso einfach können die Quelltextstellen 2, an denen die beteiligten Variablen beschrieben werden, ermittelt werden. Dies sind die Ausgangspunkte für den Algorithmus.The starting point for the method is a source text location 2 , for example, as the cause of a detected error in question. Existing variables of the C / C ++ analyzer easily identify involved variables. The source code points can be just as simple 2 where the variables involved are described. These are the starting points for the algorithm.

Eine Fehleranalyse wird folgendermaßen durchgeführt:

  • – Identifizierung von Quelltextstellen 2 mit Programmanweisungen in einem Programmquelltext, die als Fehlerursache in Frage kommen,
  • – Ermittlung mindestens eines Ausführungspfades für jede der Quelltextstellen 2 in einer die Quelltextstelle 2 umgebenden Funktion;
  • – Ermittlung von Aufrufstellen der umgebenden Funktion;
  • – Beginn einer neuen Iteration mit ermittelten Aufrufstellen als Quelltextstellen 2 oder Abbruch, falls keine in den vorherigen Iterationen unberücksichtigten Aufrufstellen ermittelt wurden.
An error analysis is performed as follows:
  • - Identification of source text locations 2 with program statements in a program source text which can be considered as the cause of the error
  • Determination of at least one execution path for each of the source text locations 2 in one the source text location 2 surrounding function;
  • - determination of call points of the surrounding function;
  • - Start of a new iteration with identified call points as source text locations 2 or Cancel, if no call points not considered in the previous iterations were found.

Zur Menge der relevanten Informationen gelangt man durch folgende rekursive Definition: Relevante Informationen bezogen auf die Ausführung einer oder mehrerer Quelltextstellen 2 sind:

  • 1. die Quelltextstellen 2 selbst
  • 2. vorzeitige Aussprungpunkte im Sinne eines Kontrollflusses (return, break, continue)
  • 3. alle Bedingungen innerhalb der die Quelltextstellen 2 umgebenden Funktion, die relevant für die Ausführung der relevanten Quelltextstellen 2 sind
  • 4. die umgebende Funktion
  • 5. Aufrufstellen der umgebenden Funktion sind ebenfalls relevant und müssen analog zu 1–3 wie relevante Quelltextstellen 2 behandelt werden
  • 6. Enthält ein Block mehrere relevante Quelltextstellen 2, ist deren Ausführungsreihenfolge ebenfalls relevant.
The following recursive definition is obtained for the amount of relevant information: Relevant information related to the execution of one or more source text locations 2 are:
  • 1. the source text locations 2 even
  • 2. premature exit points in the sense of a control flow (return, break, continue)
  • 3. all conditions within the source text locations 2 surrounding function that is relevant to the execution of the relevant source code locations 2 are
  • 4. the surrounding function
  • 5. Calling points of the surrounding function are also relevant and must be analogous to 1-3 as relevant source text locations 2 be treated
  • 6. Does a block contain several relevant source text locations 2 , whose execution order is also relevant.

Das Programm in 1 weist eine Funktion main auf. Da die Funktion main nicht rekursiv aufgerufen wird, müssen nur Bedingungen innerhalb der Funktion untersucht werden. Eine Analyse von Aufrufbeziehungen entfällt. Bei der Fehleranalyse ist der in 1 gezeigte Kontrollflussgraph 1 der Funktion main hilfreich. Er zeigt alle möglichen Ausführungspfade durch die Funktion.The program in 1 has a function main. Since the main function is not called recursively, only conditions within the function need to be examined. An analysis of call relationships is omitted. In the error analysis is the in 1 shown control flow graph 1 the function main helpful. It shows all possible execution paths through the function.

Die Quelltextstelle 2 kommt als Fehlerursache in Frage. Es werden alle Verzweigungsstellen 3 gesucht, die relevant für das Ausführen der Anweisung an der Quelltextstelle 2 sind. Im gezeigten Beispiel existiert nur eine relevante Verzweigungsstelle 3. Alle anderen Verzweigungsstellen sind bezogen auf die Fragestellung irrelevant. Das Ergebnis der Analyse ist: Die Anweisung an der Quelltextstelle 2 wird ausgeführt, falls die Bedingung an der Verzweigungsstelle 3 den booleschen Wert "FALSE" hat.The source text location 2 comes as a cause of error in question. There will be all branching points 3 which is relevant for executing the statement at the source code location 2 are. In the example shown, only one relevant branch point exists 3 , All other branching points are irrelevant in relation to the question. The result of the analysis is: The statement at the source code location 2 is executed if the condition at the branch point 3 has the boolean value "FALSE".

Die Fehleranalyse führt zu einer stark vereinfachten Darstellung eines anweisungsbezogenen Aufruf- und Kontrollflussgraphen 4, wie in 2 gezeigt ist. Er stellt Folgendes dar: In der Funktion main existiert ein Ausführungspfad 5 zur untersuchten Quelltextstelle 2 über die Verzweigungsstelle 3 mit der Bedingung if(1). Hat das Ergebnis der Bedingung den booleschen Wert "FALSE", wird die Anweisung an der Quelltextstelle 2 ausgeführt.The error analysis leads to a greatly simplified representation of an instruction-related call and control flow graph 4 , as in 2 is shown. It shows the following: There is an execution path in the main function 5 to the examined source text place 2 via the branching point 3 with the condition if (1). If the result of the condition has the Boolean value "FALSE", the statement will be at the source code location 2 executed.

In 3 ist ein Programmquelltext 6 eines weiteren Programms mit Funktionsaufrufen 7 gezeigt. Es soll ermittelt werden, unter welchen Bedingungen die Anweisung an der Quelltextstelle 2 in Zeile 12 ausgeführt wird.In 3 is a program source text 6 another program with function calls 7 shown. It should be determined under which conditions the instruction at the source code location 2 in line 12 is performed.

In 4 sind aus dem Stand der Technik bekannte Kontrollflussgraphen 1.1, 1.2, 1.3 der Funktionen main, j, g des Programms aus 3 dargestellt. Die Funktion g enthält die Quelltextstelle 2 aus Zeile 12.In 4 are control flow graphs known in the art 1.1 . 1.2 . 1.3 the functions main, j, g of the program 3 shown. The function g contains the source text location 2 from line 12 ,

5 zeigt den Aufrufgraphen für die Funktion g nach dem Stand der Technik. Er zeigt, dass die Funktion g von den Funktionen j und main aufgerufen wird. Er zeigt nicht, unter welchen Bedingungen g und wie oft und in welcher Reihenfolge die Funktionen g und j gerufen werden. 5 shows the call graph for the function g according to the prior art. It shows that the g function is called by the j and main functions. It does not show under which conditions g and how often and in what order the functions g and j are called.

Die Aufrufstellen der Funktion g in main und j müssen bei diesem Beispiel mit untersucht werden, da die Bedingungen des Aufrufs relevant für die Ausführung der Anweisung an der Quelltextstelle 2 sind.The call places of function g in main and j must be examined in this example because the conditions of the call are relevant for the execution of the statement at the source code location 2 are.

Das Ergebnis der Fehleranalyse für dieses Beispiel ist: Die Anweisung an der Quelltextstelle 2 in Zeile 12 wird einmal unbedingt ausgeführt und einmal, falls die Bedingung an der Verzweigungsstelle 3 in Zeile 3 des Programmquelltextes 6 aus 3 den booleschen Wert "TRUE" hat.The result of the error analysis for this example is: The statement at the source code location 2 in line 12 is necessarily executed once and once if the condition at the branch point 3 in line 3 the program source text 6 out 3 has the Boolean value "TRUE".

6 zeigt den erfindungsgemäßen, anweisungsbezogenen Aufruf- und Kontrollflussgraphen 4 des Programms aus 3. Es wird deutlich, dass es zwei Ausführungspfade 5.1, 5.2 zur Quelltextstelle 2 mit der Anweisung in Zeile 12 gibt. Die Funktion main ruft die Funktionen g und h in der Reihenfolge der Nummerierung der Ausführungspfade 5.1, 5.2 auf. 6 shows the instruction-related call and control flow graphs according to the invention 4 of the program 3 , It becomes clear that there are two execution paths 5.1 . 5.2 to the source text location 2 with the statement in line 12 gives. The function main calls the functions g and h in the order of Numbering of the execution paths 5.1 . 5.2 on.

Der Ausführungspfad 5.1 ist unbedingt. Der Ausführungspfad 5.2 enthält eine Verzweigungsstelle 3 mit der Bedingung if(6), welche den booleschen Wert "TRUE" annehmen muss, damit die Funktion g gerufen und die Anweisung an der Quelltextstelle 2 ausgeführt wird.The execution path 5.1 is necessarily. The execution path 5.2 contains a branch point 3 with the condition if (6), which must assume the Boolean value "TRUE", so that the function g is called and the statement at the source text location 2 is performed.

7 zeigt einen weiteren erfindungsgemäßen, anweisungsbezogenen Aufruf- und Kontrollflussgraphen 4 der Funktionen g, j, und main des Programms aus 3 mit veränderter Fragestellung. Es soll untersucht werden, in welcher Reihenfolge die Anweisungen an den Quelltextstellen 2.1, 2.2 in Zeile 12 und Zeile 20 des Programms aus 3 ausgeführt werden. 7 shows another inventive, instruction-related call and control flow graph 4 functions g, j, and main of the program 3 with a changed question. It is to be examined, in which order the instructions at the source text locations 2.1 . 2.2 in line 12 and line 20 of the program 3 be executed.

Der anweisungsbezogene Aufruf- und Kontrollflussgraph 4 zeigt, dass zuerst unbedingt die Anweisung der Quelltextstelle 2.1 ausgeführt wird. Danach wird die Anweisung der Quelltextstelle 2.2 ausgeführt. Falls die Bedingung if(6) an der Verzweigungsstelle 3 in Zeile 3 den booleschen Wert "TRUE" hat, wird die Anweisung an der Quelltextstelle 2.1 wiederholt ausgeführt.The statement-related call and control flow graph 4 shows that first necessarily the statement of the source code location 2.1 is performed. After that, the statement of the source text location 2.2 executed. If the condition is if (6) at the branch point 3 in line 3 has the Boolean value "TRUE", the statement will be at the source code location 2.1 repeatedly executed.

8 zeigt ein weiteres Ausführungsbeispiel für einen Quelltext 6 eines Programms. Die Erfindung wird nachfolgend anhand dieses Programms und der 9, welche den zugehöri gen anweisungsbezogenen Aufruf- und Kontrollflussgraph 4 des Programms gemäß 8 zeigt, näher beschrieben. 8th shows another embodiment of a source code 6 a program. The invention will be described below with reference to this program and the 9 which contains the associated instruction-related call and control flow graph 4 according to the program 8th shows, described in more detail.

Am Beispiel der Division gemäß der Quelltextstelle 2.3 in Zeile 21 des Programms wird nachfolgend das Fehleranalyseverfahren erläutert. Dabei wird als möglicher Fehler eine Division durch Null angenommen.Using the example of the division according to the source text 2.3 in line 21 of the program, the error analysis method is explained below. A possible error is a division by zero.

In einem ersten Schritt werden im Quelltext 6 Quelltextstellen 2.3 (= Zeile 21) mit Programmanweisungen identifiziert, die den möglichen Fehler verursachen oder vermeiden können. Dabei wird für die identifizierten Quelltextstellen 2.3 eine Anfangshypothese derart angenommen, dass der Fehler an diesen identifizierten Quelltextstellen 2.3 nicht auftritt, d. h. dass der Dividend nicht Null ist, wenn die Division ausgeführt wird.In a first step are in the source code 6 source points 2.3 (= Line 21 ) are identified with program instructions that can cause or avoid the possible error. This is for the identified source text locations 2.3 an initial hypothesis is assumed such that the error at these identified source text locations 2.3 does not occur, that is, the dividend is not zero when the division is executed.

Hierzu werden der oder die Ausführungspfade 5.2 für jede der identifizierten Quelltextstellen 2.3 in einer die Quelltextstelle 2.3 umgebenden Funktion identifiziert.For this purpose, the one or more execution paths 5.2 for each of the identified source code locations 2.3 in one the source text location 2.3 identified surrounding function.

Darüber hinaus werden alle internen Anweisungen "dividend = 1" weiterer Quelltextstellen 2.4 der umgebenden Funktion ermittelt, welche von der Anfangshypothese abhängig sind oder auf diese Einfluss haben. Als eine solche Quelltextstelle 2.4 wird die Anweisung "dividend = 1" in Zeile 33 identifiziert, die dem Dividenden den Wert 1 zuordnet.In addition, all internal statements will "divide = 1" to other source code locations 2.4 the surrounding function determines which ones are dependent on or influence the initial hypothesis. As such a source code place 2.4 the statement "dividend = 1" is in line 33 which assigns the value 1 to the dividend.

Diese Anweisung "dividend = 1" kann verhindern, dass die Division in Zeile 21 eine Null-Division ist, wenn diese Anweisung "dividend = 1" in Zeile 33 vor der Anweisung der Division "return 1/dividend" in Zeile 21 ausgeführt wird. Diese Annahme kann als eine weitere Hypothese, insbesondere eine Ausführungshypothese erstellt werden. Diese Hypothese wird ge prüft, indem die dieser Anweisung "dividend = 1" zugehörigen internen Aufrufstellen "int foo(int v)" (Zeile 24) und "int main()" (Zeile 7) und der zugehörige Ausführungspfad 5.1 identifiziert werden.This statement "dividend = 1" can prevent the division in line 21 A zero division is when this statement "dividend = 1" in line 33 before the instruction of the division "return 1 / dividend" in line 21 is performed. This assumption can be created as a further hypothesis, in particular an execution hypothesis. This hypothesis is checked by the internal invocation "int foo (int v)" associated with this "dividend = 1" instruction (line 24 ) and "int main ()" (line 7 ) and the associated execution path 5.1 be identified.

Mit anderen Worten: Diejenigen den betreffenden Ausführungspfad 5.1 repräsentierenden Bedingungen, Verknüpfungen und/oder Wertzuweisungen zu einer Variablen werden identifiziert, die ermöglichen, dass die Zeile 33 vor der Zeile 21 ausgeführt wird.In other words: those the relevant execution path 5.1 Representing conditions, joins, and / or value assignments to a variable are identified that enable the line 33 in front of the line 21 is performed.

Als solche internen Aufrufstellen 2.5 bis 2.7 oder Anweisungen mit entsprechenden Bedingungen werden die Anweisungen "for(i = 0; i < 5; ++i)", "if(v == 3)" und "if(condition)" in Zeile 10, Zeile 27 und Zeile 31 identifiziert. Dabei kann die Anweisung "if(v == 3)" in Zeile 27 einen solchen Zustand einnehmen, dass die Zeile 33 nicht ausgeführt wird.As such internal call points 2.5 to 2.7 or statements with appropriate conditions, the statements "for (i = 0; i <5; ++ i)", "if (v == 3)" and "if (condition)" are in line 10 , Row 27 and line 31 identified. The statement "if (v == 3)" can be in line 27 take such a state that the line 33 not executed.

Um dies zu prüfen, werden alle identifizierten internen Anweisungen "for(i = 0; i < 5; ++i)", "if(v == 3)" und "if(condition)" als ein weiterer boolescher Ausdruck einer Ausführungshypothese erzeugt und geprüft, indem die betreffenden Bedingungen, Verknüpfungen und/oder Werte von Variablen der jeweiligen Aufrufstelle 2.5 bis 2.7 und/oder Anweisungen "for(i = 0; i < 5; ++i)", "if(v == 3)" und "if(condition)" auf Richtigkeit geprüft werden.To test this, all of the identified internal statements "for (i = 0; i <5; ++ i)", "if (v == 3)", and "if (condition)" become another Boolean expression of an execution hypothesis generated and checked by the relevant conditions, links and / or values of variables of the respective call site 2.5 to 2.7 and / or statements "for (i = 0; i <5; ++ i)", "if (v == 3)" and "if (condition)" are checked for correctness.

Der boolesche Ausdruck für die Ausführungshypothese der Anweisungen "for(i = 0; i < 5; ++i)", "if(v == 3)" und "if(condition)" in Zeilen 10, 27 und 31 gemäß dem Ausführungsbeispiel lautet wie folgt:

  • – Die Bedingung "v == 3" in Zeile 27 ist falsch "false" und die Bedingung in Zeile 31 wird als wahr "true" evaluiert innerhalb mindestens eines Zyklus der Schleife gemäß Zeile 10;
  • – Die Schleifenbedingung in Zeile 10 mit "i < 5" kann wahr werden.
The Boolean expression for the execution hypothesis of the statements "for (i = 0; i <5; ++ i)", "if (v == 3)" and "if (condition)" in lines 10 . 27 and 31 according to the embodiment is as follows:
  • - The condition "v == 3" in line 27 is false and the condition is in line 31 is evaluated as true "true" within at least one cycle of the loop according to line 10 ;
  • - The loop condition in line 10 with "i <5" can come true.

Beim Beweisen der betreffenden Ausführungshypothese/n werden die möglichen Bedingungen und Eingaben der betreffenden internen Anweisungen "for(i = 0; i < 5; ++i)", "if(v == 3)" und "if(condition)" geprüft. Dabei werden diese internen Anweisungen "for(i = 0; i < 5; ++i)", "if(v == 3)" und "if(condition)" anhand des erzeugten booleschen Ausdrucks der Hypothese/n solange geprüft, bis alle diejenigen Aufrufstellen oder Anweisungen "for(i = 0; i < 5; ++i)", "if(v == 3)" und "if(condition)" in Zeilen 10, 27 und 31 identifiziert sind, die nur von Programmeingängen abhängig sind.In proving the respective execution hypothesis / n, the possible conditions and inputs of the relevant internal statements "for (i = 0; i <5; ++ i)", "if (v == 3)" and "if (condition)" checked. These internal statements "for (i = 0; i <5; ++ i)", "if (v == 3)" and "if (condition)" are checked on the basis of the generated Boolean expression of the hypothesis (s), until all the those calls or statements "for (i = 0; i <5; ++ i)", "if (v == 3)" and "if (condition)" in lines 10 . 27 and 31 are identified, which depend only on program inputs.

Wird eine solche identifiziert, wie beispielsweise die Anweisung "if(condition)" in Zeile 31, so wird die Abhängigkeit des Programmeingangs anhand der betreffenden Ausführungshypothese derart geprüft, dass die Anfangshypothese bewiesen ist, wenn bei Ausführung der Aufrufstelle oder Anweisung "if(condition)" der oder die Programmeingänge nicht zu dem erwarteten Fehler führen.If such is identified, such as the statement "if (condition)" in line 31 , the dependence of the program input on the relevant execution hypothesis is checked in such a way that the initial hypothesis is proven if the program entry (s) do not lead to the expected error when the call point or instruction "if (condition)" is executed.

Beim Prüfen der Anweisung "if(condition)" wird im vorliegenden Ausführungsbeispiel identifiziert, dass diese niemals den Wert "wahr" einnehmen wird, welcher Voraussetzung ist, um die Anweisung "dividend=1" in Zeile 33 auszuführen. Der boolesche Ausdruck der betreffenden Ausführungshypothese evaluiert somit den Wert "falsch" als Ergebnis, wobei jeder Eingang den erwarteten Fehler verursacht. Somit ist die Hypothese, dass die Zeile 33 immer vor der Zeile 21 ausgeführt wird, nicht bestätigt und der den Fehler verursachende Programmeingang identifiziert worden.In examining the statement "if (condition)", it is identified in the present embodiment that it will never take the value "true", which is a prerequisite to the statement "dividend = 1" in line 33 perform. The Boolean expression of the respective execution hypothesis thus evaluates the value "false" as a result, with each input causing the expected error. Thus, the hypothesis is that the line 33 always in front of the line 21 is executed, not confirmed and the error causing program input has been identified.

Je nach Komplexität des Programms kann gegebenenfalls eine neue Iteration mit ermittelten Aufrufstellen und/oder Anweisungen als Quelltextstellen zur Identifizierung weiterer Programmeingänge, die zu dem erwarteten Fehler durchgeführt werden.ever Depending on the complexity of the program may be a new iteration with determined call points and / or instructions as source text locations for identifying further program inputs, which are performed on the expected error.

Werden hingegen alle aufgestellten Hypothesen einschließlich der Anfangshypothese bestätigt, so wird kein Programmeingang identifiziert, der den erwarteten Fehler verursacht. In diesem Fall wird das Fehleranalyseverfahren abgebrochen.Become on the other hand all hypotheses including the Initial hypothesis confirmed, then no program input identified that causes the expected error. In this case the error analysis procedure is aborted.

1, 1.1, 1.2, 1.31, 1.1, 1.2, 1.3
KontrollflussgraphenControl flow graph
2, 2.1 bis 2.72, 2.1 to 2.7
Quelltextstellensource points
33
Verzweigungsstellebranching point
44
anweisungsbezogener Aufruf- und Kontrollflussgraphinstruction related Call and control flow graph
5, 5.1 bis 5.35, 5.1 to 5.3
Ausführungspfadeexecution paths
66
Programmquelltextprogram source code
77
Funktionsaufruffunction call

ZITATE ENTHALTEN IN DER BESCHREIBUNGQUOTES INCLUDE IN THE DESCRIPTION

Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.This list The documents listed by the applicant have been automated generated and is solely for better information recorded by the reader. The list is not part of the German Patent or utility model application. The DPMA takes over no liability for any errors or omissions.

Zitierte PatentliteraturCited patent literature

  • - DE 69505038 T2 [0004] - DE 69505038 T2 [0004]

Claims (10)

Verfahren zur statischen Fehleranalyse in einem Programm, umfassend Programmanweisungen, bei dem ein Fehler detektiert, seine Zugehörigkeit zu einer Fehlerklasse bestimmt und seine Ursache ermittelt wird, dadurch gekennzeichnet, dass mindestens eine Iteration folgender Schritte zur Erstellung eines anweisungsbezogenen Aufruf- und Kontrollflussgraphen (4) erfolgt: – Identifizierung von Quelltextstellen (2) mit Programmweisungen in einem Programmquelltext (6), die als Fehlerursache in Frage kommen; – Ermittlung mindestens eines Ausführungspfades (5) für jede der Quelltextstellen (2) in einer die Quelltextstelle (2) umgebenden Funktion; – Ermittlung von Aufrufstellen der umgebenden Funktion; – Beginn einer neuen Iteration mit ermittelten Aufrufstellen als Quelltextstellen (2) oder Abbruch, falls keine in den vorherigen Iterationen unberücksichtigten Aufrufstellen ermittelt wurden.A method for static error analysis in a program, comprising program instructions, in which an error is detected, its membership in an error class determined and its cause determined, characterized in that at least one iteration of the following steps to create an instruction-related call and control flow graph ( 4 ): - Identification of source code locations ( 2 ) with program statements in a program source text ( 6 ), which may be the cause of the error; Determination of at least one execution path ( 5 ) for each of the source text locations ( 2 ) in one the source text location ( 2 ) surrounding function; - determination of call points of the surrounding function; - Start of a new iteration with determined call points as source text locations ( 2 ) or abort if none of the call sites ignored in the previous iterations were determined. Verfahren nach Anspruch 1, dadurch gekennzeichnet, dass die Schritte der Iteration wie folgt ausgeführt werden: – Identifizierung von Quelltextstellen (2) mit Programmanweisungen in einem Programmquelltext (6), die einen Fehler verursachen oder vermeiden können, wobei für die identifizierten Quelltextstellen (2) eine Anfangshypothese derart angenommen wird, dass der Fehler an diesen identifizierten Quelltextstellen (2) nicht auftritt,; – Ermittlung mindestens eines oder aller Ausführungspfade (5, 5.1 bis 5.3) für jede der identifizierten Quelltextstellen (2.3 bis 2.7); – Ermittlung von allen internen Aufrufstellen und/oder Anweisungen, welche von der Anfangshypothese abhängig sind, in dem oder in allen Ausführungspfaden (5, 5.1 bis 5.3); – Erzeugung eines booleschen Ausdrucks anhand von mindestens einer Bedingung, einer Verknüpfung und/oder mindestens einem Wert und/oder mindestens einem Wertebereich einer Variablen aller von der Anfangshypothese abhängigen und ermittelten internen Aufrufstellen und/oder Anweisungen als mindestens eine Ausführungshypothese; – Prüfen des booleschen Ausdrucks aller ermittelten internen Aufrufstellen und/oder Anweisungen auf Richtigkeit der betreffenden Bedingung, Verknüpfung, des Wertes und/oder des Wertebereichs einer Variablen unter Annahme einer oder mehrerer der Ausführungshypothesen; – Beweisen der Anfangshypothese, indem die internen Aufrufstellen und/oder Anweisungen des erzeugten booleschen Ausdrucks anhand der Ausführungshypothese solange geprüft werden, bis alle diejenigen Aufrufstellen und/oder Anweisungen identifiziert sind, die nur von Programmeingängen abhängig sind, oder bis kein Widerspruch identifiziert ist, und Prüfen der Abhängigkeit der Programmeingänge anhand der Ausführungshypothese derart, dass die Anfangshypothese bewiesen ist, wenn bei Ausführung der Aufrufstellen und/oder Anweisungen die Programmeingänge nicht zu dem erwarteten Fehler führen; – Abbruch, falls die oder alle Ausführungs- und Anfangs hypothesen bestätigt werden oder – anderenfalls identifizieren des den erwarteten Fehler verursachenden Programmeingangs und gegebenenfalls Beginn einer neuen Iteration mit ermittelten oder noch zu ermittelnden Aufrufstellen und/oder Anweisungen als weitere Quelltextstellen (2, 2.1 bis 2.7) zur Identifizierung weiterer Programmeingänge, die zu dem erwarteten Fehler führen können.Method according to Claim 1, characterized in that the steps of the iteration are carried out as follows: - identification of source code locations ( 2 ) with program statements in a program source text ( 6 ), which can cause or avoid an error, whereby for the identified source text locations ( 2 ) an initial hypothesis is assumed such that the error at these identified source text locations ( 2 ) does not occur; Determination of at least one or all execution paths ( 5 . 5.1 to 5.3 ) for each of the identified source code locations ( 2.3 to 2.7 ); Determination of all internal call points and / or instructions which depend on the initial hypothesis in the or in all execution paths ( 5 . 5.1 to 5.3 ); - generating a Boolean expression based on at least one condition, a link and / or at least one value and / or at least one value range of a variable of all dependent on the initial hypothesis and determined internal call points and / or instructions as at least one execution hypothesis; - checking the Boolean expression of all determined internal call points and / or instructions for the correctness of the condition, link, value and / or range of a variable, assuming one or more of the execution hypotheses; Prove the initial hypothesis by examining the internal call points and / or statements of the generated Boolean expression against the execution hypothesis until all those call points and / or statements are identified that depend only on program inputs or until no contradiction is identified, and Checking the dependence of the program inputs on the execution hypothesis such that the initial hypothesis is proven if, upon execution of the call locations and / or instructions, the program inputs do not result in the expected error; - abort if the or all execution and initial hypotheses are confirmed or - otherwise identify the program error causing the expected error and, if appropriate, start of a new iteration with determined or yet to be determined call points and / or instructions as further source text locations ( 2 . 2.1 to 2.7 ) to identify further program inputs that may lead to the expected error. Verfahren nach Anspruch 1 oder 2, dadurch gekennzeichnet, dass jeweils mindestens ein boolescher Wert einer Bedingung, mindestens ein boolescher Wert einer Verknüpfung, und/oder mindestens ein Wert einer beteiligten Variablen und/oder mindestens ein Wertbereich einer beteiligten Variablen in mindestens einem der oder in allen Ausführungspfade/n (5, 5.1 bis 5.3) ermittelt wird.Method according to claim 1 or 2, characterized in that in each case at least one Boolean value of a condition, at least one Boolean value of a link, and / or at least one value of a participating variable and / or at least one value range of a participating variable in at least one of the all execution paths (s) ( 5 . 5.1 to 5.3 ) is determined. Verfahren nach einem der vorhergehenden Ansprüche, dadurch gekennzeichnet, dass als ein möglicher Fehler das Fehlen einer notwendigen Anweisung detektiert und in eine erste Fehlerklasse klassifiziert wird.Method according to one of the preceding claims, characterized in that as a possible error the Absence of a necessary instruction detected and in a first Error class is classified. Verfahren nach einem der vorhergehenden Ansprüche, dadurch gekennzeichnet, dass als ein möglicher Fehler eine falsche Anweisung detektiert und in eine zweite Fehlerklasse klassifiziert wird.Method according to one of the preceding claims, characterized in that as a possible error a detected incorrect instruction and classified into a second error class becomes. Verfahren nach einem der vorhergehenden Ansprüche, dadurch gekennzeichnet, dass als ein möglicher Fehler eine fehlerhafte Bedingungslogik detektiert und in eine dritte Fehlerklasse klassifiziert wird.Method according to one of the preceding claims, characterized in that as a possible error a erroneous conditional logic detected and in a third error class is classified. Verfahren nach einem der vorhergehenden Ansprüche, dadurch gekennzeichnet, dass als ein möglicher Fehler eine fehlerhafte Anweisungsreihenfolge detektiert und in eine vierte Fehlerklasse klassifiziert wird.Method according to one of the preceding claims, characterized in that as a possible error a erroneous instruction sequence detected and in a fourth Error class is classified. Verfahren nach einem der vorhergehenden Ansprüche, dadurch gekennzeichnet, dass zur Erstellung und/oder Auswertung des Aufruf- und Kontrollflussgraphen (1) mindestens ein statisches Analysewerkzeug verwendet wird.Method according to one of the preceding claims, characterized in that for the creation and / or evaluation of the call and control flow graph ( 1 ) at least one static analysis tool is used. Verfahren nach Anspruch 4, dadurch gekennzeichnet, dass das statische Analysewerkzeug zur Ermittlung der Fehlerklasse verwendet wird.Method according to claim 4, characterized in that that the static analysis tool to determine the error class is used. Verfahren nach Anspruch 3 oder 4, dadurch gekennzeichnet, dass als statisches Analysewerkzeug ein Rekonstruktions-Werkzeug verwendet wird.A method according to claim 3 or 4, characterized in that a reconstruction tool is used as the static analysis tool.
DE102008015060A 2007-10-23 2008-03-19 Static error analysis method for program, involves starting new iteration with call determined areas as source text areas, and aborting new iteration when no call areas in previous iterations are determined Withdrawn DE102008015060A1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
DE102008015060A DE102008015060A1 (en) 2007-10-23 2008-03-19 Static error analysis method for program, involves starting new iteration with call determined areas as source text areas, and aborting new iteration when no call areas in previous iterations are determined

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
DE102007050922.9 2007-10-23
DE102007050922 2007-10-23
DE102008006499.8 2008-01-29
DE102008006499 2008-01-29
DE102008015060A DE102008015060A1 (en) 2007-10-23 2008-03-19 Static error analysis method for program, involves starting new iteration with call determined areas as source text areas, and aborting new iteration when no call areas in previous iterations are determined

Publications (1)

Publication Number Publication Date
DE102008015060A1 true DE102008015060A1 (en) 2008-10-23

Family

ID=39768118

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102008015060A Withdrawn DE102008015060A1 (en) 2007-10-23 2008-03-19 Static error analysis method for program, involves starting new iteration with call determined areas as source text areas, and aborting new iteration when no call areas in previous iterations are determined

Country Status (1)

Country Link
DE (1) DE102008015060A1 (en)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69505038T2 (en) 1994-04-18 1999-02-18 Bull S.A., Louveciennes Deadlock detection method in a multiprocessor system with shared memory

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69505038T2 (en) 1994-04-18 1999-02-18 Bull S.A., Louveciennes Deadlock detection method in a multiprocessor system with shared memory

Similar Documents

Publication Publication Date Title
DE69129067T2 (en) METHOD FOR PRESENTING THE SCALARS DATA DEPENDENCIES FOR AN OPTIMIZATION COMPILER
EP1330685B1 (en) Testing method and testing device for starting up systems which are controlled by means of a program logic
DE68926956T2 (en) ARRANGEMENT FOR SHARING A GENERIC CODE FOR A DIGITAL DATA PROCESSING SYSTEM
WO2006105930A1 (en) Diagnostic system for determining a weighted list of possible defective components on the basis of vehicle data and customer specifications
DE102006029138A9 (en) Method and computer program product for the detection of memory leaks
DE10038499A1 (en) Formal verifying method for development in data processor involves executing verification algorithm using one limit of signal envelope, and limiting state-space search by using verification algorithm
DE3854636T2 (en) Automatic test process for logical devices.
EP3770766A1 (en) Method for testing a system
DE69505038T2 (en) Deadlock detection method in a multiprocessor system with shared memory
DE102019008598A1 (en) Identification and visualization of associations between code generated by a model and sources that influence code generation
DE102008015060A1 (en) Static error analysis method for program, involves starting new iteration with call determined areas as source text areas, and aborting new iteration when no call areas in previous iterations are determined
EP2302554A2 (en) Method for identifying a section of computer program contained in a computer storage system
AT514731A2 (en) Method for verifying generated software and verification device for carrying out such a method
DE10325513B4 (en) Method and apparatus for creating a behavioral aspect of a formal verification circuit
EP0662226B1 (en) Method of processing an application program on a parallel-computer system
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
WO2004072744A2 (en) Method for determining the processing sequence of function blocks of an automated system and corresponding automated system
DE102020209137A1 (en) Method and device for operating fuzzing testing of a program code
WO2022161683A1 (en) Error susceptibility of a build pipeline
EP3173928A1 (en) Method and device for checking a component error tree
DE102022207612A1 (en) Computer-implemented method for verifying a software component of an automated driving function
DE102015213581A1 (en) Method for modeling a component error tree and computer program product
DE102021003842A1 (en) Method for creating a configuration data set for a motor vehicle by means of an electronic computing device and electronic computing device
WO2024175581A1 (en) Method and device for visualising debug data of a complex data processing network
DE10137297A1 (en) Method for automated testing of software or software component robustness in which the number of test cases to be run is reduced by not running test cases containing known critical test values

Legal Events

Date Code Title Description
OAV Applicant agreed to the publication of the unexamined application as to paragraph 31 lit. 2 z1
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee

Effective date: 20141001