Please use this identifier to cite or link to this item: http://hdl.handle.net/1843/JCES-ATKN9X
Type: Tese de Doutorado
Title: Identifying classes in legacy javaScript code
Authors: Leonardo Humberto Guimar?es Silva
First Advisor: Marco Tulio de Oliveira Valente
First Co-advisor: Alexandre Bergel
First Referee: Alexandre Bergel
Second Referee: Eduardo Magno Lages Figueiredo
Third Referee: Mariza Andrade da Silva Bigonha
metadata.dc.contributor.referee4: Marcelo de Almeida Maia
metadata.dc.contributor.referee5: Paulo Henrique Monteiro Borba
Abstract: JavaScript é a linguagem de programação mais popular para a Web. Embora a linguagem seja baseada em protótipos, desenvolvedores JavaScript muitas vezes emulam classes para diminuir a crescente complexidade de suas aplicações. Identicar estruturas semelhantes a classes pode auxiliar estes desenvolvedores nas seguintes atividades: (i) compreensão de programas; (ii) migração de código para a nova sintaxe de classes introduzida na versão 6 de ECMAScript (ES6); e (iii) implementação de ferramentas de apoio, incluindo IDEs com visões baseadas em classes e ferramentas de engenharia reversa. Nesta tese, nós denimos, implementamos e avaliamos um conjunto de heurísticas para identicar estruturas que emulam classes, e suas dependências, em sistemas JavaScript legados, isto é, implementados em versões anteriores a ES6. Desenvolvemos um amplo estudo, utilizando um dataset de 918 aplicações JavaScript, disponíveis no GitHub, para entender como a emulação de classes é empregada. Encontramos evidências de que estruturas emulando classes estão presentes em quase 70% dos sistemas estudados. Realizamos um estudo com 60 desenvolvedores para avaliar nossa estratégia e ferramenta. Os resultados indicam que nossa ferramenta é capaz de identicar classes emuladas em sistemas legados JavaScript. Avaliamos também como o uso de um vericador estático pode inferir tipos que correspondem a referências para classes. Realizamos um estudo com duas aplicações legadas para avaliar a precisão na identicação de dependências entre classes. Conseguimos atingir precisão de 100% em ambos os sistemas, e o recall varia de 80% a 86% para dependências em geral e de 85% a 96% para associações. Além disso, apresentamos um conjunto de regras para migrar estruturas que emulam classes para usar a nova sintaxe introduzida em ES6. Em nosso estudo, detalhamos casos que permitem migração automática (as partes boas), casos que exigem intervenção manual e ad-hoc (as partes ruins) e casos que não podem ser migrados devido alimitações de ES6(aspartesfeias). Finalmente, apresentamosrazões que podem levar desenvolvedores a adiar ou rejeitar a adoção de classes ES6, com base no feedback recebido após a submissão de pull-requests sugerindo a migração
Abstract: JavaScript is the most popular programming language for the Web. Although the language is prototype-based, developers often emulate class-based abstractions in JavaScript to master the increasing complexity of their applications. Identifying structures similar to classes in JavaScript code can support these developers in the following activities: (i) program comprehension; (ii) migration to the new JavaScript syntax that supports classes, introduced by ECMAScript 6 (ES6); and (iii) implementation of supporting tools, including IDEs with class-based views and reverse engineering tools. In this thesis, we dene, implement, and evaluate a set of heuristics to identify class-like structures, and their dependencies, in legacy JavaScript code, i.e., code implemented in versions prior to ES6. 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 evidence that structures emulating classes are present in almost 70% of the studied systems. We perform a eld study with 60 developers to evaluate the accuracy of our strategy and tool. The results indicate that our tool is able to identify class-like structures in legacy JavaScript systems. We also demonstrate how to use a static type-checker to infer types that correspond to class references. We perform a study with two open-source applications aiming to measure the accuracy of the proposed approach to identify class-to-class dependencies. We achieve precision of 100% in both systems, and the values of recall ranges from 80% to 86% for dependencies in general and from 85% to 96% for associations. Moreover, we present a set of rules to migrate class-like structures to use the new ES6 class syntax. In our study, we detail cases that are straightforward to migrate (the good parts), cases that require manual and ad-hoc migration (the bad parts), and cases that cannot be migrated due to limitations and restrictions of ES6 (the ugly parts). Finally, we present a set of reasons that can lead developers to postpone or reject the adoption of ES6 classes, based on the feedback received after submitting pull requests suggesting the migration
Subject: Reengenharia
Computação
Engenharia reversa
Compreensão de programas
JavaScript (Linguagem de programação de computador)
language: Inglês
Publisher: Universidade Federal de Minas Gerais
Publisher Initials: UFMG
Rights: Acesso Aberto
URI: http://hdl.handle.net/1843/JCES-ATKN9X
Issue Date: 15-Sep-2017
Appears in Collections:Teses de Doutorado

Files in This Item:
File Description SizeFormat 
leonardo_humberto_silva.pdf2.68 MBAdobe PDFView/Open


Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.