SlideShare uma empresa Scribd logo
1 de 119
tdd com rspec




TDD com RSpec
tdd com rspec




Q vergonha




                 @leohackin




                      Raquin


Léo Hackin (Rá-kim)      Héquin
tdd com rspec
tdd com rspec
tdd com rspec




http://4.bp.blogspot.com/_KzayWGqkmgk/TEHXrMxoa3I/AAAAAAAAAfE/ON3rTQb-r20/s400/papel-higienico-cuba.jpg
tdd com rspec




          TDD
Test Driven Development

 Desenvolvimento orientado a testes


                                 Jura???
tdd com rspec




              Escreve código


             Testa no browser


Deu certo?                      Deu erro?


  #win!                          Corrige
tdd com rspec




       Problema 1




Modificações podem gerar BUGS
                 http://blog.arena41.com/wp-content/uploads/2010/03/computer-bug.png
tdd com rspec




                     bug #2
                                               Eu esperava :)
    Uhnn!
Estranho esse!
                                   bug #1



modificação                                   alteração ok




                                   erro #1
O cliente ligou!
      oO
                                                Viiixi! Zuou!
                   erro em prod.
http://givenmydruthers.files.wordpress.com/2010/02/snowball.jpg
tdd com rspec




       Problema 2




Testar manualmente é cansativo
                  http://anderssauro.com/wp-content/midia/a6f091ef93f5_1344B/boring.jpg
tdd com rspec




   Problema 3




Humanos fazendo testes
         http://2.bp.blogspot.com/-7_Sojkl9GKc/TebFfeHFzKI/AAAAAAAAARk/WBz-6PmwZyw/s1600/wtf5.jpg
Deu pau
 cara! :(
                                                                                     Ráááááá!




            http://1.bp.blogspot.com/-1UYXDHKjaCQ/TdLJA6uFbNI/AAAAAAAACAI/4814xUBjNFk/s1600/Sergio%2BMallandro%2Bfoto.JPG
tdd com rspec




     Problema 4


$$$$$$$$$$$$$$$$$$$$$$$$$$$




    Tempo é dinheiro
http://digitalparenting.files.wordpress.com/2010/12/cute-boy-playing-video-games-computer1.jpg
                                                                                                tdd com rspec
tdd com rspec




  Problema 5




O programador novo
        http://www.doublecrossstudios.co.uk/blogs/charlie/wp-content/uploads/2009/08/bustorbail.jpg
Problema 6




      Chefes não
    gostam de TDD



http://downloads.open4group.com/wallpapers/chefe-do-homer-assustador-bd76b.jpg
tdd com rspec




Problemas reais!

             Pissit! Quem falar
              ganhar prêmio!
tdd com rspec




Essa palestra é pra você!
    http://3.bp.blogspot.com/_YAefRFqmQKU/S85F77sD1KI/AAAAAAAAAJI/XB60ZTCF2ws/s1600/fail_square_wheel_tricycle_gtfo_n00b.jpg
tdd com rspec




Mas se você já testa ela
é pra você também! :)
tdd com rspec




             TDD
Desenvolvimento orientado a testes




Você testa primeiro! ;)
XP
tdd com rspec




Uia! Mas porque testar
      antes tio?
            Pode sim. A regra é
                  clara!
tdd com rspec




Pra que testar software

        antes

 de escrever o código?
1) Prever erros
             http://mondoauto.blogosfere.it/images/crashtest500.jpg
Não usei TDD né
                                        parceiro.




http://1.bp.blogspot.com/-1kLmITxLj4Q/TfZHfCLS5FI/AAAAAAAABUI/bEtZKAsoc5s/s1600/ro0naldo.jpg
tdd com rspec




                               Vamo
                             acertar! :)

             teste quebrou




modificação                   alteração ok
tdd com rspec




2) Melhorar o código da app
                   http://asiasociety.org/files/systems-thinking.png
tdd com rspec




XGH (Extreme Go Horse)




                  http://gohorseprocess.files.wordpress.com/2011/02/horse21.png
tdd com rspec




3) Software mais clean
    http://1.bp.blogspot.com/-ZR3B0a7whkM/TWXTcD4VOvI/AAAAAAAAAKA/QmoThFyL2PA/s1600/Interior-Design-Ideas-Screensaver.jpg
tdd com rspec




                  4) Confiança para alterar
http://wallpapers.free-review.net/wallpapers/54/Extreme_sport_from_rock_climbing_to_mountain_parachuting.jpg
tdd com rspec




5) teste automágicos
      http://2.bp.blogspot.com/-ZSv4lhC25lI/TiHVVPtiBzI/AAAAAAAAANE/H6BwrKiwR28/s1600/mister-m-704820.jpg
tdd com rspec
Tá
tudo testado chefe! Eu
        juro....
