A study of JavaScript error handling
LIMA FILHO, Fernando José Castor de, também é conhecido(a) em citações bibliográficas por: CASTOR FILHO, Fernando
Main Author: | SANTOS, Luana Martins dos |
---|---|
Other Authors: | LIMA FILHO, Fernando José Castor de |
Format: | masterThesis |
Language: | eng |
Published: |
Universidade Federal de Pernambuco
2019
|
Subjects: | |
Online Access: |
https://repositorio.ufpe.br/handle/123456789/34149 |
Tags: |
Add Tag
No Tags, Be the first to tag this record!
|
id |
ir-123456789-34149 |
---|---|
recordtype |
dspace |
spelling |
ir-123456789-341492019-10-26T06:17:52Z A study of JavaScript error handling SANTOS, Luana Martins dos LIMA FILHO, Fernando José Castor de http://lattes.cnpq.br/6282326953631561 http://lattes.cnpq.br/7310046838140771 Engenharia de software Tratamento de erros LIMA FILHO, Fernando José Castor de, também é conhecido(a) em citações bibliográficas por: CASTOR FILHO, Fernando JavaScript is in widespread use for both Web-based and Standalone software development. A large number of production quality, robust software systems are currently built using it. Because of its popularity, JavaScript has been the subject of a several empirical studies in the last few years. Previous research has analyzed uses of the eval function, how callbacks are employed, and other aspects of the language. In this work, we contribute to the existing body of knowledge by studying how developers employ error handling mechanisms in JavaScript systems. JavaScript provides two different mechanisms for handling errors, try-catch blocks and callback functions. These mechanisms are employed along with a number of abstractions that have not been previously studied in the context of error handling, namely: promises, events, and asynchronous functions. In addition, we evaluated the usage of global event handlers, which is applicable for scenarios where an error occurred and no handler was found. We analyzed 192 popular JavaScript repositories from Github, comprising more than 60 thousand files and 11 million lines of code. We also classified them as Web-based or Standalone, depending on Node.js framework usage. We analyzed how the error handling mechanisms of the language are employed, what error handling strategies are typically used, and how Web-based and Standalone systems differ regarding the error handling. Errors impact differently in Web-based and Standalone systems. Users may not concern about the errors in Web-based as it generally occurs in the console. Standalone systems deal differently with errors, once the system finds an error, it crashes and does not allow any further operation. Our findings indicate that pure callbacks are the predominant error handling mechanism in JavaScript systems (64.500 callback functions in our dataset), although try-catch blocks are also frequently used (51.200 try-catch blocks). We found 22.44% of the try-catch blocks are empty, 15.48% of the error handlers ignore the error parameter (from catch clause). In callback functions, 8.66% ignore any error parameter it receives, and 5.54% reassign an error parameter. Web-based systems have a greater number of try-catch blocks than callback functions for error handling compared to standalone systems. Web-based systems have a greater number of handlers that ignore error parameters than standalone systems. In summary, our analysis shows that error-handling strategies are generally simplistic, mostly ignoring the error (11.5%) or leaving it empty (8.22%). JavaScript é amplamente usado para desenvolvimento de software tanto em sistemas Web-based quanto Standalone. Existe uma grande quantidade de sistemas desenvolvidos nessa linguagem. Devido à sua popularidade, o JavaScript tem sido objeto de vários estudos empíricos nos últimos anos. Pesquisas anteriores analisaram o uso da função eval, assim como callback functions e outros aspectos da linguagem. Neste trabalho, estudamos como os desenvolvedores empregam mecanismos de tratamento de erros em sistemas JavaScript. JavaScript fornece dois mecanismos diferentes para tratar erros: blocos try-catch e callback functions. Esses mecanismos são empregados em conjunto com um número de abstrações que não foram estudadas anteriormente no contexto do tratamento de erros, a saber: promises, eventos e funções asíncronas. Além disso, avaliamos o uso de tratadores de eventos globais, que é aplicável a cenários nos quais ocorreu um erro para o qual nenhum tratador foi encontrado. Analisamos 192 repositórios populares de JavaScript do Github, com mais de 60 mil arquivos e 11 milhões de linhas de código. Também os classificamos como Web-based ou Standalone, dependendo do uso do framework Node.js. Analisamos como os mecanismos de tratamento de erros da linguagem são empregados, quais estratégias de tratamento de erros são normalmente usadas e como os sistemas Web-based e Standalone diferem em relação ao tratamento de erros. Erros impactam diferentemente em sistemas Web-based e Standalone. Os usuários não percebem imediatamente erros ocorridos em sistemas Web-based, por geralmente aparecerem no console. Sistemas Standalone lidam de maneira diferente com erros, pois uma vez que o sistema encontra um erro, ele falha, não permitindo qualquer operação adicional. Nossas descobertas indicam que callbacks functions são o mecanismo predominante de tratamento de erros de sistemas JavaScript (existem 64,500 callbacks functions em nosso conjunto de dados), embora blocos try-catch também sejam usados com frequência (51,200 blocos try-catch). Encontramos que 22.44% dos blocos try-catch estão vazios, 15.48% dos tratadores de erro ignoram o parâmetro de erro (catch clause). Em callback functions, 8.66% ignoram qualquer parâmetro de erro que a função recebe, e 5.54% reatribuem um parâmetro de erro (como o argumento de erro de uma catch clause ou o argumento de uma callback function) a algum outro valor. Os sistemas Web-based possuem um maior número de blocos try-catch do que callback functions para tratamento de erros, em comparação com os sistemas Standalone. Os sistemas Web-based apresentam um maior número de tratadores que ignoram os parâmetros de erro do que sistemas Standalone. Em resumo, nossa análise mostra que as estratégias de tratamento de erros geralmente são simplistas, envolvendo principalmente ignorar o erro (11.5%) ou deixá-lo vazio (8.22%). 2019-10-03T18:27:26Z 2019-10-03T18:27:26Z 2019-02-14 masterThesis https://repositorio.ufpe.br/handle/123456789/34149 eng embargoedAccess Attribution-NonCommercial-NoDerivs 3.0 Brazil http://creativecommons.org/licenses/by-nc-nd/3.0/br/ application/pdf Universidade Federal de Pernambuco UFPE Brasil Programa de Pos Graduacao em Ciencia da Computacao |
institution |
REPOSITORIO UFPE |
collection |
REPOSITORIO UFPE |
language |
eng |
topic |
Engenharia de software Tratamento de erros |
spellingShingle |
Engenharia de software Tratamento de erros SANTOS, Luana Martins dos A study of JavaScript error handling |
description |
LIMA FILHO, Fernando José Castor de, também é conhecido(a) em citações bibliográficas por: CASTOR FILHO, Fernando |
author2 |
LIMA FILHO, Fernando José Castor de |
format |
masterThesis |
author |
SANTOS, Luana Martins dos |
author_sort |
SANTOS, Luana Martins dos |
title |
A study of JavaScript error handling |
title_short |
A study of JavaScript error handling |
title_full |
A study of JavaScript error handling |
title_fullStr |
A study of JavaScript error handling |
title_full_unstemmed |
A study of JavaScript error handling |
title_sort |
study of javascript error handling |
publisher |
Universidade Federal de Pernambuco |
publishDate |
2019 |
url |
https://repositorio.ufpe.br/handle/123456789/34149 |
_version_ |
1648654882170732544 |
score |
13.657419 |