I have several interests, and my current research slices several of them.
- Software Frameworks
- I am interested in how frameworks are designed, evolved, and used in industry. My current research aims to make frameworks easier to use throuh static analysis.
- Quality in Design and Development
- I am interested in promoting quality as early as possible in the software lifecycle. I see static analysis as a great mechanism for reaching this goal, though I am always interested in new techniques. I generally fall into the "tools" camp as opposed to the "process" camp, though I know enough about process to keep up in a debate with my colleagues.
- Cost-effective techniques
- My industry background has pushed me towards tools which provide a good ROI for developers. I am particularly interested in analysis tools which provide large benefits for small cost, even if they are not sound or complete. Following these goals, my current research aims to produce a cost-effective analysis for software frameworks. I've also investigated how to determine ROI for a static analysis tool during evaluation while working at eBay.
- Developer-friendly tools
- Nothing irks me more than error messages that state "Analysis failed, see rule 10". There are some great tools out in research that just need some reasonable error messages. I am interested in producing tools that provide helpful error messages, and if possible, provide suggestions.
- Software Engineering education
- I co-taught (and was previously a TA for) Foundations for Software Engineering, a new undergraduate level class to teach software engineering principles in a lecture format (rather than a project format). We had some interested experiences in this course, and I hope to draw upon that to design better curriculums for undergraduate software engineering education. More recently, I have been studying student perceptions of software engineering with Leigh Ann Sudol.
Research ProjectsI am actively working on the the research projects below. For past research project, please see my CV.
Object RelationshipsI have created a specification language and static analysis for frameworks and plug-ins. The specifications allow framework developers to describe complex constraints within the framework with user-defined relationships between objects. The analysis checks that plug-ins conform to the constraints. The research focuses on creating a cost-effective analysis that can describe problems on real-world frameworks such as Spring, Eclipse, and ASP.NET. This is ongoing work towards a PhD thesis.
The core of the work was presented at ECOOP 2009. Further extensions are forthcoming.
Error Reporting LogicError Reporting Logic Website
The Error Reporting Logic system automatically generates human-readable error messages from failing first-order predicate logic specifications. The error messages present only the parts of the specification that need to be fixed to make the specification true. Additionally, the system uses a heuristic to determine which object is at the cause of the error. This provides users with directed, readable error messages from failing FOPL specifications. The system is implemented in Java and is being used by ACMEStudio, a checker for software architecture specifications, and it can be used by any other system that uses first-order predicate logic. A paper describing this work was published at ASE 2008.
Crystal Analysis FrameworkCrystal Website
I am leading on-going development of a sophisticated static analysis framework, Crystal, that is based on the theoretical principles of static analysis. Crystal was original created by Jonathan Aldrich to help teach students the principles of static analysis. As our research group continued using it to prototype our analyses, we also added features for sophisticated analyses while keeping the original design intent. These features include:
- Three-address code
- Backwards and forward analyses
- Support for reading Java annotations
- A control flow graph which supports exceptions