Use este identificador para citar ou linkar para este item: http://repositorio.utfpr.edu.br/jspui/handle/1/38992
Registro completo de metadados
Campo DCValorIdioma
dc.creatorSoratto, Rafael Rampim-
dc.date.accessioned2025-12-01T11:44:06Z-
dc.date.available2025-12-01T11:44:06Z-
dc.date.issued2025-04-04-
dc.identifier.citationSORATTO, Rafael Rampim. Vocabulário de testes instáveis entre linguagens de programação. 2025. Dissertação (Mestrado em Ciência da Computação) - Universidade Tecnológica Federal do Paraná, Campo Mourão, 2025.pt_BR
dc.identifier.urihttp://repositorio.utfpr.edu.br/jspui/handle/1/38992-
dc.description.abstractContext: Regression testing is a verification and validation activity of systems present in modern software engineering. In this activity, tests may fail without any implementation changes, characterizing them as unstable tests (flaky test). This type of instability can delay software release and reduce confidence in the tests. One way to identify such unstable tests is through test re-execution, but this comes with a high computational cost. An alternative to re-execution is static code analysis of the test cases, identifying patterns related to instability. In this context, so far, only vocabulary-based works focusing on single language applications (Java, Python, JavaScript) have been observed. To understand the limits and possibilities of this approach, it is interesting to check the intersection of unstable vocabularies across different languages. Objective: The objective of this work was to evaluate the vocabulary technique for predicting unstable tests in JavaScript, Java, and Python applications. Method: To achieve this objective, a dataset was constructed with unstable test cases present in open-source projects on GitHub that utilize JavaScript and the dataset from previous works for Python and Java was used. Classification models were then created, considering the instability vocabulary between different projects and languages. After evaluating the models’ accuracy, we examined the words with the highest information gain for predicting instability across languages. Results: We created the ShakerJS tool, which managed to identify 102 flaky tests in 36% of 36 relevant projects in JavaScript using CPU and memory stress. The terms with the highest information gain for predicting flaky tests in this set were: await, async, if, and path. In JavaScript, similarly to Java, the RF model had the best accuracy (0.96), while the DT model slightly surpassed RF in terms of recall (0.77 vs 0.63). The results are better when the model is trained and tested within the same project scope and language. Some projects achieve results of 100% accuracy and recall. We noted that the quality of the models concerning completely unknown intermittent failures is low. We observed the low quality of the models regarding intermittent failures across different programming languages: JavaScript, Java, and Python. The best result was for the model trained in JavaScript and tested in Java, which presented an F1 of 0.63. However, regarding the unstable vocabulary across languages, the results are positive. Between the programming languages Python and JavaScript, we can find terms related to the following root causes of flaky tests: asynchronous communication (await, 400, data), concurrency, graphical user interface events (plot, page, button, click, and width), time dependency (time), and resource leaks (source, data, args). Between the Java and JavaScript languages, we can verify the intersection of terms related to concurrency (manager), asynchronous waiting (await), and resource leaks (new, class). Between the Python and Java languages, we can find terms related to asynchronous communication (waitFor), concurrency (get, select), time dependency (date), and resource leaks (evaluate, catch). Conclusions: This work presents relevant results for a more efficient identification of unstable tests in projects that utilize JavaScript, Java, and Python. There is an intersection between contexts and root causes of instabilities from different projects and languages. However, using only the pure content of the source code may reduce the performance of prediction models in a scenario with different projects and languages.pt_BR
dc.description.sponsorshipCoordenação de Aperfeiçoamento de Pessoal de Nível Superior (CAPES)pt_BR
dc.languageporpt_BR
dc.publisherUniversidade Tecnológica Federal do Paranápt_BR
dc.rightsopenAccesspt_BR
dc.rights.urihttp://creativecommons.org/licenses/by/4.0/pt_BR
dc.subjectInovações tecnológicaspt_BR
dc.subjectEngenharia de softwarept_BR
dc.subjectJavaScript (Linguagem de programação de computador)pt_BR
dc.subjectPython (Linguagem de programação de computador)pt_BR
dc.subjectJava (Linguagem de programação de computador)pt_BR
dc.subjectTechnological innovationspt_BR
dc.subjectSoftware engineeringpt_BR
dc.subjectJavaScript (Computer program language)pt_BR
dc.subjectPython (Computer program language)pt_BR
dc.titleVocabulário de testes instáveis entre linguagens de programaçãopt_BR
dc.title.alternativeVocabulary of flaky tests across programming languagespt_BR
dc.typemasterThesispt_BR
dc.description.resumoContexto: O teste de regressão é uma atividade de verificação e validação de sistemas presente na engenharia de software moderna. Nesta atividade, testes podem falhar sem nenhuma alteração de implementação, caracterizando-se como testes instáveis (flaky test). Este tipo de instabilidade pode atrasar o lançamento do software e reduzir a confiança dos testes. Uma forma de identificar tais testes instáveis é pela reexecução dos testes, mas isso possui um custo computacional elevado. Uma alternativa à reexecução é a análise estática do código dos casos de teste, identificando padrões relacionados à instabilidade. Nesse contexto, por enquanto observam-se apenas trabalhos de vocabulário que abordam aplicações de linguagens únicas (Java, Python, Javascript). Para conhecer os limites e possibilidades dessa abordagem, é interessante verificar a intersecção de vocabulários instáveis entre diferentes linguagens. Objetivo: O objetivo deste trabalho foi avaliar a técnica de vocabulário para predição de testes instáveis de aplicações Javascript, Java e Python. Método: Para atingir tal objetivo foi construído um conjunto de dados com casos de teste instáveis presentes em projetos de código aberto no Github que utilizam Javascript, e também foram utilizados conjuntos de dados de trabalhos anteriores para Python e Java. A seguir foram criados modelos de classificação, considerando o vocabulário de instabilidade entre diferentes projetos e linguagens. Após avaliar a precisão dos modelos, verificamos as palavras com maior ganho de informação para predição de instabilidade entre linguagens. Resultados: Criamos a ferramenta ShakerJS que conseguiu identificar 102 flaky tests em 36% de 36 projetos relevantes em JavaScript utilizando o estresse de CPU e memória. Os termos com maior ganho de informação para predição de flaky tests neste conjunto foram: await, async, if e path. Em JavaScript, semelhantemente ao Java, o modelo Random Forest (RF) teve a melhor precisão (0,96), enquanto o modelo Decision Tree (DT) superou ligeiramente o RF em termos de recall (0,77 vs 0,63). Os resultados são melhores quando o modelo é treinado e testado no mesmo escopo de projeto e linguagem. Alguns projetos chegam a alcançar resultados de 100% de precisão e recall. Verificamos que a qualidade dos modelos em relação às falhas intermitentes totalmente desconhecidas é baixa. Verificamos a baixa qualidade dos modelos em relação às falhas intermitentes de diferentes linguagens de programação: JavaScript, Java e Python. O melhor resultado foi para o modelo treinado na linguagem JavaScript e testado na linguagem Java, que apresentou o F1-Score (F1) de 0.63. Porém, no que diz respeito ao vocabulário instável entre linguagens os resultados são positivos. Entre as linguagens de programação Python e JavaScript podemos verificar termos relacionados com as seguintes causas raízes de flaky tests: comunicação assíncrona (await, 400, data), concorrência, eventos de interface gráfica do Usuário (plot, page, button, click e width, dependência de Tempo (time), vazamentos de Recursos (source, data, args). Entre as linguagens Java e JavaScript, podemos verificar a intersecção de termos relacionados a concorrência (manager), espera assíncrona (await) e vazamentos de Recursos (new, class). Entre as linguagens Python e Java, podemos verificar termos relacionados com comunicação assíncrona (waitFor), concorrência (get, select), dependência de Tempo (date), vazamentos de recursos (evaluate, catch). Conclusões: Este trabalho apresenta resultados relevantes para uma identificação mais eficiente de testes instáveis em projetos que utilizam Javascript, Java e Python. Existe uma intersecção entre contextos e causas raízes de instabilidades de diferentes projetos e linguagens. Porém, utilizar somente o conteúdo puro do código-fonte pode reduzir o desempenho dos modelos de predição em um cenário com diferentes projetos e linguagens.pt_BR
dc.degree.localCampo Mourãopt_BR
dc.publisher.localCampo Mouraopt_BR
dc.creator.IDhttps://orcid.org/0009-0009-3083-4210pt_BR
dc.creator.Latteshttps://lattes.cnpq.br/0402270119924533pt_BR
dc.contributor.advisor1Silva, Marco Aurélio Graciotto-
dc.contributor.advisor1IDhttps://orcid.org/0000-0002-1737-8240pt_BR
dc.contributor.advisor1Latteshttps://lattes.cnpq.br/9383290036853173pt_BR
dc.contributor.referee1Schwerz, André Luís-
dc.contributor.referee1IDhttps://orcid.org/0000-0002-8328-7144pt_BR
dc.contributor.referee1Latteshttps://lattes.cnpq.br/4954414332524750pt_BR
dc.contributor.referee2Endo, André Takeshi-
dc.contributor.referee2IDhttps://orcid.org/0000-0002-8737-1749pt_BR
dc.contributor.referee2Latteshttps://lattes.cnpq.br/4221336619791961pt_BR
dc.contributor.referee3Wiese, Igor Scaliante-
dc.contributor.referee3IDhttps://orcid.org/0000-0001-9943-5570pt_BR
dc.contributor.referee3Latteshttps://lattes.cnpq.br/0447444423694007pt_BR
dc.contributor.referee4Silva, Marco Aurélio Graciotto-
dc.contributor.referee4IDhttps://orcid.org/0000-0002-1737-8240pt_BR
dc.contributor.referee4Latteshttps://lattes.cnpq.br/9383290036853173pt_BR
dc.publisher.countryBrasilpt_BR
dc.publisher.programPrograma de Pós-Graduação em Ciência da Computaçãopt_BR
dc.publisher.initialsUTFPRpt_BR
dc.subject.cnpqCNPQ::CIENCIAS EXATAS E DA TERRA::CIENCIA DA COMPUTACAO::METODOLOGIA E TECNICAS DA COMPUTACAO::ENGENHARIA DE SOFTWAREpt_BR
dc.subject.capesCiência da Computaçãopt_BR
Aparece nas coleções:CM - Programa de Pós-Graduação em Ciência da Computação

Arquivos associados a este item:
Arquivo Descrição TamanhoFormato 
vocabulariotesteslinguagensprogramacao.pdf1,26 MBAdobe PDFThumbnail
Visualizar/Abrir


Este item está licenciada sob uma Licença Creative Commons Creative Commons