SlideShare a Scribd company logo
1 of 57
Pensando 
TDD 
08/10/2014
Direitos Autorais 
Você está autorizado e incentivado a distribuir este material. 
Copie, compartilhe e modifique, apenas cite a fonte.
Autoria 
Luiz Ricardo 
luizricardo.org 
facebook.com/StateOfTheArtBlog
Código-fonte 
O código dos exemplos práticos pode ser obtido no link: 
https://github.com/utluiz/tdd-example
Porque software?
$$$???
Software de Qualidade 
Faz o que deveria fazer 
SEM ERROS
Software de Qualidade 
Funciona
Dificuldades do Software 
Abstrato 
Sem representação visível 
Dificuldade em identificar requisitos
Dificuldades do Software 
Singular 
Cada um é diferente
Dificuldades do Software 
Mutável 
1 bit muda tudo
Dificuldades do Software 
Complexo 
Simplificação 
Perda de informação
Expectativa Realidade
Como fazer software 
de qualidade?
Teste Teste 
Teste 
Teste 
Teste
TDD 
Test-Driven Development 
Metodologia ágil de 
desenvolvimento de software 
cujo objetivo é gerar 
código limpo que funciona
Fases do Desenvolvimento 
Tradicional 
Projeto 
Implementação 
Teste
Mudanças acontecem...
Correção de Bugs 
Custo por fase 
Design Implementação Teste Manutenção
Fases do Desenvolvimento 
TDD 
Projeto/Teste 
Implementação
Definição de “Pronto” 
Quando terminamos uma nova 
funcionalidade?
Definição de “Pronto” 
Código
Definição de “Pronto” 
Código limpo
Definição de “Pronto” 
Código limpo 
Testado
Definição de “Pronto” 
Código limpo 
Teste automatizado
Definição de “Pronto” 
Código limpo 
Teste automatizado 
Deploy automatizado
Definição de “Pronto” 
Código limpo 
Teste automatizado 
Deploy automatizado 
Documentado
Ciclo de Vida do TDD 
Vermelho 
Refatore Verde
Ciclo de Vida do TDD 
O “Mantra” 
Vermelho, verde, refatore 
Vermelho, verde, refatore 
Vermelho, verde, refatore 
Vermelho, verde, refatore 
...
Ciclo de Vida do TDD 
Vermelho 
1. Escreva um 
teste que falhe 
Refatore Verde
Ciclo de Vida do TDD 
Vermelho 
1. Escreva um 
teste que falhe 
Refatore Verde 
2. Faça 
funcionar
Ciclo de Vida do TDD 
Vermelho 
1. Escreva um 
teste que falhe 
Refatore Verde 
2. Faça 
funcionar 
3. Faça direito
Ciclo de Vida do TDD 
Por que separar? 
Faça direito Faça funcionar 
Refatore Verde
Ciclo de Vida do TDD
Valores do TDD 
• Foco na qualidade 
• Código “documentado” 
• Sem medo de mudanças
Só mais uma coisa...
Dificuldades do TDD 
• Qualidade tem custo 
• Indefinição 
• Design ruim
Desenvolvimento de Software 
Metáforas
Desenvolvimento de Software 
Amador ou Artesão?
Princípios de Design OO 
S.O.L.I.D. 
Single Responsibility Principle 
Open/close principle 
Liskov substitution principle 
Interface segregation principle 
Dependency inversion principle
Testando... 1, 2, 3 
Testes unitários 
Testa uma porção individual do 
código, como uma função, 
método ou classe.
Testando... 1, 2, 3 
Asserções 
Verificações de 
pré e pós-condições do teste
Testando... 1, 2, 3 
Objetos Mock 
Objetos usados em testes que 
simulam o funcionamento de 
um objeto real
Testando... 1, 2, 3 
Tipos de teste 
Integração 
Carga 
Estresse 
Desempenho 
Resiliência 
Aceitação 
Cobertura 
Regressão
Ferramentas 
Plataforma Java 
• Teste unitário 
JUnit, TestNG 
• Teste de integração (web) 
Selenium/Web Driver, HtmlUnit, UFT/QTP 
• Mocks 
Mockito, JMock, PowerMock, EasyMock
Ferramentas 
• Teste de cobertura 
EclEmma 
Plataforma Java
Prática 
Demonstração 
• Testes unitários 
– Calculadora com JUnit 
• Teste web 
– Pesquisa no Google com WebDriver (Internet) 
– Navegação entre duas páginas
Conclusões 
Test-Driven Development 
• Não é uma solução mágica 
• TDD não é sobre TDD 
• TDD é um exercício diário 
• TDD é disciplina
Pratique!
Perguntas? 
Não tenha medo...

