SlideShare uma empresa Scribd logo
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étodologias
Orientadas 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: pt
Funcionalidade: Postar novas mensagem
  Como um usuário logado no urubu
  Eu quero postar novas mensagens
  Para compartilhar minhas mensagens com meus amigos

Cená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
Exemplo
require 'spec_helper'

describe 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
  end
end
Idéia


                 • Projeto “Urubu”
                 • Um twitter brasileiro.


http://www.flickr.com/photos/fcmont/5070170400/sizes/m/in/photostream/
require 'spec_helper'

describe User do
  describe ".public_messages" do
    it "deve retornar todas as mensagens públicas do
usuá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
  end
end
Falha
Código
class User < ActiveRecord::Base
  validates_uniqueness_of :login

  has_many :messages

  def public_messages
    self.messages.select { |m| !m.private? }
  end
end
Testes passando!
Refatore-me
class User < ActiveRecord::Base
  validates_uniqueness_of :login

  has_many :messages

  def public_messages
    self.messages.public_messages
  end
end
Refatore-me
class 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: pt
Funcionalidade: Postar novas mensagem
  Como um usuário logado no urubu
  Eu quero postar novas mensagens
  Para compartilhar minhas mensagens com meus amigos

Cená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
Exemplo

When /^vou para "(.+)"$/ do |url|
  visit url
end
Bdd rails 3
Bdd rails 3
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!
Bdd rails 3
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!

Mais conteúdo relacionado

PPT
Javascript levado a sério
PDF
DOMinando JavaScript
PDF
T03_LM3: Javascript (2013-2014)
PDF
Projeto de API, por Gilmar P.S
PDF
Node.js for Noobs
PDF
Por que Node JS?
PDF
(A04 e A05) LabMM3 - JavaScript
PPTX
Como tratar múltiplos JSONps com o mesmo callback name? - FloripaJS
Javascript levado a sério
DOMinando JavaScript
T03_LM3: Javascript (2013-2014)
Projeto de API, por Gilmar P.S
Node.js for Noobs
Por que Node JS?
(A04 e A05) LabMM3 - JavaScript
Como tratar múltiplos JSONps com o mesmo callback name? - FloripaJS

Mais procurados (15)

PDF
LabMM3 - Aula teórica 04
PPTX
Apresentação Trello
PDF
Receita do Sucesso no Mercado Front End
PPT
Entendendo um pouco melhor o que é Ruby
PPTX
Apresentação
PDF
Javascript Orientado a Objetos - Fisl12
PDF
Breve história do javascript modularizado
PPTX
Powershell “à minha maneira”
PPTX
Clean code: programando com WordPress de forma profissional
PDF
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
PDF
Node.js: 5 razões para começar a utilizar
PPT
Projeto Colaborativo
PPT
Apresentação ruby - IEI 2013
PDF
Documentando seu CSS
PDF
Design para WordPress- Anyssa Ferreira - WordCamp BH 2015
LabMM3 - Aula teórica 04
Apresentação Trello
Receita do Sucesso no Mercado Front End
Entendendo um pouco melhor o que é Ruby
Apresentação
Javascript Orientado a Objetos - Fisl12
Breve história do javascript modularizado
Powershell “à minha maneira”
Clean code: programando com WordPress de forma profissional
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
Node.js: 5 razões para começar a utilizar
Projeto Colaborativo
Apresentação ruby - IEI 2013
Documentando seu CSS
Design para WordPress- Anyssa Ferreira - WordCamp BH 2015
Anúncio

Destaque (7)

PDF
1w6 Regeln 2.4.0
PPTX
PPTX
Fukushima
PPT
Gnome Sort
PPTX
Power Point Greie
PPT
Genetik Cystische Fibrose
PDF
Cobertura extraordinaria Seguro Integral de Salud
1w6 Regeln 2.4.0
Fukushima
Gnome Sort
Power Point Greie
Genetik Cystische Fibrose
Cobertura extraordinaria Seguro Integral de Salud
Anúncio

Semelhante a Bdd rails 3 (20)

PPT
Dito Tech Talk RSpec
PDF
Behaviour-Driven Development com Ruby
PDF
Minicurso Ruby on Rails
PPT
rails_and_agile
KEY
Testes automatizados
KEY
Palestra Fatec
PDF
Palestra Desenvolvimento Ágil para Web com ROR UVA
KEY
Design Patterns on Rails
PPT
Testes Automatizados em Ruby on Rails
PDF
Ruby & Rails
PDF
Workshop Ruby on Rails dia 2 ruby-pt
KEY
Bdd e ci
PPTX
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
PPTX
Behaviour Driven Development
PDF
Esta começando a programar para a web? Então começe com Rails
ODP
Lapidando ruby
PPSX
Rails e Rails, introdução e estudo de caso
PDF
Palestra ror edted
PPTX
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
PPT
Tdd On Rails
Dito Tech Talk RSpec
Behaviour-Driven Development com Ruby
Minicurso Ruby on Rails
rails_and_agile
Testes automatizados
Palestra Fatec
Palestra Desenvolvimento Ágil para Web com ROR UVA
Design Patterns on Rails
Testes Automatizados em Ruby on Rails
Ruby & Rails
Workshop Ruby on Rails dia 2 ruby-pt
Bdd e ci
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Behaviour Driven Development
Esta começando a programar para a web? Então começe com Rails
Lapidando ruby
Rails e Rails, introdução e estudo de caso
Palestra ror edted
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
Tdd On Rails

Bdd rails 3

  • 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étodologias Orientadas 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: pt Funcionalidade: Postar novas mensagem Como um usuário logado no urubu Eu quero postar novas mensagens Para compartilhar minhas mensagens com meus amigos Cená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
  • 18. RSpec • Behavior Driven Development for Ruby • Foco no comportamento do código • DSL Simples • Sintaxe Limpa
  • 19. Exemplo require 'spec_helper' describe 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 end end
  • 20. Idéia • Projeto “Urubu” • Um twitter brasileiro. http://www.flickr.com/photos/fcmont/5070170400/sizes/m/in/photostream/
  • 21. require 'spec_helper' describe User do describe ".public_messages" do it "deve retornar todas as mensagens públicas do usuá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 end end
  • 22. Falha
  • 23. Código class User < ActiveRecord::Base validates_uniqueness_of :login has_many :messages def public_messages self.messages.select { |m| !m.private? } end end
  • 25. Refatore-me class User < ActiveRecord::Base validates_uniqueness_of :login has_many :messages def public_messages self.messages.public_messages end end
  • 26. Refatore-me class Message < ActiveRecord::Base belongs_to :user scope :public_messages, :conditions => {:private => false} end
  • 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: pt Funcionalidade: Postar novas mensagem Como um usuário logado no urubu Eu quero postar novas mensagens Para compartilhar minhas mensagens com meus amigos Cená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. Exemplo When /^vou para "(.+)"$/ do |url| visit url end
  • 35. Porém.. • Como testar realmente em um browser? • Muitas vezes o javascript interfere no comportamento do sistema • Capybara resolvendo o problema
  • 36. Capybara • Apenas mudando uma tag, conseguimos o teste rodando em um browser!
  • 38. Conclusões • Foco na melhoria de código • Foco em resolver o problema do cliente
  • 39. Experiências • Trabalhos realizados • Ruby Summer of Code - Projeto Octopus.
  • 40. 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
  • 41. Links para as ferramentas • www.cukes.info • www.rspec.info • http://jbehave.org/ - BDD com Java • http://everzet.com/Behat/ - BDD com PHP

Notas do Editor