TDD – Test-Driven Development ou Desenvolvimento Guiado por Testes

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:

  1. 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;
  2. Executar todos os testes – deve-se checar os erros, para resolvê-los. O desenvolvimento ocorre sobre as falhas;
  3. 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;
  4. Reexecutar os testes – fazer uma nova execução dos testes para checar se os requisitos e especificações foram alcançados;
  5. 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.


LINKS ADICIONAIS

Algumas considerações sobre TDD e BDD: http://logbr.reflectivesurface.com/2008/10/27/algumas-consideracoes-sobre-tdd-e-bdd/

Desenvolvimento Orientado a Testes: http://improveit.com.br/xp/praticas/tdd

TDD para iniciantes – Para quem quer começar e não sabe como (vídeo): http://www.heroisdati.com/tdd-para-iniciantes-para-quem-quer-comecar-e-nao-sabe-como/

Tudo sobre TDD: http://dojofloripa.wordpress.com/2007/09/10/tudo-sobre-tdd/

Sobre Marcelo Cajueiro
Desenvolvedor Rails, apaixonado por TI!

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.