Skip to content

Instantly share code, notes, and snippets.

@fefas
Last active May 29, 2017 19:45
Show Gist options
  • Save fefas/6a9abf09a972ce32111d15ec775aee6b to your computer and use it in GitHub Desktop.
Save fefas/6a9abf09a972ce32111d15ec775aee6b to your computer and use it in GitHub Desktop.
Palestra TDD - Testes, pra quê?

Testes, pra quê?

Chamada

TDD não é nem perda de tempo, nem bicho de sete cabeças. Pelo contrário, TDD pode ser seu grande aliado para aumentar a qualidade do código, acelerar seu ciclo de desenvolvimento e diminuir riscos.

Conheça os diferentes tipos de testes e como eles podem tornar seu código sólido, através da aplicação do ciclo do TDD (vermelho > verde > refatorar) e de heurísticas como FIRST e AAA. Torne seu código a sua documentação, com dicas de como nomear testes e veja como aplicar corretamente dublês de teste (e a não criar mocks do que não ser "mocado").

Objetivo e Conteúdo

O foco da apresentação é convencer os ouvintes a adotar TDD no dia-a-dia, apresentando o que se ganha com a sua adoção. A palestra será abstrata, mas também com alguns exemplos de código para, principalmente, comparar testes bons de testes ruins.

Para atingir tal objetivo, irei seguir uma linha de raciocínio, começando ao listar para quê os desenvolvedores, em geral, utilizam testes e para quê eles deveriam os utilizar:

  • Direcionamento do desenvolvimento, tornando-o mais objetivo, resultando em código mais simples;
  • Aumento de qualidade código, diminuindo acoplamentos e incentivando injeção de dependências;
  • Maior preocupação natural em deixar código mais expressivo e Clean Code;
  • Código como documentação;
  • Aumento de segurança nos deploys e diminuição de risco de bugs (maior confiabilidade);
  • Equipe mais rápida com projetos que crescem;
  • Integração contínua e deploy contínuo apenas são possíveis tendo bons testes.

Pontos a serem abordados:

  • Explicação sobre testes funcionais, de integração e unitários;
  • Como e em quais situações cada um dos testes podem e devem ser aplicados;
  • Como TDD pode ser muito mais poderoso quando aliado ao BDD;
  • O que ter em mente e boas práticas (acrônimos FIRST e AAA) (o FIRST é, provavelmente, o tópico mais importante da palestra, mostrando que testes devem ser isolados, repetíveis etc);
  • Como nomear testes;
  • Exemplos de testes do mais granulado (unitário) ao menos granulado (funcional);
  • Testes fazem parte do código;
  • O que são fixtures;
  • Explicar a importância dos passos do TDD (escrever teste que falha [vermelho], fazer teste passar [verde] e refatorar), mostrando que o primeiro e o último são os mais importantes (ao contrário do que parece);
  • Apresentação de dublês de testes;
  • Apresentação de ferramentas de testes em PHP (PHPUnit e Behat), assim como alguns truques úteis.

Minhas principais referências são os livros:

  • "Pragmatic Unit Testing in Java 8 with JUnit" de "Jeff Langr, Andy Hunt e Dave Thomas';
  • "Growing Object-Oriented Software, Guided by Tests" de "Steve Freeman e Nat Pryce".
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment