scispace - formally typeset
Proceedings ArticleDOI

Under-constrained execution: making automatic code destruction easy and scalable

TLDR
Software testing is well-recognized as a crucial part of the modern software development process, however, manual testing is labor intensive and often fails to produce impressive coverage results.
Abstract
Software testing is well-recognized as a crucial part of the modern software development process. However, manual testing is labor intensive and often fails to produce impressive coverage results. Random testing is easily applied but gets poor coverage on complex code. Recent work has attacked these problems using symbolic execution to automatically generate high-coverage test inputs [3, 6, 4, 8, 5, 2]. At a high-level these tools use variations on the following idea. Instead of running code on manually or randomly constructed input, they run it on symbolic input initially allowed to be “anything.” They substitute program variables with symbolic values and replaces concrete program operations with ones that manipulate symbolic values. When program execution branches based on a symbolic value the system (conceptually) follows both branches at once, maintaining a set of constraints called the path condition which must hold on execution of that path. When a path terminates or hits a bug, a test case can be generated by solving the current path condition to find concrete values. Assuming deterministic code, feeding this concrete input to an uninstrumented version of the checked code will cause it to follow the same path and hit the same bug. However, these tools (and all dynamic tools) assume you can run the code you want to check in the first place. In the easiest case, testing just runs an entire application. This requires no special work: just compile the program and execute it. However, the exponential number of code paths in a

read more

Content maybe subject to copyright    Report

Citations
More filters
Book ChapterDOI

Pex: white box test generation for .NET

TL;DR: Pex automatically produces a small test suite with high code coverage for a .NET program by performing a systematic program analysis using dynamic symbolic execution, similar to path-bounded model-checking, to determine test inputs for Parameterized Unit Tests.
Proceedings ArticleDOI

Driller: Augmenting Fuzzing Through Selective Symbolic Execution.

TL;DR: Driller is presented, a hybrid vulnerability excavation tool which leverages fuzzing and selective concolic execution in a complementary manner, to find deeper bugs and mitigate their weaknesses, avoiding the path explosion inherent in concolic analysis and the incompleteness of fuzzing.
Proceedings ArticleDOI

SOK: (State of) The Art of War: Offensive Techniques in Binary Analysis

TL;DR: This paper presents a binary analysis framework that implements a number of analysis techniques that have been proposed in the past and implements these techniques in a unifying framework, which allows other researchers to compose them and develop new approaches.

Electronic Notes in Theoretical Computer Science

TL;DR: It is shown how Simulink models from which control programs are automatically extracted can be tested with respect to qualitative models, which are anabstraction of quantitative physical models for test case generation and test execution.
Journal ArticleDOI

A Survey of Symbolic Execution Techniques

TL;DR: A survey of the main challenges, challenges, and solutions for symbolic execution can be found in this paper, where the authors provide an overview of main ideas, challenges and solutions developed in the area.
References
More filters
Journal ArticleDOI

DART: directed automated random testing

TL;DR: DART is a new tool for automatically testing software that combines three main techniques, automated extraction of the interface of a program with its external environment using static source-code parsing, and dynamic analysis of how the program behaves under random testing and automatic generation of new test inputs to direct systematically the execution along alternative program paths.
Proceedings ArticleDOI

CUTE: a concolic unit testing engine for C

TL;DR: In this paper, the authors address the problem of automating unit testing with memory graphs as inputs, and develop a method to represent and track constraints that capture the behavior of a symbolic execution of a unit with memory graph as inputs.
Journal ArticleDOI

EXE: Automatically Generating Inputs of Death

TL;DR: This article presents EXE, an effective bug-finding tool that automatically generates inputs that crash real code by solving the current path constraints to find concrete values using its own co-designed constraint solver, STP.
Proceedings ArticleDOI

EXE: automatically generating inputs of death

TL;DR: This paper presents EXE, an effective bug-finding tool that automatically generates inputs that crash real code instead of running code on manually or randomly constructed input, and solves the current path constraints to find concrete values using its own co-designed constraint solver, STP.
Journal ArticleDOI

Korat: automated testing based on Java predicates

TL;DR: Korat is a novel framework for automated testing of Java programs that uses the method precondition to automatically generate all (nonisomorphic) test cases up to a given small size and generates test cases much faster than the declarative framework.