Skip to main content
European Commission logo print header

Automated Program Analysis for Advanced Web Applications

Periodic Reporting for period 4 - PAW (Automated Program Analysis for Advanced Web Applications)

Reporting period: 2020-02-01 to 2022-01-31

Web applications that execute in the user's web browser constitute a substantial part of modern software. Despite the advances in design of languages and libraries, it is difficult to prevent errors when programming such web applications. Although the basic principles of software verification have been known for decades and researchers have developed an abundance of techniques for formal reasoning about programs, modern software has lots of errors, as everyday users can testify.
The PAW project is creating novel automated program analysis algorithms for preventing errors in web applications. Our approach involves a mix of static and dynamic analysis techniques. Prototype implementations are made openly available to facilitate reusability.
The overall objectives of the project are to:
1) enable analysis of programs that use new programming language features,
2) develop analysis abstractions that enable analysis of complex libraries and frameworks,
3) expand the capabilities of automated testing techniques,
4) support migration and evolution of software, and
5) provide reusable program analysis infrastructure.
The PAW project has delivered scientific results that span the five objectives and that have been published at top conferences and journals.

* In the early phases of the project, we presented a feedback-directed instrumentation technique that can aid debugging of JavaScript web applications [ICSE 2016] and a novel program analysis that can check whether test suites have sufficient coverage to prove type-related properties [ISSTA 2016].

* We have explored how type unsoundness in the Dart programming languages has been used in practice [DLS 2016a], and we have presented a novel type safety analysis for Dart [DLS 2016b] and a formal model of a core of Dart’s type system together with a characterization of message safety [SCP 2017].

* In another line of work, we presented new techniques for supporting inference and evolution of TypeScript declaration files [FASE 2017] and detecting errors in such files [OOPSLA 2017a and ICSE 2019].

* Event races are a common source of errors in JavaScript programs. We have proposed approaches to automatically repair such errors [ICSE 2017] and detect race errors in client-side initialization code [OOPSLA 2017b], client-server communication [ESEC/FSE 2018], and in server-side code [ICST 2020]. Furthermore, we presented an algorithm for testing correctness of collaborative web applications [PLDI 2017].

* We have shown that quickchecking is a powerful approach to test program analyzer correctness [STVR 2017] and that delta debugging and dynamic analysis can be used for increasing soundness and precision of a static analyzer for JavaScript [SOAP 2017].

* We have contributed to a survey of dynamic analysis and test generation techniques for JavaScript [ACM Comp. Surveys 2017].

* To enhance precision and performance of static analyzers, we have presented new techniques for context sensitive analysis [ESEC/FSE 2018, OOPSLA 2018, ACM TOPLAS 2020].

* We have proposed a program optimization technique for reducing abstraction overhead of Java stream pipelines [OOPSLA 2020a].

* Evolving libraries often involve breaking changes in JavaScript programs. We have demonstrated that it is possible to detect breaking changes automatically [ECOOP 2018 and ESEC/FSE 2019], and we have presented a technique to automatically adapt programs to breaking changes in libraries [OOPSLA 2020b and ICSE 2021].

* To enable static analysis of complex JavaScript libraries, we introduced demand-driven value refinement [OOPSLA 2019] and value partitioning [ECOOP 2020] in abstract interpretation.

* Finally, to support automated detection of security vulnerabilities in JavaScript programs, we have proposed techniques for automatically extracting taint specifications for JavaScript libraries [ICSE 2020] and constructing call graphs for security scanning [ISSTA 2021].

Most of the peer-reviewed publications are accompanied by Open Source prototype implementations and experimental data. In addition to these publications and software tools, we have developed comprehensive teaching material for static program analysis, which is openly available at https://cs.au.dk/~amoeller/spa/.
CASA