Demonstration venue · read-only. Every page can be browsed; the buttons that would change it are switched off. Create an account to run TaxoReview on your own data. A simulation from public publication records: the people listed were not invited and did not agree to review.
? Tutorial for this page

Yang Chen 0024

dblp:48/4792-24 · DBLP profile ↗
← Back
8ranked-venue papers
2as first author
0since 2021 · last 2016
—ORCID · conflict

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

Software engineering, systems software and programming languages · 8 · 2 first-author

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
5 papers
Software testing · 79% Debugging and program repair · 16% Programming languages and type systems · 5%
Computer architecture, parallel and distributed computing, and storage systems
1 paper
Embedded and real-time systems · 67% Hardware reliability and fault tolerance · 33%

Topics — the 15 heaviest of 16, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Software testing
fuzzing
0.322013
Taming compiler fuzzers · PLDI 2013
Swarm testing · ISSTA 2012
Software testing
compiler testing
0.322012
Test-case reduction for C compiler bugs · PLDI 2012
Finding and understanding bugs in C compilers · PLDI 2011
Debugging and program repair
fault localization
0.222013
Test-case reduction for C compiler bugs · PLDI 2012
Taming compiler fuzzers · PLDI 2013
Software testing › fuzzing › system software fuzzing
compiler fuzzing
0.212013
Taming compiler fuzzers · PLDI 2013
Software testing › regression testing
test case prioritization
0.212013
Taming compiler fuzzers · PLDI 2013
Debugging and program repair › fault localization
compiler bug isolation
0.112012
Test-case reduction for C compiler bugs · PLDI 2012
Software testing
random testing
0.112012
Swarm testing · ISSTA 2012
Software testing › test optimization
test case reduction
0.112012
Test-case reduction for C compiler bugs · PLDI 2012
Software testing › test suite evaluation
test diversity
0.112012
Swarm testing · ISSTA 2012
Software testing
test generation
0.112012
Swarm testing · ISSTA 2012
Software testing › test generation
random test generation
0.112011
Finding and understanding bugs in C compilers · PLDI 2011
Programming languages and type systems › language-based security
memory safety
0.112009
Surviving sensor network software faults · SOSP 2009
Hardware reliability and fault tolerance
error recovery
0.112009
Surviving sensor network software faults · SOSP 2009
Embedded and real-time systems › embedded software › embedded operating systems
sensor node operating system
0.112009
Surviving sensor network software faults · SOSP 2009
Embedded and real-time systems › embedded software › embedded operating systems
TinyOS
0.112009
Surviving sensor network software faults · SOSP 2009

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

