Professional Documents
Culture Documents
STATIC ANALYSIS
> is the analysis of source code without execution > is usually conducted by looking for error signatures or patterns that have cause problems in earlier programs. Static program analysis is the analysis of computer software that is performed without actually executing programs built from that software (analysis performed on executing programs is known as dynamic analysis).
Formal methods
>>> is the term applied to the analysis of software (and hardware) whose results are obtained purely through the use of rigorous mathematical methods.
Use of assertions in program code as first suggested by Hoare logic. There is tool support for some programming languages (e.g., the SPARK programming language (a subset of Ada) and the Java Modeling Language JML using ESC/Java and ESC/Java2, ANSI/ISO C Specification Language for the C language).
The main focus of our work in the area of static analyses is to support developers during their day-to-day development tasks (design, implementation and maintenance of software programs). The goal is to enable software engineers to develop software that is comprehensible, maintainable, more reliable and extensible in shorter time frames. One mechanism to achieve this goal is to pinpoint developers to as many issues in their code as early as possible. Additionally, we explore and develop tools that enable developer to assess the quality of their code e.g., by means of metrics or which enable developers to explore and visualize the architecture and code of a project.
In the area of static analyses we continuously assign project-, seminar-, Bachelor- and Mastertheses. If none of the open topics suits your particular interests then just come to our offices or write me an email (Michael Eichberg), we may find a topic in which we are both interested.
Symbolic Execution
Figure 1 the path condition (PC) is initially true. If the program takes the if statement's then branch, the path condition will be X<Y. If the program takes the if statement's else branch, the path condition will be XY.
This JPF extension performs symbolic execution of Java programs. One of the main applications is automated generation of test inputs that obtain high coverage (e.g. path coverage) of code. Other applications include error detection in concurrent programs that take inputs from unbounded domains and lightweight theorem proving.
Symbolic execution is a technique that is useful in the validation of software. It may be used to aid in the generation of test data and in program proving. As software engineering becomes more concerned with the development of tools, symbolic execution will become an important item in the toolkit.
Symbolic execution, sometimes referred to as symbolic evaluation, does not execute a program in the traditional sense of the word, The notion of execution requires that a selection of paths through the program are exercised by a set of data values. A program which is executed using actual data results in the output of a series of values. In symbolic execution the data is replaced by symbolic values. A set of expressions, one expression per output variable, is produced.
The most common approach to symbolic execution is to perform an analysis of the program, resulting in the creation of a flow graph.
The second problem involves module calls. The term module call is used here to refer to the invocation of any out-of-line code. This includes subprograms that are compiled separately from the invoking program, internal subroutines, procedures and functions. The dilemma concerning module calls is whether to treat them using the macroexpansion approach or the lemma approach
Partition analysis :
Partition analysis is another technique that makes use of the output from symbolic execution to determine test data. It uses symbolic execution to identify sub-domains of the input data domain
Program reduction :
King describes how symbolic execution can be used to achieve program reduction . This is the act of taking a program and producing another program containing fewer statements. The result is a simpler program consistent with the original, but operating over a smaller domain . This is useful when re-using software where only a sub-set of the cases handled are required. A major step forward will have taken place in software engineering when the re-use of software is normal practice. Program reduction is a step towards this goal.
Symbolic debugging:
The tracing of the execution of a program is a powerful debugging technique. The more usual trace facilities display only the current value of the variables. A symbolic debugger enhances the tracing facilities by displaying the expressions for each variable, removing the need for by-hand walkthrough.