tdd com rspec




6) ajuda novos membros
               http://wallpapers.free-review.net/wallpapers/33/Programmer.jpg
tdd com rspec
tdd com rspec




        O que é um teste?

É um conjunto de condições (código) usado para
identificar erros e garantir que os requisitos de
  um software sejam plentamente atendidos.


 É um bloco de instruções para testar se a app
  está funcionando como deve e sem erros. ;)
tdd com rspec




           Tipos de teste


Unitário        Integração   Aceitação
tdd com rspec




        Teste Unitário

   Testa as entradas e saídas esperadas

Unidade = menor parte de código testável
Unidade = métodos de objeto, uma função
tdd com rspec




     Fluxo do TDD

           RED




REFACTOR            GREEN
tdd com rspec




        RED
Escreva um teste que falhe
tdd com rspec




       GREEN
Escreva o código necessário e
   faça o seu teste passar
tdd com rspec




       REFACTOR
Melhore o código que você escreveu :)
tdd com rspec




Frase chocante: TDD não
   é só sobre escrever
      testes e testar
tdd com rspec




TDD é sobre design.
tdd com rspec




http://www.starzlife.com/files/2010/03/ricky-martin.jpg
tdd com rspec




... de software ...
tdd com rspec




http://static.guim.co.uk/sys-images/Guardian/Pix/pictures/2011/7/1/1309538517951/Ricky-Martin.-007.jpg
http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/07/tdd.jpg
                                                                                         tdd com rspec




               O ciclo
  red->green->refactor
permite você refatorar e repensar sua
        app constantemente
tdd com rspec




Show me the code
tdd com rspec
tdd com rspec




Meio difícil de ler e
entender bem né?
tdd com rspec




                 Sentenças simples me daria
                     mais foco no teste



                                       Nomes de teste
                                       mais expressivos




                                             Behaviour é mais
                                            importante que test
      Dan North
http://dannorth.net/introducing-bdd/
tdd com rspec




         BDD
Behaviour Driven Development
tdd com rspec




BDD

      Descrever comportamento
Pensar no design e documentar o código
 Tornar o TDD mais acessível e efetivo
tdd com rspec
tdd com rspec




Mais fácil né?
tdd com rspec




        RSpec
Framework BDD para Ruby/RoR
tdd com rspec




RSpec helps you do the TDD part of that
equation, focusing on the documentation and
design aspects of TDD.

      David Chelimsky
tdd com rspec




Descreve o comportamento
como se fosse uma estória

  comportamento == nosso teste :)
tdd com rspec




http://carplace.virgula.uol.com.br/wp-content/uploads/2010/05/chevrolet-camaro-hennessey-01.jpg
tdd com rspec




   Instalação


  $ gem install rspec
$ gem install rspec-rails
tdd com rspec




 No seu projeto Rails

group :test, :development do
 gem "rspec-rails", "~> 2.6"
end

   inserir no arquivo Gemfile
tdd com rspec




Rodar na raiz do projeto


      $ rails g rspec:install
tdd com rspec




Escreva um teste




  spec/truth_spec.rb
tdd com rspec




Rode o spec! :D
tdd com rspec




Todos os testes devem
 estar na pasta spec e
 terminar em _spec.rb
tdd com rspec




                       Anatomia
descreva “a verdade”




   sentença

                             expectativa
describe
descreve de quem é o comportamento e agrupa
os exemplo
it
é a sentença que descreve um exemplo do
comportamento

should
verbo usado para dizer o que objeto “deveria”
retornar quando algo é feito
tdd com rspec




Ao bloco de teste damos
  o nome de exemplo
descreva carro

deveria ter rodas
deveria ligar quando rodar a chave
deveria ter uma marca
deveria ter um modelo
tdd com rspec




  Problema real
Post para um blog
tdd com rspec




    Post deveria ter ...

• Um título
• Um texto
• Um status
• O status deve ser “publicado” ou
  “rascunho”
tdd com rspec




        Post deveria...



• dizer se está publicado ou não
Live Coding
tdd com rspec




      Criando o model

$ rails g model post titulo:string
status:string texto:text
tdd com rspec




     Gerando a tabela

$ rake db:migrate
tdd com rspec
tdd com rspec




Rode os testes
     $ rake spec
tdd com rspec




     Primeiro teste
Um post deve ter um título
tdd com rspec




Escreva um teste que falhe
         spec/models/post_spec.rb
tdd com rspec




Rode os testes
     $ rake spec
tdd com rspec




Faça o teste passar
      app/models/post.rb
tdd com rspec




Rode os testes
     $ rake spec
Irado Manolo!
tdd com rspec




Precisa refatorar?
    spec/models/post_spec.rb
tdd com rspec




      Should e Expectations

