`
linguagem` `
topico` `
nome`TDD `
` `
titulo`TDD`
` `
descritor`apoie, apoie.org, PAM, mutirão, produzir, aprender, simplificar, inovar, pesquisar , TDD individual`
` `
lead`TDD desenvolvimento de programa dirigido por teste. O programa nasce com o teste da saida. 
` `
melhorar`Melhorar`
` `
referencia`Escola estúdio,
`
` `
origem`TddIndividual.xml`
` `
` `
topico` `
titulo`A solução do problema`
` `
desc`
Mostra a saida que se quer.

Solução: Mostrar o enésimo valor da serie de fibonnaci 0, 1, 1, 2, 3, 5, 8, 13 ou seja f(0)=0, f(1)=1, f(2)=1,f(3)=2,...)

Definição matemática:
  •       F(n+1) = F(n)+F(n-1) valores iniciais F0=0 F1=1 F2=1
  •       F{n}= { 0,                se n=0
                         1,                se n=1
                         Fn-1+Fn-2, para outros casos  }
Algoritimo: metodo para calcular proximo numero da série de Fibonnaci. Exemplo usando metodo recursivo (chama ele mesmo):
  • Instrução
se n<2 então
        retorne n
    caso contrário
        retorne fib(n-1) +  fib((n-2)
        * fib é uma função que retorna o valor de um dos números da série de fibonacci.
  • Resultado:
fib(0)= 0 fib(1)= 1 fib(2)= 1 fib(3)= 2 fib(4)= 3 fib(5)= 5 fib(6)= 8

Linguagem: Será linguagem corrente (no caso em questão é o python).
  
`
` `
` `
topico` `
titulo`Teste do programa`
` `
desc`
O que se espera do teste : Mostrar o 1° número da série fib(0)=0
 
teste
resultado
esperado
resultado
obtido
status
print (fib(0)=' 0')
0
Name error: name  'fib' is not defined erro

  
#execução do teste
print ('fib(0)=',fib(0)) 

Resultado:
Name error: name  'fib' is not defined

`
` `
` `

