Ru-Gang Xu

dblp:00/2144 · DBLP profile ↗
← Back
8ranked-venue papers
1as first author
0since 2021 · last 2009
—ORCID · none

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 8 · 1 first-authorTheory of computation · 1

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
6 papers
Software testing · 65% Program verification · 19% Program analysis · 14%
Network and information security
1 paper
Systems and software security · 100%

Topics — the 17 heaviest of 18, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Program analysis
symbolic execution
0.222008
Testing for buffer overflows with length abstraction · ISSTA 2008
Directed test generation using symbolic grammars · ASE 2007
Software testing › test generation
grammar-based test generation
0.122007
Directed test generation using symbolic grammars · ESEC/SIGSOFT FSE 2007
Directed test generation using symbolic grammars · ASE 2007
Software testing
test generation
0.122007
Directed test generation using symbolic grammars · ESEC/SIGSOFT FSE 2007
Directed test generation using symbolic grammars · ASE 2007
Software testing › partition testing
input partitioning
0.112009
Reducing Test Inputs Using Information Partitions · CAV 2009
Software testing › test optimization
test input reduction
0.112009
Reducing Test Inputs Using Information Partitions · CAV 2009
Software testing › regression testing
test suite reduction
0.112009
Reducing Test Inputs Using Information Partitions · CAV 2009
Systems and software security › memory safety › memory error detection
buffer overflow detection
0.112008
Testing for buffer overflows with length abstraction · ISSTA 2008
Systems and software security
memory safety
0.112008
Testing for buffer overflows with length abstraction · ISSTA 2008
Program verification › model checking
counterexample generation
0.112008
Proving non-termination · POPL 2008
Program verification › termination analysis
non-termination proving
0.112008
Proving non-termination · POPL 2008
Software testing
random testing
0.112008
Random Test Run Length and Effectiveness · ASE 2008
Program verification
termination analysis
0.112008
Proving non-termination · POPL 2008
Software testing
test input generation
0.112008
Testing for buffer overflows with length abstraction · ISSTA 2008
Software testing › test generation
symbolic testing
0.112007
Directed test generation using symbolic grammars · ESEC/SIGSOFT FSE 2007
Software testing
failure detection
0.012008
Random Test Run Length and Effectiveness · ASE 2008
Program synthesis and code generation › search-based program synthesis
enumerative synthesis
0.012007
Directed test generation using symbolic grammars · ASE 2007
Automata and formal languages › formal grammars
context-free grammar
0.012007
Directed test generation using symbolic grammars · ESEC/SIGSOFT FSE 2007

Methods — techniques the papers use, named apart from their topics

