Daniel Schwartz-Narbonne

dblp:00/7453 · DBLP profile ↗
← Back
10ranked-venue papers
4as first author
1since 2021 · last 2021
0000-0002-0453-2552ORCID · reported

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

Software engineering, systems software and programming languages · 9 · 4 first-author · 1 since 2021Theory of computation · 3 · 2 first-authorSystems, architecture and hardware · 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
5 papers
Program analysis · 36% Debugging and program repair · 30% Software testing · 15%
Computer architecture, parallel and distributed computing, and storage systems
1 paper
Electronic design automation · 77% Distributed systems · 23%

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

TopicWeightPapersLastEvidence papers
Debugging and program repair
fault localization
0.642016
VERMEER: A Tool for Tracing and Explaining Faulty C Programs · ICSE (2) 2015
Explaining inconsistent code · ESEC/SIGSOFT FSE 2013
passert: A Tool for Debugging Parallel Programs · CAV 2012
Program analysis
static analysis
0.422015
VERMEER: A Tool for Tracing and Explaining Faulty C Programs · ICSE (2) 2015
Explaining inconsistent code · ESEC/SIGSOFT FSE 2013
Program analysis
constraint solving
0.312017
A solver-aided language for test input generation · Proc. ACM Program. Lang. 2017
Software testing
test input generation
0.312017
A solver-aided language for test input generation · Proc. ACM Program. Lang. 2017
Program verification
concurrent program verification
0.212016
Error Invariants for Concurrent Traces · FM 2016
Program analysis › dynamic analysis
program tracing
0.212015
VERMEER: A Tool for Tracing and Explaining Faulty C Programs · ICSE (2) 2015
Concurrent programming
concurrency bugs
0.112012
passert: A Tool for Debugging Parallel Programs · CAV 2012
Debugging and program repair › concurrent program debugging
parallel program debugging
0.112012
passert: A Tool for Debugging Parallel Programs · CAV 2012
Electronic design automation
high-level synthesis
0.112012
Specification and synthesis of hardware checkpointing and rollback mechanisms · DAC 2012
Software testing
random testing
0.112017
A solver-aided language for test input generation · Proc. ACM Program. Lang. 2017
Program verification › dynamic verification › runtime verification
assertion checking
0.012012
passert: A Tool for Debugging Parallel Programs · CAV 2012
Distributed systems › fault tolerance
rollback recovery
0.012012
Specification and synthesis of hardware checkpointing and rollback mechanisms · DAC 2012

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