More Related Content

What's hot

ALM - Testes Exploratórios
ALM - Testes ExploratóriosALM - Testes Exploratórios
ALM - Testes ExploratóriosAlan Carlos
 
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
 
Minicurso - Teste de software (CACSI 2015)
Minicurso - Teste de software (CACSI 2015)Minicurso - Teste de software (CACSI 2015)
Minicurso - Teste de software (CACSI 2015)Vanilton Pinheiro
 
Testes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de TestesTestes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de TestesPaulo César M Jeveaux
 
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
 
Ctfl 2018 sample_b[v1.3br]
Ctfl 2018 sample_b[v1.3br]Ctfl 2018 sample_b[v1.3br]
Ctfl 2018 sample_b[v1.3br]rafael327780
 
TDD (Test-Driven Development)
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)Renato Groff
 
Automacao testes automatizados
Automacao testes automatizadosAutomacao testes automatizados
Automacao testes automatizadosCristiano Caetano
 
Testes em métodos ágeis
Testes em métodos ágeisTestes em métodos ágeis
Testes em métodos ágeisQualister
 
BaixadaTech 2012 - Qualidade de Software
BaixadaTech 2012 - Qualidade de SoftwareBaixadaTech 2012 - Qualidade de Software
BaixadaTech 2012 - Qualidade de SoftwareAdriano Bertucci
 
Uniinfo2010 introdução teste de software - priscila coelho blauth2
Uniinfo2010 introdução teste de software - priscila coelho blauth2Uniinfo2010 introdução teste de software - priscila coelho blauth2
Uniinfo2010 introdução teste de software - priscila coelho blauth2Priscila Coelho S. Blauth
 
Introdução ao Teste de Software - Uma abordagem prática
Introdução ao Teste de Software - Uma abordagem práticaIntrodução ao Teste de Software - Uma abordagem prática
Introdução ao Teste de Software - Uma abordagem práticaFabrício Campos
 
Automação de Testes de Aceitação em Sistemas Web
Automação de Testes de Aceitação em Sistemas WebAutomação de Testes de Aceitação em Sistemas Web
Automação de Testes de Aceitação em Sistemas WebRodrigo Veiga
 
Apresentação Artigo SBQS 2015 - Um Comparativo na Execução de Testes Manuais ...
Apresentação Artigo SBQS 2015 - Um Comparativo na Execução de Testes Manuais ...Apresentação Artigo SBQS 2015 - Um Comparativo na Execução de Testes Manuais ...
Apresentação Artigo SBQS 2015 - Um Comparativo na Execução de Testes Manuais ...Vanilton Pinheiro
 
Mini curso de testes ágeis
Mini curso de testes ágeisMini curso de testes ágeis
Mini curso de testes ágeisQualister
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27Hélio Medeiros
 
Testes de Software - Fundamentos
Testes de Software - FundamentosTestes de Software - Fundamentos
Testes de Software - FundamentosLucas Amaral
 

What's hot (20)

ALM - Testes Exploratórios
ALM - Testes ExploratóriosALM - Testes Exploratórios
ALM - Testes Exploratórios
 
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
 
Minicurso - Teste de software (CACSI 2015)
Minicurso - Teste de software (CACSI 2015)Minicurso - Teste de software (CACSI 2015)
Minicurso - Teste de software (CACSI 2015)
 
Testes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de TestesTestes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de Testes
 
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
 
Qualidade e Teste de Software
Qualidade e Teste de SoftwareQualidade e Teste de Software
Qualidade e Teste de Software
 
Fundamentos de Testes de Software - Qualidad
Fundamentos de Testes de Software - QualidadFundamentos de Testes de Software - Qualidad
Fundamentos de Testes de Software - Qualidad
 
Ctai Teste De Software Aula 1
Ctai Teste De Software Aula 1Ctai Teste De Software Aula 1
Ctai Teste De Software Aula 1
 
