Ruby
No livro Test-Driven Development By Example, Kent Beck mostra em um pequeno apêndice como criar a função que calcula o número de Fibonnaci de forma recursiva através do Test-Driven Development(TDD, desenvolvimento direcionado por testes). Baseando-me neste exemplo, criei uma versão para Ruby.

Primeiro, gostariamos que fib(0) = 0. Para isso começamos a escrever o nosso teste:

Rodando o teste temos, como esperado, um erro já que não criamos a classe Fibonacci. Devemos fazer agora o mínimo para que os testes passem. Isso inclui em adicionar a classe Fibonnaci e criar uma implementação do método self.fib.

Rodando o teste descobrimos que está tudo bem. Podemos agora testar se fib(1) = 1, vamos modificar o teste anterior para incluir esta condição.:

Que obviamente não passará. Podemos mudar o self.fib para a seguinte versão:

Os testes estão novamente passando, mas existe uma repetição entre eles, algo ruim de se fazer (use a metodologia DRY - Don’t Repeat Yourself). Vamos então refatorar o método test_fib:

Temos agora os casos de teste compostos de pares (n,fib(n)). Podemos agora adicionar o par (2,1) e rodar os testes para ver que o método continua funcionando. Vamos então adicionar mais um teste, o par (3,2), portanto temos cases = [[0,0],[1,1],[2,1],[3,2]]. O teste não passa, podemos modificar o código rapidamente para resolver este problema.

Temos agora os testes passando e podemos generalizar para obter o resultado esperado. Ao invés de retornar 2, podemos retornar fib(n-1) + fib(n-2) (o passo completo seria 2 = 1 + 1 = fib(n-1) + 1 = fib(n-1) + fib(n-2) ). Abaixo está o código final:

Posts Relacionados:

  • Rails Vs Java e PHP
  • FISL 9.0: Entrando nos trilhos - Introdução a Ruby on Rails
  • FISL 9.0: Coding Dojo
  • Autores
  • Dia C - Usando testes para o desenvolvimento
  • Falando em Java: Interfaces ricas na Web com Ajax
  • Guia Linux - Parte III: Programação
  • Assine nosso RSS feed!