Analysis of JavaScript

The very dynamic nature JavaScript programs makes them difficult to understand and modify. Specialized tools and techniques must be developed to help programmers with these tasks. We are currently focusing on:

Framework-intensive applications

Most modern web applications are composed of a relatively small amount of application code that calls a large number of third-party libraries and frameworks. In recent years, this framework-intensive architecture has crossed over to desktop applications as well (e.g. Eclipse and Jazz). Framework-intensive applications typically exhibit different characteristics from traditional applications. For instance, performance problems are seldom localized in a single region of the program, but rather span multiple layers of components. This problem is exacerbated by the fact that developers are typically unfamiliar with the inner workings of the components used in their software, and thus unaware of the impact of their decisions on the entire system. Many problems that arise in practice (e.g. for performance and security), require a precise understanding of the behaviour of the entire application.

These applications, however, are a challenge to modern analysis techniques. Approaches based on static analysis rarely scale up to applications of such size and complexity because they consider a much larger portion of the code than is normally exercised by an application. Even when it does scale, a static analysis is often too imprecise to yield useful results. Dynamic analysis, on the other hand, typically imposes too much runtime overhead, or is limited in the information that can be gathered with reasonable overhead.

The goal of our research on framework-intensive applications is to develop techniques and tools that are necessary to help developers identify and ultimately address the problems found in their applications, thus ensuring a high level of quality for these important software systems.

Blended analysis

Blended analysis is a new analysis paradigm that combines elements of static analysis and dynamic analysis. More precisely, blended analysis uses a dynamic profile to restrict the scope of a traditional static analysis, thereby enabling precise analysis at a practical cost. Using blended analysis, large software systems (e.g. commercial and open-source web applications) can be analyzed with a precision comparable to that of a fully dynamic analysis, with a fraction of the execution overhead.

Initial experiments with blended analysis focused on object churn, a common performance problem in framework-intensive applications caused by the excessive creation of temporary objects. We are currently looking to extend the blended analysis work to other problems and domains.