Dissertação

{en_GB=Practical Detection of JavaScript Concurrency Bugs using Callback Graphs} {} EVALUATED

{pt=JavaScript é uma linguagem que, ultimamente, tem ganho imensa popularidade, operando quer em client-side, através dos browsers, quer nos servidores, a partir de Node.js. Uma das suas funcionalidades mais usadas e importantes é, apesar de funcionar principalmente numa única thread, a sua assincronia, gerindo e adiando operações que estão pendentes. Estas operações tornam-se não bloqueantes, permitindo a execução de outro código, enquanto o programa espera pela sua conclusão, por eventos ou por timers. Esta natureza assíncrona proporciona flexibilidade aos programadores, mas, por outro lado, pode levar a bugs de concorrência, dado que a ordem de execução das operações pode ser, nalguns casos, indeterminada. Esta tese visa explorar o modelo de Callback Graph, recentemente introduzido, para detectar problemas de assincronia em código JavaScript. Focamo-nos em duas categorias específicas de bugs de concorrência, Broken Promise e Unexpected Execution Order, propondo uma solução para os detectar automaticamente. A nossa implementação usa a ferramenta Async-TAJS, que faz análise estática de código JavaScript e implementa o modelo de Callback Graph. Para avaliarmos a nossa solução, usamos uma benchmark de código JavaScript assíncrono. Os nossos resultados mostram que a solução proposta consegue detectar os dois casos particulares considerados. Como contribuição adicional, criámos um novo conjunto de 74 ficheiros de código JavaScript assíncrono que os programadores podem usar para testar as suas próprias soluções., en=JavaScript is becoming an increasingly popular programming language that works in both client-side, within the browser, and server-side, through Node.js. One of its most important and widely used features is, despite being single threaded, the capability to schedule operations, thus emulating an asynchronous behaviour. These operations are non-blocking, meaning that other code can be ran while the program is waiting for responses, event triggers or just for a timer to run out. This asynchronous nature gives flexibility to developers, but it can also lead to concurrency bugs, since the order of execution might be, sometimes, non-deterministic. The purpose of this thesis is to explore the recently introduced Callback Graph model to automatically detect concurrency bugs in JavaScript. We focus on two specific cases of concurrency issues, the cases of Broken Promise and Unexpected Execution Order bugs, and we propose the design of a solution that detects those issues automatically. Our implementation is built on top of Async-TAJS, a static analysis tool for JavaScript code that implements the Callback Graph model. We evaluate our solution on a benchmark of asynchronous JavaScript code. Our results show that the proposed solution can effectively detect the two cases of bugs considered. As an additional contribution, we created a new dataset of 74 code examples of asynchronous JavaScript code that developers can use to test their analysis tools.}
{pt=JavaScript, Assincronia, Data race, Análise estática, Concorrência, en=JavaScript, Asynchronous, Data race, Static analysis, Concurrency}

novembro 12, 2020, 18:0

Publicação

Obra sujeita a Direitos de Autor

Orientação

ORIENTADOR

João Fernando Peixoto Ferreira

Departamento de Engenharia Informática (DEI)

Professor Auxiliar