TDD para Games Desenvolvimento guiado a testes para jogos digitais
Julia Naomi Boeira
Para quem é este livro
Por muito tempo, a indústria de games foi resistente a metodologias ágeis. Entretanto, essa resistência decorria de tentativas frustradas de introduzir os frameworks ágeis em seu cotidiano, seja porque as pessoas não tentaram adaptá-los aos seus mundos, seja porque tentaram introduzir um framework específico como solução, "O Verdadeiro Ágil". Muitas interpretaram e consideraram um livro ou um processo como mais importante que o próprio manifesto ágil. (http://agilemanifesto.org/iso/ptbr/manifesto.html).
Vamos lembrar dos conceitos do manifesto:
* Indivíduos e interações mais que processos e ferramentas.
* Software em funcionamento mais que documentação abrangente.
* Colaboração com o cliente mais que negociação de contratos.
* Responder às mudanças mais que seguir um plano.
O que me parece um dos erros mais comuns é o peso da inversão causada pela primeira frase do manifesto, já que o nosso desenvolvimento de games, nos últimos anos, tem sido "processos e ferramentas acima de indivíduos e interações". Mais que isso, a indústria de games toma processos, ferramentas e frameworks de forma bastante rígida e inflexível — uma grande tristeza por esta ser uma indústria tão dinâmica.
Além disso, vejo o Test-Driven Development (TDD) ou, em português, desenvolvimento guiado a testes, como uma manifestação da segunda frase do manifesto. Isso, porque creio que um código bem testado pode ser visto como uma forma de documentar e garantir a qualidade do software. Outro ponto é que acredito que a colaboração com o cliente é fundamental na indústria de jogos, especialmente pelo fato de jogos serem softwares de entretenimento. Por último, é um mercado que exige muita mudança, principalmente devido ao fato de suas tendências mudarem todos os dias, tornando o Lean uma ótima solução. Gostaria de recomendar uma breve leitura no blog de engenharia da Riot, que tenta aplicar muitos destes padrões. (https://engineering.riotgames.com/). Mais referências na bibliografia.
Tendo dito isso, acredito que este livro é para todos os públicos: para a profissional, que gostaria de melhorar suas habilidades de codar com qualidade e segurança, e também para a iniciante, que tem como objetivo fazer seu primeiro jogo. Certamente, este livro não exige que você seja uma profissional no desenvolvimento de games, mas ter uma noção mínima de C#, Java, Python, C++, Ruby ou qualquer outra linguagem fará com que você flua mais facilmente pelo livro. Um outro ponto é que é um grande prazer para mim poder falar de desenvolvimento de games com Programação Funcional, mas como os projetos que conheço ainda não são estáveis, vou deixá-los como referências somente para apresentar e atiçar a sua curiosidade: https://github.com/oakes/play-clj/ e https://arcadia-unity.github.io/.
Este livro é focado na parte de desenvolvimento de **software** do jogo, por isso a obra não trata de arte, nem foca muito em conceitos básicos da área de jogos, como "O que é um jogo?" e "Como um jogo funciona?". Não acredito que o objetivo deste livro seja ensinar programação à leitora, mas sim, ensinar TDD. Mesmo assim, exemplifiquei tudo o que fiz para ficar o mais claro possível.
Eu decidi fazer este livro com MonoGame porque ele é de fácil utilização, versatilidade e bastante aceito. Além disso, gostaria de mencionar que, na minha opinião, a Unity é a única engine com um framework de testes decente, mas infelizmente ela muda drasticamente de uma versão para a outra. Considerando estes fatores de Unity e MonoGame, optei por utilizar C#, uma linguagem utilizada por uma grande comunidade gamer, com tutoriais extensos e muitos livros sobre games.
Por último, mas não menos importante, está o fato de que times que desenvolvem games com o pensamento das metodologias ágeis necessitam que toda a equipe entenda tal pensamento. Assim, acredito que este livro pode ser muito útil para nivelar a equipe. Mais informações sobre as ideias apresentadas aqui podem ser encontradas no livro Lean Game Development: Desenvolvimento enxuto de jogos (https://www.casadocodigo.com.br/products/livro-lean-game-development).
Como o livro está organizado
Este livro está organizado em três seções. A primeira é sobre TDD e como ele funciona, conceitos de entrega e de integração contínuas, sobre como construir e fazer o design de software do seu jogo e, por último, quais ferramentas são melhores para sua estratégia de teste. O que me faz lembrar que, além de ser arte, jogos também são softwares, um tipo específico de software que exige uma grande habilidade de codificação. É por isso mesmo que temos as engines, pois elas nos poupam tempo e linhas de código.
A segunda seção do livro traz o desenvolvimento de um jogo da velha com o framework MonoGame em um Mac OS, mas as práticas podem ser aplicadas para qualquer sistema operacional. Algumas práticas de TDD serão aplicadas ao processo de desenvolvimento, fora do loop Update/Draw, com o repositório completo disponível no GitHub, livre para forks e pull requests. Essa seção será desenvolvida com C#, e algum conhecimento de Orientação a Objetos será útil.
A terceira parte tem como ideia aplicar os conceitos que aprendemos na segunda seção em um cenário mais real utilizando Unity, C#, NUnit e NSubstitute. Além disso, criamos um jogo que pode ser jogado por qualquer pessoa.
Espero que todas vocês tenham uma ótima leitura deste livro e que possam começar a aplicar técnicas de TDD em seus projetos.
Sobre a autora
Julia Naomi Boeira é desenvolvedora de software na ThoughtWorks Brasil e possui grande experiência no desenvolvimento de games. Ela já trabalhou com diversas engines, como Unreal, Cry, Unity, GameMaker Studio e com frameworks como MonoGame e PyGame.
Ao utilizar PyGame e Panda3D, Julia percebeu a necessidade e a possibilidade de usar TDD para games. Deste momento em diante, ela assumiu a responsabilidade de promover essa ideia entre outras pessoas desenvolvedoras de games.
Para este projeto, Julia contou com a ajuda de uma colega, Victoria Fuenmayor.
Sumário
- Parte 1 - Como e por quê?
- 1 O que deu errado?
- 2 Introdução
- 2.1 Por que temos tantos códigos mal testados?
- 3 O mundo do Build e do Design
- 4 Por que devemos nos preocupar com CI?
- 4.1 E quanto a CI para games?
- 5 TDD, como começar?
- 5.1 Casos de teste de um jogo simples
- Parte 2 - TDD com MonoGame
- 6 Introdução ao MonoGame
- 6.1 Possibilidades de projetos
- 6.2 Iniciando um projeto
- 7 Configurações
- 7.1 Iniciando um projeto no GitHub
- 7.2 Criando uma solução
- 7.3 Adicionando um projeto de testes
- 7.4 TDD com MonoGame
- 8 Primeiros passos no TDD com jogos
- 8.1 Os primeiros casos de teste
- 9 Criando o Board e gerenciando seu estado
- 9.1 Regiões do Board e seus estados
- 9.2 Permitindo a atuação de diferentes jogadores
- 10 Dando vida ao jogo
- 10.1 Imprimindo os símbolos corretos
- 10.2 Atualizando o estado no Game Loop
- 10.3 Vamos ganhar este jogo!
- 11 Vitória visual
- 11.1 Análise e refatoração do código
- 11.2 Vitória visual
- 11.3 Bloqueio do jogo após o fim
- Parte 3 - Testando com Unity
- 12 Introdução a testes com engines
- 12.1 Configurando os testes
- 13 Testando entradas de keyboard
- 13.1 Injeção de dependências
- 13.2 Melhorando os testes de situações limites
- 14 Um cenário no qual inimigos aparecem ao nosso redor
- 14.1 Fazendo inimigos aparecerem
- 14.2 Inimigos se aproximam com o tempo
- 15 Criando um sistema de vida
- 15.1 Testando danos na UI
- 16 Incluindo uma câmera e toques finais
- 16.1 A câmera
- 16.2 Time Attack
- 17 Adicionando um CI
- 17.1 CI para Unity
- 18 Referências
Dados do produto
- Número de páginas:
- 230
- ISBN:
- 978-65-86110-65-4
- Data publicação:
- 04/2021