EDBT 2026 Demo / reviewers in the wild / expert
Jacob Burnim
dblp:23/5690 · also Jacob Samuels Burnim
· DBLP profile ↗
11ranked-venue papers
10as first author
0since 2021 · last 2013
—ORCID · none
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 10 · 9 first-authorSystems, architecture and hardware · 2 · 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
10 papers |
Concurrent programming · 35% Program analysis · 25% Program verification · 18% |
Topics — the 25 heaviest of 27, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Program analysis
dynamic analysis |
0.4 | 4 | 2011 | Testing concurrent programs on relaxed memory models · ISSTA 2011 DETERMIN: inferring likely deterministic specifications of multithreaded programs · ICSE (1) 2010 Asserting and checking determinism for multithreaded programs · ESEC/SIGSOFT FSE 2009 |
Program analysis
specification mining |
0.3 | 2 | 2012 | NDetermin: inferring nondeterministic sequential specifications for parallelism correctness · PPoPP 2012 DETERMIN: inferring likely deterministic specifications of multithreaded programs · ICSE (1) 2010 |
Program verification › dynamic verification
runtime verification |
0.2 | 2 | 2011 | NDSeq: runtime checking for nondeterministic sequential specifications of parallel correctness · PLDI 2011 Looper: Lightweight Detection of Infinite Loops at Runtime · ASE 2009 |
Concurrent programming
concurrency bugs |
0.2 | 2 | 2013 | CONCURRIT: a domain specific language for reproducing concurrency bugs · PLDI 2013 DETERMIN: inferring likely deterministic specifications of multithreaded programs · ICSE (1) 2010 |
Concurrent programming › concurrency bugs
concurrency bug reproduction |
0.2 | 1 | 2013 | CONCURRIT: a domain specific language for reproducing concurrency bugs · PLDI 2013 |
Programming languages and type systems
domain-specific languages |
0.2 | 1 | 2013 | CONCURRIT: a domain specific language for reproducing concurrency bugs · PLDI 2013 |
Program analysis › data flow analysis
dynamic data flow analysis |
0.1 | 1 | 2012 | NDetermin: inferring nondeterministic sequential specifications for parallelism correctness · PPoPP 2012 |
Concurrent programming › concurrency models
nondeterminism |
0.1 | 2 | 2010 | DETERMIN: inferring likely deterministic specifications of multithreaded programs · ICSE (1) 2010 Asserting and checking determinism for multithreaded programs · ESEC/SIGSOFT FSE 2009 |
Software testing
test generation |
0.1 | 2 | 2013 | Heuristics for Scalable Dynamic Test Generation · ASE 2008 CONCURRIT: a domain specific language for reproducing concurrency bugs · PLDI 2013 |
Concurrent programming
atomicity |
0.1 | 1 | 2011 | Specifying and checking semantic atomicity for multithreaded programs · ASPLOS 2011 |
Software testing
concurrency testing |
0.1 | 1 | 2011 | Testing concurrent programs on relaxed memory models · ISSTA 2011 |
Concurrent programming › concurrency bug detection
data race detection |
0.1 | 1 | 2011 | Testing concurrent programs on relaxed memory models · ISSTA 2011 |
Concurrent programming
memory models |
0.1 | 1 | 2011 | Testing concurrent programs on relaxed memory models · ISSTA 2011 |
Program verification
parallel program correctness |
0.1 | 1 | 2011 | NDSeq: runtime checking for nondeterministic sequential specifications of parallel correctness · PLDI 2011 |
Concurrent programming › memory models
weak memory models |
0.1 | 1 | 2011 | Testing concurrent programs on relaxed memory models · ISSTA 2011 |
Program analysis
symbolic execution |
0.1 | 2 | 2009 | WISE: Automated test generation for worst-case complexity · ICSE 2009 Heuristics for Scalable Dynamic Test Generation · ASE 2008 |
Software testing › test generation
automated test generation |
0.1 | 1 | 2009 | WISE: Automated test generation for worst-case complexity · ICSE 2009 |
Program verification › concurrent program verification
determinism verification |
0.1 | 1 | 2009 | Asserting and checking determinism for multithreaded programs · ESEC/SIGSOFT FSE 2009 |
Debugging and program repair
fault localization |
0.1 | 1 | 2009 | Looper: Lightweight Detection of Infinite Loops at Runtime · ASE 2009 |
Program verification › termination analysis
non-termination detection |
0.1 | 1 | 2009 | Looper: Lightweight Detection of Infinite Loops at Runtime · ASE 2009 |
Software testing › test generation
dynamic test generation |
0.1 | 1 | 2008 | Heuristics for Scalable Dynamic Test Generation · ASE 2008 |
Software testing › test generation
search-based test generation |
0.1 | 1 | 2008 | Heuristics for Scalable Dynamic Test Generation · ASE 2008 |
Concurrent programming
concurrency bug detection |
0.0 | 1 | 2011 | Specifying and checking semantic atomicity for multithreaded programs · ASPLOS 2011 |
Concurrent programming › concurrency bugs
thread interleaving |
0.0 | 1 | 2010 | DETERMIN: inferring likely deterministic specifications of multithreaded programs · ICSE (1) 2010 |
Software testing › test input generation
concolic testing |
0.0 | 1 | 2008 | Heuristics for Scalable Dynamic Test Generation · ASE 2008 |
Methods — techniques the papers use, named apart from their topics
symbolic execution · 0.2thread schedule exploration · 0.2source instrumentation · 0.2minimum-cost boolean satisfiability · 0.1dynamic data flow analysis · 0.1software simulation of relaxed memory model · 0.1runtime verification · 0.1bridge predicates · 0.1bounded interruption testing · 0.1biased random scheduling · 0.1
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2013 | CONCURRIT: a domain specific language for reproducing concurrency bugsabstractWe present CONCURRIT, a domain-specific language (DSL) for reproducing concurrency bugs. Given some partial information about the nature of a bug in an application, a programmer can write a CONCURRIT script to formally and concisely specify a set of thread schedules to explore in order to find a schedule exhibiting the bug. Further, the programmer can specify how these thread schedules should be searched to find a schedule that reproduces the bug. We implemented CONCURRIT as an embedded DSL in C++, which uses manual or automatic source instrumentation to partially control the scheduling of the software under test. Using CONCURRIT, we were able to write concise tests to reproduce concurrency bugs in a variety of benchmarks, including the Mozilla's SpiderMonkey JavaScript engine, Memcached, Apache's HTTP server, and MySQL. Tayfun Elmas, Jacob Burnim, George C. Necula, Koushik Sen |
PLDI | 2 |
| 2012 | NDetermin: inferring nondeterministic sequential specifications for parallelism correctnessabstractNondeterministic Sequential (NDSeq) specifications have been proposed as a means for separating the testing, debugging, and verifying of a program's parallelism correctness and its sequential functional correctness. In this work, we present a technique that, given a few representative executions of a parallel program, combines dynamic data flow analysis and Minimum-Cost Boolean Satisfiability (MinCostSAT) solving for automatically inferring a likely NDSeq specification for the parallel program. For a number of Java benchmarks, our tool NDetermin infers equivalent or stronger NDSeq specifications than those previously written manually. Jacob Burnim, Tayfun Elmas, George C. Necula, Koushik Sen |
PPoPP | 1 |
| 2011 | Specifying and checking semantic atomicity for multithreaded programsabstractIn practice, it is quite difficult to write correct multithreaded programs due to the potential for unintended and nondeterministic interference between parallel threads. A fundamental correctness property for such programs is atomicity---a block of code in a program is atomic if, for any parallel execution of the program, there is an execution with the same overall program behavior in which the block is executed serially.We propose semantic atomicity, a generalization of atomicity with respect to a programmer-defined notion of equivalent behavior. We propose an assertion framework in which a programmer can use bridge predicates to specify noninterference properties at the level of abstraction of their application. Further, we propose a novel algorithm for systematically testing atomicity specifications on parallel executions with a bounded number of interruptions---i.e. atomic blocks whose execution is interleaved with that of other threads. We further propose a set of sound heuristics and optional user annotations that increase the efficiency of checking atomicity specifications in the common case where the specifications hold.We have implemented our assertion framework for specifying and checking semantic atomicity for parallel Java programs, and we have written semantic atomicity specifications for a number of benchmarks. We found that using bridge predicates allowed us to specify the natural and intended atomic behavior of a wider range of programs than did previous approaches. Further, in checking our specifications, we found several previously unknown bugs, including in the widely-used java.util.concurrent library. Jacob Burnim, George C. Necula, Koushik Sen |
ASPLOS | 1 |
| 2011 | Testing concurrent programs on relaxed memory modelsabstractHigh-performance concurrent libraries, such as lock-free data structures and custom synchronization primitives, are notoriously difficult to write correctly. Such code is often implemented without locks, instead using plain loads and stores and low-level operations like atomic compare-and-swaps and explicit memory fences. Such code must run correctly despite the relaxed memory model of the underlying compiler, virtual machine, and/or hardware. These memory models may reorder the reads and writes issued by a thread, greatly complicating parallel reasoning. We propose RELAXER, a combination of predictive dynamic analysis and software testing, to help programmers write correct, highly-concurrent programs. Our technique works in two phases. First, RELAXER examines a sequentially-consistent run of a program under test and dynamically detects potential data races. These races are used to predict possible violations of sequential consistency under alternate executions on a relaxed memory model. In the second phase, RELAXER re-executes the program with a biased random scheduler and with a conservative simulation of a relaxed memory model in order to create with high probability a predicted sequential consistency violation. These executions can be used to test whether or not a program works as expected when the underlying memory model is not sequentially consistent. We have implemented RELAXER for C and have evaluated it on several synchronization algorithms, concurrent data structures, and parallel applications. RELAXER generates many executions of these benchmarks with violations of sequential consistency, highlighting a number of bugs under relaxed memory models. Jacob Burnim, Koushik Sen, Christos Stergiou 0001 |
ISSTA | 1 |
| 2011 | NDSeq: runtime checking for nondeterministic sequential specifications of parallel correctnessabstractWe propose to specify the correctness of a program's parallelism using a sequential version of the program with controlled nondeterminism. Such a nondeterministic sequential specification allows (1) the correctness of parallel interference to be verified independently of the program's functional correctness, and (2) the functional correctness of a program to be understood and verified on a sequential version of the program, one with controlled nondeterminism but no interleaving of parallel threads. Jacob Burnim, Tayfun Elmas, George C. Necula, Koushik Sen |
PLDI | 1 |
| 2011 | Sound and Complete Monitoring of Sequential Consistency for Relaxed Memory Models
Jacob Burnim, Koushik Sen, Christos Stergiou 0001 |
TACAS | 1 |
| 2010 | DETERMIN: inferring likely deterministic specifications of multithreaded programsabstractThe trend towards multicore processors and graphic processing units is increasing the need for software that can take advantage of parallelism. Writing correct parallel programs using threads, however, has proven to be quite challenging due to nondeterminism. The threads of a parallel application may be interleaved nondeterministically during execution, which can lead to nondeterministic results---some interleavings may produce the correct result while others may not. We have previously proposed an assertion framework for specifying that regions of a parallel program behave deterministically despite nondeterministic thread interleaving. The framework allows programmers to write assertions involving pairs of program states arising from different parallel schedules. We propose an algorithm to dynamically infer likely deterministic specifications for parallel programs given a set of inputs and schedules. We have implemented our specification inference algorithm for Java and have applied it to a number of previously examined Java benchmarks. We were able to automatically infer specifications largely equivalent to or stronger than our manual assertions from our previous work. We believe that the inference of deterministic specifications can aid in understanding and documenting the deterministic behavior of parallel programs. Moreover, an unexpected deterministic specification can indicate to a programmer the presence of erroneous or unintended behavior. Jacob Burnim, Koushik Sen |
ICSE (1) | 1 |
| 2009 | WISE: Automated test generation for worst-case complexityabstractProgram analysis and automated test generation have primarily been used to find correctness bugs. We present complexity testing, a novel automated test generation technique to find performance bugs. Our complexity testing algorithm, which we call WISE (worst-case inputs from symbolic execution), operates on a program accepting inputs of arbitrary size. For each input size, WISE attempts to construct an input which exhibits the worst-case computational complexity of the program. WISE uses exhaustive test generation for small input sizes and generalizes the result of executing the program on those inputs into an ldquoinput generator.rdquo The generator is subsequently used to efficiently generate worst-case inputs for larger input sizes. We have performed experiments to demonstrate the utility of our approach on a set of standard data structures and algorithms. Our results show that WISE can effectively generate worst-case inputs for several of these benchmarks. Jacob Burnim, Sudeep Juvekar, Koushik Sen |
ICSE | 1 |
| 2009 | Looper: Lightweight Detection of Infinite Loops at RuntimeabstractWhen a running program becomes unresponsive, it is often impossible for a user to determine if the program is performing some useful computation or if it has entered an infinite loop. We present LOOPER, an automated technique for dynamically analyzing a running program to prove that it is non-terminating. LOOPER uses symbolic execution to produce simple non-termination arguments for infinite loops dependent on both program values and the shape of heap. The constructed arguments are verified with an off-the-shelf SMT solver. We have implemented our technique in a prototype tool for Java applications, and we demonstrate our technique's effectiveness on several non-terminating benchmarks, including a reported infinite loop bug in open-source text editor jEdit. Our tool is able to dynamically detect infinite loops deep in the execution of large Java programs with no false warnings, producing symbolic arguments that can aid in debugging non-termination. Jacob Burnim, Nicholas Jalbert, Christos Stergiou 0001, Koushik Sen |
ASE | 1 |
| 2009 | Asserting and checking determinism for multithreaded programsabstractThe trend towards processors with more and more parallel cores is increasing the need for software that can take advantage of parallelism. The most widespread method for writing parallel software is to use explicit threads. Writing correct multithreaded programs, however, has proven to be quite challenging in practice. The key difficulty is non-determinism. The threads of a parallel application may be interleaved non-deterministically during execution. In a buggy program, non-deterministic scheduling will lead to non-deterministic results - some interleavings will produce the correct result while others will not. Jacob Burnim, Koushik Sen |
ESEC/SIGSOFT FSE | 1 |
| 2008 | Heuristics for Scalable Dynamic Test GenerationabstractRecently there has been great success in using symbolic execution to automatically generate test inputs for small software systems. A primary challenge in scaling such approaches to larger programs is the combinatorial explosion of the path space. It is likely that sophisticated strategies for searching this path space are needed to generate inputs that effectively test large programs (by, e.g., achieving significant branch coverage). We present several such heuristic search strategies, including a novel strategy guided by the control flow graph of the program under test. We have implemented these strategies in CREST, our open source concolic testing tool for C, and evaluated them on two widely-used software tools, grep 2.2 (15 K lines of code) and Vim 5.7 (150 K lines). On these benchmarks, the presented heuristics achieve significantly greater branch coverage on the same testing budget than concolic testing with a traditional depth-first search strategy. Jacob Burnim, Koushik Sen |
ASE | 1 |