SlideShare una empresa de Scribd logo
1 de 62
Descargar para leer sin conexión
TDD
Automatizando Testes com Java
Javou! #08 - 2016
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).
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.
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 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)
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.
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;
● 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
● 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
● 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
● 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
● 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
● 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
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.
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 configuração
Teste de regressão
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
Teste de Unidade
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.
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.
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.
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.
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.
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.
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 refatoração do
código;
● Servem como
documentação de código e
de api.
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.
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;
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.
Teste de Aceitação
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.
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.
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.
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.
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.
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
testes automatizados.
"We never have enough time for testing, so let's just write the test first." (Kent Beck)
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 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!!
RED
@Test
public void naoDeveRetornarCategoriasPorNome(){
Response response = controller.obtemCategoriasPelo("TESTE");
assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus());
}
RED
@GET
@Produces("application/json")
public Response obtemCategoriasPelo(@QueryParam("nome")String nomeCategoria) {
return null;
}
RED
@Test
public void naoDeveRetornarCategoriasPorNome(){
Response response = controller.obtemCategoriasPelo("TESTE");
assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus());
}
VAMOS CORRIGIR!
GREEN
@GET
@Produces("application/json")
public Response obtemCategoriasPelo(@QueryParam("nome")String nomeCategoria) {
return Response.noContent().build();
}
GREEN
@Test
public void naoDeveRetornarCategoriasPorNome(){
Response response = controller.obtemCategoriasPelo("TESTE");
assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus());
}
GREEN
@Test
public void naoDeveRetornarCategoriasPorNome(){
Response response = controller.obtemCategoriasPelo("TESTE");
assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus());
}
EXISTE VERDE MAIS LINDO QUE ESSE???
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());
}
YELLOW
@GET
@Produces("application/json")
public Response obtemCategoriasPelo(@QueryParam("nome")String nomeCategoria) {
List<Categoria> listaCategorias =
service
.obtemCategoriasPelo(nomeCategoria);
return Response.ok(listaCategorias).build();
}
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());
}
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();
}
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());
}
@matheusmoura
matheusfmoura@gmail.com
https://github.com/matheusfechine
https://br.linkedin.com/in/matheusfechine
Obrigado e

Más contenido relacionado

La actualidad más candente

Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...minastestingconference
 
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a ServiçosContinuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a ServiçosSamanta Cicilia
 
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva 3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva minastestingconference
 
Continuous Delivery - versão estendida :)
Continuous Delivery - versão estendida :)Continuous Delivery - versão estendida :)
Continuous Delivery - versão estendida :)Samanta Cicilia
 
Alcançando qualidade de software através de entrega contínua
Alcançando qualidade de software através de entrega contínuaAlcançando qualidade de software através de entrega contínua
Alcançando qualidade de software através de entrega contínuaSamanta Cicilia
 
TDD (Test-Driven Development)
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)Renato Groff
 
TDD Desenvolvimento orientado ao teste
TDD Desenvolvimento orientado ao testeTDD Desenvolvimento orientado ao teste
TDD Desenvolvimento orientado ao testeRafaela Prado
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de softwareHeider Lopes
 
Test-Driven Develpment - TDD
Test-Driven Develpment - TDDTest-Driven Develpment - TDD
Test-Driven Develpment - TDDKleber Bernardo
 
[Uff] Continuous Delivery: Entrega Contínua de Software de Valor
[Uff] Continuous Delivery: Entrega Contínua de Software de Valor[Uff] Continuous Delivery: Entrega Contínua de Software de Valor
[Uff] Continuous Delivery: Entrega Contínua de Software de ValorSamanta Cicilia
 
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horasSamanta Cicilia
 
Todas as abordagens de testes dentro do ágil
Todas as abordagens de testes dentro do ágilTodas as abordagens de testes dentro do ágil
Todas as abordagens de testes dentro do ágilElias Nogueira
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesCamilo Ribeiro
 
Visual Regression Testing: mais um tipo de teste pra sua pipeline
Visual Regression Testing: mais um tipo de teste pra sua pipelineVisual Regression Testing: mais um tipo de teste pra sua pipeline
Visual Regression Testing: mais um tipo de teste pra sua pipelineSamanta Cicilia
 
DevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a QualidadeDevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a QualidadeKamilla Queiroz Xavier
 
[Lady talks]Continuous Delivery
[Lady talks]Continuous Delivery[Lady talks]Continuous Delivery
[Lady talks]Continuous DeliverySamanta Cicilia
 

