Identifying Classes in Legacy JavaScript Code. Issue 8 (24th April 2017) - Silva, Leonardo Humberto; Valente, Marco Tulio; Bergel, Alexandre; Anquetil, Nicolas; Etien, Anne
Abstract: JavaScript is the most popular programming language for the Web. Although the language is prototype‐based, developers can emulate class‐based abstractions in JavaScript to master the increasing complexity of their applications. Identifying classes in legacy JavaScript code can support these developers at least in the following activities: (1) program comprehension; (2) migration to the new JavaScript syntax that supports classes; and (3) implementation of supporting tools, including IDEs with class‐based views and reverse engineering tools. In this paper, we propose a strategy to detect class‐based abstractions in the source code of legacy JavaScript systems. We report on a large and in‐depth study to understand how class emulation is employed, using a dataset of 918 JavaScript applications available on GitHub. We found that almost 70% of the JavaScript systems we study make some usage of classes. We also performed a field study with the main developers of 60 popular JavaScript systems to validate our findings. The overall results range from 97% to 100% for precision, from 70% to 89% for recall, and from 82% to 94% for F‐score.