Bdd rails 3
Upcoming SlideShare
Loading in...5
×
 

Bdd rails 3

on

  • 1,014 views

 

Statistics

Views

Total Views
1,014
Views on SlideShare
1,014
Embed Views
0

Actions

Likes
0
Downloads
15
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \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

Bdd rails 3 Bdd rails 3 Presentation Transcript

  • BDD com Rails 3 Thiago Pradi
  • Thiago Pradi• thiago.pradi@gmail.com• twitter.com/thiagopradi• github.com/tchandy• www.thiagopradi.net
  • 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
  • Rails?! http://www.designshak.com/blog/ruby-on-rails
  • Ruby on Rails• Full Stack Web Framework• Escrito em Ruby• Open Source• Usado com sucesso por inúmeras empresas
  • Rails 3• Modular• Refinado por mais de 1 ano• Bundler• Mais rápido que o Rails 2• Entre outras melhorias..
  • Vantagens do Rails• Produtividade• Código Limpo e Simples• Divertido ;-)
  • 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/
  • 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/
  • 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
  • BDD• Behavior Driven Development• Idealizado por Dan North• Inspirado no TDD• Nome dos testes mais “legíveis”• Foco no Comportamento
  • BDD e Requisitos• Requisitos são comportamentos• Linguagem Universal para testes de aceitação• Conceito de estórias
  • Estórias• As a ...• I Want to ...• so that ..
  • Cenários• Given ...• When ...• Then ...
  • #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!"
  • BDD On Rails• Difundido na comunidade e nas empresas• Várias ferramentas• Flexibilidade e facilidade com as ferramentas
  • Ferramentas• RSpec• Cucumber
  • RSpec• Behavior Driven Development for Ruby• Foco no comportamento do código• DSL Simples• Sintaxe Limpa
  • 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
  • Idéia • Projeto “Urubu” • Um twitter brasileiro.http://www.flickr.com/photos/fcmont/5070170400/sizes/m/in/photostream/
  • 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
  • Falha
  • Códigoclass User < ActiveRecord::Base validates_uniqueness_of :login has_many :messages def public_messages self.messages.select { |m| !m.private? } endend
  • Testes passando!
  • Refatore-meclass User < ActiveRecord::Base validates_uniqueness_of :login has_many :messages def public_messages self.messages.public_messages endend
  • Refatore-meclass Message < ActiveRecord::Base belongs_to :user scope :public_messages, :conditions => {:private =>false}end
  • Teste passando!
  • Cucumber• Definição de estórias no estilo BDD• Mesma linguagem entre desenvolvedores e clientes• Foco nas partes mais importantes para o cliente
  • Idéia• Um usuário precisa postar mensagens!
  • #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!"
  • Implementação• Cada linha do cenário equivele a uma “step”• Pode ser compartilhada entre cenários
  • ExemploWhen /^vou para "(.+)"$/ do |url| visit urlend
  • Porém..• Como testar realmente em um browser?• Muitas vezes o javascript interfere no comportamento do sistema• Capybara resolvendo o problema
  • Capybara• Apenas mudando uma tag, conseguimos o teste rodando em um browser!
  • Conclusões• Foco na melhoria de código• Foco em resolver o problema do cliente
  • Experiências• Trabalhos realizados• Ruby Summer of Code - Projeto Octopus.
  • 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
  • Links para as ferramentas• www.cukes.info• www.rspec.info• http://jbehave.org/ - BDD com Java• http://everzet.com/Behat/ - BDD com PHP
  • Obrigado!