Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
753
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
15
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

Transcript

  • 1. BDD com Rails 3 Thiago Pradi
  • 2. Thiago Pradi• thiago.pradi@gmail.com• twitter.com/thiagopradi• github.com/tchandy• www.thiagopradi.net
  • 3. Thiago Pradi• Desenvolvedor Ruby por 3 anos• Atualmente trabalha pela Taoweb• Bacharelando em ciência da computação pela FURB• Participou do Ruby Summer of Code
  • 4. Rails?! http://www.designshak.com/blog/ruby-on-rails
  • 5. Ruby on Rails• Full Stack Web Framework• Escrito em Ruby• Open Source• Usado com sucesso por inúmeras empresas
  • 6. Rails 3• Modular• Refinado por mais de 1 ano• Bundler• Mais rápido que o Rails 2• Entre outras melhorias..
  • 7. Vantagens do Rails• Produtividade• Código Limpo e Simples• Divertido ;-)
  • 8. Porém..• Como retirar valor para o cliente de um um ambiente caótico?• Com código realmente sólido?! http://www.flickr.com/photos/tracy_olson/61056391/
  • 9. MétodologiasOrientadas a teste são a solução! (ou ao menos, parte dela) http://www.flickr.com/photos/cayusa/981372736/sizes/m/in/photostream/
  • 10. TDD• Test Driven Development• Originada no Smalltalk• Idealizado por Kent Beck• Três Passos: Teste Falhando, Código para o teste passar, Melhorar o código.• Foco no problema a ser resolvido
  • 11. BDD• Behavior Driven Development• Idealizado por Dan North• Inspirado no TDD• Nome dos testes mais “legíveis”• Foco no Comportamento
  • 12. BDD e Requisitos• Requisitos são comportamentos• Linguagem Universal para testes de aceitação• Conceito de estórias
  • 13. Estórias• As a ...• I Want to ...• so that ..
  • 14. Cenários• Given ...• When ...• Then ...
  • 15. #language: ptFuncionalidade: Postar novas mensagem Como um usuário logado no urubu Eu quero postar novas mensagens Para compartilhar minhas mensagens com meus amigosCenário: Postando uma nova mensagem Dado que eu estou logado como o usuário thiago Quando eu vou para a página principal E sigo nova mensagem E preencho "Mensagem" com "Olá, Usuários do Urubu!" E pressiono "Postar" Então eu devo ver "Mensagem postada com sucesso!"
  • 16. BDD On Rails• Difundido na comunidade e nas empresas• Várias ferramentas• Flexibilidade e facilidade com as ferramentas
  • 17. Ferramentas• RSpec• Cucumber
  • 18. RSpec• Behavior Driven Development for Ruby• Foco no comportamento do código• DSL Simples• Sintaxe Limpa
  • 19. Exemplorequire spec_helperdescribe User do it "não deve permitir usuários com o mesmo login" do User.create!(:login => "thiago") u = User.new(:login => "thiago") u.save.should be_false endend
  • 20. Idéia • Projeto “Urubu” • Um twitter brasileiro.http://www.flickr.com/photos/fcmont/5070170400/sizes/m/in/photostream/
  • 21. require spec_helperdescribe User do describe ".public_messages" do it "deve retornar todas as mensagens públicas dousuário" do user = User.create!(:login => "thiago") men1 = user.messages.create!(:body =>"Pública", :private => false) men2 = user.messages.create!(:body =>"Privada", :private => true) user.public_messages.should == [men1] end endend
  • 22. Falha
  • 23. Códigoclass User < ActiveRecord::Base validates_uniqueness_of :login has_many :messages def public_messages self.messages.select { |m| !m.private? } endend
  • 24. Testes passando!
  • 25. Refatore-meclass User < ActiveRecord::Base validates_uniqueness_of :login has_many :messages def public_messages self.messages.public_messages endend
  • 26. Refatore-meclass Message < ActiveRecord::Base belongs_to :user scope :public_messages, :conditions => {:private =>false}end
  • 27. Teste passando!
  • 28. Cucumber• Definição de estórias no estilo BDD• Mesma linguagem entre desenvolvedores e clientes• Foco nas partes mais importantes para o cliente
  • 29. Idéia• Um usuário precisa postar mensagens!
  • 30. #language: ptFuncionalidade: Postar novas mensagem Como um usuário logado no urubu Eu quero postar novas mensagens Para compartilhar minhas mensagens com meus amigosCenário: Postando uma nova mensagem Dado que eu estou logado como o usuário thiago Quando eu vou para a página principal E sigo nova mensagem E preencho "Mensagem" com "Olá, Usuários do Urubu!" E pressiono "Postar" Então eu devo ver "Mensagem postada com sucesso!"
  • 31. Implementação• Cada linha do cenário equivele a uma “step”• Pode ser compartilhada entre cenários
  • 32. ExemploWhen /^vou para "(.+)"$/ do |url| visit urlend
  • 33. Porém..• Como testar realmente em um browser?• Muitas vezes o javascript interfere no comportamento do sistema• Capybara resolvendo o problema
  • 34. Capybara• Apenas mudando uma tag, conseguimos o teste rodando em um browser!
  • 35. Conclusões• Foco na melhoria de código• Foco em resolver o problema do cliente
  • 36. Experiências• Trabalhos realizados• Ruby Summer of Code - Projeto Octopus.
  • 37. Algumas dicas finais• TDD e BDD não são silver bullets• Porém, siga o principio TAFT, “Test all the Fucking Time”.• Sinta você mesmo as melhorias ao usar TDD/BDD
  • 38. Links para as ferramentas• www.cukes.info• www.rspec.info• http://jbehave.org/ - BDD com Java• http://everzet.com/Behat/ - BDD com PHP
  • 39. Obrigado!