Undertanding snapshot testing in practice
Carregando...
Data
Autor(es)
Título da Revista
ISSN da Revista
Título de Volume
Editor
Universidade Federal de Minas Gerais
Descrição
Tipo
Dissertação de mestrado
Título alternativo
Compreendendo o teste de snapshot na prática
Primeiro orientador
Membros da banca
João Eduardo Montandon de Araujo Filho
André Cavalcante Hora
Humberto Torres Marques Neto
André Cavalcante Hora
Humberto Torres Marques Neto
Resumo
Snapshot 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.
Abstract
O 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.
Assunto
Computação – Teses, Engenharia de software – Teses, Software – Testes - Teses, Literatura cinzenta – Teses, Terapeutas ocupacionais – Teses
Palavras-chave
Software testing, Snapshot testing, Grey literature, Empirical Study, Jest