Ctfl 2018 sample_b[v1.3br]
Ctfl 2018 sample_b[v1.3br]Ctfl 2018 sample_b[v1.3br]
Ctfl 2018 sample_b[v1.3br]
 
TDD (Test-Driven Development)
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)
 
Automacao testes automatizados
Automacao testes automatizadosAutomacao testes automatizados
Automacao testes automatizados
 
Testes em métodos ágeis
Testes em métodos ágeisTestes em métodos ágeis
Testes em métodos ágeis
 
BaixadaTech 2012 - Qualidade de Software
BaixadaTech 2012 - Qualidade de SoftwareBaixadaTech 2012 - Qualidade de Software
BaixadaTech 2012 - Qualidade de Software
 
Uniinfo2010 introdução teste de software - priscila coelho blauth2
Uniinfo2010 introdução teste de software - priscila coelho blauth2Uniinfo2010 introdução teste de software - priscila coelho blauth2
Uniinfo2010 introdução teste de software - priscila coelho blauth2
 
Introdução ao Teste de Software - Uma abordagem prática
Introdução ao Teste de Software - Uma abordagem práticaIntrodução ao Teste de Software - Uma abordagem prática
Introdução ao Teste de Software - Uma abordagem prática
 
Automação de Testes de Aceitação em Sistemas Web
Automação de Testes de Aceitação em Sistemas WebAutomação de Testes de Aceitação em Sistemas Web
Automação de Testes de Aceitação em Sistemas Web
 
Apresentação Artigo SBQS 2015 - Um Comparativo na Execução de Testes Manuais ...
Apresentação Artigo SBQS 2015 - Um Comparativo na Execução de Testes Manuais ...Apresentação Artigo SBQS 2015 - Um Comparativo na Execução de Testes Manuais ...
Apresentação Artigo SBQS 2015 - Um Comparativo na Execução de Testes Manuais ...
 
Mini curso de testes ágeis
Mini curso de testes ágeisMini curso de testes ágeis
Mini curso de testes ágeis
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27
 
Testes de Software - Fundamentos
Testes de Software - FundamentosTestes de Software - Fundamentos
Testes de Software - Fundamentos
 

Viewers also liked

TDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software ÁgilTDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software ÁgilBruno Eustáquio
 
SITSP Developers 2016 - ABAP c/ TDD
SITSP Developers 2016 - ABAP c/ TDDSITSP Developers 2016 - ABAP c/ TDD
SITSP Developers 2016 - ABAP c/ TDDJose Nunes
 
Boa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java EnterpriseBoa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java EnterpriseOziel Moreira Neto
 
Viva jovem, venha conhecer!
Viva jovem, venha conhecer!Viva jovem, venha conhecer!
Viva jovem, venha conhecer!Rebeca Kaus
 
4 Tarefa Plano Aula Bullying Claudia Cunha O Ignacio
4 Tarefa Plano Aula Bullying Claudia Cunha O Ignacio4 Tarefa Plano Aula Bullying Claudia Cunha O Ignacio
4 Tarefa Plano Aula Bullying Claudia Cunha O IgnacioFAETEC - ETESC
 
O uso dos porquês
O uso dos porquêsO uso dos porquês
O uso dos porquêsRebeca Kaus
 
Agile Brazil 2013 - Resumo
Agile Brazil 2013 - ResumoAgile Brazil 2013 - Resumo
Agile Brazil 2013 - ResumoBruno Nardini
 
Semanal fechada 6 ano
Semanal fechada 6 anoSemanal fechada 6 ano
Semanal fechada 6 anoRebeca Kaus
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Tchelinux
 
Introdução aos Servlets e JSPs
Introdução aos Servlets e JSPsIntrodução aos Servlets e JSPs
Introdução aos Servlets e JSPsLuiz Ricardo Silva
 
Padrões de Projeto em Aplicações Web
Padrões de Projeto em Aplicações WebPadrões de Projeto em Aplicações Web
Padrões de Projeto em Aplicações WebJonata Weber
 
Repaso semanal aberta 2 6 ano
Repaso semanal aberta 2 6 anoRepaso semanal aberta 2 6 ano
Repaso semanal aberta 2 6 anoRebeca Kaus
 
Princípios de projeto e boas práticas de programação em Java - Márcio Torres
Princípios de projeto e boas práticas de programação em Java - Márcio TorresPrincípios de projeto e boas práticas de programação em Java - Márcio Torres
Princípios de projeto e boas práticas de programação em Java - Márcio TorresTchelinux
 