Expectations são as expectativas de como
nosso código deveria se comportar

should > deveria

should_not > não deveria
tdd com rspec




         Matchers



Permitem escrever as
expectativas com uma
linguagem mais natural
tdd com rspec




           Matchers
               Apenas alguns




• be
• be_true
• be_false
• be_instance_of
• be_kind_of
• include
• respond_to
tdd com rspec




     Segundo teste
Um post deve ter um status
tdd com rspec




Escreva um teste que falhe
         spec/models/post_spec.rb
tdd com rspec




Rode os testes
     $ rake spec
tdd com rspec




Faça o teste passar
      app/models/post.rb
tdd com rspec




Rode os testes
     $ rake spec
tdd com rspec




Precisa refatorar?
    spec/models/post_spec.rb
tdd com rspec




Algo de errado não está certo
          spec/models/post_spec.rb
tdd com rspec




              Before e After
           Inicializando objetos antes e depois de cada exemplo




before(:each) e after(:each)
permite executar comandos antes e depois de
cada exemplo


before(:all) e after(:all)
permite executar comandos antes e depois de
todos os exemplos e comportamentos
tdd com rspec




        after(:each)
é rarararararamente usado
tdd com rspec




Refatorando :D
   spec/models/post_spec.rb
tdd com rspec




Rode os testes
     $ rake spec
tdd com rspec




      Terceiro teste
    O status deve ser
“publicado” ou “rascunho”
tdd com rspec




Escreva um teste que falhe
         spec/models/post_spec.rb
tdd com rspec




Rode os testes
     $ rake spec
tdd com rspec




Faça o teste passar
      app/models/post.rb
tdd com rspec




Rode os testes
     $ rake spec
tdd com rspec




Opa! Refactoring!
     app/models/post.rb
tdd com rspec




Opa! Refactoring!
     app/models/post.rb
tdd com rspec




Rode os testes
     $ rake spec
tdd com rspec




     Quarto teste
O post deve ter um texto

       Quem se habilita?
tdd com rspec




     Quinto teste
Dizer se está publicado

    Mais alguém se habilita?
tdd com rspec




Escreva um teste que falhe
         spec/models/post_spec.rb




                                    Amazing!!!
tdd com rspec




Rode os testes
     $ rake spec
tdd com rspec




Faça o teste passar
      app/models/post.rb
tdd com rspec




Rode os testes
     $ rake spec
tdd com rspec




E por ai vai ... :)
tdd com rspec




     Próximos passos

• Mock/Stubs
• Matchers mais avançados
• Fixtures
• Testes de controller
• Helpers
• Boas práticas de agrupamento
tdd com rspec




            O que ler

• http://rspec.info
• http://howtocode.com.br/ebooks/
  rspec
• http://pragprog.com/book/nrtest/rails-
  test-prescriptions
tdd com rspec
tdd com rspec




     Valew! :D

leohackin@gmail.com

Mais conteúdo relacionado

Semelhante a TDD com RSpec: desenvolvimento orientado a testes

Lean para potencializar a qualidade no software
Lean para potencializar a qualidade no softwareLean para potencializar a qualidade no software
Lean para potencializar a qualidade no softwareDionatan default
 
Não existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu códigoNão existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu códigoRenan Carvalho
 
Java+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso TotalJava+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso TotalEduardo Bregaida
 
Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Wellington Moreira
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a TestesGregorio Melo
 
BDD - JBehave + SeleniumHQ + PhantomJS + Fixture Factory
BDD - JBehave + SeleniumHQ + PhantomJS  + Fixture FactoryBDD - JBehave + SeleniumHQ + PhantomJS  + Fixture Factory
BDD - JBehave + SeleniumHQ + PhantomJS + Fixture FactoryAndre Vinicius Buzzo
 
AMD, BDD, e o Javali
AMD, BDD, e o JavaliAMD, BDD, e o Javali
AMD, BDD, e o JavaliRafael Lyra
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017Vitor Mattos
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
Introdução a BDD
Introdução a BDDIntrodução a BDD
Introdução a BDDIsmael
 
DDD + BDD + TDD - RF 2015
DDD + BDD + TDD - RF 2015 DDD + BDD + TDD - RF 2015
DDD + BDD + TDD - RF 2015 Eduardo Bregaida
 
Node não é filme de Terror
Node não é filme de TerrorNode não é filme de Terror
Node não é filme de TerrorPaulo Pires
 
JS limpo e testável com Segregated DOM
JS limpo e testável com Segregated DOMJS limpo e testável com Segregated DOM
JS limpo e testável com Segregated DOMtdc-globalcode
 
