terça-feira, 1 de março de 2011

Introdução ao TDD na Prática

A ideia de mostrar uma introdução ao TDD na prática nasceu da dificuldade que encontrei de visualizar como funciona, quando eu estava começando a brincar com a técnica. Na verdade, é complicado ver como escrever um código que testa um método de uma classe sem antes escrever a classe. Mas com o tempo nos acostumamos e chega a virar um vício.
Alguns presentes já tinham ouvido falar sobre TDD, outros não. Assim, fiz uma pequena introdução teórica sobre a técnica.

TDD é comumente a sigla para Test Driven Development. Isto é, você só faz o "Development" quando escrever o "Test". Nas palavras do Ron Jeffries, no livro TDD by example do Kent Beck, com TDD é possível um "clean code, that works". No primeiro momento, estamos pensando no "that works", assim escrevemos o teste que comprova "que funciona".

Com o teste funcionando, fica mais seguro atingir a primeira parte da oração de Jeffries: "clean code". Com a facilidade de testar a funcionalidade com o apertar de um botão. Fica mais seguro refatorar. Refatorar é alterar o corpo de um método sem alterar o seu comportamento. Se temos um teste de unidade automatizado para aquela funcionalidade, ficamos mais confortáveis em alterar o corpo do método.

Com isso, fechamos o mantra do TDD: Red-Green-Refactor. Escrevemos um teste que falhe, escrevemos um pouco de código para fazer o teste passar e refatoramos.

Comentei que ouvi no QCon SP de 2010, que o TDD também é conhecido como Test Driven Design, pois sistemas com maior grau de testabilidade, possuem um baixo acoplamento, e sabemos que este é um dos mais importantes fatores da qualidade de sistemas OO. Com isso, falei um pouco sobre injeção de dependência pelo construtor e desenvolvimento orientado a interfaces, conceitos muito debatidos pelo Paulo Silveira nos eventos.

Com esta introdução teórica, desenvolvemos juntos uma aplicação para demonstrar como pode ser fácil escrever teste primeiro. O objetivo principal desse desenvolvimento foi mostrar o mantra passo-a-passo e demonstrar alguns atalhos úteis do Eclipse, como o CTRL+1, que agilizam (e facilitam) o desenvolvimento orientado a testes.

A aplicação foi a clássica calculadora e com ela demonstramos como utilizar os Asserts e como construir a suite de testes.

Referencias interessantes:
http://www.agiledata.org/essays/tdd.html
http://jamesshore.com/Blog/Lets-Play/

Nenhum comentário:

Postar um comentário