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.

Markus Kusano

dblp:139/6963 · DBLP profile ↗
← Back
12ranked-venue papers
5as first author
0since 2021 · last 2019
—ORCID · none

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

Software engineering, systems software and programming languages · 12 · 5 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
12 papers
Program analysis · 32% Concurrent programming · 25% Software testing · 20%
Network and information security
1 paper
Systems and software security · 100%

Topics — the 30 heaviest of 31, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Concurrent programming
concurrency bugs
0.842015
ConcBugAssist: constraint solving for diagnosis and repair of concurrency bugs · ISSTA 2015
Dynamic Generation of Likely Invariants for Multithreaded Programs · ICSE (1) 2015
Assertion guided abstraction: a cooperative optimization for dynamic partial order reduction · ASE 2014
Program analysis
static analysis
0.832017
Thread-modular static analysis for relaxed memory models · ESEC/SIGSOFT FSE 2017
Static DOM event dependency analysis for testing web applications · SIGSOFT FSE 2016
Flow-sensitive composition of thread-modular abstract interpretation · SIGSOFT FSE 2016
Program analysis › static analysis
abstract interpretation
0.522017
Modular verification of interrupt-driven software · ASE 2017
Flow-sensitive composition of thread-modular abstract interpretation · SIGSOFT FSE 2016
Concurrent programming
memory models
0.522017
Thread-modular static analysis for relaxed memory models · ESEC/SIGSOFT FSE 2017
Dynamic partial order reduction for relaxed memory models · PLDI 2015
Concurrent programming › memory models
weak memory models
0.522017
Thread-modular static analysis for relaxed memory models · ESEC/SIGSOFT FSE 2017
Dynamic partial order reduction for relaxed memory models · PLDI 2015
Program analysis
symbolic execution
0.522016
Conc-iSE: incremental symbolic execution of concurrent software · ASE 2016
Assertion guided symbolic execution of multithreaded programs · ESEC/SIGSOFT FSE 2015
Program verification › model checking › partial order reduction
dynamic partial order reduction
0.422015
Dynamic partial order reduction for relaxed memory models · PLDI 2015
Assertion guided abstraction: a cooperative optimization for dynamic partial order reduction · ASE 2014
Program verification
model checking
0.422015
Dynamic partial order reduction for relaxed memory models · PLDI 2015
Assertion guided abstraction: a cooperative optimization for dynamic partial order reduction · ASE 2014
Program verification › model checking
stateless model checking
0.422015
Dynamic partial order reduction for relaxed memory models · PLDI 2015
Assertion guided abstraction: a cooperative optimization for dynamic partial order reduction · ASE 2014
Systems and software security › vulnerability discovery
fuzzing
0.412019
FUDGE: fuzz driver generation at scale · ESEC/SIGSOFT FSE 2019
Systems and software security
vulnerability discovery
0.412019
FUDGE: fuzz driver generation at scale · ESEC/SIGSOFT FSE 2019
Software testing › fuzzing
fuzz driver generation
0.412019
FUDGE: fuzz driver generation at scale · ESEC/SIGSOFT FSE 2019
Software testing
fuzzing
0.412019
FUDGE: fuzz driver generation at scale · ESEC/SIGSOFT FSE 2019
Program verification
static verification
0.312017
Modular verification of interrupt-driven software · ASE 2017
Embedded and real-time systems › event-driven systems
interrupt-driven programs
0.312017
Modular verification of interrupt-driven software · ASE 2017
Software testing
concurrency testing
0.212016
Conc-iSE: incremental symbolic execution of concurrent software · ASE 2016
Program analysis
concurrent program analysis
0.212016
Conc-iSE: incremental symbolic execution of concurrent software · ASE 2016
Program analysis › static analysis
constraint-based analysis
0.212016
Static DOM event dependency analysis for testing web applications · SIGSOFT FSE 2016
Program analysis › data flow analysis
flow-sensitive analysis
0.212016
Flow-sensitive composition of thread-modular abstract interpretation · SIGSOFT FSE 2016
Program analysis › symbolic execution
incremental symbolic execution
0.212016
Conc-iSE: incremental symbolic execution of concurrent software · ASE 2016
Software testing
test input generation
0.212016
Static DOM event dependency analysis for testing web applications · SIGSOFT FSE 2016
Software testing
web application testing
0.212016
Static DOM event dependency analysis for testing web applications · SIGSOFT FSE 2016
Debugging and program repair
automated program repair
0.212015
ConcBugAssist: constraint solving for diagnosis and repair of concurrency bugs · ISSTA 2015
Concurrent programming
concurrency bug detection
0.212015
Assertion guided symbolic execution of multithreaded programs · ESEC/SIGSOFT FSE 2015
Debugging and program repair › concurrent program debugging
concurrency bug diagnosis
0.212015
ConcBugAssist: constraint solving for diagnosis and repair of concurrency bugs · ISSTA 2015
Program analysis
dynamic analysis
0.212015
Dynamic Generation of Likely Invariants for Multithreaded Programs · ICSE (1) 2015
Program verification
invariant generation
0.212015
Dynamic Generation of Likely Invariants for Multithreaded Programs · ICSE (1) 2015
Concurrent programming › memory models › weak memory models
TSO and PSO
0.212015
Dynamic partial order reduction for relaxed memory models · PLDI 2015
Software testing › mutation testing
mutant generation
0.212013
CCmutator: A mutation generator for concurrency constructs in multithreaded C/C++ applications · ASE 2013
Software testing
mutation testing
0.212013
CCmutator: A mutation generator for concurrency constructs in multithreaded C/C++ applications · ASE 2013

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

