• Publications
  • Influence
Tricorder: Building a Program Analysis Ecosystem
Static analysis tools help developers find bugs, improve code readability, and ensure consistent style across a project. However, these tools can be difficult to smoothly integrate with each otherExpand
  • 136
  • 11
  • Open Access
Statically checking API protocol conformance with mined multi-object specifications
Programmers using an API often must follow protocols that specify when it is legal to call particular methods. Several techniques have been proposed to find violations of such protocols based onExpand
  • 71
  • 9
  • Open Access
An Empirical Study of Practitioners' Perspectives on Green Software Engineering
The energy consumption of software is an increasing concern as the use of mobile applications, embedded systems, and data center-based services expands. While research in green software engineeringExpand
  • 77
  • 5
  • Open Access
Lessons from building static analysis tools at Google
For a static analysis project to succeed, developers must feel they benefit from and enjoy using it.
  • 60
  • 4
  • Open Access
Understanding the value of program analysis tools
It is difficult to determine the cost effectiveness of program analysis tools because we cannot evaluate them in the same environment where we will be using the tool. Tool evaluations are usually runExpand
  • 28
  • 2
  • Open Access
Analyzing the strength of undergraduate misconceptions about software engineering
While many computer science students plan to pursue careers as software engineers, research shows that most traditional undergraduate CS programs fail to prepare students for the realities ofExpand
  • 20
  • 2
  • Open Access
Checking Framework Interactions with Relationships
Software frameworks impose constraints on how plugins may interact with them. Many of these constraints involve multiple objects, are temporal, and depend on runtime values. Additionally, they areExpand
  • 40
  • 1
  • Open Access
Detecting argument selection defects
Identifier names are often used by developers to convey additional information about the meaning of a program over and above the semantics of the programming language itself. We present an algorithmExpand
  • 17
  • 1
  • Open Access
Introducing tool-supported architecture review into software design education
While modularity is highly regarded as an important quality of software, it poses an educational dilemma: the true value of modularity is realized only as software evolves, but student homework,Expand
  • 9
  • 1
  • Open Access
Proper plugin protocols
The ability of the software engineering community to achieve high levels of reuse from software frameworks has been tempered by the difficulty in understanding how to reuse them properly. WhenExpand
  • 10
  • 1
  • Open Access