TDD
Automatizando Testes com Java
Javou! #08 - 2016
Bruno Maomeh
Um grande aficionado pelo conhecimento,
admirador do desenvolvimento de software
e metodologias ágeis. Trabal...
Matheus Fechine
Graduado em Ciências da Computação
com pós graduação em Desenvolvimento
de Software com ênfase em arquitet...
O que é um teste?
O que é um teste?
Um teste é tudo aquilo que
assegura que alguma coisa
está funcionando.
O que é um teste?
"Afirma-se que o teste de software é um
processo, ou uma série de processos, projetado
para se certifica...
Testes Manuais
● Faz alteração no código;
● Levanta o Tomcat;
● Abre o Chrome;
● Faz login na aplicação;
● Entra na página...
Testes Manuais
● Faz alteração no código;
● Levanta o Tomcat;
● Abre o Chrome;
● Faz login na aplicação;
● Entra na página...
● Faz alteração no código;
● Levanta o Tomcat;
● Abre o Chrome;
● Faz login na aplicação;
● Entra na página do formulário;...
● Faz alteração no código;
● Levanta o Tomcat;
● Abre o Chrome;
● Faz login na aplicação;
● Entra na página do formulário;...
● Faz alteração no código;
● Levanta o Tomcat;
● Abre o Chrome;
● Faz login na aplicação;
● Entra na página do formulário;...
● Faz alteração no código;
● Levanta o Tomcat;
● Abre o Chrome;
● Faz login na aplicação;
● Entra na página do formulário;...
● Faz alteração no código;
● Levanta o Tomcat;
● Abre o Chrome;
● Faz login na aplicação;
● Entra na página do formulário;...
● Faz alteração no código;
● Levanta o Tomcat;
● Abre o Chrome;
● Faz login na aplicação;
● Entra na página do formulário;...
Testes Manuais
● Faz alteração no código;
● Levanta o Tomcat;
● Abre o Chrome;
● Faz login na aplicação;
● Entra na página...
Testes Manuais
Fazer testes manuais É LENTO!!
Uma hora você vai esquecer ou errar algum passo!!
Testes automatizados
Testes automatizados
Tipos de testes
Teste de unidade
Teste de integração
Teste de aceitação
Teste de segurança
Teste de performance
Teste de c...
Tipos de testes
Teste de unidade
Teste de integração
Teste de aceitação
Teste de segurança
Teste de performance
Teste de c...
Teste de Unidade
Teste de unidade
● Ajuda na rastreabilidade de
bugs no sistema;
● Previnem regressão do código;
● Incentivam a refatoração...
Teste de unidade
● Ajuda na rastreabilidade de bugs
no sistema;
● Previnem regressão do
código;
● Incentivam a refatoração...
Teste de unidade
● Ajuda na rastreabilidade de bugs
no sistema;
● Previnem regressão do código;
● Incentivam a refatoração...
Teste de unidade
● Ajuda na rastreabilidade de bugs
no sistema;
● Previnem regressão do código;
● Incentivam a refatoração...
Teste de unidade
● Ajuda na rastreabilidade de bugs
no sistema;
● Previnem regressão do código;
● Incentivam a refatoração...
NÃO é Teste de Unidade
● Se ele conversa com o banco de dados;
● Se ele se comunica através da rede;
● Se ele toca o siste...
Teste de Integração
Teste de integração
● Garante a comunicação
com outros módulos ou
sistema;
● Previnem regressão do
código;
● Incentivam a ...
Teste de integração
● Garante a comunicação
com outros módulos ou
sistema;
● Previnem regressão do
código;
● Incentivam a ...
Teste de integração
● Garante a comunicação
com outros módulos ou
sistema;
● Previnem regressão do
código;
● Incentivam a
...
Teste de integração
● Garante a comunicação
com outros módulos ou
sistema;
● Previnem regressão do
código;
● Incentivam a ...
Teste de Aceitação
Teste de aceitação
● Garante a funcionalidade do
sistema como um todo;
● Previnem regressão do código;
● Incentivam a refa...
Teste de aceitação
● Garante a funcionalidade do
sistema como um todo;
● Previnem regressão do
código;
● Incentivam a refa...
Teste de aceitação
● Garante a funcionalidade do
sistema como um todo;
● Previnem regressão do código;
● Incentivam a refa...
Teste de aceitação
● Garante a funcionalidade do
sistema como um todo;
● Previnem regressão do código;
● Incentivam a refa...
Teste de aceitação
● Garante a funcionalidade do
sistema como um todo;
● Previnem regressão do código;
● Incentivam a refa...
Testes automatizados
Qual tipo de teste usar?
Em regras gerais
(isso não é uma estatística,
apenas referência)
O que é TDD?
O que é TDD?
TDD é uma prática de
desenvolvimento de software
onde todo o código do sistema
é escrito depois de escrever
t...
O que é TDD?
Ciclo do TDD: Vermelho-Verde-Amarelo
O que é TDD?
Ciclo do TDD: Vermelho-Verde-Amarelo
O que é TDD?
Ciclo do TDD: Vermelho-Verde-Amarelo
O que é TDD?
Ciclo do TDD: Vermelho-Verde-Amarelo
O que é TDD?
Muito além de técnicas de "test-first"
● Auxilia na detecção de falhas no design do sistema.
● Também deve te...
RED
@Test
public void naoDeveRetornarCategoriasPorNome(){
Response response = controller.obtemCategoriasPelo("TESTE");
ass...
RED
@GET
@Produces("application/json")
public Response obtemCategoriasPelo(@QueryParam("nome")String nomeCategoria) {
retu...
RED
@Test
public void naoDeveRetornarCategoriasPorNome(){
Response response = controller.obtemCategoriasPelo("TESTE");
ass...
VAMOS CORRIGIR!
GREEN
@GET
@Produces("application/json")
public Response obtemCategoriasPelo(@QueryParam("nome")String nomeCategoria) {
re...
GREEN
@Test
public void naoDeveRetornarCategoriasPorNome(){
Response response = controller.obtemCategoriasPelo("TESTE");
a...
GREEN
@Test
public void naoDeveRetornarCategoriasPorNome(){
Response response = controller.obtemCategoriasPelo("TESTE");
a...
EXISTE VERDE MAIS LINDO QUE ESSE???
YELLOW
@Test
public void naoDeveRetornarCategoriasPorNome(){
when(service.obtemCategoriasPelo(anyString())).thenReturn(nul...
YELLOW
@GET
@Produces("application/json")
public Response obtemCategoriasPelo(@QueryParam("nome")String nomeCategoria) {
L...
RED
@Test
public void naoDeveRetornarCategoriasPorNome(){
when(service.obtemCategoriasPelo(anyString())).thenReturn(null);...
GREEN
@GET
@Produces("application/json")
public Response obtemCategoriasPelo(@QueryParam("nome")String nomeCategoria) {
Li...
GREEN
@Test
public void naoDeveRetornarCategoriasPorNome(){
when(service.obtemCategoriasPelo(anyString())).thenReturn(null...
@matheusmoura
matheusfmoura@gmail.com
https://github.com/matheusfechine
https://br.linkedin.com/in/matheusfechine
Obrigado e
Próximos SlideShares
Carregando em…5
×

Palestra TDD Javou! #08 2016

102 visualizações

Publicada em

Palestra ministrada no evento Javou! #08, realizado pela comunidade JavaCE, dia 12/11/2016 no Auditório Nadir Papi Saboya, Faculdade Farias Brito, em Fortaleza-CE

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
102
No SlideShare
0
A partir de incorporações
0
Número de incorporações
0
Ações
Compartilhamentos
0
Downloads
5
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Palestra TDD Javou! #08 2016

  1. 1. TDD Automatizando Testes com Java Javou! #08 - 2016
  2. 2. Bruno Maomeh Um grande aficionado pelo conhecimento, admirador do desenvolvimento de software e metodologias ágeis. Trabalhando por mais de 9 anos com desenvolvimento, eu também sou entusiasta por comunidades de desenvolvimento de sistemas, atuando como coordenador do Grupo de Usuários Java do Rio Grande do Sul (RSJug) e do JavaSF International Group (JavaSF).
  3. 3. Matheus Fechine Graduado em Ciências da Computação com pós graduação em Desenvolvimento de Software com ênfase em arquitetura java, ambas pela Universidade de Fortaleza (UNIFOR), atua no mercado como desenvolvedor desde 2008 e Coordenador da comunidade JavaCE. Sente-se torturado ao ver um código sem cobertura de teste. Pai do Levi, torcedor do Ceará, faixa azul de jiu jitsu, apreciador de Punk Rock e baixista nas horas vagas.
  4. 4. O que é um teste?
  5. 5. O que é um teste? Um teste é tudo aquilo que assegura que alguma coisa está funcionando.
  6. 6. O que é um teste? "Afirma-se que o teste de software é um processo, ou uma série de processos, projetado para se certificar a respeito do código de computador, de fazer o que foi designado a cumprir, e sem realizar nada que não seja intencional.” (Glenford J. Myers - 2004)
  7. 7. Testes Manuais ● Faz alteração no código; ● Levanta o Tomcat; ● Abre o Chrome; ● Faz login na aplicação; ● Entra na página do formulário; ● Preenche um formulário; ● Envia o formulário; ● Verifica se a correção funcionou.
  8. 8. Testes Manuais ● Faz alteração no código; ● Levanta o Tomcat; ● Abre o Chrome; ● Faz login na aplicação; ● Entra na página do formulário; ● Preenche um formulário; ● Envia o formulário; ● Verifica se a correção funcionou.
  9. 9. ● Faz alteração no código; ● Levanta o Tomcat; ● Abre o Chrome; ● Faz login na aplicação; ● Entra na página do formulário; ● Preenche um formulário; ● Envia o formulário; ● Verifica se a correção funcionou. Testes Manuais
  10. 10. ● Faz alteração no código; ● Levanta o Tomcat; ● Abre o Chrome; ● Faz login na aplicação; ● Entra na página do formulário; ● Preenche um formulário; ● Envia o formulário; ● Verifica se a correção funcionou. Testes Manuais
  11. 11. ● Faz alteração no código; ● Levanta o Tomcat; ● Abre o Chrome; ● Faz login na aplicação; ● Entra na página do formulário; ● Preenche um formulário; ● Envia o formulário; ● Verifica se a correção funcionou. Testes Manuais
  12. 12. ● Faz alteração no código; ● Levanta o Tomcat; ● Abre o Chrome; ● Faz login na aplicação; ● Entra na página do formulário; ● Preenche um formulário; ● Envia o formulário; ● Verifica se a correção funcionou. Testes Manuais
  13. 13. ● Faz alteração no código; ● Levanta o Tomcat; ● Abre o Chrome; ● Faz login na aplicação; ● Entra na página do formulário; ● Preenche um formulário; ● Envia o formulário; ● Verifica se a correção funcionou. Testes Manuais
  14. 14. ● Faz alteração no código; ● Levanta o Tomcat; ● Abre o Chrome; ● Faz login na aplicação; ● Entra na página do formulário; ● Preenche um formulário; ● Envia o formulário; ● Verifica se a correção funcionou. Testes Manuais
  15. 15. Testes Manuais ● Faz alteração no código; ● Levanta o Tomcat; ● Abre o Chrome; ● Faz login na aplicação; ● Entra na página do formulário; ● Preenche um formulário; ● Envia o formulário; ● Verifica se a correção funcionou; ● Faz alteração no código.
  16. 16. Testes Manuais Fazer testes manuais É LENTO!! Uma hora você vai esquecer ou errar algum passo!!
  17. 17. Testes automatizados
  18. 18. Testes automatizados
  19. 19. Tipos de testes Teste de unidade Teste de integração Teste de aceitação Teste de segurança Teste de performance Teste de configuração Teste de regressão
  20. 20. Tipos de testes Teste de unidade Teste de integração Teste de aceitação Teste de segurança Teste de performance Teste de configuração Teste de regressão
  21. 21. Teste de Unidade
  22. 22. Teste de unidade ● Ajuda na rastreabilidade de bugs no sistema; ● Previnem regressão do código; ● Incentivam a refatoração do código; ● Servem como documentação do código; ● Auxilia na criação do design do sistema.
  23. 23. Teste de unidade ● Ajuda na rastreabilidade de bugs no sistema; ● Previnem regressão do código; ● Incentivam a refatoração do código; ● Servem como documentação do código; ● Auxilia na criação do design do sistema.
  24. 24. Teste de unidade ● Ajuda na rastreabilidade de bugs no sistema; ● Previnem regressão do código; ● Incentivam a refatoração do código; ● Servem como documentação do código; ● Auxilia na criação do design do sistema.
  25. 25. Teste de unidade ● Ajuda na rastreabilidade de bugs no sistema; ● Previnem regressão do código; ● Incentivam a refatoração do código; ● Servem como documentação do código; ● Auxilia na criação do design do sistema.
  26. 26. Teste de unidade ● Ajuda na rastreabilidade de bugs no sistema; ● Previnem regressão do código; ● Incentivam a refatoração do código; ● Servem como documentação do código; ● Auxilia na criação do design do sistema.
  27. 27. NÃO é Teste de Unidade ● Se ele conversa com o banco de dados; ● Se ele se comunica através da rede; ● Se ele toca o sistema de arquivos; ● Se ele não pode ser executado ao mesmo tempo de outros testes de unidade; ● Se for necessário configurar ou preparar o ambiente para executá-los.
  28. 28. Teste de Integração
  29. 29. Teste de integração ● Garante a comunicação com outros módulos ou sistema; ● Previnem regressão do código; ● Incentivam a refatoração do código; ● Servem como documentação de código e de api.
  30. 30. Teste de integração ● Garante a comunicação com outros módulos ou sistema; ● Previnem regressão do código; ● Incentivam a refatoração do código; ● Servem como documentação de código e de api.
  31. 31. Teste de integração ● Garante a comunicação com outros módulos ou sistema; ● Previnem regressão do código; ● Incentivam a refatoração do código; ● Servem como documentação de código e de api;
  32. 32. Teste de integração ● Garante a comunicação com outros módulos ou sistema; ● Previnem regressão do código; ● Incentivam a refatoração do código; ● Servem como documentação de código e de api.
  33. 33. Teste de Aceitação
  34. 34. Teste de aceitação ● Garante a funcionalidade do sistema como um todo; ● Previnem regressão do código; ● Incentivam a refatoração do código; ● Servem como documentação de código e de api; ● Simula o teste com o usuário final.
  35. 35. Teste de aceitação ● Garante a funcionalidade do sistema como um todo; ● Previnem regressão do código; ● Incentivam a refatoração do código; ● Servem como documentação de código e de api; ● Simula o teste com o usuário final.
  36. 36. Teste de aceitação ● Garante a funcionalidade do sistema como um todo; ● Previnem regressão do código; ● Incentivam a refatoração do código; ● Servem como documentação de código e de api; ● Simula o teste com o usuário final.
  37. 37. Teste de aceitação ● Garante a funcionalidade do sistema como um todo; ● Previnem regressão do código; ● Incentivam a refatoração do código; ● Servem como documentação de código e de api; ● Simula o teste com o usuário final.
  38. 38. Teste de aceitação ● Garante a funcionalidade do sistema como um todo; ● Previnem regressão do código; ● Incentivam a refatoração do código; ● Servem como documentação de código e de api; ● Simula o teste com o usuário final.
  39. 39. Testes automatizados
  40. 40. Qual tipo de teste usar? Em regras gerais (isso não é uma estatística, apenas referência)
  41. 41. O que é TDD?
  42. 42. O que é TDD? TDD é uma prática de desenvolvimento de software onde todo o código do sistema é escrito depois de escrever testes automatizados. "We never have enough time for testing, so let's just write the test first." (Kent Beck)
  43. 43. O que é TDD? Ciclo do TDD: Vermelho-Verde-Amarelo
  44. 44. O que é TDD? Ciclo do TDD: Vermelho-Verde-Amarelo
  45. 45. O que é TDD? Ciclo do TDD: Vermelho-Verde-Amarelo
  46. 46. O que é TDD? Ciclo do TDD: Vermelho-Verde-Amarelo
  47. 47. O que é TDD? Muito além de técnicas de "test-first" ● Auxilia na detecção de falhas no design do sistema. ● Também deve ter informações sobre o código testado. Se um teste está ficando muito complicado, é um grande indício que exista problema com o design. É hora de refatorar!!
  48. 48. RED @Test public void naoDeveRetornarCategoriasPorNome(){ Response response = controller.obtemCategoriasPelo("TESTE"); assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus()); }
  49. 49. RED @GET @Produces("application/json") public Response obtemCategoriasPelo(@QueryParam("nome")String nomeCategoria) { return null; }
  50. 50. RED @Test public void naoDeveRetornarCategoriasPorNome(){ Response response = controller.obtemCategoriasPelo("TESTE"); assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus()); }
  51. 51. VAMOS CORRIGIR!
  52. 52. GREEN @GET @Produces("application/json") public Response obtemCategoriasPelo(@QueryParam("nome")String nomeCategoria) { return Response.noContent().build(); }
  53. 53. GREEN @Test public void naoDeveRetornarCategoriasPorNome(){ Response response = controller.obtemCategoriasPelo("TESTE"); assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus()); }
  54. 54. GREEN @Test public void naoDeveRetornarCategoriasPorNome(){ Response response = controller.obtemCategoriasPelo("TESTE"); assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus()); }
  55. 55. EXISTE VERDE MAIS LINDO QUE ESSE???
  56. 56. YELLOW @Test public void naoDeveRetornarCategoriasPorNome(){ when(service.obtemCategoriasPelo(anyString())).thenReturn(null); Response response = controller.obtemCategoriasPelo("TESTE"); verify(service).obtemCategoriasPelo(anyString()); assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus()); }
  57. 57. YELLOW @GET @Produces("application/json") public Response obtemCategoriasPelo(@QueryParam("nome")String nomeCategoria) { List<Categoria> listaCategorias = service .obtemCategoriasPelo(nomeCategoria); return Response.ok(listaCategorias).build(); }
  58. 58. RED @Test public void naoDeveRetornarCategoriasPorNome(){ when(service.obtemCategoriasPelo(anyString())).thenReturn(null); Response response = controller.obtemCategoriasPelo("TESTE"); verify(service).obtemCategoriasPelo(anyString()); assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus()); }
  59. 59. GREEN @GET @Produces("application/json") public Response obtemCategoriasPelo(@QueryParam("nome")String nomeCategoria) { List<Categoria> listaCategorias = service .obtemCategoriasPelo(nomeCategoria); if(listaCategorias!=null){ return Response.ok(listaCategorias).build(); } return Response.noContent().build(); }
  60. 60. GREEN @Test public void naoDeveRetornarCategoriasPorNome(){ when(service.obtemCategoriasPelo(anyString())).thenReturn(null); Response response = controller.obtemCategoriasPelo("TESTE"); verify(service).obtemCategoriasPelo(anyString()); assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus()); }
  61. 61. @matheusmoura matheusfmoura@gmail.com https://github.com/matheusfechine https://br.linkedin.com/in/matheusfechine
  62. 62. Obrigado e

×