fixed-point iteration · 0.6abstract interpretation · 0.6datalog · 0.5interference feasibility checking · 0.3execution summarization · 0.2constraint-based declarative program analysis · 0.2constraint-based analysis · 0.2change impact analysis · 0.2invariant inference · 0.2LLVM instrumentation · 0.2
YearPublicationVenuePosition
2019 FUDGE: fuzz driver generation at scale
abstract
At Google we have found tens of thousands of security and robustness bugs by fuzzing C and C++ libraries. To fuzz a library, a fuzzer requires a fuzz driver—which exercises some library code—to which it can pass inputs. Unfortunately, writing fuzz drivers remains a primarily manual exercise, a major hindrance to the widespread adoption of fuzzing. In this paper, we address this major hindrance by introducing the Fudge system for automated fuzz driver generation. Fudge automatically generates fuzz driver candidates for libraries based on existing client code. We have used Fudge to generate thousands of new drivers for a wide variety of libraries. Each generated driver includes a synthesized C/C++ program and a corresponding build script, and is automatically analyzed for quality. Developers have integrated over 200 of these generated drivers into continuous fuzzing services and have committed to address reported security bugs. Further, several of these fuzz drivers have been upstreamed to open source projects and integrated into the OSS-Fuzz fuzzing infrastructure. Running these fuzz drivers has resulted in over 150 bug fixes, including the elimination of numerous exploitable security vulnerabilities.
Domagoj Babic, Stefan Bucur, Franjo Ivancic, Tim King 0001, Markus Kusano, Caroline Lemieux, Laszlo Szekeres
ESEC/SIGSOFT FSE6
2017 Modular verification of interrupt-driven software
abstract
Interrupts have been widely used in safety-critical computer systems to handle outside stimuli and interact with the hardware, but reasoning about interrupt-driven software remains a difficult task. Although a number of static verification techniques have been proposed for interrupt-driven software, they often rely on constructing a monolithic verification model. Furthermore, they do not precisely capture the complete execution semantics of interrupts such as nested invocations of interrupt handlers. To overcome these limitations, we propose an abstract interpretation framework for static verification of interrupt-driven software that first analyzes each interrupt handler in isolation as if it were a sequential program, and then propagates the result to other interrupt handlers. This iterative process continues until results from all interrupt handlers reach a fixed point. Since our method never constructs the global model, it avoids the up-front blowup in model construction that hampers existing, non-modular, verification techniques. We have evaluated our method on 35 interrupt-driven applications with a total of 22,541 lines of code. Our results show the method is able to quickly and more accurately analyze the behavior of interrupts.
Chungha Sung, Markus Kusano, Chao Wang 0001
ASE2
2017 Thread-modular static analysis for relaxed memory models
abstract
We propose a memory-model-aware static program analysis method for accurately analyzing the behavior of concurrent software running on processors with weak consistency models such as x86-TSO, SPARC-PSO, and SPARC-RMO. At the center of our method is a unified framework for deciding the feasibility of inter-thread interferences to avoid propagating spurious data flows during static analysis and thus boost the performance of the static analyzer. We formulate the checking of interference feasibility as a set of Datalog rules which are both efficiently solvable and general enough to capture a range of hardware-level memory models. Compared to existing techniques, our method can significantly reduce the number of bogus alarms as well as unsound proofs. We implemented the method and evaluated it on a large set of multithreaded C programs. Our experiments show the method significantly outperforms state-of-the-art techniques in terms of accuracy with only moderate runtime overhead.
Markus Kusano, Chao Wang 0001
ESEC/SIGSOFT FSE1
2016 Conc-iSE: incremental symbolic execution of concurrent software
abstract
Software updates often introduce new bugs to existing code bases. Prior regression testing tools focus mainly on test case selection and prioritization whereas symbolic execution tools only handle code changes in sequential software. In this paper, we propose the first incremental symbolic execution method for concurrent software to generate new tests by exploring only the executions affected by code changes between two program versions. Specifically, we develop an inter-thread and inter-procedural change-impact analysis to check if a statement is affected by the changes and then leverage the information to choose executions that need to be reexplored. We also check if execution summaries computed in the previous program can be used to avoid redundant explorations in the new program. We have implemented our method in an incremental symbolic execution tool called Conc-iSE and evaluated it on a large set of multithreaded C programs. Our experiments show that the new method can significantly reduce the overall symbolic execution time when compared with state-of-the-art symbolic execution tools such as KLEE.
Shengjian Guo, Markus Kusano, Chao Wang 0001
ASE2
2016 Flow-sensitive composition of thread-modular abstract interpretation
abstract
We propose a constraint-based flow-sensitive static analysis for concurrent programs by iteratively composing thread-modular abstract interpreters via the use of a system of lightweight constraints. Our method is compositional in that it first applies sequential abstract interpreters to individual threads and then composes their results. It is flow-sensitive in that the causality ordering of interferences (flow of data from global writes to reads) is modeled by a system of constraints. These interference constraints are lightweight since they only refer to the execution order of program statements as opposed to their numerical properties: they can be decided efficiently using an off-the-shelf Datalog engine. Our new method has the advantage of being more accurate than existing, flow-insensitive, static analyzers while remaining scalable and providing the expected soundness and termination guarantees even for programs with unbounded data. We implemented our method and evaluated it on a large number of benchmarks, demonstrating its effectiveness at increasing the accuracy of thread-modular abstract interpretation.
Markus Kusano, Chao Wang 0001
SIGSOFT FSE1
2016 Static DOM event dependency analysis for testing web applications
abstract
The number and complexity of JavaScript-based web applications are rapidly increasing, but methods and tools for automatically testing them are lagging behind, primarily due to the difficulty in analyzing the subtle interactions between the applications and the event-driven execution environment. Although static analysis techniques have been routinely used on software written in traditional programming languages, such as Java and C++, adapting them to handle JavaScript code and the HTML DOM is difficult. In this work, we propose the first constraint-based declarative program analysis procedure for computing dependencies over program variables as well as event-handler functions of the various DOM elements, which is crucial for analyzing the behavior of a client-side web application. We implemented the method in a software tool named JSDEP and evaluated it in ARTEMIS, a platform for automated web application testing. Our experiments on a large set of web applications show the new method can significantly reduce the number of redundant test sequences and significantly increase test coverage with minimal overhead.
Chungha Sung, Markus Kusano, Nishant Sinha 0001, Chao Wang 0001
SIGSOFT FSE2
2015 Dynamic Generation of Likely Invariants for Multithreaded Programs
abstract
We propose a new method for dynamically generating likely invariants from multithreaded programs.While existing invariant generation tools work well on sequential programs, they are ineffective at reasoning about multithreaded programs both in terms of the number of real invariants generated and in terms of their usefulness in helping programmers. We address this issue by developing a new dynamic invariant generator consisting of an LLVM based code instrumentation front end, a systematic thread interleaving explorer, and a customized invariant inference engine. We show that efficient interleaving exploration strategies can be used to generate a diversified set of executions with little runtime overhead. Furthermore, we show that focusing on a small subset of thread-local transition invariants is often sufficient for reasoning about the concurrency behavior of programs. We have evaluated our new method on a set of open-source multithreaded C/C++ benchmarks. Our experiments show that our method can generate invariants that are significantly higher in quality than the previous state-of-the-art.
Markus Kusano, Arijit Chattopadhyay, Chao Wang 0001
ICSE (1)1
2015 ConcBugAssist: constraint solving for diagnosis and repair of concurrency bugs
abstract
Programmers often have to spend a significant amount of time in- specting the software code and execution traces to identify the cause of a bug. For a multithreaded program, debugging is even more challenging due to the subtle interactions between threads and the often astronomical number of interleavings. In this work, we pro- pose a logical constraint based symbolic analysis method to aid in the diagnosis of concurrency bugs and to recommend repairs. Both diagnosis and repair are formulated as constraint solving prob- lems. Our method, by leveraging the power of satisfiability (SAT) solvers and a bounded model checker, performs a semantic analy- sis of the sequential computation as well as thread interactions. The constraint based analysis is designed for handling critical software with small to medium code size, but complex concurrency control, such as device drivers, implementations of synchronization proto- cols, and concurrent data structures. We have implemented our new method in a software tool and demonstrated its effectiveness in di- agnosing bugs in multithreaded C programs.
Sepideh Khoshnood, Markus Kusano, Chao Wang 0001
ISSTA2
2015 Dynamic partial order reduction for relaxed memory models
abstract
Under a relaxed memory model such as TSO or PSO, a concurrent program running on a shared-memory multiprocessor may observe two types of nondeterminism: the nondeterminism in thread scheduling and the nondeterminism in store buffering. Although there is a large body of work on mitigating the scheduling nondeterminism during runtime verification, methods for soundly mitigating the store buffering nondeterminism are lacking. We propose a new dynamic partial order reduction (POR) algorithm for verifying concurrent programs under TSO and PSO. Our method relies on modeling both types of nondeterminism in a unified framework, which allows us to extend existing POR techniques to TSO and PSO without overhauling the verification algorithm. In addition to sound POR, we also propose a buffer-bounding method for more aggressively reducing the state space. We have implemented our new methods in a stateless model checking tool and demonstrated their effectiveness on a set of multithreaded C benchmarks.
Naling Zhang, Markus Kusano, Chao Wang 0001
PLDI2
2015 Assertion guided symbolic execution of multithreaded programs
abstract
Symbolic execution is a powerful technique for systematic testing of sequential and multithreaded programs. However, its application is limited by the high cost of covering all feasible intra-thread paths and inter-thread interleavings. We propose a new assertion guided pruning framework that identifies executions guaranteed not to lead to an error and removes them during symbolic execution. By summarizing the reasons why previously explored executions cannot reach an error and using the information to prune redundant executions in the future, we can soundly reduce the search space. We also use static concurrent program slicing and heuristic minimization of symbolic constraints to further reduce the computational overhead. We have implemented our method in the Cloud9 symbolic execution tool and evaluated it on a large set of multithreaded C/C++ programs. Our experiments show that the new method can reduce the overall computational cost significantly.
Shengjian Guo, Markus Kusano, Chao Wang 0001, Zijiang Yang 0006, Aarti Gupta
ESEC/SIGSOFT FSE2
2014 Assertion guided abstraction: a cooperative optimization for dynamic partial order reduction
abstract
We propose a new method for reducing the interleaving space during stateless model checking of multithreaded C/C++ programs. The problem is challenging because of the exponential growth of possible interleavings between threads. We have developed a new method, called assertion guided abstraction, which leverages both static and dynamic program analyses in a cooperative framework to reduce the interleaving space. Unlike existing methods that consider all interleavings of all conflicting memory accesses in a program, our new method relies on a new notion of predicate dependence based on which we can soundly abstract the interleaving space to only those conflicting memory accesses that may cause assertion violations and/or deadlocks. Our experimental evaluation of assertion guided abstraction on open source benchmarks shows that it is capable of achieving a significant reduction, thereby allowing for the verification of programs that were previously too complex for existing algorithms to handle.
Markus Kusano, Chao Wang 0001
ASE1
2013 CCmutator: A mutation generator for concurrency constructs in multithreaded C/C++ applications
abstract
We introduce CCmutator, a mutation generation tool for multithreaded C/C++ programs written using POSIX threads and the recently standardized C++11 concurrency constructs. CCmutator is capable of performing partial mutations and generating higher order mutants, which allow for more focused and complex combinations of elementary mutation operators leading to higher quality mutants. We have implemented CCmutator based on the popular Clang/LLVM compiler framework, which allows CCmutator to be extremely scalable and robust in handling real-world C/C++ applications. CCmutator is also designed in such a way that all mutants of the same order can be generated in parallel, which allows the tool to be easily parallelized on commodity multicore hardware to improve performance.
Markus Kusano, Chao Wang 0001
ASE1