IBM Web Content Management - Melhores práticas
IBM Web Content Management - Melhores práticasIBM Web Content Management - Melhores práticas
IBM Web Content Management - Melhores práticasrodrigoareis
 
Programação estruturada com Java-Aula01
Programação estruturada com Java-Aula01Programação estruturada com Java-Aula01
Programação estruturada com Java-Aula01Elvis Araújo
 
Programação "Estruturada" com Java
Programação "Estruturada" com JavaProgramação "Estruturada" com Java
Programação "Estruturada" com JavaLuiz Ricardo Silva
 
No dumb questions (Stack Overflow em Português)
No dumb questions (Stack Overflow em Português)No dumb questions (Stack Overflow em Português)
No dumb questions (Stack Overflow em Português)Luiz Ricardo Silva
 

Viewers also liked (20)

TDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software ÁgilTDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software Ágil
 
SITSP Developers 2016 - ABAP c/ TDD
SITSP Developers 2016 - ABAP c/ TDDSITSP Developers 2016 - ABAP c/ TDD
SITSP Developers 2016 - ABAP c/ TDD
 
TDD para Java EE
TDD para Java EETDD para Java EE
TDD para Java EE
 
Boa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java EnterpriseBoa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java Enterprise
 
Viva jovem, venha conhecer!
Viva jovem, venha conhecer!Viva jovem, venha conhecer!
Viva jovem, venha conhecer!
 
4 Tarefa Plano Aula Bullying Claudia Cunha O Ignacio
4 Tarefa Plano Aula Bullying Claudia Cunha O Ignacio4 Tarefa Plano Aula Bullying Claudia Cunha O Ignacio
4 Tarefa Plano Aula Bullying Claudia Cunha O Ignacio
 
O uso dos porquês
O uso dos porquêsO uso dos porquês
O uso dos porquês
 
Agile Brazil 2013 - Resumo
Agile Brazil 2013 - ResumoAgile Brazil 2013 - Resumo
Agile Brazil 2013 - Resumo
 
Semanal fechada 6 ano
Semanal fechada 6 anoSemanal fechada 6 ano
Semanal fechada 6 ano
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
 
Introdução aos Servlets e JSPs
Introdução aos Servlets e JSPsIntrodução aos Servlets e JSPs
Introdução aos Servlets e JSPs
 
Padrões de Projeto em Aplicações Web
Padrões de Projeto em Aplicações WebPadrões de Projeto em Aplicações Web
Padrões de Projeto em Aplicações Web
 
Repaso semanal aberta 2 6 ano
Repaso semanal aberta 2 6 anoRepaso semanal aberta 2 6 ano
Repaso semanal aberta 2 6 ano
 
Certificações Java
Certificações JavaCertificações Java
Certificações Java
 
Roteiro 6 ano
Roteiro 6 anoRoteiro 6 ano
Roteiro 6 ano
 
Princípios de projeto e boas práticas de programação em Java - Márcio Torres
Princípios de projeto e boas práticas de programação em Java - Márcio TorresPrincípios de projeto e boas práticas de programação em Java - Márcio Torres
Princípios de projeto e boas práticas de programação em Java - Márcio Torres
 
IBM Web Content Management - Melhores práticas
IBM Web Content Management - Melhores práticasIBM Web Content Management - Melhores práticas
IBM Web Content Management - Melhores práticas
 
Programação estruturada com Java-Aula01
Programação estruturada com Java-Aula01Programação estruturada com Java-Aula01
Programação estruturada com Java-Aula01
 
Programação "Estruturada" com Java
Programação "Estruturada" com JavaProgramação "Estruturada" com Java
Programação "Estruturada" com Java
 
No dumb questions (Stack Overflow em Português)
No dumb questions (Stack Overflow em Português)No dumb questions (Stack Overflow em Português)
No dumb questions (Stack Overflow em Português)
 

Similar to TDD: Test-Driven Development e desenvolvimento de software de qualidade

Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaRogerio Fontes
 
Tente desenvolver diferente com TDD
Tente desenvolver diferente com TDDTente desenvolver diferente com TDD
Tente desenvolver diferente com TDDWebgoal
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do MantraDionatan default
 
TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação Icaro Camelo
 
Introdução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCastingIntrodução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCastingPedro Pereira Martins
 
BDD e TDD na prática com SpecFlow e Visual Studio 2012
BDD e TDD na prática com SpecFlow e Visual Studio 2012BDD e TDD na prática com SpecFlow e Visual Studio 2012
BDD e TDD na prática com SpecFlow e Visual Studio 2012Igor Abade
 
Altair Sossai - A Importância de Testes Unitários nas Aplicações
Altair Sossai - A Importância de Testes Unitários nas AplicaçõesAltair Sossai - A Importância de Testes Unitários nas Aplicações
Altair Sossai - A Importância de Testes Unitários nas Aplicaçõesmichel adriano medeiros
 
Testes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NETTestes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NETAlessandro Binhara
 
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 TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atechcesarcneto
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesCamilo Ribeiro
 

Similar to TDD: Test-Driven Development e desenvolvimento de software de qualidade (20)

Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis Uberlândia
 
Tente desenvolver diferente com TDD
Tente desenvolver diferente com TDDTente desenvolver diferente com TDD
Tente desenvolver diferente com TDD
 
Introdução a TDD
Introdução a TDDIntrodução a TDD
Introdução a TDD
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do Mantra
 
TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação
 
Criando uma Arquitetura Testável
Criando uma Arquitetura TestávelCriando uma Arquitetura Testável
Criando uma Arquitetura Testável
 
Introdução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCastingIntrodução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCasting
 
TDD
TDDTDD
TDD
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
BDD e TDD na prática com SpecFlow e Visual Studio 2012
BDD e TDD na prática com SpecFlow e Visual Studio 2012BDD e TDD na prática com SpecFlow e Visual Studio 2012
BDD e TDD na prática com SpecFlow e Visual Studio 2012
 
Teste automatizados e tdd
Teste automatizados e tddTeste automatizados e tdd
Teste automatizados e tdd
 
Altair Sossai - A Importância de Testes Unitários nas Aplicações
Altair Sossai - A Importância de Testes Unitários nas AplicaçõesAltair Sossai - A Importância de Testes Unitários nas Aplicações
Altair Sossai - A Importância de Testes Unitários nas Aplicações
 
Testes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NETTestes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NET
 
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 TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atech
 
RealDay: Introduction to TDD
RealDay: Introduction to TDDRealDay: Introduction to TDD
RealDay: Introduction to TDD
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
Instituto Stela S&T#001, Projeto de software com testes unitários
Instituto Stela S&T#001, Projeto de software com testes unitáriosInstituto Stela S&T#001, Projeto de software com testes unitários
Instituto Stela S&T#001, Projeto de software com testes unitários
 
clean code
clean codeclean code
clean code
 

TDD: Test-Driven Development e desenvolvimento de software de qualidade

