TDD – Test-Driven Development ou Desenvolvimento Guiado por Testes
12/10/2010 Deixe um comentário
Fui incumbido de fazer um pequeno trabalho sobre TDD, em Engenharia de Software. Incrível, quando quero apresentar algo que gosto, o tempo disponibilizado é curto.
Segue a pequena referência escrita que serão entregues aos colegas.
Quem trabalha com desenvolvimento de software sabe que as vezes se passa muito mais tempo consertando erros do que propriamente desenvolvendo. Isto pode mudar ao usar TDD.
O que é?
TDD é uma técnica de desenvolvimento de software onde antes de começar o desenvolvimento é escrito pequenos testes de frações de uma funcionalidade, que serão os roteiros a seguir na sua criação.
O TDD segue um ciclo passos básicos:
- Escrever testes – o desenvolvedor escreve primeiro o teste, visando uma nova funcionalidade. Para tal, ele deve entender as especificações e requisitos. O foco acaba sendo as coisas mais importantes do projeto, o que num desenvolvimento sem metodologia, acaba sendo desvirtuado;
- Executar todos os testes – deve-se checar os erros, para resolvê-los. O desenvolvimento ocorre sobre as falhas;
- Escrever código – numa nova funcionalidade, obviamente os testes irão dar erros por não ter nada escrito ainda. É a partir daí que começa o desenvolvimento de código, onde o objetivo consertar, mesmo que não seja de uma forma elegante. Nesse passo a qualidade do código não é levada em conta, o importante é funcionar;
- Reexecutar os testes – fazer uma nova execução dos testes para checar se os requisitos e especificações foram alcançados;
- Refatoração - código é analisado e reescrito para uma melhor performance e organização, evitando redundâncias com DRY (Don’t Repeat Yourself, Não se repita).
O ciclo recomeça a cada nova funcionalidade e alteração.
Benefícios:
- Maior entendimento das regras de negócio. Para escrever os testes, tem de saber como tudo irá realmente funcionar;
- Com testes unitários escritos depois do software pronto, ele acaba sendo feito para passar. Ao fazê-lo primeiro, o teste é menos “suspeito”;
- Menor quantidade de manutenção após ser colocado em produção;
- Se comparado ao tempo perdido em manutenção e correção de bugs, torna o desenvolvimento, como um todo, mais rápido;
- Maior facilidade para ser feito documentação;
- Segurança ao fazer modificações;
- Maior valor agregado ao produto.
Geralmente para gerar os teste, são usados bibliotecas específicas de cada linguagem.
Exemplo usando TDD no java com o junit, framework de teste:
// TesteMatematico.java
import junit.framework.*;
public class TesteMatematico extends TestCase {
public void testaSoma() {
int numero1 = 3;
int numero2 = 2;
int resultado_certo = 5;
int resultado_testado = 0;
resultado_testado = Matematica.soma(numero1, numero2);
assertEquals(resultado_testado, resultado_certo);
}
}
// Matematica.java
public class Matematica {
static public int soma(int a, int b) {
return a + b;
}
}
Há ainda uma “variação” do TDD, chamado BDD (Behavior Driven Development ou Desenvolvimento Guiado por Comportamento). Segue a mesma linha do TDD, porém, são usados histórias em linguagem humana para gerar os testes, que podem se tornar documentação para o software. O foco são as regras de negócios bem especificadas.
Exemplos de histórias (BDD) usando Cucumber para a linguagem Ruby:
Em inglês:
Feature: Simple math In order to avoid silly mistakes As a math idiot I want to be told the result of simple math operations Scenario: adition Given I have entered 50 into the calculator And I have entered 70 into the calculator When I press add Then I should see 120 on the screen Scenario: subtraction Given I have entered 60 into the calculator And I have entered 30 into the calculator When I press sub Then I should see 30 on the screen
Português:
Funcionalidade: Matemática Simples Para evitar erros idiotas Como um completo ignorante em matemática Eu quero que operações simples de matemática sejam resolvidas para mim Cenário: adição Dado que eu digite 50 na calculadora E que eu digite 70 na calculadora Quando eu pressionar "Adicione" Então eu devo ver 120 na tela Cenário: subtração Dado que eu digite 60 na calculadora E que eu digite 30 na calculadora Quando eu pressionar "Subtraia" Então eu devo ver 30 na tela
Após escrever as histórias, será usado um arquivo de “configuração” onde as expressões principais são “traduzidas” para linguagem de programação, e assim, testar a implementação.
REFERÊNCIAS
BDD. Wikipedia. Disponível em:. <http://pt.wikipedia.org/wiki/Behavior_Driven_Development>. Acesso em: 12 de outubro de 2010.
TDD. Wikipedia. Disponível em:. <http://pt.wikipedia.org/wiki/Test_Driven_Development>. Acesso em: 12 de outubro de 2010.
TEST-DRIVE DEVELOPMENT (TDD). Alencar, Roberto. Disponível em:.< http://www.devmedia.com.br/articles/post-10025-Test-Driven-Development–TDD.html>. Acesso em: 12 de outubro de 2010.
TUDO SOBRE TDD. Dojo Floripa. Disponível em:. <http://dojofloripa.wordpress.com/2007/09/10/tudo-sobre-tdd/>. Acesso em: 12 de outubro de 2010.