Our research focuses on tools and techniques for building reliable, efficient, and secure software. To this end, we work on testing and analysis of complex software systems. As part of our research, we have contributed to techniques that detected thousands of bugs and critical vulnerabilities in widely used software.
Machine Learning for Program Analysis
Manually developing a program analysis requires expertise and relies on carefully tuned heuristics. Instead, we automatically learn powerful analyses from large corpora of code.
Static Bug Detection
Static bug checking catches mistakes early and at low cost. We work on simple yet effective static analyses that reveal programming errors without requiring formal specifications.
Actionable Performance Profiling
Inefficient software is annoying and costs money. We create actionable performance profilers that pinpoint specific optimization opportunities to help developers speed up their code.
Many bugs are exposed only when running the program. We develop tools that generate inputs for automated and effective testing, both at the unit-level and the system-level.