Editor's Notes

  1. Por que você escolheu ser um desenvolvedor de software? Eu sei que muita gente louca, como eu, faz isso porque gosta.
  2. Mas precisamos pagar as contas. Esperamos ganhar dinheiro, certo?
  3. Embora alguns achem que não dá tanto retorno
  4. Como faturar mais com software?
  5. É preciso vender e agradar os clientes. Como fazer isso?
  6. Software de qualidade. Faz exatamente o que o cliente precisa. Apresentar o mínimo de erros.
  7. Ele precisa funcionar! O problema é que o software possui certas características o tornam inerentemente complexo.
  8. Abstrato: ele não pode ser representado de forma visível. É um verdadeiro desafio mapear os requisitos (o que um software deve fazer).
  9. Singular: cada software é diferente, se eu pedir para cada pessoa aqui criar uma calculadora, cada um fará algo diferente
  10. Mutável: mude 1 bit e não temos mais o mesmo programa.
  11. Complexo: Se você simplifica, ele perde suas características. Não dá pra ter tudo na cabeça. Podemos criar modelagens, mas sempre haverá um gap do modelo até o código concreto.
  12. Desenvolvedores acham que conseguem pensar em todo o software, são otimistas. Mas quando implementam surgem os problemas.
  13. Como fazer software com qualidade? Alguns dizem: "para o software funcionar, basta fazer direito." Alguém já fez um programa que funcionou 100% corretamente da primeira vez? Como você garante que ele realmente funciona? 
  14. Pensando no ciclo tradicional, nós deixamos o teste por último.
  15. Mas mudanças acontecem. Imprevistos. Pessoas e negócios mudam.
  16. A filosofia ágil: abrace as mudanças.
  17. Gráfico do custo da manutenção. Quanto antes o código estiver coreto melhor. Ao testar depois, achamos problemas muito tarde. O custo de correção aumenta com o tempo que o bug está no sistema.
  18. Para corrigir um bug no início do desenvolvimento, você simplesmente “pisa” nele.
  19. Bugs não corrigidos vão voltar para assombrar você.
  20. Como o TDD ajuda em tudo isso? Colocamos o teste primeiro. Durante o design de uma funcionalidade, já é definido o comportamento esperado através de testes. Assim o bug tende a ser encontrado logo de início.
  21. Convém uma discussão sobre definição de pronto. Quanto podemos dizer que terminados uma funcionalidade?
  22. Podemos dizer que terminamos algo quando terminados de codificar? Geralmente a primeira versão do código tem gambiarras.
  23. É preciso "limpar" o código (refatorar), removendo duplicidade, trechos desnecessários, simplificando e melhorando o desempenho. Mas isso não basta. O que acontece quando o usuário ou testador encontrar um problema? Atraso e custo.
  24. Testar é importante. Mas como você faz? Depurando todo o programa? Executando o programa manualmente e olhando o resultado? O que acontece quando algo precisa ser modificado e é necessário retestar tudo de novo?
  25. Podemos automatizar os testes. Mas não é suficiente se levarmos horas e dias para conseguir enviar uma nova versão para o cliente. Ainda há riscos de problemas de configuração em "produção". 
  26. Automação na entrega (deploy) permite que uma funcionalidade implementada e testada possa ser colocada em produção sem mais atrasos. Mas não adianta entregar para o cliente sem a documentação.
  27. Finalmente acrescentamos ainda a documentação. Lembrando que esta é apenas uma das definições de pronto. Cada projeto pode demandar algo diferente.
  28. Ciclo de vida do TDD. Vermelho, Verde e Refatore! Esse é o ciclo de cada funcionalidade.
  29. Os três passos são conhecidos como o "mantra" do TDD, que se repete até que o software esteja completa.
  30. Primeiro você cira um teste e executa. Isso garante que o teste funciona e mostra a luz vermelha.
  31. Em seguida, faça o código funcionar, do jeito mais direto, sem inventar. Não é código ruim, precisa ser código que funcione em "produção".
  32. Porque separar as duas coisas: fazer simples e refatorar.
  33. A primeira resposta: porque os programadores tendem a ignorar a segunda parte. Se já está funcionando, não mexa!
  34. Benefícios do TDD: - Foco na qualidade - Documentação do código através dos testes (o que é esperado para cada funcionalidade) - Acaba com o medo de mudanças
  35. Você vê um código feito e diz: não mexa, pode parar de funcionar. O TDD dá coragem ao desenvolvedor. Permite a melhoria do sistema sem medo de mudar o que está lá, permite que outras pessoas saibam o que o seu código deve fazer.  Testes de regressão automatizados podem ser repetidos quantas vezes e quando se desejar. Você não precisa mais refazer todo o teste manualmente.
  36. Poréns... É preciso investir mais tempo para os testes. Embora na teoria os testes se paguem ao final do projeto, muitos clientes não estão dispostos a pagar por qualidade. Indefinição: quando não se consegue saber exatamente quais os requisitos, onde se quer chegar. Como criar testes? É necessário ter experiência (prática) e dedicação para conseguir criar bom design do software, além de software testável. Os dois primeiros itens são fontes externas de problemas. O ponto que nós, como desenvolvedores precisamos atacar é a questão do projeto do software.
  37. Há duas principais metáforas para o que é o desenvolvimento de software.  Alguns pensam como Engenheiros de Software, estudando essa disciplina sistematicamente, construindo a "ponte" entre o problema e a solução (próprio software). Eles tentam entender como produzir software "em escala" Outros pensam como Artesãos de Software, já que cada software e cada desenvolvedor são únicos. 
  38. Ninguém nasce ou mesmo sai de uma faculdade sabendo. Algumas pessoas tem jeito, mas aprender a projetar bem exige experiência e disciplina, como os artistas clássicos. Para que o TDD funcione bem, o design ou a arquitetura do software conta muito. Ele vai ajudar na disciplina de sempre buscar a perfeição.
  39. Os princípios de design orientado a objetos SOLID são: Single Responsibility Principle: cada classe deve ter uma responsabilidade única. Ela só vai precisar ser modificada quando houver mudança nos requisitos relacionados a sua função. Open/close principle: as classes devem ser abertas para extensão e fechadas para modificação. Isso significa que novas funcionalidades devem ser adicionadas sem alterar as classes existentes. Isso geralmente é obtido através de herança e polimorfismo. Liskov substitution principle: objetos devem poder ser substituídos por subtipos sem quebrar o programa. Isso significa que que subclasses não podem quebrar o contrato da superclasse que estendem. Interface segregation principle: interfaces específicas são melhores do que uma interface genérica com vários métodos. Dependency inversion principle: uma classe não deve depender de outras classes concretas, mas de abstrações. Não entrarei em detalhes, porque seria outra apresentação. Isso é apenas uma informação para o ouvinte buscar e aprender por si mesmo.
  40. Se fosse possível resumir tudo isso em algo bem simples: temos que aprender a dividir as funcionalidades do software em componentes que sejam o mais independentes possível.
  41. Ao dividir o software em componentes, podemos testá-lo individualmente para garantir que cada unidade funcione como esperado. Isso evita muita dor de cabeça na hora de "juntar tudo". Os testes unitários devem evitar interferência (possíveis erros) e outras classes. 
  42. É comum iniciarmos testes somente executando código, sem realmente verificar a saída das rotinas. Porém, um teste automatizado somente possui valor real se ele puder por si mesmo determinar o sucesso ou falha.
  43. Quanto há dependência de algo, uma saída é usar os mocks, que são objetos que simulam o real. Assim, defini-se o comportamento esperado das dependências de forma que o teste é mais rápido e independente dos outros componentes estarem corretos ou não. Muitos argumentam que mocks são um quebra-galho e devem ser evitados. Um sinal de design ruim é justamente a necessidade de muitos mocks, pois significa que há um forte acoplamento entre os componentes.
  44. Tipos de teste: Integração: teste com que envolve vários componentes do sistema, para ver se a integração ocorre normalmente. Nível um pouco mais alto que o teste unitário. Carga: quantos usuários o sistema consegue atender bem (carga máxima). Estresse: até quanto o sistema consegue atender, mesmo que mal (sem travar). Desempenho: o tempo de resposta até uma certa quantidade de usuários. Resiliência: como o sistema se recupera de falhas ou utilização acima do limite (picos). Aceitação: o usuário ou interessado verifica se o software faz o que foi pedido. Cobertura: quais partes do código foram realmente testadas? Regressão: repetição dos testes já executados para garantir que não houve regressão (algo parou de funcionar). Aqui o TDD com testes automatizados realmente brilha.
  45. Ferramentas de automação de testes em Java: - http://junit.org/ - http://testng.org/doc/index.html - http://www.seleniumhq.org/ - http://htmlunit.sourceforge.net/  - http://www8.hp.com/us/en/software-solutions/unified-functional-testing-automation/ (fechado) - https://github.com/mockito/mockito  - http://jmock.org/ - https://code.google.com/p/powermock/ - http://easymock.org/  Com exceção do UFT (Unified Functional Testing) da HP, todos os demais são de código-aberto e gratuitos.
  46. Ferramentas de automação de testes em Java: - http://www.eclemma.org/
  47. Ferramentas de automação de testes em Java: - http://www.eclemma.org/
  48. TDD não é uma solução mágica. Você deve experimentar e chegar à conclusão do que funciona, quando funciona e onde funciona. TDD is not about TDD. Todo processo seguido pelo processo, cegamente, mais atrapalha do que ajuda.  É um exercício diário para você. Qualidade em software é algo que exige dedicação, experiência e disciplina.  TDD é sobre como criar software de qualidade, que faz o que precisa fazer, seja entregue no tempo, e não seja um pesadelo para o programador. Ele tenta dar uma direção a ser seguida. É preciso se aplicar e aperfeiçoar esses princípios que apenas começamos a ver. 
  49. Como fazer uma obra-prima ao invés de arte moderna? Como fazer um prédio que não cai?Pratique, só assim se alcança qualidade.