SlideShare una empresa de Scribd logo
1 de 30
Universidade de Belo Horizonte Desenvolvimento Dirigido por Testes Camilo Ribeiro camilo@camiloribeiro.com www.bugbang.com.br
Camilo Ribeiro ,[object Object]
Consultor em arquitetura de teste e qualidade de software
Instrutor e professor de teste de software na Iterasys
Graduado em Sistemas pela Internet pela Faculdade Pitágoras
Pós graduado em Engenharia de Software pela UFMG
Certificado pelo ISTQB, ALATS e ETS
Mantedor do blog técnico The Bug BangTheory (www.bugbang.com.br)
Palestrante e entusiasta de teste de softwarewww.about.me/camiloribeiro www.twitter.com/camiloribeiro camilo@camiloribeiro.com
Agenda ,[object Object]
Motivação para existência do teste de unidade
Problemas dos testes de unidade
Motivação para o TDD
Como funciona o TDD
Mitos sobre o TDD
Exemplos em .net
Framework Praxis em JavaFiquem à vontade para questionar qualquer assunto ou perguntar suas dúvidas. Ao final teremos alguns exemplos práticos e tempo para perguntas também.
Não sou Desenvolvedor Sou um testador que aprendeu um pouco dos dois caminhos
Conceito: Teste de Unidade Teste realizado com os componentes individuais de um software. [Subsequente ao IEEE 610] – Glóssário de termos do ISTQB Testes de unidade é um método pelo qual as unidades individuais do código-fonte são testados para determinar se eles estão aptos para o uso. A unidade é a menor parte testável de um aplicativo. Na programação procedural uma unidade pode ser uma função individual ou procedimento. Na programação orientada a objeto uma unidade é normalmente um método. Os testes unitários são criados por programadores ou ocasionalmente por testadores de caixa branca durante o processo de desenvolvimento. – Tradução Literal da Wikipedia Inglesa
O Modelo V Tradicional Planeja > Teste de Aceite Requisitos Teste de Sistema Planeja > Análise  Teste de Integração Planeja > Desenho Planeja > Código Teste de Unidade
Problema de escrever testes depois Você escreverá testes para passarem.  Testes não podem ser feitos para “passar”, devem ser feitos para avaliar o código de produção.  Testes feitos para ter testes não tem valor.
TDD vem pra resolver esse problema
O modelo V aplicado ao TDD Planeja > Teste de Aceite Requisitos Teste de Sistema Planeja > Análise  Teste de Integração Planeja > Desenho   Gera > Código Teste de Unidade
Framework de Teste de Unidade Código de produção Requisitos Gera É testado por Classe de Teste Acessa Acessa Implementa Dados(DB, XML, Excel) Framework
Considerações sobre Teste de Unidade Teste de unidade valida uma unidade; Teste de unidade deve ser executável independente dos dados; O teste de unidade deve conter tudo o que o teste necessita; Teste de unidade não é teste de integração (Cuidado) Teste de unidade feito por fazer não tem valor; Teste de unidade sempre será usado  como teste de regressão
Outras Considerações Teste de Unidade Nunca use lógica em testes de unidade. Testes de unidade devem ser configurados (Não queremos mais bugs :p ) Não altere ou exclua testes para ter um novo. Sempre adicione o novo. O teste só deve mudar quando a funcionalidade mudar;  Quando todos os testes passarem, mude algum if, mude atribuições e retornos de lugar no seu código de produção para ver se os testes são efetivos; Code Review e Test Code Review tem a mesma importância; Teste de unidade deve testar o Contrato, não teste nada além do contrato; Testes de unidade devem ser isolados; Reuse o código de teste;
Como o TDD Funciona?
O que tem de teste de software? Uso de técnicas de teste como valores limites, partição de equivalência ou qualquer outra técnica usada para testes de sistema; Casos de teste (em forma de código); São requeridas as mesmas skills dos testes funcionais (criatividade, curiosidade, senso crítico, etc.) . . .
O que tem de desenvolvimento? Orientação por Objetos; Acesso a bancos de dados e qualquer outro repositório usado em programação; Padrões de projeto como commanded, value object, imposter, factory method e composite ou qualquer outro usado em programação; Acesso irrestrito a todos os recursos da linguagem e IDE usada; . . .
Como o TDD Funciona? Adicionar um teste: Incluir um teste, que pode por exemplo, ter o formato de um caso de teste. Executar o teste: Devemos ter certeza que o teste falha antes da implementação. Se necessário, desenvolva apenas o contrato ou mockspara isso; Desenvolva: Agora complete seu contrato com o código funcional, como sempre fez.  Execute o teste: Agora o teste deve passar. Caso existam defeitos, o teste de unidade vai demonstrar erros; Correção e reteste: Agora mude o código fonte de produção até que o teste de unidade tenha um resultado positivo; *Se algo nos requisitos mudar, os testes mudam. http://www.agiledata.org/essays/tdd.html

