como automatizar o teste do jogo?

13

Eu sou novo neste campo de teste. Acabei de desenvolver um jogo básico usando o mecanismo de unidade, mas quero testá-lo.

Eu verifiquei com selênio, mas não sei como obter o valor que está sendo retornado, com as informações da ação que está sendo executada no jogo. Se eu conseguir obter o valor, poderei tomar as medidas necessárias em conformidade.

StrayArrow
fonte
4
Esta é uma pergunta bastante interessante. Pessoalmente, acho que o teste de unidade é bastante subestimado no desenvolvimento de jogos. No entanto, parece que você está mais interessado em testes de integração automatizados, que geralmente são realmente difíceis de implementar no desenvolvimento de jogos. Especialmente quando o jogo está usando aleatoriedade.
Philipp
Suportes para levar a sério os testes e procurar ferramentas para esse trabalho. Você pode querer perguntar sobre o SO - eles têm muitas perguntas e respostas sobre selênio. Como o @Philipp mencionou, alguns tipos de teste de jogos são difíceis de automatizar; ou seja, eu ainda não vi um teste autônomo para verificar efeitos visuais.
Pikalek
1
Não está claro o que você deseja testar, mas parece que você está procurando um valor que possa ser testado independentemente do jogo - um valor retornado por uma função. E, nesse caso, você pode testar esta função e não importa se está sendo usada no jogo ou não. Se você não souber como fazê-lo, informe-nos e tentarei escrever uma resposta que envolva testes de unidade.
MVCDS

Respostas:

1

Existem várias maneiras de testar um jogo, duas das mais usadas são: teste de unidade e integração.

Para teste de unidadevocê está testando o funcionamento interno do jogo, sem realmente executá-lo. Você pode fazer isso para módulos específicos que possuem dependências abstraídas (por exemplo, lógica que calcula o Quest XP que você obtém, com base em um determinado conjunto de fatores; se um determinado som é reproduzido). Dependendo de quanto você abstrai sua lógica, você pode testar mais, mas para a unidade especificamente, pode ser mais difícil, dada a maneira como a arquitetura do jogo é feita (por exemplo, herdando do comportamento monobe). No entanto, aplicando padrões de POO como composição, você pode extrair bits de lógica que podem ser testados de maneira determinística (por exemplo, física), mesmo que algumas vezes possam ser vistos como um pouco extremos. Tudo depende de quanto tempo você tem, se você começou do zero com o projeto ou não, quanta experiência você tem, etc. Em geral, eu não tenho. Não vi muitos testes de unidade em jogos em comparação com outros projetos de software que não são de jogos. Esse tipo de teste é bastante fácil de automatizar, pois você fornece comportamentos simulados que simula.

Para teste de integração , você interage com o jogo "inteiro" em um determinado momento, quando todas as partes estão em execução. Dependendo da profundidade das coisas que você deseja testar, acho que pode ser muito fácil ou impossível.

Uma idéia seria ter uma compilação de "teste de integração", que registra todas (a maioria) ações que realiza (ou seja, monstro gerando, reproduzindo som, efeito inicial, partícula geradora). Depois de rodar por um determinado tempo, você pode verificar os logs para ver se ele corresponde a um determinado padrão (isso também depende de quão aleatório o jogo é, com base nas entradas). Agora, isso parece simples, mas a pergunta é: como você diz ao jogo para executar as ações desejadas? O que me leva à segunda ideia.

Outra idéia seria ter um tipo de servidor no jogo, novamente, para fins de teste, capaz de processar solicitações (por exemplo, por meio de uma API REST) ​​e que atua sobre as entidades. Os pedidos podem ser coisas como: mover para a esquerda, pular, girar X graus, alterar a janela de visualização etc. Com essa abordagem, você também pode verificar se o jogo está agindo conforme o esperado, verificando o estado diretamente ou verificando um virtual. log de eventos que aconteceram. Essa abordagem é usada por outras ferramentas de teste de interface do usuário para celulares (por exemplo, Xamarin Test Cloud)

Para a parte de controle, se o seu jogo for baseado em toque / navegador, você pode simular as ações por meio de um dispositivo virtual de toque / entrada, mas isso é um pouco mais difícil, dependendo da complexidade das ações.

Outra idéia, no que diz respeito ao aspecto visual, é tirar algumas capturas de tela de referência, imagens durante uma fase inicial e compará-las após a mesma sequência de ações acontecer em uma versão mais recente. A comparação pode ter um subsídio de desvio específico, para evitar pequenas alterações. Durante os testes, você pode registrar as telas que não corresponderam e ver a diferença. Pode ser que as telas de referência precisem ser atualizadas devido a diferentes alterações. Nesse caso, o jogo pode ser executado novamente com as ações predefinidas e as imagens de referência atualizadas. Provavelmente, isso não funcionará muito bem com sistemas de partículas ou cenas geradas aleatoriamente, a menos que você use a idéia anterior para definir algum tipo de semente, que é usada para gerar as partículas.

Para os sons, pode ser um pouco mais difícil, pois envolve "ouvir" o dispositivo OUT (o que nem sempre é possível com o IIRC, pois depende do hardware do sistema). Mas, se possível, você pode fazer a mesma comparação baseada em referência que as imagens.

Espero que isso ajude a automatizar o teste do jogo.

Editar mais tarde: Acabei de ver que havia outra pergunta relacionada que poderia lhe dar algumas dicas sobre como você faria certos bits: Teste automatizado de jogos

Timóteo
fonte