ASP .NET MVC - Você esta pronto para a pílula vermelha?
ASP .NET MVC - Você esta pronto para a pílula vermelha?ASP .NET MVC - Você esta pronto para a pílula vermelha?
ASP .NET MVC - Você esta pronto para a pílula vermelha?Douglas Aguiar
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27Hélio Medeiros
 
TDD em JavaScript, rola?
TDD em JavaScript, rola?TDD em JavaScript, rola?
TDD em JavaScript, rola?Renan Siravegna
 
Por que testar é importante e algumas boas práticas
Por que testar é importante e algumas boas práticasPor que testar é importante e algumas boas práticas
Por que testar é importante e algumas boas práticasLucas Caton
 

Semelhante a TDD com RSpec: desenvolvimento orientado a testes (20)

Lean para potencializar a qualidade no software
Lean para potencializar a qualidade no softwareLean para potencializar a qualidade no software
Lean para potencializar a qualidade no software
 
clean code
clean codeclean code
clean code
 
Não existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu códigoNão existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu código
 
Java+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso TotalJava+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso Total
 
Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
BDD - JBehave + SeleniumHQ + PhantomJS + Fixture Factory
BDD - JBehave + SeleniumHQ + PhantomJS  + Fixture FactoryBDD - JBehave + SeleniumHQ + PhantomJS  + Fixture Factory
BDD - JBehave + SeleniumHQ + PhantomJS + Fixture Factory
 
AMD, BDD, e o Javali
AMD, BDD, e o JavaliAMD, BDD, e o Javali
AMD, BDD, e o Javali
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Introdução a BDD
Introdução a BDDIntrodução a BDD
Introdução a BDD
 
DDD + BDD + TDD - RF 2015
DDD + BDD + TDD - RF 2015 DDD + BDD + TDD - RF 2015
DDD + BDD + TDD - RF 2015
 
Node não é filme de Terror
Node não é filme de TerrorNode não é filme de Terror
Node não é filme de Terror
 
JS limpo e testável com Segregated DOM
JS limpo e testável com Segregated DOMJS limpo e testável com Segregated DOM
JS limpo e testável com Segregated DOM
 
ASP .NET MVC - Você esta pronto para a pílula vermelha?
ASP .NET MVC - Você esta pronto para a pílula vermelha?ASP .NET MVC - Você esta pronto para a pílula vermelha?
ASP .NET MVC - Você esta pronto para a pílula vermelha?
 
Behaviour-Driven Development com Ruby
Behaviour-Driven Development com RubyBehaviour-Driven Development com Ruby
Behaviour-Driven Development com Ruby
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27
 
TDD em JavaScript, rola?
TDD em JavaScript, rola?TDD em JavaScript, rola?
TDD em JavaScript, rola?
 
Clean Code na Prática
Clean Code na PráticaClean Code na Prática
Clean Code na Prática
 
Por que testar é importante e algumas boas práticas
Por que testar é importante e algumas boas práticasPor que testar é importante e algumas boas práticas
Por que testar é importante e algumas boas práticas
 

Mais de Leonardo "Hackin" Freire

Mais de Leonardo "Hackin" Freire (9)

iMasters DevCommerce 2016 - A difícil tarefa de ser TI numa empresa de varejo...
iMasters DevCommerce 2016 - A difícil tarefa de ser TI numa empresa de varejo...iMasters DevCommerce 2016 - A difícil tarefa de ser TI numa empresa de varejo...
iMasters DevCommerce 2016 - A difícil tarefa de ser TI numa empresa de varejo...
 
A arte de_pomodorar
A arte de_pomodorarA arte de_pomodorar
A arte de_pomodorar
 
ZTD e POMODOROS
ZTD e POMODOROSZTD e POMODOROS
ZTD e POMODOROS
 
Giran Sieges - Applescript com @leohackin
Giran Sieges - Applescript com @leohackinGiran Sieges - Applescript com @leohackin
Giran Sieges - Applescript com @leohackin
 
Hacking Twitter API [ Giran Siege ]
Hacking Twitter API [ Giran Siege ]Hacking Twitter API [ Giran Siege ]
Hacking Twitter API [ Giran Siege ]
 
Os desafios no uso de XP e SCRUM no dia-a-dia
Os desafios no uso de XP e SCRUM no dia-a-diaOs desafios no uso de XP e SCRUM no dia-a-dia
Os desafios no uso de XP e SCRUM no dia-a-dia
 
Iniciando com IphoneDev
Iniciando com IphoneDevIniciando com IphoneDev
Iniciando com IphoneDev
 
Designer vs programador
Designer vs programadorDesigner vs programador
Designer vs programador
 
PHPZEIRO: Adote um framework
PHPZEIRO: Adote um frameworkPHPZEIRO: Adote um framework
PHPZEIRO: Adote um framework
 

TDD com RSpec: desenvolvimento orientado a testes