Demo Data from SIGIR 2026 / reviewers in the wild / expert
Andy Chou
dblp:53/3446
· DBLP profile ↗
7ranked-venue papers
2as first author
0since 2021 · last 2003
—ORCID · none
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 7 · 2 first-authorSystems, architecture and hardware · 2 · 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
7 papers |
Program analysis · 63% Program verification · 23% Operating systems · 9% | |
| Computer architecture, parallel and distributed computing, and storage systems
2 papers |
Memory systems · 100% | |
| Theoretical computer science
1 paper |
Automated reasoning and model checking · 100% |
Topics — the 13 heaviest of 17, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Program analysis
static analysis |
0.2 | 5 | 2003 | ARCHER: using symbolic, path-sensitive analysis to detect memory access errors · ESEC / SIGSOFT FSE 2003 Bugs as Deviant Behavior: A General Approach to Inferring Errors in Systems Code · SOSP 2001 An Empirical Study of Operating System Errors · SOSP 2001 |
Program analysis › dynamic analysis
memory error detection |
0.0 | 1 | 2003 | ARCHER: using symbolic, path-sensitive analysis to detect memory access errors · ESEC / SIGSOFT FSE 2003 |
Memory systems
cache coherence |
0.0 | 2 | 2001 | A simple method for extracting models for protocol code · ISCA 2001 Using Meta-level Compilation to Check FLASH Protocol Code · ASPLOS 2000 |
Automated reasoning and model checking › model checking
software model checking |
0.0 | 1 | 2002 | CMC: A Pragmatic Approach to Model Checking Real Code · OSDI 2002 |
Program analysis › static analysis
bug detection |
0.0 | 1 | 2001 | Bugs as Deviant Behavior: A General Approach to Inferring Errors in Systems Code · SOSP 2001 |
Program verification
model checking |
0.0 | 1 | 2001 | A simple method for extracting models for protocol code · ISCA 2001 |
Memory systems › cache coherence
cache coherence protocol |
0.0 | 1 | 2001 | A simple method for extracting models for protocol code · ISCA 2001 |
Program verification › invariant verification
invariant checking |
0.0 | 1 | 2000 | Using Meta-level Compilation to Check FLASH Protocol Code · ASPLOS 2000 |
Program analysis › program analysis infrastructure
meta-level compilation |
0.0 | 1 | 2000 | Using Meta-level Compilation to Check FLASH Protocol Code · ASPLOS 2000 |
Program verification › protocol verification
protocol code verification |
0.0 | 1 | 2000 | Using Meta-level Compilation to Check FLASH Protocol Code · ASPLOS 2000 |
Systems and software security
vulnerability discovery |
0.0 | 1 | 2003 | ARCHER: using symbolic, path-sensitive analysis to detect memory access errors · ESEC / SIGSOFT FSE 2003 |
Empirical software engineering
mining software repositories |
0.0 | 1 | 2001 | An Empirical Study of Operating System Errors · SOSP 2001 |
Memory systems › cache coherence › cache coherence protocol
cache coherence protocol verification |
0.0 | 1 | 2000 | Using Meta-level Compilation to Check FLASH Protocol Code · ASPLOS 2000 |
Methods — techniques the papers use, named apart from their topics
symbolic analysis · 0.1statistical code analysis · 0.1path-sensitive analysis · 0.1constraint solving · 0.1model checking · 0.1compiler system · 0.1template checkers · 0.0statistical analysis · 0.0static compiler analysis · 0.0belief inference · 0.0system-specific checkers · 0.0meta-level compilation · 0.0
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2003 | ARCHER: using symbolic, path-sensitive analysis to detect memory access errorsabstractMemory corruption errors lead to non-deterministic, elusive crashes. This paper describes ARCHER (ARray CHeckER) a static, effective memory access checker. ARCHER uses path-sensitive, interprocedural symbolic analysis to bound the values of both variables and memory sizes. It evaluates known values using a constraint solver at every array access, pointer dereference, or call to a function that expects a size parameter. Accesses that violate constraints are flagged as errors. Those that are exploitable by malicious attackers are marked as security holes.Memory corruption errors lead to non-deterministic, elusive crashes. This paper describes ARCHER (ARray CHeckER) a static, effective memory access checker. ARCHER uses path-sensitive, interprocedural symbolic analysis to bound the values of both variables and memory sizes. It evaluates known values using a constraint solver at every array access, pointer dereference, or call to a function that expects a size parameter. Accesses that violate constraints are flagged as errors. Those that are exploitable by malicious attackers are marked as security holes.We carefully designed ARCHER to work well on large bodies of source code. It requires no annotations to use (though it can use them). Its solver has been built to be powerful in the ways that real code requires, while backing off on the places that were irrelevant. Selective power allows it to gain efficiency while avoiding classes of false positives that arise when a complex analysis interacts badly with statically undecidable program properties. ARCHER uses statistical code analysis to automatically infer the set of functions that it should track --- this inference serves as a robust guard against omissions, especially in large systems which can have hundreds of such functions.In practice ARCHER is effective: it finds many errors; its analysis scales to systems of millions of lines of code and the average false positive rate of our results is below 35%. We have run ARCHER over several large open source software projects --- such as Linux, OpenBSD, Sendmail, and PostgreSQL --- and have found errors in all of them (118 in the case of Linux, including 21 security holes). Yichen Xie 0001, Andy Chou, Dawson R. Engler |
ESEC / SIGSOFT FSE | 2 |
| 2002 | CMC: A Pragmatic Approach to Model Checking Real Code
Madan Musuvathi, David Y. W. Park, Andy Chou, Dawson R. Engler, David L. Dill |
OSDI | 3 |
| 2001 | A simple method for extracting models for protocol codeabstractThe use of model checking for validation requires that models of the underlying system be created. Creating such models is both difficult and error prone and as a result, verification is rarely used despite its advantages. In this paper, we present a method for automatically extracting models from low level software implementations. Our method is based on the use of an extensible compiler system, xg++, to perform the extraction. The extracted model is combined with a model of the hardware, a description of correctness, and an initial state. The whole model is then checked with the Murφ model checker. As a case study, we apply our method to the cache coherence protocols of the Stanford FLASH multiprocessor. Our system has a number of advantages. First, it reduces the cost of creating models, which allows model checking to be used more frequently. Second, it increases the effectiveness of model checking since the automatically extracted models are more accurate and faithful to the underlying implementation. We found a total of 8 errors using our system. Two errors were global resource errors, which would be difficult to find through any other means. We feel the approach is applicable to other low level systems. David Lie, Andy Chou, Dawson R. Engler, David L. Dill |
ISCA | 2 |
| 2001 | An Empirical Study of Operating System ErrorsabstractWe present a study of operating system errors found by automatic, static, compiler analysis applied to the Linux and OpenBSD kernels. Our approach differs from previous studies that consider errors found by manual inspection of logs, testing, and surveys because static analysis is applied uniformly to the entire kernel source, though our approach necessarily considers a less comprehensive variety of errors than previous studies. In addition, automation allows us to track errors over multiple versions of the kernel source to estimate how long errors remain in the system before they are fixed.We found that device drivers have error rates up to three to seven times higher than the rest of the kernel. We found that the largest quartile of functions have error rates two to six times higher than the smallest quartile. We found that the newest quartile of files have error rates up to twice that of the oldest quartile, which provides evidence that code "hardens" over time. Finally, we found that bugs remain in the Linux kernel an average of 1.8 years before being fixed. Andy Chou, Benjamin Chelf, Seth Hallem, Dawson R. Engler |
SOSP | 1 |
| 2001 | Bugs as Deviant Behavior: A General Approach to Inferring Errors in Systems CodeabstractA major obstacle to finding program errors in a real system is knowing what correctness rules the system must obey. These rules are often undocumented or specified in an ad hoc manner. This paper demonstrates techniques that automatically extract such checking information from the source code itself, rather than the programmer, thereby avoiding the need for a priori knowledge of system rules.The cornerstone of our approach is inferring programmer "beliefs" that we then cross-check for contradictions. Beliefs are facts implied by code: a dereference of a pointer, p, implies a belief that p is non-null, a call to "unlock(1)" implies that 1 was locked, etc. For beliefs we know the programmer must hold, such as the pointer dereference above, we immediately flag contradictions as errors. For beliefs that the programmer may hold, we can assume these beliefs hold and use a statistical analysis to rank the resulting errors from most to least likely. For example, a call to "spin_lock" followed once by a call to "spin_unlock" implies that the programmer may have paired these calls by coincidence. If the pairing happens 999 out of 1000 times, though, then it is probably a valid belief and the sole deviation a probable error. The key feature of this approach is that it requires no a priori knowledge of truth: if two beliefs contradict, we know that one is an error without knowing what the correct belief is.Conceptually, our checkers extract beliefs by tailoring rule "templates" to a system --- for example, finding all functions that fit the rule template "a must be paired with b." We have developed six checkers that follow this conceptual framework. They find hundreds of bugs in real systems such as Linux and OpenBSD. From our experience, they give a dramatic reduction in the manual effort needed to check a large system. Compared to our previous work [9], these template checkers find ten to one hundred times more rule instances and derive properties we found impractical to specify manually. Dawson R. Engler, David Yu Chen, Andy Chou |
SOSP | 3 |
| 2000 | Using Meta-level Compilation to Check FLASH Protocol CodeabstractBuilding systems such as OS kernels and embedded software is difficult. An important source of this difficulty is the numerous rules they must obey: interrupts cannot be disabled for ~too long," global variables must be protected by locks, user pointers passed to OS code must be checked for safety before use, etc. A single violation can crash the system, yet typically these invariants are unchecked, existing only on paper or in the implementor's mind.This paper is a case study in how system implementors can use a new programming methodology, meta-level compilation (MC), to easily check such invariants. It focuses on using MC to check for errors in the code used to manage cache coherence on the FLASH shared memory multiprocessor. The only real practical method known for verifying such code is testing and simulation. We show that simple, system-specific checkers can dramatically improve this situation by statically pinpointing errors in the program source. These checkers can be written by implementors themselves and, by exploiting the system-specific information this allows, can detect errors unreachable with other methods. The checkers in this paper found 34 bugs in FLASH code despite the care used in building it and the years of testing it has undergone. Many of these errors fall in the worst category of systems bugs: those that show up sporadically only after days of continuous use. The case study is interesting because it shows that the MC approach finds serious errors in well-tested, non-toy systems code. Further, the code to find such bugs is usually 10-100 lines long, written in a few hours, and exactly locates errors that, if discovered during testing, would require several days of investigation by an experienced implementor.The paper presents 8 checkers we wrote, their application to five different protocol implementations, and a discussion of the errors that we found. Andy Chou, Benjamin Chelf, Dawson R. Engler, Mark A. Heinrich |
ASPLOS | 1 |
| 2000 | Checking System Rules Using System-Specific, Programmer-Written Compiler Extensions
Dawson R. Engler, Benjamin Chelf, Andy Chou, Seth Hallem |
OSDI | 3 |