Undertanding snapshot testing in practice

dc.creatorVictor Pezzi Gazzinelli Cruz
dc.date.accessioned2025-04-02T17:56:16Z
dc.date.accessioned2025-09-09T01:32:01Z
dc.date.available2025-04-02T17:56:16Z
dc.date.issued2024-12-17
dc.description.abstractO teste de snapshot é uma técnica de teste de software na qual a saída de um componente—como uma interface de usuário renderizada em tags ou uma estrutura de dados— é capturada e salva como um snapshot. Este snapshot serve como ponto de referência e é posteriormente comparado com saídas de futuras execuções para identificar rapidamente alterações não intencionais, ajudando a consistência nas atualizações da aplicação. Apesar de sua ampla adoção industrial, há uma escassez de literatura acadêmica explorando suas nuances e melhores práticas. Esta dissertação de mestrado visa ajudar a preencher essa lacuna, fornecendo uma análise detalhada da literatura cinzenta e conduzindo um estudo empírico sobre a prática de testes de snapshot. Inicialmente, buscamos e analisamos 50 documentos da literatura cinzenta para obter uma compreensão mais clara do status atual desse tipo de teste dentro da comunidade de software. Essa análise esclareceu os benefícios e desvantagens, identificou melhores práticas, destacou componentes arquiteturais prevalentes que adotam essa abordagem e revelou as ferramentas mais comumente utilizadas para sua implementação. Revelamos também que os testes de snapshot são populares porque são fáceis de implementar e previnem regressões, especialmente em aplicações frontend, predominantemente usando o framework de teste Jest. No entanto, desvantagens como a fragilidade e falta de contexto podem levar a falsos positivos, dificultando a interpretação dessas falhas pelos desenvolvedores. Para mitigar esses problemas, são recomendadas melhores práticas, como tratar os resultados dos snapshots como parte da base de código da aplicação e escrever snapshots pequenos e focados. Subsequentemente, avaliamos as práticas de teste de snapshot com Jest através de um estudo empírico. Conduzimos uma investigação abrangente sobre o uso dessa prática em 569 projetos de código aberto, analisando uma amostra aleatória de 380 testes. Nosso objetivo foi identificar as principais características dos testes de snapshot em termos dos componentes sendo testados, o formato dos snapshot gerados e seu tamanho em linhas de código. Identificamos dois padrões comuns de testes de snapshot e quatro casos menos comuns, incluindo dois test smells. Baseado nisso, documentamos dois métodos de refatoração para eliminar tais smells. Além disso, realizamos um estudo quantitativo sobre o comportamento dinâmico dos testes de snapshot, medindo os resultados de seu uso em ferramentas de integração contíınua. Como contribuição¸ principal deste trabalho, apresentamos diretrizes práticas para a implementação de testes de snapshot, as quais podem ajudar os esenvolvedores a usar esses testes de forma mais eficaz e frequente.
dc.identifier.urihttps://hdl.handle.net/1843/81242
dc.languageeng
dc.publisherUniversidade Federal de Minas Gerais
dc.rightsAcesso Aberto
dc.subjectComputação – Teses
dc.subjectEngenharia de software – Teses
dc.subjectSoftware – Testes - Teses
dc.subjectLiteratura cinzenta – Teses
dc.subjectTerapeutas ocupacionais – Teses
dc.subject.otherSoftware testing
dc.subject.otherSnapshot testing
dc.subject.otherGrey literature
dc.subject.otherEmpirical Study
dc.subject.otherJest
dc.titleUndertanding snapshot testing in practice
dc.title.alternativeCompreendendo o teste de snapshot na prática
dc.typeDissertação de mestrado
local.contributor.advisor-co1Henrique Santos Camargos Rocha
local.contributor.advisor1Marco Tulio de Oliviera Valente
local.contributor.advisor1Latteshttp://lattes.cnpq.br/2147157840592913
local.contributor.referee1João Eduardo Montandon de Araujo Filho
local.contributor.referee1André Cavalcante Hora
local.contributor.referee1Humberto Torres Marques Neto
local.creator.Latteshttp://lattes.cnpq.br/5150282524143114
local.description.resumoSnapshot testing is a software testing technique in which the output of a component—such as a user interface rendered in tags or a data structure—is captured and saved as a snapshot. This snapshot serves as a reference point and is later compared against future outputs to identify unintended changes, assisting in consistency across application updates. Despite its widespread industrial adoption, there is a scarcity of academic literature exploring its nuances and best practices. This master dissertation aims to help bridge that gap by providing a detailed analysis of the grey literature and conducting an empirical study on the practice of snapshot testing with Jest. Initially, we compiled and analyzed 50 documents from the grey literature to gain a clearer understanding of the current status of snapshot testing within the software development community. This analysis clarified the benefits and drawbacks of snapshot testing, identified best practices, highlighted prevalent architectural components that adopt this approach, and revealed the most commonly used tools for implementing snapshot tests. We found that snapshot tests are popular because they are easy to implement and effectively prevent regressions, especially in frontend and mobile applications, predominantly using the Jest testing framework. However, drawbacks such as fragility and lack of context can lead to false positives, making it challenging for developers to interpret test failures. To mitigate these issues, best practices like treating snapshot results as part of the application's codebase and writing small, focused snapshots are recommended. Subsequently, we evaluated snapshot testing practices through an empirical study. We conducted a comprehensive investigation into the use of snapshot testing in 569 open-source projects by analyzing a random sample of 380 tests. We aimed to identify the main characteristics of snapshot tests in terms of the components being tested, the format of the generated snapshot files, and their size in lines of code. We identified two common patterns of snapshot tests and four less common cases, including two test smells. In response, we documented two refactoring operations to eliminate these smells. Additionally, we conducted a quantitative study on the dynamic behavior of snapshot tests by measuring their success rates in continuous integration tools. As the key contribution of this work, we present practical guidelines for implementing snapshot tests, which can help developers use these tests more effectively and frequently.
local.identifier.orcid0000-0002-4353-354X
local.publisher.countryBrasil
local.publisher.departmentICEX - INSTITUTO DE CIÊNCIAS EXATAS
local.publisher.initialsUFMG
local.publisher.programPrograma de Pós-Graduação em Ciência da Computação

Arquivos

Pacote original

Agora exibindo 1 - 1 de 1
Carregando...
Imagem de Miniatura
Nome:
dissertacao_mestrado_ppgcc_ufmg.pdf
Tamanho:
1.41 MB
Formato:
Adobe Portable Document Format

Licença do pacote

Agora exibindo 1 - 1 de 1
Carregando...
Imagem de Miniatura
Nome:
license.txt
Tamanho:
2.07 KB
Formato:
Plain Text
Descrição: