Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Testando software: quando testar, o que testar, como testar

Testando software: quando testar, o que testar, como testar

Palestra do FISL 12

Danilo Cabello

December 05, 2011
Tweet

More Decks by Danilo Cabello

Other Decks in Programming

Transcript

  1. O que esse código faz? def a(i): k = 2

    if i < k: return 3 - k return a(i-k) + a(i-k+1) Monday, December 5, 11
  2. def a(i): k = 2 if i < k: return

    3 - k return a(i-k) + a(i-k+1) O que esse código faz? Monday, December 5, 11
  3. O que esse código faz? def fibo(n): if n <

    2: return 1 return fibo(n-2) + fibo(n-1) Monday, December 5, 11
  4. O que esse código faz? def fibo(n): if n <

    2: return 1 return fibo(n-2) + fibo(n-1) assert fibo(0) == 1 assert fibo(1) == 1 assert fibo(2) == 2 assert fibo(5) == 8 Monday, December 5, 11
  5. class Dinheiro(object): def __init__(self, valor): self.valor = valor import unittest

    class DinheiroTeste(unittest.TestCase): def test_igualdade(self): a = Dinheiro(5) b = Dinheiro(5) self.assertEquals(a, b) Monday, December 5, 11
  6. ======================================================== FAIL: test_igualdade (__main__.DinheiroTeste) ---------------------------------------------------------------------- Traceback (most recent call last):

    File "/Users/cabello/Desktop/dinheiro.py", line 11, in test_igualdade self.assertEquals(a, b) AssertionError: <__main__.Dinheiro object at 0x1004f2310> != <__main__.Dinheiro object at 0x1004f2350> ---------------------------------------------------------------------- Ran 1 test in 0.001s FAILED (failures=1) Monday, December 5, 11
  7. class Dinheiro(object): def __init__(self, valor): self.valor = valor def __eq__(self,

    outroDinheiro): return True import unittest class DinheiroTeste(unittest.TestCase): def test_igualdade(self): a = Dinheiro(5) b = Dinheiro(5) self.assertEquals(a, b) Monday, December 5, 11
  8. class Dinheiro(object): def __init__(self, valor): self.valor = valor def __eq__(self,

    outroDinheiro): return 5 == 5 import unittest class DinheiroTeste(unittest.TestCase): def test_igualdade(self): a = Dinheiro(5) b = Dinheiro(5) self.assertEquals(a, b) Monday, December 5, 11
  9. class Dinheiro(object): def __init__(self, valor): self.valor = valor def __eq__(self,

    outroDinheiro): return self.valor == 5 import unittest class DinheiroTeste(unittest.TestCase): def test_igualdade(self): a = Dinheiro(5) b = Dinheiro(5) self.assertEquals(a, b) Monday, December 5, 11
  10. class Dinheiro(object): def __init__(self, valor): self.valor = valor def __eq__(self,

    outroDinheiro): return self.valor == outroDinheiro.valor import unittest class DinheiroTeste(unittest.TestCase): def test_igualdade(self): a = Dinheiro(5) b = Dinheiro(5) self.assertEquals(a, b) Monday, December 5, 11
  11. def maior_de_dois(a, b): if a > b: maior = a

    else: maior = b return maior assert maior_de_dois(6,3) == 6 else: maior = b Monday, December 5, 11
  12. def maior_de_dois(a, b): if a > b: maior = a

    else: maior = b return maior assert maior_de_dois(6,3) == 6 assert maior_de_dois(2,5) == 5 Monday, December 5, 11
  13. def maior_de_tres(a, b, c): return maior_de_dois( maior_de_dois(a, b), c) assert

    maior_de_tres(1,2,3) == 3 assert maior_de_tres(3,2,1) == 3 assert maior_de_tres(1,3,2) == 3 assert maior_de_tres(2,3,1) == 3 assert maior_de_tres(2,1,3) == 3 Monday, December 5, 11
  14. def maior_de_tres(a, b, c): return maior_de_dois( maior_de_dois(a, b), c) assert

    maior_de_tres(1,2,3) == 3 assert maior_de_tres(3,2,1) == 3 assert maior_de_tres(1,3,2) == 3 assert maior_de_tres(2,3,1) == 3 assert maior_de_tres(2,1,3) == 3 Monday, December 5, 11
  15. • Criar tabuleiro vazio • Escrever palavra na: • horizontal

    • vertical • Sortear orientação • Preencher com letras aleatórias os espaços vazios Monday, December 5, 11
  16. • Criar tabuleiro vazio • Escrever palavra na: • horizontal

    • vertical • Sortear orientação • Preencher com letras aleatórias os espaços vazios Monday, December 5, 11
  17. • Criar tabuleiro vazio • Escrever palavra na: • horizontal

    • vertical • Sortear orientação • Preencher com letras aleatórias os espaços vazios Monday, December 5, 11
  18. Um teste unitário não é unitário se: • Usa o

    banco de dados* • Usa a rede • Usa o sistema de arquivos • Não pode rodar ao mesmo tempo que outros testes • Precisa de configuração adicional no ambiente Monday, December 5, 11
  19. Exemplo de teste funcional def test_detalhes_produto(self): loja = add_test_store() response

    = self.client.get('livros/pragmatic-programmer') self.assertEqual(404, response.status_code) produto = add_test_produto(loja) response = self.client.get('livros/pragmatic-programmer') self.assertEqual(200, response.status_code) self.assertTemplateUsed(response, 'jobim/detalhes_produto.html') produto.situacao = 'VENDIDO' produto.save() response = self.client.get('livros/pragmatic-programmer') self.assertEqual(404, response.status_code) Monday, December 5, 11
  20. Referências • Test Driven Development: By Example • Kent Beck

    • Clean Code: A Handbook of Agile Software Craftsmanship • Robert C. Martin • Refactoring: Improving the Design of Existing Code • Martin Fowler, Kent Beck, John Brant and William Opdyke Monday, December 5, 11