Palestra TDD Javou! #08 2016
-
Upload
matheus-fechine-de-moura -
Category
Technology
-
view
131 -
download
1
Transcript of Palestra TDD Javou! #08 2016
![Page 1: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/1.jpg)
TDDAutomatizando Testes com Java
Javou! #08 - 2016
![Page 2: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/2.jpg)
Bruno MaomehUm 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).
![Page 3: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/3.jpg)
Matheus FechineGraduado 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.
![Page 4: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/4.jpg)
O que é um teste?
![Page 5: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/5.jpg)
O que é um teste?
Um teste é tudo aquilo que assegura que alguma coisa
está funcionando.
![Page 6: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/6.jpg)
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)
![Page 7: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/7.jpg)
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.
![Page 8: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/8.jpg)
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.
![Page 9: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/9.jpg)
● 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
![Page 10: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/10.jpg)
● 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
![Page 11: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/11.jpg)
● 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
![Page 12: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/12.jpg)
● 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
![Page 13: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/13.jpg)
● 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
![Page 14: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/14.jpg)
● 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
![Page 15: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/15.jpg)
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.
![Page 16: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/16.jpg)
Testes Manuais
Fazer testes manuais É LENTO!!
Uma hora você vai esquecer ou errar algum passo!!
![Page 17: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/17.jpg)
Testes automatizados
![Page 18: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/18.jpg)
Testes automatizados
![Page 19: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/19.jpg)
Tipos de testes
Teste de unidade
Teste de integração
Teste de aceitação
Teste de segurança
Teste de performance
Teste de configuraçãoTeste de regressão
![Page 20: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/20.jpg)
Tipos de testes
Teste de unidade
Teste de integração
Teste de aceitação
Teste de segurança
Teste de performance
Teste de configuraçãoTeste de regressão
![Page 21: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/21.jpg)
Teste de Unidade
![Page 22: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/22.jpg)
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.
![Page 23: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/23.jpg)
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.
![Page 24: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/24.jpg)
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.
![Page 25: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/25.jpg)
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.
![Page 26: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/26.jpg)
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.
![Page 27: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/27.jpg)
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.
![Page 28: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/28.jpg)
Teste de Integração
![Page 29: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/29.jpg)
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.
![Page 30: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/30.jpg)
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.
![Page 31: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/31.jpg)
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;
![Page 32: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/32.jpg)
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.
![Page 33: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/33.jpg)
Teste de Aceitação
![Page 34: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/34.jpg)
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.
![Page 35: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/35.jpg)
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.
![Page 36: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/36.jpg)
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.
![Page 37: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/37.jpg)
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.
![Page 38: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/38.jpg)
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.
![Page 39: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/39.jpg)
Testes automatizados
![Page 40: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/40.jpg)
Qual tipo de teste usar?
Em regras gerais
(isso não é uma estatística, apenas referência)
![Page 41: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/41.jpg)
O que é TDD?
![Page 42: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/42.jpg)
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)
![Page 43: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/43.jpg)
O que é TDD?Ciclo do TDD: Vermelho-Verde-Amarelo
![Page 44: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/44.jpg)
O que é TDD?
Ciclo do TDD: Vermelho-Verde-Amarelo
![Page 45: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/45.jpg)
O que é TDD?
Ciclo do TDD: Vermelho-Verde-Amarelo
![Page 46: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/46.jpg)
O que é TDD?
Ciclo do TDD: Vermelho-Verde-Amarelo
![Page 47: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/47.jpg)
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!!
![Page 48: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/48.jpg)
RED@Testpublic void naoDeveRetornarCategoriasPorNome(){
Response response = controller.obtemCategoriasPelo("TESTE");
assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus());
}
![Page 49: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/49.jpg)
RED@GET@Produces("application/json")public Response obtemCategoriasPelo(@QueryParam("nome")String nomeCategoria) {
return null;
}
![Page 50: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/50.jpg)
RED@Testpublic void naoDeveRetornarCategoriasPorNome(){
Response response = controller.obtemCategoriasPelo("TESTE");
assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus());
}
![Page 51: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/51.jpg)
VAMOS CORRIGIR!
![Page 52: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/52.jpg)
GREEN@GET@Produces("application/json")public Response obtemCategoriasPelo(@QueryParam("nome")String nomeCategoria) {
return Response.noContent().build();
}
![Page 53: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/53.jpg)
GREEN@Testpublic void naoDeveRetornarCategoriasPorNome(){
Response response = controller.obtemCategoriasPelo("TESTE");
assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus());
}
![Page 54: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/54.jpg)
GREEN@Testpublic void naoDeveRetornarCategoriasPorNome(){
Response response = controller.obtemCategoriasPelo("TESTE");
assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus());
}
![Page 55: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/55.jpg)
EXISTE VERDE MAIS LINDO QUE ESSE???
![Page 56: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/56.jpg)
YELLOW@Testpublic void naoDeveRetornarCategoriasPorNome(){
when(service.obtemCategoriasPelo(anyString())).thenReturn(null);
Response response = controller.obtemCategoriasPelo("TESTE");
verify(service).obtemCategoriasPelo(anyString());
assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus());
}
![Page 57: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/57.jpg)
YELLOW@GET@Produces("application/json")public Response obtemCategoriasPelo(@QueryParam("nome")String nomeCategoria) {
List<Categoria> listaCategorias = service .obtemCategoriasPelo(nomeCategoria);
return Response.ok(listaCategorias).build();}
![Page 58: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/58.jpg)
RED@Testpublic void naoDeveRetornarCategoriasPorNome(){
when(service.obtemCategoriasPelo(anyString())).thenReturn(null);
Response response = controller.obtemCategoriasPelo("TESTE");
verify(service).obtemCategoriasPelo(anyString());
assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus());
}
![Page 59: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/59.jpg)
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();
}
![Page 60: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/60.jpg)
GREEN@Testpublic void naoDeveRetornarCategoriasPorNome(){
when(service.obtemCategoriasPelo(anyString())).thenReturn(null);
Response response = controller.obtemCategoriasPelo("TESTE");
verify(service).obtemCategoriasPelo(anyString());
assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus());
}
![Page 61: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/61.jpg)
@matheusmoura
[email protected] https://github.com/matheusfechine https://br.linkedin.com/in/matheusfechine
![Page 62: Palestra TDD Javou! #08 2016](https://reader031.fdocuments.net/reader031/viewer/2022030202/58a71ec31a28ab02678b6dd5/html5/thumbnails/62.jpg)
Obrigado e