Gamificação na Educação em Testes de Software
Tornando os testes de software mais legais para os alunos através da gamificação.
― 8 min ler
Índice
Testar software é uma parte chave do desenvolvimento de software. Ajuda a garantir que os programas funcionem direitinho e atendam às expectativas. Mas, muitos estudantes têm dificuldade em aprender a testar o código de forma eficaz. Eles acham o teste chato ou difícil, o que dificulta o engajamento com práticas de teste importantes. Para resolver esse problema, procuramos uma forma de tornar o teste mais divertido e motivador para os alunos.
Um método que exploramos foi a Gamificação. Isso significa usar elementos de jogos como pontos, Desafios e rankings em contextos que não são de jogo para motivar a galera. No nosso caso, integramos a gamificação em um curso de teste de software para os alunos, misturando com um sistema chamado Integração Contínua.
A Importância do Teste de Software
Testar é crucial na engenharia de software porque ajuda a identificar bugs ou problemas em um programa antes dele ir pro ar. Quando o software não é testado adequadamente, pode levar a sérios problemas, incluindo travamentos e usuários insatisfeitos. No mundo real, as empresas podem perder grana e sofrer danos de reputação se seu software falhar.
Apesar dos benefícios conhecidos, muitos desenvolvedores novos não escrevem testes suficientes. Eles costumam achar que testar toma muito tempo e não traz recompensas. Isso não é só um problema de estudantes; até desenvolvedores experientes às vezes negligenciam os testes. A falta de educação sobre práticas de teste pode contribuir pra isso.
Gamificação na Educação
A gamificação pode ajudar a resolver o problema da motivação ao adicionar elementos divertidos e competitivos nas tarefas. A galera geralmente curte jogos porque eles oferecem metas claras, recompensas por conquistas e uma sensação de competição. Usando esses princípios na educação, podemos incentivar os alunos a se engajarem nas tarefas que, de outra forma, eles evitariam, como o teste de software.
Nesse curso, integramos a gamificação no currículo de teste de software usando uma ferramenta que funciona com o Jenkins, uma plataforma popular de integração contínua. Essa ferramenta recompensa os alunos por completar desafios relacionados a testes e estimula o engajamento com as práticas de teste.
Integração Contínua
Integração contínua é uma prática que automatiza o processo de teste. Quando os desenvolvedores escrevem código, ele é testado automaticamente por um sistema que roda os testes toda vez que há uma mudança. Isso ajuda a detectar problemas mais cedo no processo de desenvolvimento. A ideia é manter a base de código saudável e garantir que novas mudanças não quebrem funcionalidades existentes.
Usamos um plugin específico pra adicionar recursos de gamificação no Jenkins. Esse plugin gera desafios e recompensas com base em quão bem os alunos testam seu código. O objetivo é integrar o teste e atividades relacionadas diretamente no trabalho de desenvolvimento dos alunos.
Nossa Abordagem
Pra entender como a gamificação pode melhorar a educação em teste de software, desenvolvemos um programa que permite aos alunos ganhar pontos e recompensas por atividades de teste. Os recursos de gamificação que incluímos são:
- Desafios: Tarefas específicas que os alunos devem completar, como escrever testes adicionais para seu código.
- Quests: Que agrupam vários desafios que os alunos devem completar em ordem.
- Classificações: Que exibem as pontuações e rankings dos alunos com base nas suas atividades de teste.
- Conquistas: Os alunos ganham isso ao alcançar marcos específicos ou completar certas tarefas.
Usando esses recursos, nossa intenção foi fazer o teste parecer menos uma obrigação e mais envolvente.
Estrutura do Curso
O curso de teste de software é composto por duas horas de aulas e duas horas de exercícios práticos toda semana. Os alunos devem completar cinco projetos de codificação durante o curso. Cada projeto é projetado pra ensinar diferentes conceitos e práticas de teste.
Os projetos são:
- Tarefa Inicial: Os alunos criam e testam uma classe pequena usando um framework de teste.
- Desenvolvimento Orientado a Testes: Os alunos desenvolvem uma aplicação web de forma test-first, escrevendo testes antes de implementar recursos.
- Desenvolvimento Orientado a Comportamento: Nesse projeto, os alunos criam uma interface gráfica e a testam usando ferramentas de teste web.
- Analisador de Cobertura de Linhas: Os alunos implementam uma ferramenta pra rastrear quais linhas de código foram testadas.
- Fuzzer Baseado em Cobertura: No projeto final, os alunos criam uma ferramenta que gera entradas pra testar áreas não testadas do código.
Para nossa pesquisa, focamos nos últimos dois projetos, onde a gamificação foi aplicada através do plugin.
Perguntas de Pesquisa
Pra avaliar a eficácia da nossa abordagem gamificada, buscamos responder três perguntas principais:
- Como os alunos usaram as ferramentas de gamificação durante o curso?
- Que mudanças no comportamento de teste observamos entre os alunos?
- Como os alunos se sentiram sobre a integração da gamificação em seu curso?
Engajamento dos Alunos
Durante o curso, coletamos dados sobre como os alunos interagiram com os recursos de gamificação. No total, 26 alunos completaram os projetos. Eles enfrentaram vários desafios, quests e conquistas usando a ferramenta, e analisamos quantos completaram, quantos rejeitaram e seu engajamento geral.
Descobrimos que os alunos completaram muitos desafios e quests. A maioria dos desafios que eles completaram estava relacionada ao aumento da cobertura de código ou melhoria nas suas pontuações de mutação. No entanto, eles também rejeitaram muitos desafios, frequentemente buscando alternativas mais fáceis.
Comportamento de Teste
Em termos de comportamento de teste, examinamos métricas-chave como o número de testes escritos, o número de commits de código, cobertura de linhas e pontuações de mutação. Essas métricas ajudaram a avaliar a eficácia da abordagem de gamificação.
Os alunos escreveram uma média de 14,8 testes para um projeto e 21,8 para outro. A maioria dos alunos visava alta cobertura de linhas, quase alcançando 100% em ambos os projetos. Os resultados dos testes de mutação mostraram que eles também se esforçaram para identificar áreas não testadas em seu código. Isso sugere que a integração da gamificação influenciou positivamente suas estratégias de teste.
Também notamos um aumento significativo nas saídas corretas dos programas entre os alunos que usaram a ferramenta de gamificação, o que indica seus benefícios para o aprendizado.
Percepção dos Alunos
Depois de completar o curso, os alunos deram feedback sobre sua experiência com a ferramenta de gamificação. Muitos relataram que gostaram de usar a ferramenta e acharam útil pra aprender a escrever testes. Os desafios foram particularmente populares, enquanto alguns alunos tiveram dificuldades com as quests.
Embora os alunos tenham apreciado os aspectos competitivos e como os recursos de gamificação os motivaram a testar mais, houve algumas preocupações. Alguns sentiram que escreveram testes desnecessários apenas pra completar os desafios em vez de focar em testes significativos.
Apesar de alguns desafios, o feedback geral indicou um alto nível de satisfação com a integração da gamificação no curso. Os alunos sentiram que a estrutura os tornou mais responsáveis por testar seu código e descobrir bugs.
Conclusões e Trabalho Futuro
Nossa pesquisa mostrou que gamificar a educação em teste de software pode levar a um melhor engajamento, práticas de teste aprimoradas e resultados de aprendizado melhores. Ao integrar a ferramenta de gamificação em sistemas de integração contínua, conseguimos motivar os alunos a escrever testes e melhorar a qualidade do seu código.
Embora os resultados tenham sido promissores, ainda há áreas para melhoria. Futuras versões da ferramenta poderiam refinar ainda mais os desafios e quests pra torná-los mais manejáveis e relevantes para o curso. Além disso, incorporar a ferramenta diretamente nos ambientes de desenvolvimento dos alunos poderia agilizar o processo e melhorar a experiência do usuário.
Também pretendemos explorar a eficácia da ferramenta em ambientes industriais reais, onde as práticas de teste podem ser diferentes das do contexto educacional. Avaliando seu impacto em diversos ambientes e com diferentes tipos de projetos, esperamos aprender mais sobre como a gamificação pode apoiar o teste de software e a garantia de qualidade a longo prazo.
Focando na melhoria contínua, podemos garantir que nossos métodos de ensino evoluam junto com o cenário em rápida mudança do desenvolvimento de software, levando a graduados melhor preparados pra enfrentar desafios do mundo real em suas futuras carreiras.
Título: Gamifying a Software Testing Course with Continuous Integration
Resumo: Testing plays a crucial role in software development, and it is essential for software engineering students to receive proper testing education. However, motivating students to write tests and use automated testing during software development can be challenging. To address this issue and enhance student engagement in testing when they write code, we propose to incentivize students to test more by gamifying continuous integration. For this we use Gamekins, a tool that is seamlessly integrated into the Jenkins continuous integration platform and uses game elements based on commits to the source code repository: Developers can earn points by completing test challenges and quests generated by Gamekins, compete with other developers or teams on a leaderboard, and receive achievements for their test-related accomplishments. In this paper, we present our integration of Gamekins into an undergraduate-level course on software testing. We observe a correlation between how students test their code and their use of Gamekins, as well as a significant improvement in the accuracy of their results compared to a previous iteration of the course without gamification. As a further indicator of how this approach improves testing behavior, the students reported enjoyment in writing tests with Gamekins.
Autores: Philipp Straubinger, Gordon Fraser
Última atualização: 2024-01-31 00:00:00
Idioma: English
Fonte URL: https://arxiv.org/abs/2401.17740
Fonte PDF: https://arxiv.org/pdf/2401.17740
Licença: https://creativecommons.org/licenses/by-sa/4.0/
Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.
Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.