La actualidad más candente (20)

Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
 
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a ServiçosContinuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
 
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva 3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
 
Continuous Delivery - versão estendida :)
Continuous Delivery - versão estendida :)Continuous Delivery - versão estendida :)
Continuous Delivery - versão estendida :)
 
Alcançando qualidade de software através de entrega contínua
Alcançando qualidade de software através de entrega contínuaAlcançando qualidade de software através de entrega contínua
Alcançando qualidade de software através de entrega contínua
 
TDD (Test-Driven Development)
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)
 
TDD Desenvolvimento orientado ao teste
TDD Desenvolvimento orientado ao testeTDD Desenvolvimento orientado ao teste
TDD Desenvolvimento orientado ao teste
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software
 
Test-Driven Develpment - TDD
Test-Driven Develpment - TDDTest-Driven Develpment - TDD
Test-Driven Develpment - TDD
 
[Uff] Continuous Delivery: Entrega Contínua de Software de Valor
[Uff] Continuous Delivery: Entrega Contínua de Software de Valor[Uff] Continuous Delivery: Entrega Contínua de Software de Valor
[Uff] Continuous Delivery: Entrega Contínua de Software de Valor
 
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horas
 
Todas as abordagens de testes dentro do ágil
Todas as abordagens de testes dentro do ágilTodas as abordagens de testes dentro do ágil
Todas as abordagens de testes dentro do ágil
 
TDD com Python
TDD com PythonTDD com Python
TDD com Python
 
Desenvolvimento Guiado Por Testes
Desenvolvimento Guiado Por TestesDesenvolvimento Guiado Por Testes
Desenvolvimento Guiado Por Testes
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
Visual Regression Testing: mais um tipo de teste pra sua pipeline
Visual Regression Testing: mais um tipo de teste pra sua pipelineVisual Regression Testing: mais um tipo de teste pra sua pipeline
Visual Regression Testing: mais um tipo de teste pra sua pipeline
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
WTM - Entrega Contínua
WTM - Entrega ContínuaWTM - Entrega Contínua
WTM - Entrega Contínua
 
DevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a QualidadeDevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a Qualidade
 
[Lady talks]Continuous Delivery
[Lady talks]Continuous Delivery[Lady talks]Continuous Delivery
[Lady talks]Continuous Delivery
 

Similar a Palestra TDD Javou! #08 2016

Gerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptxGerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptxRoberto Nunes
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitDomingos Teruel
 
Aula18_V&VTesteSoftware.pdf
Aula18_V&VTesteSoftware.pdfAula18_V&VTesteSoftware.pdf
Aula18_V&VTesteSoftware.pdfMichaelArrais1
 
Automação de testes para equipes agile
Automação de testes para equipes agileAutomação de testes para equipes agile
Automação de testes para equipes agileAlini Rebonatto
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven DevelopmentOtavio Augusto
 
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsQuebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsJosé Alexandre Macedo
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testeselliando dias
 
Testes com TestLink e Selenium
Testes com TestLink e SeleniumTestes com TestLink e Selenium
Testes com TestLink e SeleniumAndré Thiago
 
Testes De Software - Uma Visão Geral
Testes De Software - Uma Visão GeralTestes De Software - Uma Visão Geral
Testes De Software - Uma Visão Geralpaulo peres
 
Introdução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de SoftwareIntrodução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de SoftwareCloves da Rocha
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizadosThiago Ghisi
 
Testando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
Testando sua aplicação asp.net mvc de forma automatizada de ponta a pontaTestando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
Testando sua aplicação asp.net mvc de forma automatizada de ponta a pontatdc-globalcode
 
Aula07_TesteSoftware_Parte1_semResposta.pdf
Aula07_TesteSoftware_Parte1_semResposta.pdfAula07_TesteSoftware_Parte1_semResposta.pdf
Aula07_TesteSoftware_Parte1_semResposta.pdfHoctairBernardino
 
Palestra Teste de Software: princípios, ferramentas e carreira
Palestra Teste de Software: princípios, ferramentas e carreiraPalestra Teste de Software: princípios, ferramentas e carreira
Palestra Teste de Software: princípios, ferramentas e carreiraTaís Dall'Oca
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...Bruno Tanoue
 
Automação de Testes: Ferramentas e Aplicação com Integração Contínua
Automação de Testes: Ferramentas e Aplicação com Integração ContínuaAutomação de Testes: Ferramentas e Aplicação com Integração Contínua
Automação de Testes: Ferramentas e Aplicação com Integração ContínuaGabriela Patuci
 

