Testes pra que te quero.

Uma introdução a testes unitários e TDD

Yan Magalhães

Web Developer

Ciência da Computação (In progress)

Agenda

  • Um breve contexto sobre testes.
  • Tipos de Teste
  • Testes Unitários
  • Iniciando com TDD
  • Baby Steps
  • Informações sobre seus testes
  • Quando não utilizar TDD
  • Convença seu chefe

https://slides.com/yanmagale/testes-pra-que-te-quero/

https://github.com/YanMagale/testes-pra-que-te-quero

O primeiro contato

  • 2012
    • Me formei \o/
  • 2013
    • Meu primeiro emprego na área
    • Meu primeiro evento: FrontInBH

Testamos o código que fizemos?

SEMPRE TESTE AQUILO QUE VOCÊ FEZ.

Mas por quê não estamos usando estas práticas e metodologias de teste?

Alguns motivos:

  • Escrever testes é difícil.
  • Escrever um código para testar algo que ainda não existe?
  • Testar é custoso.
  • Vou ser menos produtivo.

Por quê devemos testar?

Qualidade e Custos

Vamos começar a testar \o/

Tipos de Teste

  • Testes Manuais
  • Testes Unitários
  • Testes de Integração
  • Testes de Aceitação
  • Teste de Sistema

Testes Unitários

São testes que visam certificar o funcionamento de cada pequena parte do nosso sistema (classes), de forma isolada.

Testes Integração

São os testes responsáveis por garantir o funcionamento da integração entre partes do sistema. Utilizamos classes do sistema que se comunicam, e a testamos de uma única forma, garantindo assim o funcionamento entre elas.

Testes Aceitação

São os testes que garantem o funcionamento do sistema, verificando as funcionalidades implantadas e garantindo que o software realmente está fazendo o que fato era esperado.

Testes Sistema

É o teste que garante o funcionamento do sistema, como um todo.

Vamos praticar!

E o que eu preciso para praticar?

https://phpunit.de/

https://getcomposer.org/

Nosso primeiro teste

Queremos adicionar produtos em um carrinho de compras, e depois descobrir qual é o produto de maior e menor valor.

O que fizemos:

  • Pensamos um Contexto
  • Definimos uma Ação
  • Validamos se o resulto era o esperado

O TDD

Criado por Kent Beck, o Test Driven Development é uma técnica de desenvolvimento de software, onde primeiro escrevemos o nosso teste e a partir daí, fazemos a implementação.

Vantagens

  • O código produzido já sai testado
  • Caso uma alteração quebre a regra dos testes, o feedback é muito rápido.
  • Produzimos um código melhor e de mais fácil evolução.

Segundo Teste

Iremos receber uma string que representa os números romanos, e em seguida, retornar o seu valor em decimal.

Baby Steps

O tão famoso "passinhos de bebê" nos ajuda a entender melhor o contexto do problema. Sendo assim, buscamos fazer o teste passar, da forma mais simples possível.

Sobre seus testes:

  • Precisam ser simples.
  • Precisam fornecer feedbacks rápidos sobre o funcionamento ou não da aplicação.
  • Precisam ser independentes.
  • Não devem fazer acessos a sistemas externos ou acessos a infraestrutura (Banco de Dados).
  • O código do seu teste precisa ser fácil de ser lido. Use as boas práticas de programação e da linguagem.

Sobre seus testes:

  • Ajudam no design do seu projeto.
  • Informam se uma determinada classe possui responsabilidades demais. Suas classes precisam ser Coesas.
  • Informam sobre o acoplamento entre suas classes. Classes muito acopladas são difíceis de serem testadas e evoluídas. Opte por outras implementações, como polimorfismo e interfaces.

Mock Objects

Permitem simular instâncias de uma classe, permitindo realizar ações nestas classes.

Dificuldades para se usar TDD

  • Falta de conhecimento em Orientação a Objetos.
  • Pensar nos cenários para o teste.

Convencendo o seu chefe.

Artigo acadêmico de David Janzen, mostrando que uma equipe de desenvolvimento que utiliza TDD gasta menos tempo debugando, e a complexidade do código produzido era menor.

http://src.acm.org/subpages/gf_entries_06/DavidJanzen_src_gf06.pdf 

 

Convencendo o seu chefe.

Artigo acadêmico de Nagappan, mostrando um estudo de caso da Microsoft e da IBM. Este estudo mostrou que em 4 produtos, o número de erros caiu entre 40 a 90%, em comparação com os mesmos produtos, que não utilizavam TDD.

http://dl.acm.org/citation.cfm?id=1159787

 

Dicas e Referências

https://www.casadocodigo.com.br/products/livro-tdd-php

http://www.amazon.com.br/Test-Driven-Development-By-Example/dp/0321146530

Agora, depende de você. É hora de escrever testes!

/YanMagale

/@yanmagale

/yaanmagale

/yaanmagalhaes

 /+YanMagalhaes

Obrigado galera \o/

Made with Slides.com