Skip to main content.


The thread that runs through my work is understanding how we understand and gain confidence in software in a modular, compositional fashion, through some combination of analysis (broadly construed to include testing as well as various static checking techniques) and design. I'm increasingly interested in interplay between synthesis (generating something from a spec) and analysis (checking consistency between a spec and an implementation). The synthesis part is related to an old interest in architectural design of software, which I've recently revisited in connection with assistive cartography.

Some things I've been interested in recently:

  • Serializability at the program level. I've been looking at this for a while with my colleague and ex-student LihChyun Shu, and more recently with Yannis Smaragdakis, Reimer Behrends, and Tony Kay.
  • Exploiting static information (e.g., class hierarchies) in mining putative invariants from instrumented programs (“dynamic invariant detection”).
  • Flow analysis as Swiss army knife, including applications that are about architectural structure (and nothing to do with "data flow" per se): GenSet and an application to reverse engineering.
  • Assistive cartography. Working with Amy Lobben and Megen Brittel, we built and evaluated a minimal GIS that used sound in place of visual representation for thematic mapping.
  • Internationally distributed projects, and the interplay between software architectural design and the organization of work. Stuart Faulk and I designed a distributed software engineering project course for Spring 2010, co-taught at Peking University by Professor Lian Yu. The course has been taught collaboratively every spring since. Development was supported by the National Science Foundation (CPATH program) and collaborators included include David Weiss of Iowa State and Lian Yu of Peking U.

    Book: Software Testing and Analysis

    Mauro Pezzè and I wrote Software Testing and Analysis: Process, Principles, and Techniques. It is available at Amazon and other online bookstores, including Powells and Barnes and Noble. German and Portuguese translations are also available.

    We hope this will be the book that advisors recommend to new graduate students who need a basic, broad background in testing and analysis, as well as a standard text in senior and beginning graduate courses.

    We appreciate the useful comments (and corrections!) from many of you, and are pleased that the book is in use around the world and in some of the top centers of software engineering research.


    I have served as program chair of ISSTA 1998, program co-chair of ICSE 2002, general chair of SIGSOFT FSE 2006, and general chair of ISSTA 2015, in addition to a number of other organizational roles in conferences and workshops.

    Outside interests

    I am a fairly serious coffee drinker, and also roast coffee at home. Currently I use the heat gun and dog bowl method.

    I am a recreational bicycle rider. Event rides I've enjoyed include the Seattle to Portland bicycle classic (one day version in 2004 and 2005); the Blackberry bRamble starting right here in Eugene, where in recent years I've driven SAG wagon; the Covered Bridges tour from Albany (5 times); the Peach of a Century (3 times); the Monster Cookie metric century; the Mount Hood Challenge Century (which seems to have been held for the first and last time in 2004); and the Torture 10,000 century east of Portland (also discontinued, alas).

    Highlights of some prior years:

    Rides in the area:

    There are many other excellent routes starting in or near Eugene, ranging from under 20 to over 100 miles, and from very flat to quite hilly. If you are a cyclist visiting Eugene (especially if you're a computer scientist), I'd love to make a few suggestions or maybe go out on a ride with you, schedule permitting.

    Here is why I always wear a helmet.