Teste sua aplicação
antes que ela teste você
I BootCamp OeSC Livre
São Miguel do Oeste
jun/2012
por Tiago Link
Slide 2
Slide 2 text
Who I am?
Tiago Link
Desenvolvedor Web
Slide 3
Slide 3 text
desenvolvemos ideias e aplicações web
Slide 4
Slide 4 text
Presenteio.com
Sistema online para criar listas de presentes para
casamentos, amigo secreto...
Belasis.com.br
Sistema online para controle de salões de
beleza, spas, estéticas, profissionais de
beleza em geral...
Ruby e Rails
Slide 5
Slide 5 text
Teste sua aplicação...
Slide 6
Slide 6 text
... antes que ela teste
você.
Slide 7
Slide 7 text
Vamos falar de testes...
Slide 8
Slide 8 text
Não.
Vamos falar de
desenvolvimento.
Slide 9
Slide 9 text
Código.
Responsabilidade.
Slide 10
Slide 10 text
Cenário:
Dono do produto
Slide 11
Slide 11 text
Cenário:
Investidor
Dono do produto
Slide 12
Slide 12 text
Cenário:
Investidor
Dono do produto
Desenvolvedor
Slide 13
Slide 13 text
Contextos:
● Adicionar nova funcionalidade...
● Atualizar versão do sistema...
● Atualizar dependências do sistema...
● Alterar código legado...
● Refatorar código criativo (gambiarra)...
● ....
Slide 14
Slide 14 text
No content
Slide 15
Slide 15 text
Como garantir a eficácia
do código?
● Através de Testes...
● Através de Documentação...
● Através de Design Patterns...
● Através de Especificação das Funcionalidades...
● Através de Código limpo e bem escrito...
●
...
Slide 16
Slide 16 text
Tipos de Testes
● Caixa Branca
● Caixa Preta
● Testes Unitários
● Testes de Integração
● Testes de Aceitação
● ...
Slide 17
Slide 17 text
TDD
Desenvolvimento Orientado a Testes
Slide 18
Slide 18 text
BDD
Desenvolvimento Guiado por
Comportamento
Slide 19
Slide 19 text
TDD/BDD
● São técnicas de Desenvolvimento
● Encorajar o design simples
● Inspirar confiança
● Relacionado aos conceitos de metodologias Ágeis
● Sistemas dinâmicos complexos, mesmo com fatores
determinados, geram resultados instáveis
Slide 20
Slide 20 text
TDD/BDD
● Utiliza as ferramentas de testes
● Proporciona a documentação do código
● DRY, KISS, YAGNI...
● Em vez de testar a funcionalidade você especifica ela
● Escreve somente o código necessário, sem desperdício
Slide 21
Slide 21 text
Escrever código eficaz é
vê-lo falhar primeiro.
Slide 22
Slide 22 text
TDD/BDD - Ciclo de Vida
RED
GREEN
REFACTOR
Slide 23
Slide 23 text
TDD/BDD - Exemplo
Desenvolver o jogo: FizzBuzz
Slide 24
Slide 24 text
TDD/BDD - Princípios
● Escrever primeiro o teste e vê-lo falhar
● Escrever apenas o código suficiente para o teste passar
● Refatorar
● Escrever testes pequenos
● Seguir com o próximo teste
Slide 25
Slide 25 text
TDD/BDD - Vantagens
● Colabora para o aumento da qualidade do sistema
● O software cresce de forma ordenada
● O design do sistema melhora
● Problemas são identificados antes de ir para o cliente
● Colabora com o aprendizado do desenvolvedor
● O software se adapta melhor a mudanças
● ...
Slide 26
Slide 26 text
BDD
● Como começar?
● O que testar?
Slide 27
Slide 27 text
Como começar?
● Escrever testes outside-in (de fora pra dentro)
Slide 28
Slide 28 text
No content
Slide 29
Slide 29 text
O que testar?
● User Stories (história do usuário)
Slide 30
Slide 30 text
Funcionalidade: Gerenciar Pessoas
Como um usuário do sistema
Eu quero utilizar este cadastro em outros pontos do sistema
Histórias do Usuário
Slide 31
Slide 31 text
Cenário: Adicionar Pessoa Válida
Dado que estou em listagem de pessoas
E clico em "Nova Pessoa"
E preencho o campo nome com "Fulano de Tal"
E preencho o campo email com "[email protected]
Quando clicar em "Salvar Registro"
Então preciso ver "Pessoa cadastrada com sucesso"
Cenários - Critérios de
Aceitação
Slide 32
Slide 32 text
BDD - Exemplo
(Cucumber)
Desenvolver uma calculadora
Slide 33
Slide 33 text
BDD - Vantagens
● Documenta a regra de negócio
● Valida a regra de negócio antes de escrever o código
● Colabora com a comunicação interna dentro da empresa
Slide 34
Slide 34 text
Dificuldades
● Não é fácil escrever testes, especialmente para iniciantes
● Resistência de equipes e de gerentes de projetos
● Muitas desculpas...
Slide 35
Slide 35 text
Top 5 Desculpas
● Vai demorar muito mais...
● A funcionalidade é fácil e não precisa testar...
● Não sei testar ou como testar...
● Isso não dá pra testar...
● Melhor deixar para os outros testarem...
● É mais caro testar...
Slide 36
Slide 36 text
Dicas
● Baby Steps
● Funcionalidades complexas: dividir em partes simples
● Perseverança
● Torcer para que o teste "quebre"*
● Festejar quando isso acontecer.