Introdução ao
BDD com Rails
Por que comunicação é o mais importante
Sobre Urubatan
Trabalho com desenvolvimento desde 1997, já desenvolvi
sistemas em diversas linguagens, como Delphi, C, C++...
O que é BDD?
BDD é:
•  Uma forma de melhorar a comunicação entre equipes
•  Uma forma de melhorar a comunicação com o cliente
•  Uma fo...
BDD = Comunicação
Uma história sobre o
projeto que não atingia
nenhuma métrica
Exemplos em Rails
•  Eu precisava escolher uma ferramenta para
os exemplos
•  Integração perfeita com cucumber
•  Eu gosto...
Mas o que é cucumber?
Automação de testes
•  Cucumber = ferramenta de automação de
testes em linguagem natural
•  Automatizar um teste que o cli...
Ok, então é igual TDD?
•  O foco principal do BDD é comunicação
•  Linguagem ubiqua do negócio ao código
•  Automação de t...
Reunião com o cliente!
Funcionalidade 1
Funcionalidade: Acesso ao sistema
Como um usuário
Eu quero acessar o sistema utilizando minhas
credenciai...
Cenário 1
Cenário: Acesso de um administrador do sistema
Dado que exista um usuário "admin" com a senha "password"
E que e...
Cenário 1 (v2)
Cenário: Acesso de um administrador do sistema
Dado que exista um usuário "administrador" de nome "admin" e...
Domain Driven Design
O cliente fala usuário
O código tem uma entidade usuário
Não chamar de nenhuma outra coisa
O cliente ...
Backend dos testes
# encoding: utf-8
Dado(/^que exista um usuário "(.*?)" de nome "(.*?)" e senha "(.*?)"$/) do |papel, no...
Passos padrão BDD
Reunião com
usuário
Escrever
cenários
Validar
cenários com
usuário
Implementar código
para tornar o cená...
Cenário 2
Cenário: Acesso de um secretário do sistema
Dado que exista um usuário "secretario" de nome "sect" e senha "sect...
Backend dos testes
Então(/^não devo ver as seguintes opções no menu "(.*?)":$/) do |menu, opcoes|
within "section#menu" do...
Pontos importantes
•  Comunicação
•  Linguagem ubiqua
•  O cliente não vai escrever testes, mas se ele conseguir
ler, meta...
Intrudução ao Behavior Driven Development (BDD) com Ruby on Rails
Upcoming SlideShare
Loading in …5
×

Intrudução ao Behavior Driven Development (BDD) com Ruby on Rails

619 views
494 views

Published on

