Please use this identifier to cite or link to this item:
http://hdl.handle.net/1843/39045
Type: | Dissertação |
Title: | Assessing mock classes: an empirical study |
Other Titles: | Avaliando classes mock: um estudo empírico |
Authors: | Gustavo Henrique Alves Pereira |
First Advisor: | André Cavalcante Hora |
First Referee: | Marco Túlio de Oliveira Valente |
Second Referee: | Bruno Barbieri de Pontes Cafeo |
Abstract: | During testing activities, developers frequently rely on dependencies that make the test harder to be implemented. In this scenario, they can use mock objects to emulate the dependencies’ behavior, which contributes to make the test fast and isolated. In practice, the emulated dependency can be dynamically created with the support of mocking frameworks or manually hand-coded in mock classes. While the former is well-explored by the research literature, the latter lacks further empirical analysis. Assessing mock classes would provide the basis to better understand how those mocks are created and consumed by developers and to detect novel practices and challenges. In this dissertation, we propose an empirical and a survey study to assess mock classes. We analyze popular Java software projects, detect over 600 mock classes, and assess their content, design, evolution, and usage. We also conduct a survey with 39 developers who maintained mock classes to better understand usage motivations. We find that mock classes: often emulate domain objects, external dependencies, and web services; are typically part of a hierarchy; are mostly public (but 1/3 are private); and are largely consumed by client projects, particularly to support web testing. Developers argue that mocking frameworks may reduce code quality and have limitations, while mock classes may improve code quality and are simple to set up in tests. Moreover, developers state several reasons to create mock classes, for example, for complex testing and to support reuse; mocking frameworks should ideally be used to create simple unit tests, but also to test external entities and to test code with minimal change. The overall perception is that the usage of mock classes is preferable over mocking frameworks, however, there are specific cases in which mocking frameworks are a better choice. Finally, we provide implications and insights to researchers and practitioners working with mock classes. |
Abstract: | Em atividades de teste, desenvolvedores frequentemente utilizam dependências que tornam os testes mais difíceis de serem implementados. Neste cenário, eles podem utilizar objetos mock para simular o comportamento de tais dependências, o que contribui para tornar os testes rápidos e isolados. Na prática, as dependências simuladas podem ser dinamicamente criadas com o apoio de frameworks de mock ou manualmente codificadas em classes mock. Enquanto frameworks de mock são bem explorados pela literatura, classes mock ainda são pouco estudadas. Avaliar classes mock pode fornecer as bases para melhor compreender como estes mocks são criados e consumidos por desenvolvedores e para detectar novas práticas e desafios. Nesta dissertação, propomos um estudo empírico e um survey para avaliar classes mock. Ao analisar projetos de software populares na linguagem Java, detectamos mais de 600 classes mock e avaliamos o seu conteúdo, projeto, evolução e utilização. Também conduzimos um survey com 39 desenvolvedores que fizeram manutenção em classes mock para melhor compreender motivações de uso. Descobrimos que classes mock: frequentemente simulam objetos de domínio, dependências externas, e serviços web; são tipicamente parte de uma hierarquia; são em sua maior parte públicas, mas 1/3 são privadas; e são largamente consumidas por projetos clientes, particularmente para apoiar testes de aplicações web. Desenvolvedores argumentam que frameworks de mock podem reduzir a qualidade do código e possuem limitações, enquanto classes mock podem melhorar a qualidade do código e são simples de se configurar em testes. Além disso, desenvolvedores declaram diversas razões sobre quando criarmos classes mock, por exemplo, para testes complexos e para apoiar o reuso; frameworks de mock deveriam, idealmente, serem utilizados para criar testes unitários simples, mas também para testar entidades externas e para testar código com mudanças mínimas. A percepção geral é que a utilização de classes mock é preferível do que os frameworks de mock, entretanto, existem casos específicos onde o uso dos frameworks de mock são uma escolha adequada. Finalmente, fornecemos implicações e observações para pesquisadores e profissionais. |
Subject: | Computação – Teses Software – Testes –Teses Software – Validação – Teses Framework (Programa de computador) – Teses |
language: | eng |
metadata.dc.publisher.country: | Brasil |
Publisher: | Universidade Federal de Minas Gerais |
Publisher Initials: | UFMG |
metadata.dc.publisher.department: | ICX - DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO |
metadata.dc.publisher.program: | Programa de Pós-Graduação em Ciência da Computação |
Rights: | Acesso Aberto |
URI: | http://hdl.handle.net/1843/39045 |
Issue Date: | 2-Sep-2021 |
Appears in Collections: | Dissertações de Mestrado |
Files in This Item:
File | Description | Size | Format | |
---|---|---|---|---|
DissertacaoMestradoGustavoPereira.pdf | 1.05 MB | Adobe PDF | View/Open |
Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.