bounded enumeration · 0.3SMT solving · 0.3automated theorem proving · 0.2usability study · 0.2error invariant automaton · 0.2assertion checking · 0.1
YearPublicationVenuePosition
2021 Code-level model checking in the software development workflow at Amazon Web Services
abstract
Abstract This article describes a style of applying symbolic model checking developed over the course of four years at Amazon Web Services (AWS). Lessons learned are drawn from proving properties of numerous C‐based systems, for example, custom hypervisors, encryption code, boot loaders, and an IoT operating system. Using our methodology, we find that we can prove the correctness of industrial low‐level C‐based systems with reasonable effort and predictability. Furthermore, AWS developers are increasingly writing their own formal specifications. As part of this effort, we have developed a CI system that allows integration of the proofs into standard development workflows and extended the proof tools to provide better feedback to users. All proofs discussed in this article are publicly available on GitHub.
Nathan Chong, Byron Cook, Jonathan Eidelman, Konstantinos Kallas, Kareem Khazem, Felipe R. Monteiro, Daniel Schwartz-Narbonne, Serdar Tasiran, Michael Tautschnig, Mark R. Tuttle
Softw. Pract. Exp.7
2017 A solver-aided language for test input generation
abstract
Developing a small but useful set of inputs for tests is challenging. We show that a domain-specific language backed by a constraint solver can help the programmer with this process. The solver can generate a set of test inputs and guarantee that each input is different from other inputs in a way that is useful for testing. This paper presents Iorek: a tool that empowers the programmer with the ability to express to any SMT solver what it means for inputs to be different. The core of Iorek is a rich language for constraining the set of inputs, which includes a novel bounded enumeration mechanism that makes it easy to define and encode a flexible notion of difference over a recursive structure. We demonstrate the flexibility of this mechanism for generating strings. We use Iorek to test real services and find that it is effective at finding bugs. We also build Iorek into a random testing tool and show that it increases coverage.
Talia Ringer, Dan Grossman, Daniel Schwartz-Narbonne, Serdar Tasiran
Proc. ACM Program. Lang.3
2016 Error Invariants for Concurrent Traces
Andreas Holzer, Daniel Schwartz-Narbonne, Mitra Tabaei Befrouei, Georg Weissenbacher, Thomas Wies
FM2
2015 VERMEER: A Tool for Tracing and Explaining Faulty C Programs
abstract
We present VERMEER, a new automated debugging tool for C. VERMEER combines two functionalities: (1) a dynamic tracer that produces a linearized trace from a faulty C program and a given test input; and (2) a static analyzer that explains why the trace fails. The tool works in phases that simplify the input program to a linear trace, which is then analyzed using an automated theorem prover to produce the explanation. The output of each phase is a valid C program. VERMEER is able to produce useful explanations of non trivial traces for real C programs within a few seconds. The tool demo can be found at http://youtu.be/E5lKHNJVerU.
Daniel Schwartz-Narbonne, Chanseok Oh, Martin Schäf, Thomas Wies
ICSE (2)1
2014 Concolic Fault Localization
abstract
An integral part of all debugging activities is the task of diagnosing the cause of an error. Most existing fault diagnosis techniques rely on the availability of high quality test suites because they work by comparing failing and passing runs to identify the error cause. This limits their applicability. One alternative are techniques that statically analyze an error trace of the program without relying on additional passing runs to compare against. Particularly promising are novel proof-based approaches that leverage the advances in automated theorem proving to obtain an abstraction of the program that aids fault diagnostics. However, existing proof-based approaches still have practical limitations such as reduced scalability and dependence on complex mathematical models of programs. Such models are notoriously difficult to develop for real-world programs. Inspired by concolic testing, we propose a novel algorithm that integrates concrete execution and symbolic reasoning about the error trace to address these challenges. Specifically, we execute the error trace to obtain intermediate program states that allow us to split the trace into smaller fragments, each of which can be analyzed in isolation using an automated theorem prover. Moreover, we show how this approach can avoid complex logical encodings when reasoning about traces in low-level C programs. We have conducted an experiment where we applied our new algorithm to error traces generated from faulty versions of UNIX utils such as gzip and sed. Our experiment indicates that our concolic fault abstraction scales to real-world error traces and generates useful error diagnoses.
Chanseok Oh, Martin Schäf, Daniel Schwartz-Narbonne, Thomas Wies
SCAM3
2013 Explaining inconsistent code
abstract
A code fragment is inconsistent if it is not part of any normally terminating execution. Examples of such inconsistencies include code that is unreachable, code that always fails due to a run-time error, and code that makes conflicting assumptions about the program state. In this paper, we consider the problem of automatically explaining inconsistent code. This problem is difficult because traditional fault localization techniques do not apply. Our solution relies on a novel algorithm that takes an infeasible code fragment as input and generates a so-called error invariant automaton. The error invariant automaton is an abstraction of the input code fragment that only mentions program statements and facts that are relevant for understanding the cause of the inconsistency. We conducted a preliminary usability study which demonstrated that error invariant automata can help programmers better understand inconsistencies in code taken from real-world programs. In particular, access to an error invariant automata tripled the speed at which programmers could diagnose the cause of a code inconsistency.
Martin Schäf, Daniel Schwartz-Narbonne, Thomas Wies
ESEC/SIGSOFT FSE2
2012 Parallel Assertions for Architectures with Weak Memory Models
Daniel Schwartz-Narbonne, Georg Weissenbacher, Sharad Malik
ATVA1
2012 passert: A Tool for Debugging Parallel Programs
Daniel Schwartz-Narbonne, David I. August, Sharad Malik
CAV1
2012 Specification and synthesis of hardware checkpointing and rollback mechanisms
abstract
The increasing pressure to make hardware resilient to runtime failures has prompted development of design techniques for specific classes of systems, e.g. processors and routers. However, these techniques come at increased design and verification costs, thus limiting their broader application. In this work we describe a methodology for general RTL designs based on the widely usable checkpointing and rollback resiliency mechanism. We take a modeling and language approach that provides an appropriate set of abstractions for the resiliency logic. This cleanly separates the main design behavior from the resiliency behavior, leading to ease of design. Further, as the language abstractions can be automatically synthesized into resiliency logic, our methodology can merge with existing design flows. The concerns of verifying this additional resiliency logic can be addressed by synthesizing behavioral assertions capturing correct behavior. We demonstrate the use of this methodology on four examples, with synthesis for performance and area to estimate the overhead of the additional synthesis logic.
Carven Chan, Daniel Schwartz-Narbonne, Divjyot Sethi, Sharad Malik
DAC2
2011 Parallel assertions for debugging parallel programs
abstract
A parallel program must execute correctly even in the presence of unpredictable thread interleavings. This interleaving makes it hard to write correct parallel programs, and also makes it hard to find bugs in incorrect parallel programs. A range of tools have been developed to help debug parallel programs, ranging from atomicity-violation and data-race detectors to model-checkers and theorem provers. One technique that has been successful for debugging sequential programs, but less effective for parallel programs, is running the program using assertion predicates provided by the developer. These assertions allow programmers to specify and check their assumptions. In a multi-threaded program, the programmer's assumptions include both the current state, and any actions (e.g. access to shared memory) that other, parallel executing threads might take. We introduce parallel assertions which allow programmers to express these assumptions for parallel programs using simple and intuitive syntax and semantics. We present a proof-of-concept implementation, and demonstrate its value by testing a number of benchmark programs using parallel assertions.
Daniel Schwartz-Narbonne, Tarun Pondicherry, David I. August, Sharad Malik
MEMOCODE1