My main research interest is software engineering, with a focus on improving programmer productivity. I develop techniques and tools that make both managers and developers aware of history.

Learning from past successes and failures helps us create better software.

My research activities cover program analysis, aspect-oriented programming, empirical studies, and in particular, the analysis of software archives.

Better bug tracking systems

  • What makes a good bug report? Ask Cuezilla!
  • Users know what developers need, but fail to provide this information.
  • Bug reports with stack traces get fixed sooner.
  • Information in bug duplicates helps developers to resolve bugs quicker.

Predicting software quality

  • What is it that makes software fail?
  • The BugCache model selects 10% of the source code files — these files account for 73%-95% of defects.
  • Domino effect: depending on defect-prone binaries increases the likelihood of a defect.

Analyzing security vulnerabilities

  • Tell us what you import, and we’ll tell you how vulnerable you are.
  • Depending on kdelibs increases the risk of an application being vulnerable.

Mining bug databases

  • Be warned: Don’t program on Fridays!
  • Meet iBUGS: 401 real bugs in 124kLOC. More than 2000 test cases.

Mining version archives

  • Recommendation system: Developers who changed the field fKeys[] also changed the method initDefaults().
  • Usage patterns: A call to addWidget() should be followed by a call to removeWidget().
  • Cross-cutting changes: A developer inserted calls to lock() and unlock() into 1284 different locations.