Test-Driven Development
TDD
Sumário
 Manifesto Ágil
 O que é?
 Ciclo do TDD
 Vantagens
 Aplicabilidade
 APIs e Sistemas
 Bugfixes
 Sistemas Legados
 Ferramentas para Testes
 Caso de Uso com TDD
 Bibliografia Recomendada
Manifesto Ágil
 Indivíduos e interações > Processos e ferramentas
 Software em funcionamento > Documentação abrangente
 Colaboração com o cliente > Negociação de contratos
 Resposta a mudanças > Seguir um plano
O que é?
 “Escrever os testes para o código antes de escrever o
código em si”
 É comum no desenvolvimento ágil
 Pode ser usada em qualquer tipo de desenvolvimento, até
em pesquisas
 Desenvolvimento como um processo de Aprendizado
O que é?
 Princípios do TDD – F.I.R.S.T. Principles:
 Fast – Testes devem ser executados em < 1 segundo
 Isolated – Falhas são claramente isoladas
 Repeatable – Comportamento constante
 Self-verifying – Passa ou Falha
 Timely – 1 mudança de código = 1 teste
Ciclo do TDD
Vantagens
 Antecipa o comportamento do código
 Reduz os custos de desenvolvimento e de
manutenção
 Educa o programador a pensar e criar códigos
“limpos”
 Componentes livremente acoplados
 Desestimula recursos desnecessários
Vantagens
 Desenvolvimento como um processo de
aprendizado
 Aperfeiçoamento do código: Refatoração
 Foco na aceitação, integração e unidade
 Blindagem do código
 Combate a Síndrome Nostradamus
Aplicabilidade
 Se livrando de Bugs:
 Relatório de Bug
 Teste que reproduz o Bug: Fail
 Correção do Bug
 Execução do teste: Pass
9
Aplicabilidade
 Sistemas Legados
 Funcionalidade Duvidosa: ???
 Escreva um teste para ver se você entendeu: Fail
 Adapte o teste (iterativamente)
 Execução do teste: Pass
 Cuidado, Vá devagar
 Esteja preparado para desfazer as mudanças
10
Aplicabilidade
 Testes servem como documentação
 Auxilia no design
 Se adapta a qualquer metodologia de
desenvolvimento de software
11
Ferramentas para Testes
 JUnit – Java
 NUnit, MsTest – .NET
 PyUnit – Python
 Perl – Test::More
 PHPUnit – PHP
 Test::Unit – Ruby
 Test.More – Javascript
12
Caso de Uso com TDD
 Como usuário eu gostaria de me cadastrar
fornecendo: nome, email, senha, confirmação
 Condição:
 O usuário deve possuir uma senha válida
 Ação:
 Verificar se a confirmação da senha é válida, senão
enviar mensagem de erro adequada
13
Caso de Uso com TDD
14
Criando o Teste Falho
Caso de Uso com TDD
15
Implementado
Caso de Uso com TDD
16
Teste Passa
Caso de Uso com TDD
17
Adicionando novas Falhas
Caso de Uso com TDD
18
Implementação
Caso de Uso com TDD
19
Teste Passa
Caso de Uso com TDD
20
Caso de uso ainda incompleto
Caso de Uso com TDD
21
Nova implementação
Caso de Uso com TDD
22
Teste Passa
Caso de Uso com TDD
23
Nova Falha – Refatoração
Caso de Uso com TDD
24
Implementação
Caso de Uso com TDD
25
Teste Passa: Fim de Caso de Uso
Bibliografia Recomendada
 TDD – Desenvolvimento Guiado por Testes. Kent Beck
 Desenvolvimento de Software Orientado a Objetos,
Guiado por Testes. Steve Freeman, Nat Pryce.
 Professional Test Driven Development with C#. James
Bender, Jeff McWherter
 Código Limpo (Clean Code): Habilidades Práticas do
Agile Software. Robert C Martin
Obrigado!!!
Créditos:
http://www.slideshare.net/Pigor/palestra-tddcompleta-5460534
http://www.slideshare.net/Skud/test-driven-development-tutorial
Contato:
franciscobernardo@great.ufc.br
www.great.ufc.br

