VLDB 2026 Research / reviewers in the wild / expert
Patrice Godefroid
dblp:20/1639
· DBLP profile ↗
78ranked-venue papers
46as first author
1since 2021 · last 2021
—ORCID · none
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 52 · 30 first-authorTheory of computation · 24 · 14 first-authorApplied, interdisciplinary, general and emerging computing · 3 · 2 first-authorArtificial intelligence and machine learning · 2 · 2 first-authorComputer networks · 2 · 1 first-authorSecurity and privacy · 2 · 1 first-author · 1 since 2021Graphics, computer vision, multimedia, augmented reality and games · 1 · 1 first-authorHuman-computer interaction and ubiquitous computing · 1 · 1 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
29 papers |
Software testing · 61% Program analysis · 16% Software maintenance and evolution · 14% | |
| Network and information security
9 papers |
Systems and software security · 100% Cryptographic protocols and secure computation · 0% | |
| Theoretical computer science
16 papers |
Automated reasoning and model checking · 54% Logic in computer science · 21% Automata and formal languages · 19% |
Topics — the 30 heaviest of 95, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Systems and software security
vulnerability discovery |
1.1 | 6 | 2021 | HyperFuzzer: An Efficient Hybrid Fuzzer for Virtual CPUs · CCS 2021 Learn&Fuzz: machine learning for input fuzzing · ASE 2017 Automatic partial loop summarization in dynamic test generation · ISSTA 2011 |
Systems and software security › vulnerability discovery
fuzzing |
0.8 | 2 | 2021 | HyperFuzzer: An Efficient Hybrid Fuzzer for Virtual CPUs · CCS 2021 Learn&Fuzz: machine learning for input fuzzing · ASE 2017 |
Software testing › test generation
dynamic test generation |
0.7 | 7 | 2011 | Automatic partial loop summarization in dynamic test generation · ISSTA 2011 Symbolic execution for software testing in practice: preliminary assessment · ICSE 2011 Compositional may-must program analysis: unleashing the power of alternation · POPL 2010 |
Systems and software security › vulnerability discovery › fuzzing
hypervisor fuzzing |
0.5 | 1 | 2021 | HyperFuzzer: An Efficient Hybrid Fuzzer for Virtual CPUs · CCS 2021 |
Software maintenance and evolution › software evolution
API evolution |
0.4 | 1 | 2020 | Differential regression testing for REST APIs · ISSTA 2020 |
Software maintenance and evolution
breaking change detection |
0.4 | 1 | 2020 | Differential regression testing for REST APIs · ISSTA 2020 |
Software testing
regression testing |
0.4 | 1 | 2020 | Differential regression testing for REST APIs · ISSTA 2020 |
Program analysis
symbolic execution |
0.4 | 4 | 2013 | Automated synthesis of symbolic instruction encodings from I/O samples · PLDI 2012 Symbolic execution for software testing in practice: preliminary assessment · ICSE 2011 Testing for buffer overflows with length abstraction · ISSTA 2008 |
Software testing
API testing |
0.4 | 1 | 2019 | RESTler: stateful REST API fuzzing · ICSE 2019 |
Software maintenance and evolution › release engineering
continuous integration |
0.4 | 1 | 2019 | Root causing flaky tests in a large-scale industrial setting · ISSTA 2019 |
Software testing › model-based testing
finite state machine testing |
0.4 | 1 | 2019 | RESTler: stateful REST API fuzzing · ICSE 2019 |
Software testing
flaky test |
0.4 | 1 | 2019 | Root causing flaky tests in a large-scale industrial setting · ISSTA 2019 |
Software testing › fuzzing › API fuzzing
REST API fuzzing |
0.4 | 1 | 2019 | RESTler: stateful REST API fuzzing · ICSE 2019 |
Software testing › fuzzing
state-aware fuzzing |
0.4 | 1 | 2019 | RESTler: stateful REST API fuzzing · ICSE 2019 |
Software testing › fuzzing
whitebox fuzzing |
0.3 | 3 | 2013 | Billions and billions of constraints: whitebox fuzz testing in production · ICSE 2013 Grammar-based whitebox fuzzing · PLDI 2008 Automated Whitebox Fuzz Testing · NDSS 2008 |
Systems and software security › vulnerability discovery › fuzzing
grammar-based fuzzing |
0.3 | 1 | 2017 | Learn&Fuzz: machine learning for input fuzzing · ASE 2017 |
Software testing › mutation testing
fault injection |
0.3 | 1 | 2017 | A general framework for dynamic stub injection · ICSE 2017 |
Software testing
test generation |
0.3 | 3 | 2011 | Higher-order test generation · PLDI 2011 Grammar-based whitebox fuzzing · PLDI 2008 DART: directed automated random testing · PLDI 2005 |
Program analysis › symbolic execution
dynamic symbolic execution |
0.3 | 3 | 2013 | Proving memory safety of floating-point computations by combining static and dynamic program analysis · ISSTA 2010 Precise pointer reasoning for dynamic test generation · ISSTA 2009 Billions and billions of constraints: whitebox fuzz testing in production · ICSE 2013 |
Software testing
fuzzing |
0.2 | 2 | 2013 | Billions and billions of constraints: whitebox fuzz testing in production · ICSE 2013 Automated Whitebox Fuzz Testing · NDSS 2008 |
Network management and operations
network verification |
0.2 | 1 | 2015 | Checking Beliefs in Dynamic Networks · NSDI 2015 |
Program verification
model checking |
0.2 | 7 | 2007 | Analysis of recursive state machines · ACM Trans. Program. Lang. Syst. 2005 Dynamic partial-order reduction for model checking software · POPL 2005 Compositional dynamic test generation · POPL 2007 |
Software testing › automated testing
test driver generation |
0.2 | 1 | 2014 | Micro execution · ICSE 2014 |
Software testing
test execution |
0.2 | 1 | 2014 | Micro execution · ICSE 2014 |
Software testing › test generation
constraint-based test generation |
0.2 | 1 | 2013 | Billions and billions of constraints: whitebox fuzz testing in production · ICSE 2013 |
Software testing
test input generation |
0.2 | 2 | 2008 | Testing for buffer overflows with length abstraction · ISSTA 2008 Compositional dynamic test generation · POPL 2007 |
Automated reasoning and model checking
model checking |
0.1 | 7 | 2005 | Model Checking Vs. Generalized Model Checking: Semantic Minimizations for Temporal Logics · LICS 2005 Model Checking of Unrestricted Hierarchical State Machines · ICALP 2001 Model Checking Partial State Spaces with 3-Valued Temporal Logics · CAV 1999 |
Program analysis › binary analysis
static binary analysis |
0.1 | 1 | 2012 | Automated synthesis of symbolic instruction encodings from I/O samples · PLDI 2012 |
Program analysis › symbolic execution
path explosion mitigation |
0.1 | 1 | 2011 | Automatic partial loop summarization in dynamic test generation · ISSTA 2011 |
Program analysis
static analysis |
0.1 | 1 | 2011 | Higher-order test generation · PLDI 2011 |
Methods — techniques the papers use, named apart from their topics
constraint solving · 1.1search heuristics · 0.9schema-based fuzzing · 0.9response-based value learning · 0.9producer-consumer dependency inference · 0.8dynamic feedback analysis · 0.8symbolic execution · 0.7dynamic symbolic execution · 0.6hybrid fuzzing · 0.5stateful fuzzing · 0.4differential testing · 0.4root cause analysis · 0.4empirical study · 0.4SMT solving · 0.3statistical machine learning · 0.3neural network · 0.3domain-specific language · 0.3loop summarization · 0.1
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2021 | HyperFuzzer: An Efficient Hybrid Fuzzer for Virtual CPUsabstractIn this cloud computing era, the security of hypervisors is critical to the overall security of the cloud. In particular, the security of CPU virtualization in hypervisors is paramount because it is implemented in the most privileged CPU mode. Blackbox and graybox fuzzing are limited to finding shallow virtual CPU bugs due to its huge search space. Whitebox fuzzing can be used for systematic analysis of CPU virtualization, but existing implementations rely on slow hardware emulators to enable dynamic symbolic execution. Xinyang Ge, Ben Niu 0007, Robert Brotzman, Yaohui Chen 0001, HyungSeok Han, Patrice Godefroid, Weidong Cui |
CCS | 6 |
| 2020 | Checking Security Properties of Cloud Service REST APIsabstractMost modern cloud and web services are programmatically accessed through REST APIs. This paper discusses how an attacker might compromise a service by exploiting vulnerabilities in its REST API. We introduce four security rules that capture desirable properties of REST APIs and services. We then show how a stateful REST API fuzzer can be extended with active property checkers that automatically test and detect violations of these rules. We discuss how to implement such checkers in a modular and efficient way. Using these checkers, we found new bugs in several deployed production Azure and Office365 cloud services, and we discuss their security implications. All these bugs have been fixed. Vaggelis Atlidakis, Patrice Godefroid, Marina Polishchuk |
ICST | 2 |
| 2020 | Differential regression testing for REST APIsabstractCloud services are programmatically accessed through REST APIs. Since REST APIs are constantly evolving, an important problem is how to prevent breaking changes of APIs, while supporting several different versions. To find such breaking changes in an automated way, we introduce differential regression testing for REST APIs. Our approach is based on two observations. First, breaking changes in REST APIs involve two software components, namely the client and the service. As such, there are also two types of regressions: regressions in the API specification, i.e., in the contract between the client and the service, and regressions in the service itself, i.e., previously working requests are "broken" in later versions of the service. Finding both kinds of regressions involves testing along two dimensions: when the service changes and when the specification changes. Second, to detect such bugs automatically, we employ differential testing. That is, we compare the behavior of different versions on the same inputs against each other, and find regressions in the observed differences. For generating inputs (sequences of HTTP requests) to services, we use RESTler, a stateful fuzzer for REST APIs. Comparing the outputs (HTTP responses) of a cloud service involves several challenges, like abstracting over minor differences, handling out-of-order requests, and non-determinism. Differential regression testing across 17 different versions of the widely-used Azure networking APIs deployed between 2016 and 2019 detected 14 regressions in total, 5 of those in the official API specifications and 9 regressions in the services themselves. Patrice Godefroid, Daniel Lehmann 0002, Marina Polishchuk |
ISSTA | 1 |
| 2020 | Intelligent REST API data fuzzingabstractThe cloud runs on REST APIs. In this paper, we study how to intelligently generate data payloads embedded in REST API requests in order to find data-processing bugs in cloud services. We discuss how to leverage REST API specifications, which, by definition, contain data schemas for API request bodies. We then propose and evaluate a range of data fuzzing techniques, including structural schema fuzzing rules, various rule combinations, search heuristics, extracting data values from examples included in REST API specifications, and learning data values on-the-fly from previous service responses. After evaluating these techniques, we identify the top-performing combination and use this algorithm to fuzz several Microsoft Azure cloud services. During our experiments, we found 100s of “Internal Server Error” service crashes, which we triaged into 17 unique bugs and reported to Azure developers. All these bugs are reproducible, confirmed, and fixed or in the process of being fixed. Patrice Godefroid, Bo-Yuan Huang 0001, Marina Polishchuk |
ESEC/SIGSOFT FSE | 1 |
| 2019 | RESTler: stateful REST API fuzzingabstractThis paper introduces RESTler, the first stateful REST API fuzzer. RESTler analyzes the API specification of a cloud service and generates sequences of requests that automatically test the service through its API. RESTler generates test sequences by (1) inferring producer-consumer dependencies among request types declared in the specification (e.g., inferring that "a request B should be executed after request A" because B takes as an input a resource-id x produced by A) and by (2) analyzing dynamic feedback from responses observed during prior test executions in order to generate new tests (e.g., learning that "a request C after a request sequence A;B is refused by the service" and therefore avoiding this combination in the future). We present experimental results showing that these two techniques are necessary to thoroughly exercise a service under test while pruning the large search space of possible request sequences. We used RESTler to test GitLab, an open-source Git service, as well as several Microsoft Azure and Office365 cloud services. RESTler found 28 bugs in GitLab and several bugs in each of the Azure and Office365 cloud services tested so far. These bugs have been confirmed and fixed by the service owners. Vaggelis Atlidakis, Patrice Godefroid, Marina Polishchuk |
ICSE | 2 |
| 2019 | Root causing flaky tests in a large-scale industrial settingabstractIn today’s agile world, developers often rely on continuous integration pipelines to help build and validate their changes by executing tests in an efficient manner. One of the significant factors that hinder developers’ productivity is flaky tests—tests that may pass and fail with the same version of code. Since flaky test failures are not deterministically reproducible, developers often have to spend hours only to discover that the occasional failures have nothing to do with their changes. However, ignoring failures of flaky tests can be dangerous, since those failures may represent real faults in the production code. Furthermore, identifying the root cause of flakiness is tedious and cumbersome, since they are often a consequence of unexpected and non-deterministic behavior due to various factors, such as concurrency and external dependencies. Wing Lam, Patrice Godefroid, Suman Nath, Anirudh Santhiar, Suresh Thummalapenta |
ISSTA | 2 |
| 2017 | A general framework for dynamic stub injectionabstractStub testing is a standard technique to simulate the behavior of dependencies of an application under test such as the file system. Even though existing frameworks automate the actual stub injection, testers typically have to implement manually where and when to inject stubs, in addition to the stub behavior. This paper presents a novel framework that reduces this effort. The framework provides a domain specific language to describe stub injection strategies and stub behaviors via declarative rules, as well as a tool that automatically injects stubs dynamically into binary code according to these rules. Both the domain specific language and the injection are language independent, which enables the reuse of stubs and injection strategies across applications. We implemented this framework for both unmanaged (assembly) and managed (.NET) code and used it to perform fault injection for twelve large applications, which revealed numerous crashes and bugs in error handling code. We also show how to prioritize the analysis of test failures based on a comparison of the effectiveness of stub injection rules across applications. Maria Christakis, Patrick Emmisberger, Patrice Godefroid, Peter Müller 0001 |
ICSE | 3 |
| 2017 | Learn&Fuzz: machine learning for input fuzzingabstractFuzzing consists of repeatedly testing an application with modified, or fuzzed, inputs with the goal of finding security vulnerabilities in input-parsing code. In this paper, we show how to automate the generation of an input grammar suitable for input fuzzing using sample inputs and neural-network-based statistical machine-learning techniques. We present a detailed case study with a complex input format, namely PDF, and a large complex security-critical parser for this format, namely, the PDF parser embedded in Microsoft's new Edge browser. We discuss and measure the tension between conflicting learning and fuzzing goals: learning wants to capture the structure of well-formed inputs, while fuzzing wants to break that structure in order to cover unexpected code paths and find bugs. We also present a new algorithm for this learn&fuzz challenge which uses a learnt input probability distribution to intelligently guide where to fuzz inputs. Patrice Godefroid, Hila Peleg, Rishabh Singh |
ASE | 1 |
| 2015 | Checking Beliefs in Dynamic Networks
Nuno P. Lopes, Nikolaj S. Bjørner, Patrice Godefroid, Karthick Jayaraman, George Varghese |
NSDI | 3 |
| 2015 | IC-Cut: A Compositional Search Strategy for Dynamic Test Generation
Maria Christakis, Patrice Godefroid |
SPIN | 2 |
| 2015 | Proving Memory Safety of the ANI Windows Image Parser Using Compositional Exhaustive Testing
Maria Christakis, Patrice Godefroid |
VMCAI | 2 |
| 2014 | Micro executionabstractMicro execution is the ability to execute any code fragment without a user-provided test driver or input data. The user simply identifies a function or code location in an exe or dll. A runtime Virtual Machine (VM) customized for testing purposes then starts executing the code at that location, catches all memory operations before they occur, allocates memory on-the-fly in order to perform those read/write memory operations, and provides input values according to a customizable memory policy, which defines what read memory accesses should be treated as inputs. Patrice Godefroid |
ICSE | 1 |
| 2013 | Billions and billions of constraints: whitebox fuzz testing in productionabstractWe report experiences with constraint-based whitebox fuzz testing in production across hundreds of large Windows applications and over 500 machine years of computation from 2007 to 2013. Whitebox fuzzing leverages symbolic execution on binary traces and constraint solving to construct new inputs to a program. These inputs execute previously uncovered paths or trigger security vulnerabilities. Whitebox fuzzing has found one-third of all file fuzzing bugs during the development of Windows 7, saving millions of dollars in potential security vulnerabilities. The technique is in use today across multiple products at Microsoft. We describe key challenges with running whitebox fuzzing in production. We give principles for addressing these challenges and describe two new systems built from these principles: SAGAN, which collects data from every fuzzing run for further analysis, and JobCenter, which controls deployment of our whitebox fuzzing infrastructure across commodity virtual machines. Since June 2010, SAGAN has logged over 3.4 billion constraints solved, millions of symbolic executions, and tens of millions of test cases generated. Our work represents the largest scale deployment of whitebox fuzzing to date, including the largest usage ever for a Satisfiability Modulo Theories (SMT) solver. We present specific data analyses that improved our production use of whitebox fuzzing. Finally we report data on the performance of constraint solving and dynamic test generation that points toward future research problems. Ella Bounimova, Patrice Godefroid, David A. Molnar |
ICSE | 2 |
| 2013 | Analysis of Boolean Programs
Patrice Godefroid, Mihalis Yannakakis |
TACAS | 1 |
| 2012 | Test Generation Using Symbolic ExecutionabstractThis paper presents a short introduction to automatic code-driven test generation using symbolic execution. It discusses some key technical challenges, solutions and milestones, but is not an exhaustive survey of this research area. Patrice Godefroid |
FSTTCS | 1 |
| 2012 | Automated synthesis of symbolic instruction encodings from I/O samplesabstractSymbolic execution is a key component of precise binary program analysis tools. We discuss how to automatically boot-strap the construction of a symbolic execution engine for a processor instruction set such as x86, x64 or ARM. We show how to automatically synthesize symbolic representations of individual processor instructions from input/output examples and express them as bit-vector constraints. We present and compare various synthesis algorithms and instruction sampling strategies. We introduce a new synthesis algorithm based on smart sampling which we show is one to two orders of magnitude faster than previous synthesis algorithms in our context. With this new algorithm, we can automatically synthesize bit-vector circuits for over 500 x86 instructions (8/16/32-bits, outputs, EFLAGS) using only 6 synthesis templates and in less than two hours using the Z3 SMT solver on a regular machine. During this work, we also discovered several inconsistencies across x86 processors, errors in the x86 Intel spec, and several bugs in previous manually-written x86 instruction handlers. Patrice Godefroid, Ankur Taly |
PLDI | 1 |
| 2011 | Symbolic execution for software testing in practice: preliminary assessmentabstractWe present results for the "Impact Project Focus Area" on the topic of symbolic execution as used in software testing. Symbolic execution is a program analysis technique introduced in the 70s that has received renewed interest in recent years, due to algorithmic advances and increased availability of computational power and constraint solving technology. We review classical symbolic execution and some modern extensions such as generalized symbolic execution and dynamic test generation. We also give a preliminary assessment of the use in academia, research labs, and industry. Cristian Cadar, Patrice Godefroid, Sarfraz Khurshid, Corina Pasareanu, Koushik Sen, Nikolai Tillmann, Willem Visser |
ICSE | 2 |
| 2011 | Automatic partial loop summarization in dynamic test generationabstractWhitebox fuzzing extends dynamic test generation based on symbolic execution and constraint solving from unit testing to whole-application security testing. Unfortunately, input-dependent loops may cause an explosion in the number of constraints to be solved and in the number of execution paths to be explored. In practice, whitebox fuzzers arbitrarily bound the number of constraints and paths due to input-dependent loops, at the risk of missing code and bugs. Patrice Godefroid, Daniel Luchaup |
ISSTA | 1 |
| 2011 | Higher-order test generationabstractSymbolic reasoning about large programs is bound to be imprecise. How to deal with this imprecision is a fundamental problem in program analysis. Imprecision forces approximation. Traditional static program verification builds "may" over-approximations of the program behaviors to check universal "for-all-paths" properties, while automatic test generation requires "must" under-approximations to check existential "for-some-path" properties. Patrice Godefroid |
PLDI | 1 |
| 2011 | Statically Validating Must Summaries for Incremental Compositional Dynamic Test Generation
Patrice Godefroid, Shuvendu K. Lahiri, Cindy Rubio-González |
SAS | 1 |
| 2011 | An abort-aware model of transactional programming
Kousha Etessami, Patrice Godefroid |
Int. J. Softw. Tools Technol. Transf. | 2 |
| 2011 | LTL generalized model checking revisited
Patrice Godefroid, Nir Piterman |
Int. J. Softw. Tools Technol. Transf. | 1 |
| 2010 | Proving memory safety of floating-point computations by combining static and dynamic program analysisabstractWhitebox fuzzing is a novel form of security testing based on dynamic symbolic execution and constraint solving. Over the last couple of years, whitebox fuzzers have found many new security vulnerabilities (buffer overflows) in Windows and Linux applications, including codecs, image viewers and media players. Those types of applications tend to use floating-point instructions available on modern processors, yet existing whitebox fuzzers and SMT constraint solvers do not handle floating-point arithmetic. Are there new security vulnerabilities lurking in floating-point code? Patrice Godefroid, Johannes Kinder |
ISSTA | 1 |
| 2010 | Compositional may-must program analysis: unleashing the power of alternationabstractProgram analysis tools typically compute two types of information: (1) may information that is true of all program executions and is used to prove the absence of bugs in the program, and (2) must information that is true of some program executions and is used to prove the existence of bugs in the program. In this paper, we propose a new algorithm, dubbed SMASH, which computes both may and must information compositionally . At each procedure boundary, may and must information is represented and stored as may and must summaries, respectively. Those summaries are computed in a demand driven manner and possibly using summaries of the opposite type. We have implemented SMASH using predicate abstraction (as in SLAM) for the may part and using dynamic test generation (as in DART) for the must part. Results of experiments with 69 Microsoft Windows 7 device drivers show that SMASH can significantly outperform may-only, must-only and non-compositional may-must algorithms. Indeed, our empirical results indicate that most complex code fragments in large programs are actually often either easy to prove irrelevant to the specific property of interest using may analysis or easy to traverse using directed testing. The fine-grained coupling and alternation of may (universal) and must (existential) summaries allows SMASH to easily navigate through these code fragments while traditional may-only, must-only or non-compositional may-must algorithms are stuck in their specific analyses. Patrice Godefroid, Aditya V. Nori, Sriram K. Rajamani, SaiDeep Tetali |
POPL | 1 |
| 2009 | Precise pointer reasoning for dynamic test generationabstractDynamic test generation consists of executing a program while gathering symbolic constraints on inputs from predicates encountered in branch statements, and of using a constraint solver to infer new program inputs from previous constraints in order to steer next executions towards new program paths. Variants of this technique have recently been adopted in several bug detection tools, including our whitebox fuzzer SAGE, which has found dozens of new expensive security-related bugs in many Windows applications and is now routinely used in various Microsoft groups. Bassem Elkarablieh, Patrice Godefroid, Michael Y. Levin |
ISSTA | 2 |
| 2009 | An Abort-Aware Model of Transactional Programming
Kousha Etessami, Patrice Godefroid |
VMCAI | 2 |
| 2009 | LTL Generalized Model Checking Revisited
Patrice Godefroid, Nir Piterman |
VMCAI | 1 |
| 2008 | Active property checkingabstractRuntime property checking (as implemented in tools like Purify or Valgrind) checks whether a program execution satisfies a property. Active property checking extends runtime checking by checking whether the property is satisfied by all program executions that follow the same program path. This check is performed on a symbolic execution of the given program path using a constraint solver. If the check fails, the constraint solver generates an alternative program input triggering a new program execution that follows the same program path but exhibits a property violation. Combined with systematic dynamic test generation, which attempts to exercise all feasible paths in a program, active property checking defines a new form of dynamic software model checking (program verification). In this paper, we formalize and study active property checking. We show how static and dynamic type checking can be extended with active type checking. Then, we discuss how to implement active property checking efficiently. Finally, we discuss results of experiments with media playing applications on Windows, where active property checking was able to detect several new security-related bugs. Patrice Godefroid, Michael Y. Levin, David A. Molnar |
EMSOFT | 1 |
| 2008 | Testing for buffer overflows with length abstractionabstractWe 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 |
ISSTA | 2 |
| 2008 | Automated Whitebox Fuzz Testing
Patrice Godefroid, Michael Y. Levin, David A. Molnar |
NDSS | 1 |
| 2008 | Grammar-based whitebox fuzzingabstractWhitebox fuzzing is a form of automatic dynamic test generation, based on symbolic execution and constraint solving, designed for security testing of large applications. Unfortunately, the current effectiveness of whitebox fuzzing is limited when testing applications with highly-structured inputs, such as compilers and interpreters. These applications process their inputs in stages, such as lexing, parsing and evaluation. Due to the enormous number of control paths in early processing stages, whitebox fuzzing rarely reaches parts of the application beyond those first stages. Patrice Godefroid, Adam Kiezun, Michael Y. Levin |
PLDI | 1 |
| 2008 | Demand-Driven Compositional Symbolic Execution
Saswat Anand, Patrice Godefroid, Nikolai Tillmann |
TACAS | 2 |
| 2007 | Compositional dynamic test generationabstractDynamic test generation is a form of dynamic program analysis that attempts to compute test inputs to drive a program along a specific program path. Directed Automated Random Testing, or DART for short, blends dynamic test generation with model checking techniques with the goal of systematically executing all feasible program paths of a program while detecting various types of errors using run-time checking tools (like Purify, for instance). Unfortunately, systematically executing all feasible program paths does not scale to large, realistic programs.This paper addresses this major limitation and proposes to perform dynamic test generation compositionally, by adapting known techniques for interprocedural static analysis. Specifically, we introduce a new algorithm, dubbed SMART for Systematic Modular Automated Random Testing, that extends DART by testing functions in isolation, encoding test results as function summaries expressed using input preconditions and output postconditions, and then re-using those summaries when testing higher-level functions. We show that, for a fixed reasoning capability, our compositional approach to dynamic test generation (SMART) is both sound and complete compared to monolithic dynamic test generation (DART). In other words, SMART can perform dynamic test generation compositionally without any reduction in program path coverage. We also show that, given a bound on the maximum number of feasible paths in individual program functions, the number of program executions explored by SMART is linear in that bound, while the number of program executions explored by DART can be exponential in that bound. We present examples of C programs and preliminary experimental results that illustrate and validate empirically these properties. Patrice Godefroid |
POPL | 1 |
| 2006 | Software partitioning for effective automated unit testingabstractA key problem for effective unit testing is the dificulty of partitioning large software systems into appropriate units that can be tested in isolation. We present an approach that identifies control and data inter-dependencies between software components using static program analysis, and divides the source code into units where highly-intertwined components are grouped together. Those units can then be tested in isolation using automated test generation techniques and tools, such as dynamic software model checkers. We discuss preliminary experimental results showing that automatic software partitioning can significantly increase test coverage without generating too many false alarms caused by unrealistic inputs being injected at interfaces between units. Arindam Chakrabarti, Patrice Godefroid |
EMSOFT | 2 |
| 2005 | Software Model Checking: Searching for Computations in the Abstract or the Concrete
Patrice Godefroid, Nils Klarlund |
IFM | 1 |
| 2005 | Model Checking Vs. Generalized Model Checking: Semantic Minimizations for Temporal LogicsabstractThree-valued models, in which properties of a system are either true, false or unknown, have recently been advocated as a better representation for reactive program abstractions generated by automatic techniques such as predicate abstraction. Indeed, for the same cost, model checking three-valued abstractions can be used to both prove and disprove any temporal-logic property, whereas traditional conservative abstractions can only prove universal properties. Also, verification results can be more precise with generalized model checking, which checks whether there exists a concretization of an abstraction satisfying a temporal-logic formula. Since generalized model checking includes satisfiability as a special case (when everything in the model is unknown), it is in general more expensive than traditional model checking. In this paper, we study how to reduce generalized model checking to model checking by a temporal-logic formula transformation, which generalizes a transformation for propositional logic known as semantic minimization in the literature. We show that many temporal-logic formulas of practical interest are self-minimizing, i.e., are their own semantic minimizations, and hence that model checking for these formulas has the same precision as generalized model checking. Patrice Godefroid, Michael Huth 0001 |
LICS | 1 |
| 2005 | DART: directed automated random testingabstractWe present a new tool, named DART, for automatically testing software that combines three main techniques: (1) automated extraction of the interface of a program with its external environment using static source-code parsing; (2) automatic generation of a test driver for this interface that performs random testing to simulate the most general environment the program can operate in; and (3) dynamic analysis of how the program behaves under random testing and automatic generation of new test inputs to direct systematically the execution along alternative program paths. Together, these three techniques constitute Directed Automated Random Testing, or DART for short. The main strength of DART is thus that testing can be performed completely automatically on any program that compiles -- there is no need to write any test driver or harness code. During testing, DART detects standard errors such as program crashes, assertion violations, and non-termination. Preliminary experiments to unit test several examples of C programs are very encouraging. Patrice Godefroid, Nils Klarlund, Koushik Sen |
PLDI | 1 |
| 2005 | Dynamic partial-order reduction for model checking softwareabstractWe present a new approach to partial-order reduction for model checking software. This approach is based on initially exploring an arbitrary interleaving of the various concurrent processes/threads, and dynamically tracking interactions between these to identify backtracking points where alternative paths in the state space need to be explored. We present examples of multi-threaded programs where our new dynamic partial-order reduction technique significantly reduces the search space, even though traditional partial-order algorithms are helpless. Cormac Flanagan, Patrice Godefroid |
POPL | 2 |
| 2005 | Generalized Model CheckingabstractThree-valued models, in which properties of a system are either true, false or unknown, have recently been advocated as a better representation for reactive program abstractions generated by automatic techniques such as predicate abstraction. Indeed, for the same cost, model checking three-valued abstractions (also called may/must abstractions) can be used to both prove and disprove any temporal-logic property, whereas traditional conservative abstractions can only prove universal properties. Also, verification results can be more precise with generalized model checking, which checks whether there exists a concretization of an abstraction satisfying a temporal-logic formula. Generalized model checking generalizes both model checking (when the model is complete) and satisfiability (when everything in the model is unknown), probably the two most studied problems related to temporal logic and verification. In this talk, the main ideas behind this framework, namely models for three-valued abstractions, completeness preorders (to measure the level of completeness of such models), three-valued temporal logics and generalized model checking was presented . The algorithms and complexity bounds for three-valued model checking and generalized model-checking for various temporal logics, was also discussed. The applications to program verification via automatic abstraction, was then discussed. Examples of programs and properties that can be verified by generalized model checking but not with current abstraction-based verification tools, was shown. Classes of temporal-logic formulas for which model checking is guaranteed to always have the same precision as generalized model checking, was also presented. The final topic is a brief discussion of three-valued abstractions for reasoning about open systems and about games in general, as well as completeness issues (i.e., given an infinite-state program and a property, is there a finite-state abstraction of that program that satisfies this property?). Patrice Godefroid |
TIME | 1 |
| 2005 | Software Model Checking: The VeriSoft Approach
Patrice Godefroid |
Formal Methods Syst. Des. | 1 |
| 2005 | Analysis of recursive state machinesabstractRecursive state machines (RSMs) enhance the power of ordinary state machines by allowing vertices to correspond either to ordinary states or to potentially recursive invocations of other state machines. RSMs can model the control flow in sequential imperative programs containing recursive procedure calls. They can be viewed as a visual notation extending Statecharts-like hierarchical state machines, where concurrency is disallowed but recursion is allowed. They are also related to various models of pushdown systems studied in the verification and program analysis communities.After introducing RSMs and comparing their expressiveness with other models, we focus on whether verification can be efficiently performed for RSMs. Our first goal is to examine the verification of linear time properties of RSMs. We begin this study by dealing with two key components for algorithmic analysis and model checking, namely, reachability (Is a target state reachable from initial states?) and cycle detection (Is there a reachable cycle containing an accepting state?). We show that both these problems can be solved in time O ( n θ 2 ) and space O ( n θ), where n is the size of the recursive machine and θ is the maximum, over all component state machines, of the minimum of the number of entries and the number of exits of each component. From this, we easily derive algorithms for linear time temporal logic model checking with the same complexity in the model. We then turn to properties in the branching time logic CTL*, and again demonstrate a bound linear in the size of the state machine, but only for the case of RSMs with a single exit node. Rajeev Alur, Michael Benedikt, Kousha Etessami, Patrice Godefroid, Thomas W. Reps, Mihalis Yannakakis |
ACM Trans. Program. Lang. Syst. | 4 |
| 2004 | Model Checking with Multi-valued Logics
Glenn Bruns, Patrice Godefroid |
ICALP | 2 |
| 2004 | Three-Valued Abstractions of Games: Uncertainty, but with PrecisionabstractWe present a framework for abstracting two-player turn-based games that preserves any formula of the alternating /spl mu/-calculus (AMC). Unlike traditional conservative abstractions which can only prove the existence of winning strategies for only one of the players, our framework is based on 3-valued games, and it can be used to prove and disprove formulas of AMC including arbitrarily nested strategy quantifiers. Our main contributions are as follows. We define abstract 3-valued games and an alternating refinement relation on these that preserves winning strategies for both players. We provide a logical characterization of the alternating refinement relation. We show that our abstractions are as precise as can be via completeness results. We present AMC formulas that solve 3-valued games with /spl omega/-regular objectives, and we show that such games are determined in a 3-valued sense. We also discuss the complexity of model checking arbitrary AMC formulas on 3-valued games and of checking alternating refinement. Luca de Alfaro, Patrice Godefroid, Radha Jagadeesan |
LICS | 2 |
| 2004 | Invited Talk: "Model checking" software with VeriSoftabstractVeriSoft is a tool for systematically testing concurrent reactive software systems. It explores the state space (dynamic behavior) of a system by driving and observing the execution of its components using a run-time scheduler, and by reinitializing their execution. This systematic state-space exploration is performed using model-checking algorithms and makes heavy use of so-called "partial-order reduction" techniques. By default, VeriSoft searches state spaces for violations of user-specified assertions and coordination problems (deadlocks, crashes, etc.) between concurrent components. With its first prototype developed in 1996 (published at POPL'97), VeriSoft is the first software model checker for general-purpose programming languages like C and C++.Since made publicly available in 1999, VeriSoft has been licensed to hundreds of users in industry and academia. Inside Lucent Technologies, it was applied successfully to analyze several software products in various business units and application domains (switch maintenance, call processing, network management, etc.). Because VeriSoft can automatically generate, execute and evaluate thousands of tests per minute, it can quickly reveal behaviors that are virtually impossible to detect using conventional testing techniques.In this talk, I will present VeriSoft, what it does, how it works, industrial applications, strengths and limitations, technology-transfer issues, and discuss the current status of this project as well as related work and future work. Patrice Godefroid |
PASTE | 1 |
| 2004 | Exploring very large state spaces using genetic algorithms
Patrice Godefroid, Sarfraz Khurshid |
Int. J. Softw. Tools Technol. Transf. | 1 |
| 2004 | Symmetry and reduced symmetry in model checkingabstractSymmetry reduction methods exploit symmetry in a system in order to efficiently verify its temporal properties. Two problems may prevent the use of symmetry reduction in practice: (1) the property to be checked may distinguish symmetric states and hence not be preserved by the symmetry, and (2) the system may exhibit little or no symmetry. In this article, we present a general framework that addresses both of these problems. We introduce "Guarded Annotated Quotient Structures" for compactly representing the state space of systems even when those are asymmetric. We then present algorithms for checking any temporal property on such representations, including non-symmetric properties. A. Prasad Sistla, Patrice Godefroid |
ACM Trans. Program. Lang. Syst. | 2 |
| 2003 | Reasoning about Abstract Open Systems with Generalized Module Checking
Patrice Godefroid |
EMSOFT | 1 |
| 2003 | On the Expressiveness of 3-Valued Models
Patrice Godefroid, Radha Jagadeesan |
VMCAI | 1 |
| 2002 | Automatic Abstraction Using Generalized Model Checking
Patrice Godefroid, Radha Jagadeesan |
CAV | 1 |
| 2002 | Software model checking in practice: an industrial case studyabstractWe present an application of software model checking to the analysis of a large industrial software product: Lucent Technologies' CDMA call-processing library. This software is deployed on thousands of base stations in wireless networks world-wide, where it sets up and manages millions of calls to and from mobile devices everyday. Our analysis of this software was carried out using VeriSoft, a tool developed at Bell Laboratories that implements model-checking algorithms for systematically testing concurrent reactive software.VeriSoft has now been used for over a year for analyzing several releases and versions of the CDMA call-processing software. Although we started this work with a fairly robust version of the software, the application of model checking exposed several problems that had escaped traditional testing. Model checking also helped developers maintain a high degree of confidence in the library as it evolved through its many releases and versions.To our knowledge, software model checking has rarely been applied to software systems of this scale. In this paper, we describe our experience in applying this technology in an industrial environment. Satish Chandra 0001, Patrice Godefroid, Christopher Palm |
ICSE | 2 |
| 2002 | Exploring Very Large State Spaces Using Genetic Algorithms
Patrice Godefroid, Sarfraz Khurshid |
TACAS | 1 |
| 2001 | Symmetry and Reduced Symmetry in Model Checking
A. Prasad Sistla, Patrice Godefroid |
CAV | 2 |
| 2001 | Abstraction-Based Model Checking Using Modal Transition Systems
Patrice Godefroid, Michael Huth 0001, Radha Jagadeesan |
CONCUR | 1 |
| 2001 | Model Checking of Unrestricted Hierarchical State Machines
Michael Benedikt, Patrice Godefroid, Thomas W. Reps |
ICALP | 2 |
| 2001 | Temporal Logic Query CheckingabstractA temporal logic query checker takes as input a Kripke structure and a temporal logic formula with a hole, and returns the set of propositional formulas that, when put in the hole, are satisfied by the Kripke structure. By allowing the temporal properties of a system to be discovered, query checking is useful in the study and reverse engineering of systems. Temporal logic query checking was first proposed by W. Chan (2000). In this paper, we generalize and simplify Chan's work by showing how a new class of alternating automata can be used for query checking with a wide range of temporal logics. Glenn Bruns, Patrice Godefroid |
LICS | 2 |
| 2000 | Generalized Model Checking: Reasoning about Partial State Spaces
Glenn Bruns, Patrice Godefroid |
CONCUR | 2 |
| 2000 | Ensuring privacy in presence awareness: an automated verification approachabstractProviding information about other users and their activites is a central function of many collaborative applications. The data that provide this "presence awareness" are usually automatically generated and highly dynamic. For example, services such as AOL Instant Messenger allow users to observe the status of one another and to initiate and participate in chat sessions. As such services become more powerful, privacy and security issues regarding access to sensitive user data become critical. Two key software engineering challenges arise in this context: Patrice Godefroid, James D. Herbsleb, Lalita Jategaonkar Jagadeesan, Du Li |
CSCW | 1 |
| 2000 | Automated systematic testing for constraint-based interactive servicesabstractConstraint-based languages can express in a concise way the complex logic of a new generation of interactive services for applications such as banking or stock trading, that must support multiple types of interfaces for accessing the same data. These include automatic speech-recognition interfaces where inputs may be provided in any order by users of the service. We study in this paper how to systematically test event-driven applications developed using such languages. We show how such applications can be tested automatically, without the need for any manually-written test cases, and efficiently, by taking advantage of their capability of taking unordered sets of events as inputs. Patrice Godefroid, Lalita Jategaonkar Jagadeesan, Radha Jagadeesan, Konstantin Läufer |
SIGSOFT FSE | 1 |
| 1999 | Model Checking Partial State Spaces with 3-Valued Temporal Logics
Glenn Bruns, Patrice Godefroid |
CAV | 2 |
| 1999 | Exploiting Symmetry when Model-Checking Software
Patrice Godefroid |
FORTE | 1 |
| 1999 | Symbolic Verification of Communication Protocols with Infinite State Spaces using QDDs
Bernard Boigelot, Patrice Godefroid |
Formal Methods Syst. Des. | 2 |
| 1999 | Symbolic Protocol Verification with Queue BDDs
Patrice Godefroid, David E. Long |
Formal Methods Syst. Des. | 1 |
| 1998 | Model Checking Without a Model: An Analysis of the Heart-Beat Monitor of a Telephone Switch Using VeriSoftabstractVeriSoft is a tool for systematically exploring the state spaces of systems composed of several concurrent processes executing arbitrary code written in full-fledged programming languages such as C or C++. The state space of a concurrent system is a directed graph that represents the combined behavior of all concurrent components in the system. By exploring its state space, VeriSoft can automatically detect coordination problems between the processes of a concurrent system.We report in this paper our analysis with VeriSoft of the "Heart-Beat Monitor" (HBM), a telephone switching application developed at Lucent Technologies. The HBM of a telephone switch determines the status of different elements connected to the switch by measuring propagation delays of messages transmitted via these elements. This information plays an important role in the routing of data in the switch, and can significantly impact switch performance.We discuss the steps of our analysis of the HBM using VeriSoft. Because no modeling of the HBM code is necessary with this tool, the total elapsed time before being able to run the first tests was on the order of a few hours, instead of several days or weeks that would have been needed for the (error-prone) modeling phase required with traditional model checkers or theorem provers.We then present the results of our analysis. Since VeriSoft automatically generates, executes and evaluates thousands of tests per minute and has complete control over nondeterminism, our analysis revealed HBM behavior that is virtually impossible to detect or test in a traditional lab-testing environment. Specifically, we discovered flaws in the existing documentation on this application and unexpected behaviors in the software itself. These results are being used as the basis for the redesign of the HBM software in the next commercial release of the switching software. Patrice Godefroid, Robert S. Hanmer, Lalita Jategaonkar Jagadeesan |
ISSTA | 1 |
| 1998 | Automatically Closing Open Reactive ProgramsabstractWe study in this paper the problem of analyzing implementations of open systems --- systems in which only some of the components are present. We present an algorithm for automatically closing an open concurrent reactive system with its most general environment, i.e., the environment that can provide any input at any time to the system. The result is a nondeterministic closed (i.e., self-executable) system which can exhibit all the possible reactive behaviors of the original open system. These behaviors can then be analyzed using VeriSoft, an existing tool for systematically exploring the state spaces of closed systems composed of multiple (possibly nondeterministic) processes executing arbitrary code. We have implemented the techniques introduced in this paper in a prototype tool for automatically closing open programs written in the C programming language. We discuss preliminary experimental results obtained with a large telephone-switching software application developed at Lucent Technologies. Christopher Colby, Patrice Godefroid, Lalita Jategaonkar Jagadeesan |
PLDI | 2 |
| 1997 | VeriSoft: A Tool for the Automatic Analysis of Concurrent Reactive Software
Patrice Godefroid |
CAV | 1 |
| 1997 | Model Checking for Programming Languages using VerisoftabstractVerification by state-space exploration, also often referred to as "model checking", is an effective method for analyzing the correctness of concurrent reactive systems (e.g., communication protocols). Unfortunately, existing model-checking techniques are restricted to the verification of properties of models, i.e., abstractions, of concurrent systems.In this paper, we discuss how model checking can be extended to deal directly with "actual" descriptions of concurrent systems, e.g., implementations of communication protocols written in programming languages such as C or C++. We then introduce a new search technique that is suitable for exploring the state spaces of such systems. This algorithm has been implemented in VeriSoft, a tool for systematically exploring the state spaces of systems composed of several concurrent processes executing arbitrary C code. As an example of application, we describe how VeriSoft successfully discovered an error in a 2500-line C program controlling robots operating in an unpredictable environment. Patrice Godefroid |
POPL | 1 |
| 1997 | The Power of QDDs (Extended Abstract)
Bernard Boigelot, Patrice Godefroid, Bernard Willems, Pierre Wolper |
SAS | 2 |
| 1996 | Symbolic Verification of Communication Protocols with Infinite State Spaces Using QDDs (Extended Abstract)
Bernard Boigelot, Patrice Godefroid |
CAV | 2 |
| 1996 | Using Partial-Order Methods in the Formal Validation of Industrial Concurrent ProgramsabstractWe have developed a formal validation tool that has been used on several projects that are developing software for AT&T's 5ESS™ telephone switching system. The tool uses Holzmann's supertrace algorithm to check for errors such as deadlock and livelock in networks of communicating processes. The validator invariably finds subtle errors that were missed during thorough simulation and testing; however, the brute-force search it performs can result in extremely long running times, which can be frustrating to users. Recently, a number of researchers have been investigating techniques known as partial-order methods that can significantly reduce the running time of formal validation by avoiding redundant exploration of execution scenarios. In this paper, we describe the design of a partial-order algorithm for our validation tool and discuss its effectiveness. We show that a careful compile-time static analysis of process communication behavior yields information that can be used during validation to dramatically improve its performance. We demonstrate the effectiveness of our partial-order algorithm by presenting the results of experiments with actual industrial examples drawn from a variety of 5ESS™ application domains, including call processing, signalling, and switch maintenance. Patrice Godefroid, Doron A. Peled, Mark G. Staskauskas |
ISSTA | 1 |
| 1996 | Symbolic Protocol Verification With Queue BDDsabstractSymbolic verification based on Binary Decision Diagrams (BDDs) has proven to be a powerful technique for ensuring the correctness of digital hardware. In contrast, BDDs have not caught on as widely for software verification, partly because the data types used in software are more complicated than those used in hardware. In this work, we propose an extension of BDDs for dealing with dynamic data structures. Specifically, we focus on queues, since they are commonly used in modeling communication protocols. We introduce Queue BDDs (QBDDs) which include all the power of BDDs while also providing an efficient representation of queue contents. Experimental results show that QBDDs are well-suited for the verification of communication protocols. Patrice Godefroid, David E. Long |
LICS | 1 |
| 1996 | Using Partial-Order Methods in the Formal Validation of Industrial Concurrent ProgramsabstractFormal validation is a powerful technique for automatically checking that a collection of communicating processes is free from concurrency-related errors. Although validation tools invariably find subtle errors that were missed during thorough simulation and testing, the brute-force search they perform can result in excessive memory usage and extremely long running times. Recently, a number of researchers have been investigating techniques known as partial-order methods that can significantly reduce the computational resources needed for formal validation by avoiding redundant exploration of execution scenarios. This paper investigates the behavior of partial-order methods in an industrial setting. We describe the design of a partial-order algorithm or a formal validation tool that has been used on several projects that are developing software for the Lucent Technologies 5ESS/sup (R/) telephone switching system. We demonstrate the effectiveness of the algorithm by presenting the results of experiments with actual industrial examples drawn from a variety of 5ESS application domains. Patrice Godefroid, Doron A. Peled, Mark G. Staskauskas |
IEEE Trans. Software Eng. | 1 |
| 1995 | State-Space Caching Revisited
Patrice Godefroid, Gerard J. Holzmann, Didier Pirottin |
Formal Methods Syst. Des. | 1 |
| 1994 | A Partial Approach to Model Checking
Patrice Godefroid, Pierre Wolper |
Inf. Comput. | 1 |
| 1993 | Refining Dependencies Improves Partial-Order Verification Methods (Extended Abstract)
Patrice Godefroid, Didier Pirottin |
CAV | 1 |
| 1993 | Partial-Order Methods for Temporal Verification
Pierre Wolper, Patrice Godefroid |
CONCUR | 2 |
| 1993 | Using Partial Orders for the Efficient Verification of Deadlock Freedom and Safety Properties
Patrice Godefroid, Pierre Wolper |
Formal Methods Syst. Des. | 1 |
| 1991 | An Efficient Reactive Planner for Synthesizing Reactive Plans
Patrice Godefroid, Froduald Kabanza |
AAAI | 1 |
| 1991 | A Partial Approach to Model CheckingabstractA model-checking method for linear-time temporal logic that avoids the state explosion due to the modeling of concurrency by interleaving is presented. The method relies on the concept of the Mazurkiewicz trace as a semantic basis and uses automata-theoretic techniques, including automata that operate on words of ordinality higher than omega . In particular, automata operating on words of length omega *n, n in omega are defined. These automata are studied, and an efficient algorithm to check whether such automata are nonempty is given. It is shown that when it is viewed as an omega *n automaton, the trace automaton can be substituted for the production automaton in linear-time model checking. The efficiency of the method of P. Godefroid (Proc. Workshop on Computer Aided Verification, 1990) is thus fully available for model checking.> Patrice Godefroid, Pierre Wolper |
LICS | 1 |