Slide 1

Slide 1 text

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.

Slide 37

Slide 37 text

Perguntas?

Slide 38

Slide 38 text

Vou ficar devendo... ● Integração Contínua ● Testes Automatizados ● Deploy Contínuo ● Ferramentas BDD em ruby (Cucumber, Rspec, Steak) ● Exemplos utilizados na prática

Slide 39

Slide 39 text

Não existe bala de prata

Slide 40

Slide 40 text

Teste sua aplicação...

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

Para entrar em contato... Basta pesquisar no Google a palavra "Link", você encontrará: ● about.me/tiagolink ● github.com/tiagolink ● twitter.com/tiagolink ● facebook.com/tiagolink ● slideshare.com/tiagolink ● tiagolink.net (blog - em breve) ● [email protected] (E-mail) Obrigado!