symbolic execution · 0.3directed random testing · 0.2exhaustive enumeration · 0.1statistical analysis · 0.1static feasibility proving · 0.1dynamic path enumeration · 0.1bit-level reasoning · 0.1symbolic grammars · 0.1constraint solving · 0.1
YearPublicationVenuePosition
2009 Reducing Test Inputs Using Information Partitions
Rupak Majumdar, Ru-Gang Xu
CAV2
2008 Testing for buffer overflows with length abstraction
abstract
We present Splat, a tool for automatically generating inputs that lead to memory safety violations in C programs. Splat performs directed random testing of the code, guided by symbolic execution. However, instead of representing the entire contents of an input buffer symbolically, Splat tracks only a prefix of the buffer symbolically, and a symbolic length that may exceed the size of the symbolic prefix. The part of the buffer beyond the symbolic prefix is filled with concrete random inputs. The use of symbolic buffer lengths makes it possible to compactly summarize the behavior of standard buffer manipulation functions, such as string library functions, leading to a more scalable search for possible memory errors. While reasoning only about prefixes of buffer contents makes the search theoretically incomplete, we experimentally demonstrate that the symbolic length abstraction is both scalable and sufficient to uncover many real buffer overflows in C programs. In experiments on a set of benchmarks developed independently to evaluate buffer overflow checkers, Splat was able to detect buffer overflows quickly, sometimes several orders of magnitude faster than when symbolically representing entire buffers. Splat was also able to find two previously unknown buffer overflows in a heavily-tested storage system.
Ru-Gang Xu, Patrice Godefroid, Rupak Majumdar
ISSTA1
2008 Random Test Run Length and Effectiveness
abstract
A poorly understood but important factor in random testing is the selection of a maximum length for test runs. Given a limited time for testing, it is seldom clear whether executing a small number of long runs or a large number of short runs maximizes utility. It is generally expected that longer runs are more likely to expose failures - which is certainly true with respect to runs shorter than the shortest failing trace. However, longer runs produce longer failing traces, requiring more effort from humans in debugging or more resources for automated minimization. In testing with feedback, increasing ranges for parameters may also cause the probability of failure to decrease in longer runs. We show that the choice of test length dramatically impacts the effectiveness of random testing, and that the patterns observed in simple models and predicted by analysis are useful in understanding effects observed in a large scale case study of a JPL flight software system.
James H. Andrews, Alex Groce, Melissa Weston, Ru-Gang Xu
ASE4
2008 Proving non-termination
abstract
The search for proof and the search for counterexamples (bugs) are complementary activities that need to be pursued concurrently in order to maximize the practical success rate of verification tools.While this is well-understood in safety verification, the current focus of liveness verification has been almost exclusively on the search for termination proofs. A counterexample to termination is an infinite programexecution. In this paper, we propose a method to search for such counterexamples. The search proceeds in two phases. We first dynamically enumerate lasso-shaped candidate paths for counterexamples, and then statically prove their feasibility. We illustrate the utility of our nontermination prover, called TNT, on several nontrivial examples, some of which require bit-level reasoning about integer representations.
Ashutosh Gupta 0001, Thomas A. Henzinger, Rupak Majumdar, Andrey Rybalchenko, Ru-Gang Xu
POPL5
2007 Directed test generation using symbolic grammars
abstract
We present CESE, a tool that combines exhaustive enumeration of test inputs from a structured domain with symbolic execution driven test generation. We target programs whose valid inputs are determined by some context free grammar. We abstract the concrete input syntax with symbolic grammars, where some original tokens are replaced with symbolic constants. This reduces the set of input strings that must be enumerated exhaustively. For each enumerated input string, which may contain symbolic constants, symbolic execution based test generation instantiates the constants based on program execution paths. The "template" generated by enumerating valid strings reduces the burden on the symbolic execution to generate syntactically valid inputs and helps exercise interesting code paths. Together, symbolic grammars provide a link between exhaustive enumeration of valid inputs and execution-directed symbolic test generation
Rupak Majumdar, Ru-Gang Xu
ASE2
2007 Directed test generation using symbolic grammars
abstract
We present CESI, an algorithm that combines exhaustive enumeration of test inputs from a structured domain with symbolic execution driven test generation. We target programs whose valid inputs are determined by some context free grammar. We introduce symbolic grammars, where the original tokens are replaced with symbolic constants, that link enumerative grammar-based input generation with symbolic directed testing. Symbolic grammars abstract the concrete input syntax, thus reducing the set of input strings that must be enumerated exhaustively. For each enumerated input string, which may contain symbolic constants, symbolic execution based test generation instantiates the constants based on program execution paths. The "template" generated by enumerating valid strings reduces the burden on the symbolic execution to generate syntactically valid inputs and hence exercise interesting code paths. Together, symbolic grammars provide a link between exhaustive enumeration of valid inputs and execution-directed symbolic test generation. In preliminary experiments, CESI is better than if both enumerative and symbolic techniques are used alone.
Rupak Majumdar, Ru-Gang Xu
ESEC/SIGSOFT FSE2
2007 State of the Union: Type Inference Via Craig Interpolation
Ranjit Jhala, Rupak Majumdar, Ru-Gang Xu
TACAS3
2006 Structural Invariants
Ranjit Jhala, Rupak Majumdar, Ru-Gang Xu
SAS3