terça-feira, 5 de fevereiro de 2013

TDD - Test Driven Development para Testadores


Olá pessoal!
No dia 02/02/2013 eu tive o prazer de falar sobre TDD - Teste Driven Development no Campus Party Brasil 2013.

Nesta palestra abordei um conteúdo mais prático, que pode ser visto nos slides e também um exemplo guiado que está disponível no GitHub:
https://github.com/eliasnogueira/tdd-exemplo

Mais abaixo vou escrever os pontos mais importantes da apresentação.
Fica a dica para você:
  1. Ler o post
  2. Ver a apresentação
  3. Ver o projeto no GitHub
  4. Tentar executar o projeto do GitHub em casa.

Mas porque o Elias, um tester, deu palestra sobre TDD (que é de dev)?
Cada vez mais, na minha visão, o testador se faz um profissional cada vez mas técnico e polivalente (palavra bonita), mas que em poucas palavras quer dizer que o tester não precisa programar todo o dia usando TDD, mas precisa saber o que é como como utilizar essa técnica.



TDD - Test Driven Development from Elias Nogueira







 Se software fossem carros... como poderíamos garantir que tudo funciona? Se pensarmos um pouco no processo de criação de um carro temos uma infinidade de peças que devem, além de ser criadas por si só, devem funcionar com outras peças, resultado ao final um carro totalmente utilizável.

Pense que você precisa "testar um carro"... e guarde esse pensamento com você por enquanto.





 Mas quem testa? O desenvolvedor? Pelo que conhecemos de Teste de Software não!

No modelo que conhecemos o testador que executa esta atividade certo? Ele deve garantir que o sistema funciona depois que um ou mais funcionalidades foram desenvolvidas.





No modelo tradicional de desenvolvimento de software (cascata, e sim, eu apresentei um modelo cascata ao invés do RUP porque grande parte ainda desenvolve assim) temos as conhecidas fases do desenvolvimento, mas teste é a penúltima fase. Logo testar torna-se um processo que, além de oneroso, é muito caro!

Logo como garantir uma melhor entrega para testes com uma maior qualidade?






Uma técnica conhecida (deveria ser bem mais conhecida) e muito negligenciada por diversos fatores é o TDD - Test Driven Development, ou Desenvolvimento Orientado a Teste.

Com ele o próprio desenvolvedor (e seria muito legal se adicionássemos: "com a ajuda do testador") cria testes de um jeito diferente de programar e garantir que o que ele está desenvolvendo terá uma melhor qualidade.





Agora é interessante dar uma olhada na sequencia de slides que explica como desenvolver um código para converter os símbolos do número romano em símbolos.

Depois vale muito a pena olhar o projeto no GitHub e tentar segui-lo em sua máquina local: https://github.com/eliasnogueira/tdd-exemplo





O processo de desenvolvimento de uma funcionalidade ou aplicativo utilizando TDD é bem simples: primeiro criamos um teste que não passa, depois testamos refatorá-lo para que ele passe sempre, obviamente, penando na melhor e mais simples implementação naquele momento.

Se você notar todos os passos do projeto descrito no GitHub são guiados através de TDD.





E, obviamente, existem muitos benefícios em adotar esta técnica, onde um dos maiores benefícios são a simplicidade, feedback rápido e segurança.

Conseguimos ter uma bateria de testes de unidade criados sem grande esforço e já cobrindo boa parte da funcionalidade.

Assim o novo código criado já nasce testado!






Utilizando TDD conseguimos facilmente mostrar o ganho em tempo, onde desde o inicio o código sai testado e pronto para ser alterado (refatorado) ou usado por outro método/classe.

Se compararmos com o modelo tradicional, teríamos apenas testes no final do desenvolvimento de todo o código.





E, apenas para alinhar, TDD não é teste! TDD é uma técnica de design de código que ajuda, e muito o testa da aplicação/funcionalidade.

Embora o termo "teste" seja utilizado ao usar TDD estamos dando muito mais atenção ao design da classe/funcionalidade do que realmente teste.



A palestra possui vários insights e o exemplo dos números romanos retirados do livro "TDD - Teste Driven Development: Teste e Design no Mundo Real" do autor Maurício Aniche, editora Casa do Código
http://www.casadocodigo.com.br/products/livro-tdd 

Abraços!





7 comentários:

  1. Excelente post Elias.

    Acho excelente esse tipo de post prático.
    Aprendo muito mais quando consigo ver na prática o que li no post.

    Parabéns!

    ResponderExcluir
  2. Muito bom esse post Elias! Vai ajudar muitos desenvolvedores a entender a cultura TDD.

    ResponderExcluir
  3. Parabéns pelo post e pela palestra na CPBR.
    Abração cara!

    ResponderExcluir
  4. Obrigado por ter feito esse post Elias.
    Vou compartilhá-lo no meu twitter @KellvynAtary
    Se você tiver, me segue, quero seguir o seu.

    Abraço.

    ResponderExcluir
  5. Obrigado por ter feito esse post Elias.
    Vou compartilhá-lo no meu twitter @KellvynAtary
    Se você tiver, me segue, quero seguir o seu.

    Abraço.

    ResponderExcluir
  6. Você poderia dizer uma base de quantas empresas e quais utilizam esta pratica hoje no brasil?

    E o que fazer com os projetos ja existentes construidos fora da pratica?

    Como reeducar a equipe ?

    Valew

    ResponderExcluir
  7. Muito bom.

    Você tem uma base de quantas empresas utilizam esta pratica hoje no brasil? quais?

    O que fazer com os projetos já existentes fora desta pratica?

    Como você recomenda a reeducação dos programadores ?

    ResponderExcluir