Assessing mock classes: an empirical study

Detalhes bibliográficos
Ano de defesa: 2021
Autor(a) principal: Gustavo Henrique Alves Pereira
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
Brasil
ICX - DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO
Programa de Pós-Graduação em Ciência da Computação
UFMG
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: http://hdl.handle.net/1843/39045
Resumo: 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.