Test-Driven Develpment - TDD

  • 1.
  • 2.
    Sumário  Manifesto Ágil O que é?  Ciclo do TDD  Vantagens  Aplicabilidade  APIs e Sistemas  Bugfixes  Sistemas Legados  Ferramentas para Testes  Caso de Uso com TDD  Bibliografia Recomendada
  • 3.
    Manifesto Ágil  Indivíduose interações > Processos e ferramentas  Software em funcionamento > Documentação abrangente  Colaboração com o cliente > Negociação de contratos  Resposta a mudanças > Seguir um plano
  • 4.
    O que é? “Escrever os testes para o código antes de escrever o código em si”  É comum no desenvolvimento ágil  Pode ser usada em qualquer tipo de desenvolvimento, até em pesquisas  Desenvolvimento como um processo de Aprendizado
  • 5.
    O que é? Princípios do TDD – F.I.R.S.T. Principles:  Fast – Testes devem ser executados em < 1 segundo  Isolated – Falhas são claramente isoladas  Repeatable – Comportamento constante  Self-verifying – Passa ou Falha  Timely – 1 mudança de código = 1 teste
  • 6.
  • 7.
    Vantagens  Antecipa ocomportamento do código  Reduz os custos de desenvolvimento e de manutenção  Educa o programador a pensar e criar códigos “limpos”  Componentes livremente acoplados  Desestimula recursos desnecessários
  • 8.
    Vantagens  Desenvolvimento comoum processo de aprendizado  Aperfeiçoamento do código: Refatoração  Foco na aceitação, integração e unidade  Blindagem do código  Combate a Síndrome Nostradamus
  • 9.
    Aplicabilidade  Se livrandode Bugs:  Relatório de Bug  Teste que reproduz o Bug: Fail  Correção do Bug  Execução do teste: Pass 9
  • 10.
    Aplicabilidade  Sistemas Legados Funcionalidade Duvidosa: ???  Escreva um teste para ver se você entendeu: Fail  Adapte o teste (iterativamente)  Execução do teste: Pass  Cuidado, Vá devagar  Esteja preparado para desfazer as mudanças 10
  • 11.
    Aplicabilidade  Testes servemcomo documentação  Auxilia no design  Se adapta a qualquer metodologia de desenvolvimento de software 11
  • 12.
    Ferramentas para Testes JUnit – Java  NUnit, MsTest – .NET  PyUnit – Python  Perl – Test::More  PHPUnit – PHP  Test::Unit – Ruby  Test.More – Javascript 12
  • 13.
    Caso de Usocom TDD  Como usuário eu gostaria de me cadastrar fornecendo: nome, email, senha, confirmação  Condição:  O usuário deve possuir uma senha válida  Ação:  Verificar se a confirmação da senha é válida, senão enviar mensagem de erro adequada 13
  • 14.
    Caso de Usocom TDD 14 Criando o Teste Falho
  • 15.
    Caso de Usocom TDD 15 Implementado
  • 16.
    Caso de Usocom TDD 16 Teste Passa
  • 17.
    Caso de Usocom TDD 17 Adicionando novas Falhas
  • 18.
    Caso de Usocom TDD 18 Implementação
  • 19.
    Caso de Usocom TDD 19 Teste Passa
  • 20.
    Caso de Usocom TDD 20 Caso de uso ainda incompleto
  • 21.
    Caso de Usocom TDD 21 Nova implementação
  • 22.
    Caso de Usocom TDD 22 Teste Passa
  • 23.
    Caso de Usocom TDD 23 Nova Falha – Refatoração
  • 24.
    Caso de Usocom TDD 24 Implementação
  • 25.
    Caso de Usocom TDD 25 Teste Passa: Fim de Caso de Uso
  • 26.
    Bibliografia Recomendada  TDD– Desenvolvimento Guiado por Testes. Kent Beck  Desenvolvimento de Software Orientado a Objetos, Guiado por Testes. Steve Freeman, Nat Pryce.  Professional Test Driven Development with C#. James Bender, Jeff McWherter  Código Limpo (Clean Code): Habilidades Práticas do Agile Software. Robert C Martin
  • 27.