recovery units · 0.2compiler and runtime extensions · 0.2random testing · 0.2modular program transformation · 0.1fixpoint computation · 0.1feature omission · 0.1delta debugging · 0.1configuration sampling · 0.1randomized test-case generation · 0.1differential testing · 0.1
YearPublicationVenuePosition
2016 Cause reduction: delta debugging, even without bugs
abstract
Summary What is a test casefor? Sometimes, to expose a fault. Tests can also exercise code, use memory or time, or produce desired output. Given a desired effect, a test case can be seen as acause, and its components divided into essential (required for effect) and accidental. Delta debugging is used for removing accidents from failing test cases, producing smaller test cases that are easier to understand. This paper extends delta debugging by simplifying test cases with respect toarbitrary effects, a generalization calledcause reduction. Suites produced by cause reduction provide effectivequick testsfor real‐world programs. For Mozilla's JavaScript engine, the reduced suite is possiblymoreeffective for finding faults. The effectiveness of reduction‐based suites persists through changes to the software, improving coverage by over 500 branches for versions up to 4 months later. Cause reduction has other applications, including improving seeded symbolic execution, where using reduced tests can often double the number of additional branches explored. Copyright © 2015 John Wiley & Sons, Ltd.
Alex Groce, Mohammad Amin Alipour, Chaoqiang Zhang, Yang Chen 0024, John Regehr
Softw. Test. Verification Reliab.4
2014 Cause Reduction for Quick Testing
abstract
In random testing, it is often desirable to produce a "quick test" -- an extremely inexpensive test suite that can serve as a frequently applied regression and allow the benefits of random testing to be obtained even in very slow or over-subscribed test environments. Delta debugging is an algorithm that, given a failing test case, produces a smaller test case that also fails, and typically executes much more quickly. Delta debugging of random tests can produce effective regression suites for previously detected faults, but such suites often have little power for detecting new faults, and in some cases provide poor code coverage. This paper proposes extending delta debugging by simplifying tests with respect to code coverage, an instance of a generalization of delta debugging we call cause reduction. We show that test suites reduced in this fashion can provide very effective quick tests for real-world programs. For Mozilla's Spider Monkey JavaScript engine, the reduced suite is more effective for finding software faults, even if its reduced runtime is not considered. The effectiveness of a reduction-based quick test persists through major changes to the software under test.
Alex Groce, Mohammad Amin Alipour, Chaoqiang Zhang, Yang Chen 0024, John Regehr
ICST4
2013 Help, help, i'm being suppressed! The significance of suppressors in software testing
abstract
Test features are basic compositional units used to describe what a test does (and does not) involve. For example, in API-based testing, the most obvious features are function calls; in grammar-based testing, the obvious features are the elements of the grammar. The relationship between features as abstractions of tests and produced behaviors of the tested program is surprisingly poorly understood. This paper shows how large-scale random testing modified to use diverse feature sets can uncover causal relationships between what a test contains and what the program being tested does. We introduce a general notion of observable behaviors as targets, where a target can be a detected fault, an executed branch or statement, or a complex coverage entity such as a state, predicate-valuation, or program path. While it is obvious that targets have triggers - features without which they cannot be hit by a test - the notion of suppressors - features which make a test less likely to hit a target - has received little attention despite having important implications for automated test generation and program understanding. For a set of subjects including C compilers, a flash file system, and JavaScript engines, we show that suppression is both common and important.
Alex Groce, Chaoqiang Zhang, Mohammad Amin Alipour, Eric Eide, Yang Chen 0024, John Regehr
ISSRE5
2013 Taming compiler fuzzers
abstract
Aggressive random testing tools ("fuzzers") are impressively effective at finding compiler bugs. For example, a single test-case generator has resulted in more than 1,700 bugs reported for a single JavaScript engine. However, fuzzers can be frustrating to use: they indiscriminately and repeatedly find bugs that may not be severe enough to fix right away. Currently, users filter out undesirable test cases using ad hoc methods such as disallowing problematic features in tests and grepping test results. This paper formulates and addresses the fuzzer taming problem: given a potentially large number of random test cases that trigger failures, order them such that diverse, interesting test cases are highly ranked. Our evaluation shows our ability to solve the fuzzer taming problem for 3,799 test cases triggering 46 bugs in a C compiler and 2,603 test cases triggering 28 bugs in a JavaScript engine.
Yang Chen 0024, Alex Groce, Chaoqiang Zhang, Weng-Keen Wong, Xiaoli Z. Fern, Eric Eide, John Regehr
PLDI1
2012 Swarm testing
abstract
Swarm testing is a novel and inexpensive way to improve the diversity of test cases generated during random testing. Increased diversity leads to improved coverage and fault detection. In swarm testing, the usual practice of potentially including all features in every test case is abandoned. Rather, a large “swarm” of randomly generated configurations, each of which omits some features, is used, with configurations receiving equal resources. We have identified two mechanisms by which feature omission leads to better exploration of a system’s state space. First, some features actively prevent the system from executing interesting behaviors; e.g., “pop” calls may prevent a stack data structure from executing a bug in its overflow detection logic. Second, even when there is no active suppression of behaviors, test features compete for space in each test, limiting the depth to which logic driven by features can be explored. Experimental results show that swarm testing increases coverage and can improve fault detection dramatically; for example, in a week of testing it found 42% more distinct ways to crash a collection of C compilers than did the heavily hand-tuned default configuration of a random tester.
Alex Groce, Chaoqiang Zhang, Eric Eide, Yang Chen 0024, John Regehr
ISSTA4
2012 Test-case reduction for C compiler bugs
abstract
To report a compiler bug, one must often find a small test case that triggers the bug. The existing approach to automated test-case reduction, delta debugging, works by removing substrings of the original input; the result is a concatenation of substrings that delta cannot remove. We have found this approach less than ideal for reducing C programs because it typically yields test cases that are too large or even invalid (relying on undefined behavior). To obtain small and valid test cases consistently, we designed and implemented three new, domain-specific test-case reducers. The best of these is based on a novel framework in which a generic fixpoint computation invokes modular transformations that perform reduction operations. This reducer produces outputs that are, on average, more than 25 times smaller than those produced by our other reducers or by the existing reducer that is most commonly used by compiler developers. We conclude that effective program reduction requires more than straightforward delta debugging.
John Regehr, Yang Chen 0024, Pascal Cuoq, Eric Eide, Chucky Ellison, Xuejun Yang
PLDI2
2011 Finding and understanding bugs in C compilers
abstract
Compilers should be correct. To improve the quality of C compilers, we created Csmith, a randomized test-case generation tool, and spent three years using it to find compiler bugs. During this period we reported more than 325 previously unknown bugs to compiler developers. Every compiler we tested was found to crash and also to silently generate wrong code when presented with valid input. In this paper we present our compiler-testing tool and the results of our bug-hunting study. Our first contribution is to advance the state of the art in compiler testing. Unlike previous tools, Csmith generates programs that cover a large subset of C while avoiding the undefined and unspecified behaviors that would destroy its ability to automatically find wrong-code bugs. Our second contribution is a collection of qualitative and quantitative results about the bugs we have found in open-source C compilers.
Xuejun Yang, Yang Chen 0024, Eric Eide, John Regehr
PLDI2
2009 Surviving sensor network software faults
abstract
We describe Neutron, a version of the TinyOS operating system that efficiently recovers from memory safety bugs. Where existing schemes reboot an entire node on an error, Neutron's compiler and runtime extensions divide programs into recovery units and reboot only the faulting unit. The TinyOS kernel itself is a recovery unit: a kernel safety violation appears to applications as the processor being unavailable for 10-20 milliseconds.
Yang Chen 0024, Omprakash Gnawali, Maria A. Kazandjieva, Philip Alexander Levis, John Regehr
SOSP1