Recently, promises were added to ECMAScript 6, the JavaScript standard, in order to provide better support for the asynchrony that arises in user interfaces, network communication, and non blocking I/O. Using promises, programmers can avoid common pitfalls of event-driven programming such as event races and the deeply nested counterintuitive control flow referred to as “callback hell”. Unfortunately, promises have complex semantics and the intricate control– and data-flow present in promise based code hinders program comprehension and can easily lead to bugs. Prior work by Madsen et. al. has proposed the promise graph as a graphical aid for understanding and debugging promise-based code, but did not cover all promise-related features in ECMAScript 6, and did not present or evaluate any technique for constructing promise graphs. In this paper,we extend the notion of promise graphs to include all promise-related features in ECMAScript 6, including default reactions, exceptions, and the synchronization operations race and all. Furthermore, we report on the construction and evaluation of PromiseKeeper, which performs a dynamic analysis to create promise graphs and infer common promise anti-patterns. We evaluate PromiseKeeper by applying it to 12 open source promise-based Node.js applications. Our results suggest that the promise graphs constructed by PromiseKeeper can provide developers with valuable information about occurrences of common anti-patterns in their promise-based code, and that promise graphs can be constructed with acceptable run-time overhead.
Fri 9 NovDisplayed time zone: Guadalajara, Mexico City, Monterrey change
10:30 - 12:00 | |||
10:30 22mTalk | Compositional Programming and Testing of Dynamic Distributed Systems OOPSLA Ankush Desai University of California, Berkeley, Amar Phanishayee Microsoft Research, Shaz Qadeer Microsoft Research, Sanjit Seshia UC Berkeley | ||
10:52 22mTalk | Randomized Testing of Distributed Systems with Probabilistic Guarantees OOPSLA Burcu Kulahcioglu Ozkan MPI-SWS, Germany, Rupak Majumdar MPI-SWS, Germany, Filip Niksic MPI-SWS, Mitra Tabaei Befrouei Vienna University of Technology, Georg Weissenbacher Technische Universität Wien | ||
11:15 22mTalk | Test Generation for Higher-Order Functions in Dynamic Languages OOPSLA Marija Selakovic TU Darmstadt, Germany, Michael Pradel TU Darmstadt, Rezwana Karim Nawrin Samsung Research America, Frank Tip Northeastern University | ||
11:37 22mTalk | Finding Broken Promises in Asynchronous JavaScript Programs OOPSLA Saba Alimadadi Northeastern University, Di Zhong Northeastern University, USA, Magnus Madsen Aarhus University, Frank Tip Northeastern University |