Exportação concluída — 

Undertanding snapshot testing in practice

Detalhes bibliográficos
Ano de defesa: 2024
Autor(a) principal: Victor Pezzi Gazzinelli Cruz
Orientador(a): Não Informado pela instituição
Banca de defesa: Não Informado pela instituição
Tipo de documento: Dissertação
Tipo de acesso: Acesso aberto
Idioma: eng
Instituição de defesa: Universidade Federal de Minas Gerais
Programa de Pós-Graduação: Não Informado pela instituição
Departamento: Não Informado pela instituição
País: Não Informado pela instituição
Palavras-chave em Português:
Link de acesso: https://hdl.handle.net/1843/81242
Resumo: 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.
id UFMG_bc0c11eb4ced0637c93a9f76c2b39e68
oai_identifier_str oai:repositorio.ufmg.br:1843/81242
network_acronym_str UFMG
network_name_str Repositório Institucional da UFMG
repository_id_str
spelling 2025-04-02T17:56:16Z2025-09-09T01:32:01Z2025-04-02T17:56:16Z2024-12-17https://hdl.handle.net/1843/81242O 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.engUniversidade Federal de Minas GeraisSoftware testingSnapshot testingGrey literatureEmpirical StudyJestComputação – TesesEngenharia de software – TesesSoftware – Testes - TesesLiteratura cinzenta – TesesTerapeutas ocupacionais – TesesUndertanding snapshot testing in practiceCompreendendo o teste de snapshot na práticainfo:eu-repo/semantics/publishedVersioninfo:eu-repo/semantics/masterThesisVictor Pezzi Gazzinelli Cruzinfo:eu-repo/semantics/openAccessreponame:Repositório Institucional da UFMGinstname:Universidade Federal de Minas Gerais (UFMG)instacron:UFMGhttp://lattes.cnpq.br/5150282524143114Marco Tulio de Oliviera Valentehttp://lattes.cnpq.br/2147157840592913Henrique Santos Camargos RochaJoão Eduardo Montandon de Araujo FilhoAndré Cavalcante HoraHumberto Torres Marques NetoSnapshot 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.0000-0002-4353-354XBrasilICEX - INSTITUTO DE CIÊNCIAS EXATASPrograma de Pós-Graduação em Ciência da ComputaçãoUFMGLICENSElicense.txttext/plain2118https://repositorio.ufmg.br//bitstreams/5f42f6ef-d819-4492-a967-53ef38226ce4/downloadcda590c95a0b51b4d15f60c9642ca272MD51falseAnonymousREADORIGINALdissertacao_mestrado_ppgcc_ufmg.pdfapplication/pdf1474183https://repositorio.ufmg.br//bitstreams/271f8a97-e79d-4935-86fd-33515a3073ad/downloadfbc9e3e8f7216dd9cb74ba26b2a530cbMD52trueAnonymousREAD1843/812422025-09-08 22:32:01.883open.accessoai:repositorio.ufmg.br:1843/81242https://repositorio.ufmg.br/Repositório InstitucionalPUBhttps://repositorio.ufmg.br/oairepositorio@ufmg.bropendoar:2025-09-09T01:32:01Repositório Institucional da UFMG - Universidade Federal de Minas Gerais (UFMG)falseTElDRU7Dh0EgREUgRElTVFJJQlVJw4fDg08gTsODTy1FWENMVVNJVkEgRE8gUkVQT1NJVMOTUklPIElOU1RJVFVDSU9OQUwgREEgVUZNRwoKQ29tIGEgYXByZXNlbnRhw6fDo28gZGVzdGEgbGljZW7Dp2EsIHZvY8OqIChvIGF1dG9yIChlcykgb3UgbyB0aXR1bGFyIGRvcyBkaXJlaXRvcyBkZSBhdXRvcikgY29uY2VkZSBhbyBSZXBvc2l0w7NyaW8gSW5zdGl0dWNpb25hbCBkYSBVRk1HIChSSS1VRk1HKSBvIGRpcmVpdG8gbsOjbyBleGNsdXNpdm8gZSBpcnJldm9nw6F2ZWwgZGUgcmVwcm9kdXppciBlL291IGRpc3RyaWJ1aXIgYSBzdWEgcHVibGljYcOnw6NvIChpbmNsdWluZG8gbyByZXN1bW8pIHBvciB0b2RvIG8gbXVuZG8gbm8gZm9ybWF0byBpbXByZXNzbyBlIGVsZXRyw7RuaWNvIGUgZW0gcXVhbHF1ZXIgbWVpbywgaW5jbHVpbmRvIG9zIGZvcm1hdG9zIMOhdWRpbyBvdSB2w61kZW8uCgpWb2PDqiBkZWNsYXJhIHF1ZSBjb25oZWNlIGEgcG9sw610aWNhIGRlIGNvcHlyaWdodCBkYSBlZGl0b3JhIGRvIHNldSBkb2N1bWVudG8gZSBxdWUgY29uaGVjZSBlIGFjZWl0YSBhcyBEaXJldHJpemVzIGRvIFJJLVVGTUcuCgpWb2PDqiBjb25jb3JkYSBxdWUgbyBSZXBvc2l0w7NyaW8gSW5zdGl0dWNpb25hbCBkYSBVRk1HIHBvZGUsIHNlbSBhbHRlcmFyIG8gY29udGXDumRvLCB0cmFuc3BvciBhIHN1YSBwdWJsaWNhw6fDo28gcGFyYSBxdWFscXVlciBtZWlvIG91IGZvcm1hdG8gcGFyYSBmaW5zIGRlIHByZXNlcnZhw6fDo28uCgpWb2PDqiB0YW1iw6ltIGNvbmNvcmRhIHF1ZSBvIFJlcG9zaXTDs3JpbyBJbnN0aXR1Y2lvbmFsIGRhIFVGTUcgcG9kZSBtYW50ZXIgbWFpcyBkZSB1bWEgY8OzcGlhIGRlIHN1YSBwdWJsaWNhw6fDo28gcGFyYSBmaW5zIGRlIHNlZ3VyYW7Dp2EsIGJhY2stdXAgZSBwcmVzZXJ2YcOnw6NvLgoKVm9jw6ogZGVjbGFyYSBxdWUgYSBzdWEgcHVibGljYcOnw6NvIMOpIG9yaWdpbmFsIGUgcXVlIHZvY8OqIHRlbSBvIHBvZGVyIGRlIGNvbmNlZGVyIG9zIGRpcmVpdG9zIGNvbnRpZG9zIG5lc3RhIGxpY2Vuw6dhLiBWb2PDqiB0YW1iw6ltIGRlY2xhcmEgcXVlIG8gZGVww7NzaXRvIGRlIHN1YSBwdWJsaWNhw6fDo28gbsOjbywgcXVlIHNlamEgZGUgc2V1IGNvbmhlY2ltZW50bywgaW5mcmluZ2UgZGlyZWl0b3MgYXV0b3JhaXMgZGUgbmluZ3XDqW0uCgpDYXNvIGEgc3VhIHB1YmxpY2HDp8OjbyBjb250ZW5oYSBtYXRlcmlhbCBxdWUgdm9jw6ogbsOjbyBwb3NzdWkgYSB0aXR1bGFyaWRhZGUgZG9zIGRpcmVpdG9zIGF1dG9yYWlzLCB2b2PDqiBkZWNsYXJhIHF1ZSBvYnRldmUgYSBwZXJtaXNzw6NvIGlycmVzdHJpdGEgZG8gZGV0ZW50b3IgZG9zIGRpcmVpdG9zIGF1dG9yYWlzIHBhcmEgY29uY2VkZXIgYW8gUmVwb3NpdMOzcmlvIEluc3RpdHVjaW9uYWwgZGEgVUZNRyBvcyBkaXJlaXRvcyBhcHJlc2VudGFkb3MgbmVzdGEgbGljZW7Dp2EsIGUgcXVlIGVzc2UgbWF0ZXJpYWwgZGUgcHJvcHJpZWRhZGUgZGUgdGVyY2Vpcm9zIGVzdMOhIGNsYXJhbWVudGUgaWRlbnRpZmljYWRvIGUgcmVjb25oZWNpZG8gbm8gdGV4dG8gb3Ugbm8gY29udGXDumRvIGRhIHB1YmxpY2HDp8OjbyBvcmEgZGVwb3NpdGFkYS4KCkNBU08gQSBQVUJMSUNBw4fDg08gT1JBIERFUE9TSVRBREEgVEVOSEEgU0lETyBSRVNVTFRBRE8gREUgVU0gUEFUUk9Dw41OSU8gT1UgQVBPSU8gREUgVU1BIEFHw4pOQ0lBIERFIEZPTUVOVE8gT1UgT1VUUk8gT1JHQU5JU01PLCBWT0PDiiBERUNMQVJBIFFVRSBSRVNQRUlUT1UgVE9ET1MgRSBRVUFJU1FVRVIgRElSRUlUT1MgREUgUkVWSVPDg08gQ09NTyBUQU1Cw4lNIEFTIERFTUFJUyBPQlJJR0HDh8OVRVMgRVhJR0lEQVMgUE9SIENPTlRSQVRPIE9VIEFDT1JETy4KCk8gUmVwb3NpdMOzcmlvIEluc3RpdHVjaW9uYWwgZGEgVUZNRyBzZSBjb21wcm9tZXRlIGEgaWRlbnRpZmljYXIgY2xhcmFtZW50ZSBvIHNldSBub21lKHMpIG91IG8ocykgbm9tZXMocykgZG8ocykgZGV0ZW50b3IoZXMpIGRvcyBkaXJlaXRvcyBhdXRvcmFpcyBkYSBwdWJsaWNhw6fDo28sIGUgbsOjbyBmYXLDoSBxdWFscXVlciBhbHRlcmHDp8OjbywgYWzDqW0gZGFxdWVsYXMgY29uY2VkaWRhcyBwb3IgZXN0YSBsaWNlbsOnYS4K
dc.title.none.fl_str_mv Undertanding snapshot testing in practice
dc.title.alternative.none.fl_str_mv Compreendendo o teste de snapshot na prática
title Undertanding snapshot testing in practice
spellingShingle Undertanding snapshot testing in practice
Victor Pezzi Gazzinelli Cruz
Computação – Teses
Engenharia de software – Teses
Software – Testes - Teses
Literatura cinzenta – Teses
Terapeutas ocupacionais – Teses
Software testing
Snapshot testing
Grey literature
Empirical Study
Jest
title_short Undertanding snapshot testing in practice
title_full Undertanding snapshot testing in practice
title_fullStr Undertanding snapshot testing in practice
title_full_unstemmed Undertanding snapshot testing in practice
title_sort Undertanding snapshot testing in practice
author Victor Pezzi Gazzinelli Cruz
author_facet Victor Pezzi Gazzinelli Cruz
author_role author
dc.contributor.author.fl_str_mv Victor Pezzi Gazzinelli Cruz
dc.subject.por.fl_str_mv Computação – Teses
Engenharia de software – Teses
Software – Testes - Teses
Literatura cinzenta – Teses
Terapeutas ocupacionais – Teses
topic Computação – Teses
Engenharia de software – Teses
Software – Testes - Teses
Literatura cinzenta – Teses
Terapeutas ocupacionais – Teses
Software testing
Snapshot testing
Grey literature
Empirical Study
Jest
dc.subject.other.none.fl_str_mv Software testing
Snapshot testing
Grey literature
Empirical Study
Jest
description 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.
publishDate 2024
dc.date.issued.fl_str_mv 2024-12-17
dc.date.accessioned.fl_str_mv 2025-04-02T17:56:16Z
2025-09-09T01:32:01Z
dc.date.available.fl_str_mv 2025-04-02T17:56:16Z
dc.type.status.fl_str_mv info:eu-repo/semantics/publishedVersion
dc.type.driver.fl_str_mv info:eu-repo/semantics/masterThesis
format masterThesis
status_str publishedVersion
dc.identifier.uri.fl_str_mv https://hdl.handle.net/1843/81242
url https://hdl.handle.net/1843/81242
dc.language.iso.fl_str_mv eng
language eng
dc.rights.driver.fl_str_mv info:eu-repo/semantics/openAccess
eu_rights_str_mv openAccess
dc.publisher.none.fl_str_mv Universidade Federal de Minas Gerais
publisher.none.fl_str_mv Universidade Federal de Minas Gerais
dc.source.none.fl_str_mv reponame:Repositório Institucional da UFMG
instname:Universidade Federal de Minas Gerais (UFMG)
instacron:UFMG
instname_str Universidade Federal de Minas Gerais (UFMG)
instacron_str UFMG
institution UFMG
reponame_str Repositório Institucional da UFMG
collection Repositório Institucional da UFMG
bitstream.url.fl_str_mv https://repositorio.ufmg.br//bitstreams/5f42f6ef-d819-4492-a967-53ef38226ce4/download
https://repositorio.ufmg.br//bitstreams/271f8a97-e79d-4935-86fd-33515a3073ad/download
bitstream.checksum.fl_str_mv cda590c95a0b51b4d15f60c9642ca272
fbc9e3e8f7216dd9cb74ba26b2a530cb
bitstream.checksumAlgorithm.fl_str_mv MD5
MD5
repository.name.fl_str_mv Repositório Institucional da UFMG - Universidade Federal de Minas Gerais (UFMG)
repository.mail.fl_str_mv repositorio@ufmg.br
_version_ 1862105825275805696