Más contenido relacionado

La actualidad más candente

Facilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHPFacilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHPPedro Chaves
 
Introdução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosIntrodução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosDionatan default
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Diego Pacheco
 
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
 
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
 
CNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliveryCNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliverySamanta Cicilia
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizadosThiago Ghisi
 
[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes AutomatizadosSamanta Cicilia
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de SoftwareMaurício Aniche
 
Treinamento Testes Unitários - parte 2
Treinamento Testes Unitários - parte 2Treinamento Testes Unitários - parte 2
Treinamento Testes Unitários - parte 2Diego Pacheco
 
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
 
Testes Unitários/Integrados
Testes Unitários/IntegradosTestes Unitários/Integrados
Testes Unitários/IntegradosGiovanni Bassi
 
TDD com Código Legado
TDD com Código LegadoTDD com Código Legado
TDD com Código LegadoCesar Romero
 
Teste de software, na visão de um desenvolvedor
Teste de software, na visão de um desenvolvedorTeste de software, na visão de um desenvolvedor
Teste de software, na visão de um desenvolvedorAndré Phillip Bertoletti
 
Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Bernardo Fontes
 

La actualidad más candente (20)

Facilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHPFacilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHP
 
Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016
 
Introdução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosIntrodução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anos
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
 
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
 
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
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
CNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliveryCNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous Delivery
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
 
[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de Software
 
Treinamento Testes Unitários - parte 2
Treinamento Testes Unitários - parte 2Treinamento Testes Unitários - parte 2
Treinamento Testes Unitários - parte 2
 
Apresentação testes white box
Apresentação testes white boxApresentação testes white box
Apresentação testes white box
 
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
 
Testes Unitários/Integrados
Testes Unitários/IntegradosTestes Unitários/Integrados
Testes Unitários/Integrados
 
TDD com Código Legado
TDD com Código LegadoTDD com Código Legado
TDD com Código Legado
 
Tdd na veia
Tdd na veiaTdd na veia
Tdd na veia
 
Testes de unidade - Conhecendo e aplicando
Testes de unidade - Conhecendo e aplicandoTestes de unidade - Conhecendo e aplicando
Testes de unidade - Conhecendo e aplicando
 
Teste de software, na visão de um desenvolvedor
Teste de software, na visão de um desenvolvedorTeste de software, na visão de um desenvolvedor
Teste de software, na visão de um desenvolvedor
 
Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?
 

Destacado

Como NÃO testar o seu projeto de Software. DevDay 2014
Como NÃO testar o seu projeto de Software. DevDay 2014Como NÃO testar o seu projeto de Software. DevDay 2014
Como NÃO testar o seu projeto de Software. DevDay 2014alexandre freire
 
Criando pipelines de entrega contínua multilinguagem com Docker e Jenkins
Criando pipelines de entrega contínua multilinguagem com Docker e JenkinsCriando pipelines de entrega contínua multilinguagem com Docker e Jenkins
Criando pipelines de entrega contínua multilinguagem com Docker e JenkinsCamilo Ribeiro
 
Do push para a produção: Os desafios de automação em Continuous Delivery
Do push para a produção: Os desafios de automação em Continuous DeliveryDo push para a produção: Os desafios de automação em Continuous Delivery
Do push para a produção: Os desafios de automação em Continuous DeliveryCamilo Ribeiro
 
Quando tdd não é o suficiente
Quando tdd não é o suficienteQuando tdd não é o suficiente
Quando tdd não é o suficienteCamilo Ribeiro
 
Introdução a Automação de Teste de Software
Introdução a Automação de Teste de SoftwareIntrodução a Automação de Teste de Software
Introdução a Automação de Teste de SoftwareCamilo Ribeiro
 
Boas práticas de Automação de Testes
Boas práticas de Automação de TestesBoas práticas de Automação de Testes
Boas práticas de Automação de TestesCamilo Ribeiro
 
Continuous Delivery Pipeline with Docker and Jenkins
Continuous Delivery Pipeline with Docker and JenkinsContinuous Delivery Pipeline with Docker and Jenkins
Continuous Delivery Pipeline with Docker and JenkinsCamilo Ribeiro
 
Papéis em Teste e Qualidade de Software
Papéis em Teste e Qualidade de SoftwarePapéis em Teste e Qualidade de Software
Papéis em Teste e Qualidade de SoftwareCamilo Ribeiro
 
Teste de Software Introdução à Qualidade
Teste de Software Introdução à Qualidade Teste de Software Introdução à Qualidade
Teste de Software Introdução à Qualidade Camilo Ribeiro
 

Destacado (10)

Como NÃO testar o seu projeto de Software. DevDay 2014
Como NÃO testar o seu projeto de Software. DevDay 2014Como NÃO testar o seu projeto de Software. DevDay 2014
Como NÃO testar o seu projeto de Software. DevDay 2014
 
Criando pipelines de entrega contínua multilinguagem com Docker e Jenkins
Criando pipelines de entrega contínua multilinguagem com Docker e JenkinsCriando pipelines de entrega contínua multilinguagem com Docker e Jenkins
Criando pipelines de entrega contínua multilinguagem com Docker e Jenkins
 
Do push para a produção: Os desafios de automação em Continuous Delivery
Do push para a produção: Os desafios de automação em Continuous DeliveryDo push para a produção: Os desafios de automação em Continuous Delivery
Do push para a produção: Os desafios de automação em Continuous Delivery
 
Técnicas de Teste
Técnicas de TesteTécnicas de Teste
Técnicas de Teste
 
Quando tdd não é o suficiente
Quando tdd não é o suficienteQuando tdd não é o suficiente
Quando tdd não é o suficiente
 
Introdução a Automação de Teste de Software
Introdução a Automação de Teste de SoftwareIntrodução a Automação de Teste de Software
Introdução a Automação de Teste de Software
 
Boas práticas de Automação de Testes
Boas práticas de Automação de TestesBoas práticas de Automação de Testes
Boas práticas de Automação de Testes
 
Continuous Delivery Pipeline with Docker and Jenkins
Continuous Delivery Pipeline with Docker and JenkinsContinuous Delivery Pipeline with Docker and Jenkins
Continuous Delivery Pipeline with Docker and Jenkins
 
Papéis em Teste e Qualidade de Software
Papéis em Teste e Qualidade de SoftwarePapéis em Teste e Qualidade de Software
Papéis em Teste e Qualidade de Software
 
Teste de Software Introdução à Qualidade
Teste de Software Introdução à Qualidade Teste de Software Introdução à Qualidade
Teste de Software Introdução à Qualidade
 

Similar a Desenvolvimento Dirigido por Testes

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
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testeselliando dias
 
Apresentacao Testes de Unidade
Apresentacao Testes de UnidadeApresentacao Testes de Unidade
Apresentacao Testes de UnidadeAline Ferreira
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven DevelopmentOtavio Augusto
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...Isaac de Souza
 
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
 
Testes: existe vida antes do TDD
Testes: existe vida antes do TDDTestes: existe vida antes do TDD
Testes: existe vida antes do TDDDiana Ungaro Arnos
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsSamanta Cicilia
 
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
 
Noções em teste de software e introdução a automação
Noções em teste de software e introdução a automaçãoNoções em teste de software e introdução a automação
Noções em teste de software e introdução a automaçãoSandy Maciel
 
Test-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netTest-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netRenato Groff
 
Final Project (2013): Test-Driven Development applied on web applications
Final Project (2013): Test-Driven Development applied on web applicationsFinal Project (2013): Test-Driven Development applied on web applications
Final Project (2013): Test-Driven Development applied on web applicationsLuiz Henrique
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Claudinei Brito Junior
 
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Renato Groff
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareDextra Sistemas / Etec Itu
 
Apresentação jasmine
Apresentação jasmineApresentação jasmine
Apresentação jasmineRangel Javier
 

Similar a Desenvolvimento Dirigido por Testes (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
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testes
 
Apresentacao Testes de Unidade
Apresentacao Testes de UnidadeApresentacao Testes de Unidade
Apresentacao Testes de Unidade
 
Desenvolvimento Guiado Por Testes
Desenvolvimento Guiado Por TestesDesenvolvimento Guiado Por Testes
Desenvolvimento Guiado Por Testes
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
JUnit Sample
JUnit SampleJUnit Sample
JUnit Sample
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
 
TDD (Resumo)
TDD (Resumo)TDD (Resumo)
TDD (Resumo)
 
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
 
Testes: existe vida antes do TDD
Testes: existe vida antes do TDDTestes: existe vida antes do TDD
Testes: existe vida antes do TDD
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOps
 
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...
 
O que é Teste de Software?
O que é Teste de Software?O que é Teste de Software?
O que é Teste de Software?
 
Noções em teste de software e introdução a automação
Noções em teste de software e introdução a automaçãoNoções em teste de software e introdução a automação
Noções em teste de software e introdução a automação
 
Test-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netTest-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.net
 
Final Project (2013): Test-Driven Development applied on web applications
Final Project (2013): Test-Driven Development applied on web applicationsFinal Project (2013): Test-Driven Development applied on web applications
Final Project (2013): Test-Driven Development applied on web applications
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
 
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de software
 
Apresentação jasmine
Apresentação jasmineApresentação jasmine
Apresentação jasmine
 

Desenvolvimento Dirigido por Testes

  • 1. Universidade de Belo Horizonte Desenvolvimento Dirigido por Testes Camilo Ribeiro camilo@camiloribeiro.com www.bugbang.com.br
  • 2.
  • 3. Consultor em arquitetura de teste e qualidade de software
  • 4. Instrutor e professor de teste de software na Iterasys
  • 5. Graduado em Sistemas pela Internet pela Faculdade Pitágoras
  • 6. Pós graduado em Engenharia de Software pela UFMG
  • 8. Mantedor do blog técnico The Bug BangTheory (www.bugbang.com.br)
  • 9. Palestrante e entusiasta de teste de softwarewww.about.me/camiloribeiro www.twitter.com/camiloribeiro camilo@camiloribeiro.com
  • 10.
  • 11. Motivação para existência do teste de unidade
  • 12. Problemas dos testes de unidade
  • 17. Framework Praxis em JavaFiquem à vontade para questionar qualquer assunto ou perguntar suas dúvidas. Ao final teremos alguns exemplos práticos e tempo para perguntas também.
  • 18. Não sou Desenvolvedor Sou um testador que aprendeu um pouco dos dois caminhos
  • 19. Conceito: Teste de Unidade Teste realizado com os componentes individuais de um software. [Subsequente ao IEEE 610] – Glóssário de termos do ISTQB Testes de unidade é um método pelo qual as unidades individuais do código-fonte são testados para determinar se eles estão aptos para o uso. A unidade é a menor parte testável de um aplicativo. Na programação procedural uma unidade pode ser uma função individual ou procedimento. Na programação orientada a objeto uma unidade é normalmente um método. Os testes unitários são criados por programadores ou ocasionalmente por testadores de caixa branca durante o processo de desenvolvimento. – Tradução Literal da Wikipedia Inglesa
  • 20. O Modelo V Tradicional Planeja > Teste de Aceite Requisitos Teste de Sistema Planeja > Análise Teste de Integração Planeja > Desenho Planeja > Código Teste de Unidade
  • 21. Problema de escrever testes depois Você escreverá testes para passarem. Testes não podem ser feitos para “passar”, devem ser feitos para avaliar o código de produção. Testes feitos para ter testes não tem valor.
  • 22. TDD vem pra resolver esse problema
  • 23. O modelo V aplicado ao TDD Planeja > Teste de Aceite Requisitos Teste de Sistema Planeja > Análise Teste de Integração Planeja > Desenho Gera > Código Teste de Unidade
  • 24. Framework de Teste de Unidade Código de produção Requisitos Gera É testado por Classe de Teste Acessa Acessa Implementa Dados(DB, XML, Excel) Framework
  • 25. Considerações sobre Teste de Unidade Teste de unidade valida uma unidade; Teste de unidade deve ser executável independente dos dados; O teste de unidade deve conter tudo o que o teste necessita; Teste de unidade não é teste de integração (Cuidado) Teste de unidade feito por fazer não tem valor; Teste de unidade sempre será usado como teste de regressão
  • 26. Outras Considerações Teste de Unidade Nunca use lógica em testes de unidade. Testes de unidade devem ser configurados (Não queremos mais bugs :p ) Não altere ou exclua testes para ter um novo. Sempre adicione o novo. O teste só deve mudar quando a funcionalidade mudar; Quando todos os testes passarem, mude algum if, mude atribuições e retornos de lugar no seu código de produção para ver se os testes são efetivos; Code Review e Test Code Review tem a mesma importância; Teste de unidade deve testar o Contrato, não teste nada além do contrato; Testes de unidade devem ser isolados; Reuse o código de teste;
  • 27. Como o TDD Funciona?
  • 28. O que tem de teste de software? Uso de técnicas de teste como valores limites, partição de equivalência ou qualquer outra técnica usada para testes de sistema; Casos de teste (em forma de código); São requeridas as mesmas skills dos testes funcionais (criatividade, curiosidade, senso crítico, etc.) . . .
  • 29. O que tem de desenvolvimento? Orientação por Objetos; Acesso a bancos de dados e qualquer outro repositório usado em programação; Padrões de projeto como commanded, value object, imposter, factory method e composite ou qualquer outro usado em programação; Acesso irrestrito a todos os recursos da linguagem e IDE usada; . . .
  • 30. Como o TDD Funciona? Adicionar um teste: Incluir um teste, que pode por exemplo, ter o formato de um caso de teste. Executar o teste: Devemos ter certeza que o teste falha antes da implementação. Se necessário, desenvolva apenas o contrato ou mockspara isso; Desenvolva: Agora complete seu contrato com o código funcional, como sempre fez. Execute o teste: Agora o teste deve passar. Caso existam defeitos, o teste de unidade vai demonstrar erros; Correção e reteste: Agora mude o código fonte de produção até que o teste de unidade tenha um resultado positivo; *Se algo nos requisitos mudar, os testes mudam. http://www.agiledata.org/essays/tdd.html
  • 31. Tem pra Java? http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks
  • 32. Tem pra .Net? http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks
  • 33. Tem pra outras linguagens? 2.41 Perl 2.42 PHP 2.43 PL/SQL 2.44 PostgreSQL 2.45 PowerBuilder 2.46 Progress 4GL 2.47 Prolog 2.48 Python 2.49 R programming language 2.50 REALbasic 2.51 Rebol 2.52 RPG 2.53 Ruby 2.54 SAS 2.55 Scala 2.56 Scheme 2.57 Shell 2.58 Simulink 2.59 Smalltalk 2.60 SQL 2.61 TargetLink 2.62 Tcl 2.63 TinyOS/nesC 2.64 Transact-SQL 2.65 Visual FoxPro 2.66 Visual Basic (VB6) 2.67 Visual Lisp 2.68 XML 2.69 XSLT 2.70 Other Pyunit http://pyunit.sourceforge.net/pyunit.html PHPUnithttp://phpunit.sourceforge.net/ CppTest http://cpptest.sourceforge.net/ Test::Unit http://test-unit.rubyforge.org/ http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks
  • 34. Classe de teste = Caso de Teste
  • 35. Pré-Condição Podem ser usados MOCKs, Stubs, fakes, procedures (Querys), importações, ou qualquer outro recurso computacional para preparar o ambiente para o teste. A pré-condição também pode ser a execução de outro teste (ou outros). O Visual Studio usa o atributteTestInitialize em um método para executar algo que prepara o ambiente. Aqui é onde configuramos o teste
  • 36. Passos ou Procedimentos de Teste São feitas as atribuições e executadas as funcionalidades. Aqui também são feitas conferências parciais se necessárias. Para finalizar é realizado ultimo procedimento que deve realizar a funcionalidade a ser testada. Aqui é onde configuramos o que será testado
  • 37. Resultados Esperados / Pós condições Aqui são realizadas a comparação (ou comparações se necessária mais de uma) entre o resultado esperado e o resultado atual. Normalmente o framework disponibiliza recursos para execução e registro automático do teste. Aqui é onde verificamos se o resultado esperado e atual são iguais
  • 39. Hello World em MS UnitTest Framework Testa
  • 40. Mitos sobre TDD Só TDD realiza todos os testes que meu projeto precisa; TDD deve ser realizado pelo Analista de Testes; TDD é uma prática exclusiva de métodos ágeis; Testes de Unidade e Testes Funcionais Automatizados são a mesma coisa; TDD faz o projeto ficar mais caro, porque meu programador desenvolve duas vezes; TDD não é escalável (não evolui com o projeto); TDD deve ser usado para 100% do meu código fonte*; TDD = Bala de prata. Se feitos corretamente, pegam todos os bugs;
  • 41. Quero saber mais!!! http://gustavoquezada.blogspot.com/2010/01/vsts-visual-studio-team-system-para.html (Exemplo prático) http://www.bugbang.com.br/?p=1661(Vídeo) http://www.bugbang.com.br/?p=839(Exemplo prático) http://www.agiledata.org/essays/tdd.html http://www.extremeprogramming.org/rules/unittests.html http://msdn.microsoft.com/en-us/library/aa292197(v=vs.71).aspx http://viniciusquaiato.com/blog/tag/unit-testing/ http://social.msdn.microsoft.com/Forums/pt-BR/vsunittest/threads (Fórum) http://diveintopython.org/unit_testing/index.html http://artofunittesting.com/ (Vídeo)
  • 44. Referências Modelo V descrevendo o paralelismo entre as atividades de desenvolvimento e teste de software (CRAIG e JASKIEL, 2002) http://www.agiledata.org/essays/tdd.html#Misconceptions (em 16/05/2011) http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks(em 18/05/2011) http://artofunittesting.com/ (em 16/05/2011) http://gustavoquezada.blogspot.com/2010/01/vsts-visual-studio-team-system-para.html (Exemplo prático) (em 16/05/2011) http://www.bugbang.com.br/?p=1661 (Vídeo) (em 16/05/2011) http://www.bugbang.com.br/?p=839 (Exemplo prático) (em 16/05/2011) http://www.agiledata.org/essays/tdd.html(em 16/05/2011) http://www.extremeprogramming.org/rules/unittests.html(em 16/05/2011) http://msdn.microsoft.com/en-us/library/aa292197(v=vs.71).aspx(em 16/05/2011) http://viniciusquaiato.com/blog/tag/unit-testing/(em 16/05/2011) http://social.msdn.microsoft.com/Forums/pt-BR/vsunittest/threads (Fórum) (em 16/05/2011) http://diveintopython.org/unit_testing/index.html (em 16/05/2011) http://artofunittesting.com/ (Vídeo) (em 16/05/2011)