Palestra de introdução ao BDD com Ruby on Rails, focando nas bases do BDD como melhora na comunicação, linguagem ubiqua, DDD, e um pouco de automação de testes com cucumber.
Apresentada no evento de 10 anos no Grupo de usuários de Metodologias ágeis do rio grande do sul.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
619
On SlideShare
0
From Embeds
0
Number of Embeds
13
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Intrudução ao Behavior Driven Development (BDD) com Ruby on Rails

  1. 1. Introdução ao BDD com Rails Por que comunicação é o mais importante
  2. 2. Sobre Urubatan Trabalho com desenvolvimento desde 1997, já desenvolvi sistemas em diversas linguagens, como Delphi, C, C++, PHP, ASP, ColdFusion, Assembly, Leather, Java e Ruby. Atualmente trabalho na BrightWire com Ruby on Rails e ministro cursos sobre diversos assuntos. Alem de ser o autor do livro "Ruby On Rails: Desenvolvimento fácil e Rápido de aplicações web"
  3. 3. O que é BDD?
  4. 4. BDD é: •  Uma forma de melhorar a comunicação entre equipes •  Uma forma de melhorar a comunicação com o cliente •  Uma forma de utilizar uma única linguagem do negócio ao código da aplicação •  Uma forma de organizar o desenvolvimento da aplicação focando nas necessidades do cliente
  5. 5. BDD = Comunicação
  6. 6. Uma história sobre o projeto que não atingia nenhuma métrica
  7. 7. Exemplos em Rails •  Eu precisava escolher uma ferramenta para os exemplos •  Integração perfeita com cucumber •  Eu gosto de Rails :D •  Um excelente livro sobre Rails? http://www.novatec.com.br/livros/ rubyonrails2
  8. 8. Mas o que é cucumber?
  9. 9. Automação de testes •  Cucumber = ferramenta de automação de testes em linguagem natural •  Automatizar um teste que o cliente consiga entender vai te poupar muitas horas de re- trabalho •  ATDD -> UNIT - você escolhe o nível de testes a ser escrito
  10. 10. Ok, então é igual TDD? •  O foco principal do BDD é comunicação •  Linguagem ubiqua do negócio ao código •  Automação de testes é importante, mas não o principal (é possível usar BDD sem automação, mas não é nada divertido)
  11. 11. Reunião com o cliente!
  12. 12. Funcionalidade 1 Funcionalidade: Acesso ao sistema Como um usuário Eu quero acessar o sistema utilizando minhas credenciais Para que eu possa utilizar todos os recursos necessários ao meu trabalho
  13. 13. Cenário 1 Cenário: Acesso de um administrador do sistema Dado que exista um usuário "admin" com a senha "password" E que este usuário seja um administrador Quando eu acessar a página "login" E digitar "admin" no campo "Nome" E digitar "password" no campo "Senha" E pressionar "Login" Então devo ver o menu "Administração" E devo ver as seguintes opções: |opcao | |Criar usuário | |Cadastrar Aluno | |Lista de usuários| |Lista de alunos |
  14. 14. Cenário 1 (v2) Cenário: Acesso de um administrador do sistema Dado que exista um usuário "administrador" de nome "admin" e senha "password" Quando eu acessar o sistema com as credenciais "admin" "password" Então devo ver o menu "Administração" com as seguintes opções: |opcao | |Criar usuário | |Cadastrar Aluno | |Lista de usuários| |Lista de alunos |
  15. 15. Domain Driven Design O cliente fala usuário O código tem uma entidade usuário Não chamar de nenhuma outra coisa O cliente fala Aluno O código tem uma entidade Aluno Não chamar de cliente ou qualquer outra coisa
  16. 16. Backend dos testes # encoding: utf-8 Dado(/^que exista um usuário "(.*?)" de nome "(.*?)" e senha "(.*?)"$/) do |papel, nome, senha| Usuario.create :papel => papel, :nome => nome, :senha => senha end Quando(/^eu acessar o sistema com as credenciais "(.*?)" "(.*?)"$/) do |nome, senha| visit "/sessions/new" fill_in "Nome", :with => nome fill_in "Senha", :with => senha click_button "Login" end Então(/^devo ver o menu "(.*?)" com as seguintes opções:$/) do |menu, opcoes| within "section#menu" do page.should have_content(menu) opcoes.hashes.each do |line| text = line["opcao"] within "ul.menu" do page.should have_content(text) end end end
  17. 17. Passos padrão BDD Reunião com usuário Escrever cenários Validar cenários com usuário Implementar código para tornar o cenário válido Refatorar
  18. 18. Cenário 2 Cenário: Acesso de um secretário do sistema Dado que exista um usuário "secretario" de nome "sect" e senha "sectpass" Quando eu acessar o sistema com as credenciais "sect" "sectpass" Então devo ver o menu "Secretaria" com as seguintes opções: |opcao | |Lista de usuários| |Lista de alunos | Então não devo ver as seguintes opções no menu "Secretaria": |opcao | |Criar usuário | |Cadastrar Aluno |
  19. 19. Backend dos testes Então(/^não devo ver as seguintes opções no menu "(.*?)":$/) do |menu, opcoes| within "section#menu" do page.should have_content(menu) opcoes.hashes.each do |line| text = line["opcao"] within "ul.menu" do page.should_not have_content(text) end end end end
  20. 20. Pontos importantes •  Comunicação •  Linguagem ubiqua •  O cliente não vai escrever testes, mas se ele conseguir ler, metade dos problemas de comunicação serão resolvidos •  A comunicação não é importante só com clientes, equipes diferentes, com não programadores também se beneficiam bastante

×