As the internet and mobile devices become increasingly important parts of our society, the need for web and mobile applications has grown. Recent advances in software frameworks have drastically reduced the amount of code needed to develop such applications. From a programming languages perspective, the key enabling technology is reflection, that is, the ability of a program to introspect and to modify itself. Unfortunately, reflection comes at a heavy cost: it can delay the detection of bugs, it reduces the effectiveness of bug-finding tools, and it reduces the speed of applications. The goal of this research project is to preserve the benefits of reflection while eliminating the disadvantages, thereby improving the reliability and speed of web and mobile applications.
The key observation that underlies this research is that uses of reflection in software frameworks are governed by implicit conventions. If those conventions could be made explicit, then automated software tools will be able to effectively reason about reflective code. This research will create a rich specification language for making those conventions explicit, it will investigate algorithms for inferring specifications from existing application code, and it will develop tools for checking the conformance of web-mobile applications and frameworks with respect to specifications.