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
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
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
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
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!"
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