Similar a Palestra TDD Javou! #08 2016 (20)

Gerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptxGerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptx
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnit
 
Aula18_V&VTesteSoftware.pdf
Aula18_V&VTesteSoftware.pdfAula18_V&VTesteSoftware.pdf
Aula18_V&VTesteSoftware.pdf
 
Automação de testes para equipes agile
Automação de testes para equipes agileAutomação de testes para equipes agile
Automação de testes para equipes agile
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsQuebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testes
 
Testes com TestLink e Selenium
Testes com TestLink e SeleniumTestes com TestLink e Selenium
Testes com TestLink e Selenium
 
Testes De Software - Uma Visão Geral
Testes De Software - Uma Visão GeralTestes De Software - Uma Visão Geral
Testes De Software - Uma Visão Geral
 
Introdução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de SoftwareIntrodução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de Software
 
Teste de Software
Teste de SoftwareTeste de Software
Teste de Software
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
 
Testando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
Testando sua aplicação asp.net mvc de forma automatizada de ponta a pontaTestando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
Testando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
 
Aula07_TesteSoftware_Parte1_semResposta.pdf
Aula07_TesteSoftware_Parte1_semResposta.pdfAula07_TesteSoftware_Parte1_semResposta.pdf
Aula07_TesteSoftware_Parte1_semResposta.pdf
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Teste de software
Teste de software Teste de software
Teste de software
 
Palestra Teste de Software: princípios, ferramentas e carreira
Palestra Teste de Software: princípios, ferramentas e carreiraPalestra Teste de Software: princípios, ferramentas e carreira
Palestra Teste de Software: princípios, ferramentas e carreira
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
 
Automação de Testes: Ferramentas e Aplicação com Integração Contínua
Automação de Testes: Ferramentas e Aplicação com Integração ContínuaAutomação de Testes: Ferramentas e Aplicação com Integração Contínua
Automação de Testes: Ferramentas e Aplicação com Integração Contínua
 
Testes de unidade - Conhecendo e aplicando
Testes de unidade - Conhecendo e aplicandoTestes de unidade - Conhecendo e aplicando
Testes de unidade - Conhecendo e aplicando
 

Palestra TDD Javou! #08 2016

  • 1. TDD Automatizando Testes com Java Javou! #08 - 2016
  • 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. 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. O que é um teste?
  • 5. O que é um teste? Um teste é tudo aquilo que assegura que alguma coisa está funcionando.
  • 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. 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. 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. ● 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. ● 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. ● 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. ● 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. ● 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. ● 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. 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. Testes Manuais Fazer testes manuais É LENTO!! Uma hora você vai esquecer ou errar algum passo!!
  • 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. 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
  • 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. 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. 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. 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. 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. 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.
  • 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. 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. 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. 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.
  • 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. 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. 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. 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. 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.
  • 40. Qual tipo de teste usar? Em regras gerais (isso não é uma estatística, apenas referência)
  • 41. O que é TDD?
  • 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. O que é TDD? Ciclo do TDD: Vermelho-Verde-Amarelo
  • 44. O que é TDD? Ciclo do TDD: Vermelho-Verde-Amarelo
  • 45. O que é TDD? Ciclo do TDD: Vermelho-Verde-Amarelo
  • 46. O que é TDD? Ciclo do TDD: Vermelho-Verde-Amarelo
  • 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. RED @Test public void naoDeveRetornarCategoriasPorNome(){ Response response = controller.obtemCategoriasPelo("TESTE"); assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus()); }
  • 50. RED @Test public void naoDeveRetornarCategoriasPorNome(){ Response response = controller.obtemCategoriasPelo("TESTE"); assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus()); }
  • 53. GREEN @Test public void naoDeveRetornarCategoriasPorNome(){ Response response = controller.obtemCategoriasPelo("TESTE"); assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus()); }
  • 54. GREEN @Test public void naoDeveRetornarCategoriasPorNome(){ Response response = controller.obtemCategoriasPelo("TESTE"); assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus()); }
  • 55. EXISTE VERDE MAIS LINDO QUE ESSE???
  • 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. YELLOW @GET @Produces("application/json") public Response obtemCategoriasPelo(@QueryParam("nome")String nomeCategoria) { List<Categoria> listaCategorias = service .obtemCategoriasPelo(nomeCategoria); return Response.ok(listaCategorias).build(); }
  • 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. 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. 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()); }