topico` `
titulo`Alterar programa para teste funcionar`
` `
desc`
O que: Incluir uma função que retorne um valor 0.

teste
resultado
esperado
resultado
obtido
status
print fib(0)
0
0
ok

#definição da função
def fib(n):
    return 0

#execução do teste
print ('fib(0)=',fib(0))


Resultado:

fib(0)= 0 
 
`
` `
` `
topico` `
titulo`Acrescentar novo teste `
` `
desc`
O que se espera do teste : testar 2 elementos da serie com o mesmo programa.
Como: acrescentando novo teste na execução do teste

teste
resultado
esperado
resultado
obtido
status
print fib(0)
0
0
ok
print fib(1) 1
0
erro

   
#definição da função
def fib(n):
    return 0

#execução do teste
print ('fib(0)=',fib(0),'fib(1)=',fib(1))

Resultado:
fib(0)= 0 fib(1)= 0 

  
`
` `
` `
topico` `
titulo`Alterar programa para teste funcionar `
` `
desc`
Q que: Alterando a função para retornar 1 qdo n=1.

teste
resultado
esperado
resultado
obtido
status
print fib(0)
0
0
ok
print fib(1) 1
1
ok

   
#definição da função
def fib(n):
    if (n==0):
        return 0
    return 1

#execução do teste
print ('fib(0)=',fib(0),'fib(1)=',fib(1))

Resultado:
fib(0)= 0 fib(1)= 1 

  
`
` `
` `
topico` `
titulo`Acrescentar novo teste `
` `
desc`
O que se espera do teste : Adicionar teste para fib(3)=1 na  execução do teste


teste
resultado
esperado
resultado
obtido
status
print fib(0)
0
0
ok
print fib(1) 1
1
ok
print fib(2) 1
1
ok
print fib(3) 2
1
erro

   
#definição da função -adicionar proximo caso - opa errado fib(3)=2 e não 1
def fib(n):
    if (n==0):
        return 0
    return 1

#execução do teste
print ('fib(0)=',fib(0),'fib(1)=',fib(1),'fib(2)=',fib(2),'fib(3)=',fib(3))

Resultado:
fib(0)= 0 fib(1)= 1 fib(2)= 1 fib(3)= 1

  
`
` `
` `
topico` `
titulo`Alterar programa para teste funcionar `
` `
desc`
O que: para n>2 retornar 2.

teste
resultado
esperado
resultado
obtido
status
print fib(0)
0
0
ok
print fib(1) 1
1
ok
print fib(2) 1
1
ok
print fib(3) 2
2
ok

   
#definição da função -
def fib(n):
    if (n==0):
        return 0
    if (n<=2):
        return 1
    return 2

#execução do teste
print ('fib(0)=',fib(0),'fib(1)=',fib(1),'fib(2)=',fib(2),'fib(3)=',fib(3))

Resultado:
fib(0)= 0 fib(1)= 1 fib(2)= 1 fib(3)= 2

 
`
` `
` `
topico` `
titulo`Acrescentar novo teste `
` `
desc`
O que se espera do teste : Adicionar teste para fib(4)=3 na  execução do teste

teste
resultado
esperado
resultado
obtido
status
print fib(0)
0
0
ok
print fib(1) 1
1
ok
print fib(2) 1
1
ok
print fib(3) 2
2
ok
print fib(4)
3
2
erro

   
#definição da função -
def fib(n):
    if (n==0):
        return 0
    if (n<=2):
        return 1
    return 2

#execução do teste
print ('fib(0)=',fib(0),'fib(1)=',fib(1),'fib(2)=',fib(2),'fib(3)=',fib(3),'fib(4)=',fib(4))

Resultado:
fib(0)= 0 fib(1)= 1 fib(2)= 1 fib(3)= 2 fib(4)= 2

 
`
` `
` `
topico` `
titulo`Alterar programa para teste funcionar `
` `
desc`
Q que: Na função acrescentar n>3 retornar 3.

teste
resultado
esperado
resultado
obtido
status
print fib(0)
0
0
ok
print fib(1) 1
1
ok
print fib(2) 1
1
ok
print fib(3) 2
2
ok
print fib(4)
3
3
ok

   
#definição da função
def fib(n):
    if (n==0):
        return 0
    if (n<=2):
        return 1
    if (n<=3):
        return 2
    return 3

#execução do teste
print ('fib(0)=',fib(0),'fib(1)=',fib(1),'fib(2)=',fib(2),'fib(3)=',fib(3),'fib(4)=',fib(4)))

Resultado:
fib(0)= 0 fib(1)= 1 fib(2)= 1 fib(3)= 2 fib(4)= 3

  
`
` `
` `
topico` `
titulo`Acrescentar novo teste `
` `
desc`
O que se espera do teste : Adicionar teste para fib(5)=3 na  execução do teste

 
teste
resultado
esperado
resultado
obtido
status
print fib(0)
0
0
ok
print fib(1) 1
1
ok
print fib(2) 1
1
ok
print fib(3) 2
2
ok
print fib(4)
3
3
ok
print fib(5)
3
5
erro
  
#definição da função
def fib(n):
    if (n==0):
        return 0
    if (n<=2):
        return 1
    if (n<=3):
        return 2
    return 3

#execução do teste
print ('fib(0)=',fib(0),'fib(1)=',fib(1),'fib(2)=',fib(2),'fib(3)=',fib(3),'fib(4)=',fib(4),'fib(5)=',fib(5))

Resultado:
ffib(0)= 0 fib(1)= 1 fib(2)= 1 fib(3)= 2 fib(4)= 3 fib(5)= 3
 
`
` `
` `
topico` `
titulo`Alterar programa para teste funcionar `
` `
desc`
O que: generalizando na função o return 3 para return fib(n-1)+fib(n-2)

teste
resultado
esperado
resultado
obtido
status
print fib(0)
0
0
ok
print fib(1) 1
1
ok
print fib(2) 1
1
ok
print fib(3) 2
2
ok
print fib(4)
3
3
ok
print fib(5)
5
5
ok

   
#definição da função
def fib(n):
    if (n==0):
        return 0
    if (n==1):
        return 1
    return fib(n-1)+fib(n-2)

#execução do teste
print('fib(0)=',fib(0),'fib(1)=',fib(1),'fib(2)=',fib(2),'fib(3)=',fib(3),'fib(4)=',fib(4),'fib(5)=',fib(5))

Resultado:
fib(0)= 0 fib(1)= 1 fib(2)= 1 fib(3)= 2 fib(4)= 3 fib(5)= 5

  
`
` `
` `
topico` `
titulo`Acrescentar novo teste `
` `
desc`
O que se espera do teste : Adicionar teste para fib(6)=8
Como: Alterando a execução do teste

teste
resultado
esperado
resultado
obtido
status
print fib(0)
0
0
ok
print fib(1) 1
1
ok
print fib(2) 1
1
ok
print fib(3) 2
2
ok
print fib(4)
3
3
ok
print fib(5)
5
5
ok
print fib(6)
8
8
ok
   
#definição da função
def fib(n):
    if (n==0):
        return 0
    if (n==1):
        return 1
    return fib(n-1)+fib(n-2)

#execução do teste
print('fib(0)=',fib(0),'fib(1)=',fib(1),'fib(2)=',fib(2),'fib(3)=',fib(3),'fib(4)=',fib(4),'fib(5)=',fib(5),'fib(6)=',fib(6))

Resultado:
fib(0)= 0 fib(1)= 1 fib(2)= 1 fib(3)= 2 fib(4)= 3 fib(5)= 5 fib(6)= 8

  
`
` `
` `
topico` `
titulo`Dicas`
` `
desc`
  • Começar o programa executando uma saida.Vai dar erro.
  • Corrigir o erro para o teste funcionar com o mesmo dado de entrada
  • Acrescentar novo teste com mais entrada.
    Teste colocado não é retirado
    .
    Executar teste.Poderá dar erro.
    Teste que não causa erro não é um bom teste.
    O teste vem primeiro, o programa depois.
    Cada teste é um modulo coeso e fortemente acoplado.
  • Caso dê certo  acrescentar novo teste.
    Caso contrario corrigir o erro para o teste funcionar com o mesmo dado de entrada.
  • A refatoração poder feita a cada correção.

  • Já existe uma solução : no caso produzir e mostrar  a série de Fibonnacci
  • Já existe um ambiente instalado: Python e http://pythontutor.com 
  
`
` `
` `
titulo`Glossário`
` `
desc` `
` ` ` `
topico` `
id`feedback`
` `
titulo`Melhoria constante`
` `
desc`
Smile.jpegInforme o que gostou
SmileTriste.jpgo que pode melhorar








  • O que foi positivo no mutirão
  • O que pode melhorar
  • possíveis continuações sobre o assunto:
  • sugestões de novos dojos
`
` `
` `
topico` `
titulo`Referencias`
` `
desc`
descSugestão para testes fazer : http://pythontutor.com




`
` `
` `
`