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 SizeFormat 
DissertacaoMestradoGustavoPereira.pdf1.05 MBAdobe PDFView/Open


Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.