`
linguagem` `
topico` `
nome`TDD `
` `
titulo`TDD`
` `
descritor`apoie, apoie.org, PAM, mutirão, produzir, aprender, simplificar, inovar, pesquisar , TDD`
` `
lead`Exemplo de um TDD - desenvolvimento de programa dirigido por teste. 
` `
melhorar`Melhorar`
` `
referenciaLivro TDD Kent Beck
Simulador python,js,java
Documento de trabalho
`
` `
origem`Tdd.xml`
` `
` `
topico` `
titulo`O problema`
` `
desc` Retornar o enésimo valor da sequência de Fibbonacci.
    `
    ` `
    ` `
    topico` `
    titulo`Teste do programa`
    ` `
    desc`
    #execução dos testes
    print ("Início da execução de testes:")
    if 0 != fib(0):
        print('resultado esperado fib(0)=0', 'resultado obtido:', fib(0))
    print ("Fim dos testes")

    Resultado do teste de execução
    Início da execução de testes:
    NameError: name 'fib' is not defined

    `
    ` `
    ` `
    topico` `
    titulo`Alterar programa para teste funcionar`
    ` `
    desc`
    #definição da função
    def fib(n):
        return 0

    #execução dos testes
    print ("Início da execução de testes:")
    if 0 != fib(0):
        print('resultado esperado fib(0)=0', 'resultado obtido:', fib(0))
    print ("Fim dos testes")

    Resultado do teste de execução
    Início da execução de testes:
    Fim dos testes

    `
    ` `
    ` `
    topico` `
    titulo`Adicionar teste`
    ` `
    desc`
    #execução dos testes
    #definição da função
    def fib(n):
        return 0

    #execução dos testes
    print ("Início da execução de testes:")
    if 0 != fib(0):
        print("resultado esperado fib(0)=0","resultado obtido:",fib(0))
    if 1 != fib(1):
        print("resultado esperado fib(1)=1","resultado obtido:",fib(1))
    print ("Fim dos testes")

    Resultado do teste de execução
    Início da execução de testes:
    resultado esperado fib(1)=1 resultado obtido: 0
    Fim dos testes

    `
    ` `
    ` `
    topico` `
    titulo`Alterar programa para teste funcionar`
    ` `
    desc`
    #definição da função
    def fib(n):
            if (n==0):    return 0
            if (n==1):    return 1

    #execução dos testes
    print ("Início da execução de testes:")
    if 0 != fib(0):
        print("resultado esperado fib(0)=0", "resultadoobtido:", fib(0))
    if 1 != fib(1):#
        print("resultado esperado fib(1)=1", "resultado obtido:", fib(1))
    print ("Fim dos testes")

    Resultado do teste de execução
    Início da execução de testes:
    Fim dos testes

    `
    ` `
    ` `
    topico` `
    titulo`Refatorar função`
    ` `
    desc`
    #definição da função
    def fib(n):
        return n

    #execução dos testes
    print ("Início da execução de testes:")
    if 0 != fib(0):
             print ("resultado esperado fib(0)=0", "resultado obtido:", fib(0))
    if 1 != fib(1):
        print("resultado esperado fib(1)=1", "resultado obtido:", fib(1))
    print ("Fim dos testes")

    Resultado do teste de execução
    Início da execução de testes:
    Fim dos testes

    `
    ` `
    ` `
    topico` `
    titulo`Adicionar teste`
    ` `
    desc`
    #definição da função
    def fib(n):
        return n

    #execução dos testes
    print ("Início da execução de testes:")
    if 0 != fib(0):
             print ("resultado esperado fib(0)=0", "resultado obtido:", fib(0))
    if 1 != fib(1):
        print("resultado esperado fib(1)=1", "resultado obtido:", fib(1))
    if 1 != fib(2):
        print("resultado esperado fib(2)=1", "resultado obtido:", fib(2))

    print ("Fim dos testes")

    Resultado do teste de execução
    Início da execução de testes:
    resultado esperado fib(2)=1 resultado obtido: 2
    Fim dos testes

    `
    ` `
    ` `
    topico` `
    titulo`Alterar programa para teste funcionar`
    ` `
    desc`
    #definição da função
    def fib(n):
        if (n==2):  return 1
        return n

    #execução dos testes
    print ("Início da execução de testes:")
    if 0 != fib(0):
             print ("resultado esperado fib(0)=0","resultado obtido:",fib(0))
    if 1 != fib(1):
        print("resultado esperado fib(1)=1","resultado obtido:",fib(1))
    if 1 != fib(2):
        print("resultado esperado fib(2)=1","resultado obtido:",fib(2))
    print ("Fim dos testes")

    Resultado do teste de execução
    Início da execução de testes:
    Fim dos testes

    `
    ` `
    ` `
    topico` `
    titulo`Refatorar função`
    ` `
    desc`
    #definição da função
    def fib(n):   
        if (n==2):  return 1
        return n

    #execução dos testes
    def teste(esperado, n):
        if esperado != fib(n):
           print("resultado esperado fib(", n, ")=", esperado, "resultado obtido:", fib(n))

    print ("Início da execução de testes:")
    teste (0,0)
    teste (1,1)
    teste (1,2)
    print ("Fim dos testes")

    Resultado do teste de execução
    Início da execução de testes:
    Fim dos testes

    `
    ` `
    ` `
    topico` `
    titulo`Adicionar teste`
    ` `
    desc`
    #definição da função
    def fib(n):   
        if (n==2):  return 1
        return n

    #execução dos testes
    def teste(esperado, n):
        if esperado != fib(n):
           print("resultado esperado fib(", n, ")=", esperado, "resultado obtido:", fib(n))

    print ("Início da execução")
    teste (0, 0)
    teste (1, 1)
    teste (1, 2)
    teste (2, 3)
    print ("Fim dos testes")

    Resultado do teste de execução
    Início da execução de testes:
    resultado esperado fib( 3 )= 2 resultado obtido: 3
    Fim dos testes

    `
    ` `
    ` `
    topico` `
    titulo`Alterar programa para teste funcionar`
    ` `
    desc`
    #definição da função
    def fib(n):
        if (n==2):  return 1
        if (n==3):  return 2
        return n

    # execução dos testes
    def teste(esperado, n):
        if esperado != fib(n):
           print("resultado esperado fib(", n, ")=", esperado, "resultado obtido:", fib(n))

    print ("Início da execução de testes:")
    teste (0,0)
    teste (1,1)
    teste (1,2)
    teste (2,3)
    print ("Fim dos testes")

    Resultado do teste de execução
    Início da execução de testes:
    Fim dos testes

    `
    ` `
    ` `
    topico` `
    titulo`Refatorar função`
    ` `
    desc`
    #definição da função
    def fib(n):  
       return  n - 1 if n > 1 else n
        
    # execução dos testes
    def teste(esperado, n):
        if esperado != fib(n):
           print("resultado esperado fib(", n, ")=", esperado, "resultado obtido:", fib(n))
        
    print ("Início da execução de testes:")
    teste (0, 0)
    teste (1, 1)
    teste (1, 2)
    teste (2, 3)
    print ("Fim dos testes")

    Resultado do teste de execução
    Início da execução de testes:
    Fim dos testes

    `
    ` `
    ` `
    topico` `
    titulo`Adicionar teste`
    ` `
    desc`
    #definição da função
    def fib(n): 
       return  n - 1 if n > 1 else n
       
    # execução dos testes
    def teste(esperado, n):
        if esperado != fib(n):
           print("resultado esperado fib(", n, ")=", esperado, "resultado obtido:", fib(n))
       
    print ("Início da execução de testes:")
    teste (0, 0)
    teste (1, 1)
    teste (1, 2)
    teste (2, 3)
    teste (8, 6)
    print ("Fim dos testes")

    Resultado do teste de execução
    Início da execução de testes:
    resultado esperado fib( 6 )= 8 resultado obtido: 5
    Fim dos testes

    `
    ` `
    ` `
    topico` `
    titulo`Alterar programa para teste funcionar`
    ` `
    desc`
    #definição da função
    def fib(n): 
        return  fib(n - 1) + fib(n - 2) if n > 1 else n

    # execução dos testes
    def teste(esperado, n): 
        if esperado != fib(n):
           print("resultado esperado fib(", n, ")=", esperado, "resultado obtido:", fib(n))
       
    print ("Início da execução de testes:")
    teste (0, 0)
    teste (1, 1)
    teste (1, 2)
    teste (2, 3)
    teste (8, 6)
    print ("Fim dos testes")

    Resultado do teste de execução
    Início da execução de testes:
    Fim dos testes


    `
    ` `
    ` `
    topico` `
    titulo`Refatorar função`
    ` `
    desc`
    #definição da função
    def fib(n): 
        return  n if n < 2 else fib(n - 1) + fib(n - 2)

    # execução dos testes
    def teste(esperado, n): 
        if esperado != fib(n):
           print("resultado esperado fib(", n, ")=", esperado, "resultado obtido:", fib(n))
       
    print ("Início da execução de testes:")
    teste (0, 0)
    teste (1, 1)
    teste (1, 2)
    teste (2, 3)
    teste (8, 6)
    print ("Fim dos testes")

    Resultado do teste de execução
    Início da execução de testes:
    Fim dos testes


    `
    ` `
    ` `
    topico` `
    titulo`Dicas`
    ` `
    desc`
    Sequência do TDD - sempre começa pelo teste

    Repetir enquanto necessário:
    1. Adicionar teste (deve dar erro!)
    2. Alterar programa para teste funcionar (com o minimo de código)
    3. Refatorar programa ou teste (melhorar compreensão, tirar duplicatas, simplificar)

    `
    ` `
    ` `
    `