SlideShare uma empresa Scribd logo
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++,
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"
O que é BDD?
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
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 de Rails :D
•  Um excelente livro sobre Rails?
http://www.novatec.com.br/livros/
rubyonrails2
Mas o que é cucumber?
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
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)
Reunião com o cliente!
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
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 |
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 |
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
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
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
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 |
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
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
Intrudução ao Behavior Driven Development (BDD) com Ruby on Rails
Anúncio

Recomendados

Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
Romulo Fagundes
 
IT Budgeting for Not-for-Profits
IT Budgeting for Not-for-Profits
Donny Shimamoto
 
What Are Organizations Budgeting For Regarding BI & EPM?
What Are Organizations Budgeting For Regarding BI & EPM?
KPI Partners
 
Mobilizing Volunteers
Mobilizing Volunteers
Urban Strategies
 
Growing Your Volunteer Program
Growing Your Volunteer Program
Michigan Nonprofit Association Online
 
Profiles in School Leadership_Leveraging Student-Based Budgeting_Report
Profiles in School Leadership_Leveraging Student-Based Budgeting_Report
Lauren Rapp
 
Chapter 10: Budgeting
Chapter 10: Budgeting
Nada G.Youssef
 
The University Cheat Sheet to Student Budgeting
The University Cheat Sheet to Student Budgeting
acasa
 
Demoiselle Behave - Parte 1
Demoiselle Behave - Parte 1
Vanderson Silva
 
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
Renato Groff
 
QArentena 21: BDD - com Fábio Araújo
QArentena 21: BDD - com Fábio Araújo
José Correia
 
Bdd&tdd
Bdd&tdd
Márcio Habigzang Brufatto
 
BDD: Cucumber + Selenium + Java
BDD: Cucumber + Selenium + Java
Cesar Augusto Nogueira
 
InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...
InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...
iMasters
 
Bdd e ci
Bdd e ci
almeidaricardo
 
Apresentação de BDD com SpecFlow e Selenium
Apresentação de BDD com SpecFlow e Selenium
Rafael Cruz, MCT, MBA
 
BDD em Testes de Serviço
BDD em Testes de Serviço
Rafael Lima
 
BDD em Ação
BDD em Ação
Uilian Ries
 
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Renato Groff
 
Agile trends GOV - Foco no Valor: Utilizando BDD para melhorar a comunicação ...
Agile trends GOV - Foco no Valor: Utilizando BDD para melhorar a comunicação ...
Guilherme Azevedo Cardozo
 
Behavior Driven Development - Unificando propostas de negócio com testes e có...
Behavior Driven Development - Unificando propostas de negócio com testes e có...
Rafael Prallon
 
Agile trends gov 2017 utilizando bdd para melhorar a comunicação e entregar...
Agile trends gov 2017 utilizando bdd para melhorar a comunicação e entregar...
Allan Ferreira
 
Testes utilizando cucumber + PhantomJs
Testes utilizando cucumber + PhantomJs
Locaweb
 
Bdd com cucumber + java + selenium
Bdd com cucumber + java + selenium
Sandy Maciel
 
BDD não é automação de teste - Scrum Gathering
BDD não é automação de teste - Scrum Gathering
Elias Nogueira
 
Introdução ao BDD com Gherkin
Introdução ao BDD com Gherkin
Valquíria Duarte D'Amato
 
Teste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste você
Tiago Link
 
Behaviour driven development, com jbehave
Behaviour driven development, com jbehave
Marcelo Zeferino
 
Ruby code smells
Ruby code smells
Rodrigo Urubatan
 
Data science in ruby is it possible? is it fast? should we use it?
Data science in ruby is it possible? is it fast? should we use it?
Rodrigo Urubatan
 

Mais conteúdo relacionado

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

Demoiselle Behave - Parte 1
Demoiselle Behave - Parte 1
Vanderson Silva
 
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
Renato Groff
 
QArentena 21: BDD - com Fábio Araújo
QArentena 21: BDD - com Fábio Araújo
José Correia
 
Bdd&tdd
Bdd&tdd
Márcio Habigzang Brufatto
 
BDD: Cucumber + Selenium + Java
BDD: Cucumber + Selenium + Java
Cesar Augusto Nogueira
 
InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...
InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...
iMasters
 
Bdd e ci
Bdd e ci
almeidaricardo
 
Apresentação de BDD com SpecFlow e Selenium
Apresentação de BDD com SpecFlow e Selenium
Rafael Cruz, MCT, MBA
 
BDD em Testes de Serviço
BDD em Testes de Serviço
Rafael Lima
 
BDD em Ação
BDD em Ação
Uilian Ries
 
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Renato Groff
 
Agile trends GOV - Foco no Valor: Utilizando BDD para melhorar a comunicação ...
Agile trends GOV - Foco no Valor: Utilizando BDD para melhorar a comunicação ...
Guilherme Azevedo Cardozo
 
Behavior Driven Development - Unificando propostas de negócio com testes e có...
Behavior Driven Development - Unificando propostas de negócio com testes e có...
Rafael Prallon
 
Agile trends gov 2017 utilizando bdd para melhorar a comunicação e entregar...
Agile trends gov 2017 utilizando bdd para melhorar a comunicação e entregar...
Allan Ferreira
 
Testes utilizando cucumber + PhantomJs
Testes utilizando cucumber + PhantomJs
Locaweb
 
Bdd com cucumber + java + selenium
Bdd com cucumber + java + selenium
Sandy Maciel
 
BDD não é automação de teste - Scrum Gathering
BDD não é automação de teste - Scrum Gathering
Elias Nogueira
 
Introdução ao BDD com Gherkin
Introdução ao BDD com Gherkin
Valquíria Duarte D'Amato
 
Teste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste você
Tiago Link
 
Behaviour driven development, com jbehave
Behaviour driven development, com jbehave
Marcelo Zeferino
 
Demoiselle Behave - Parte 1
Demoiselle Behave - Parte 1
Vanderson Silva
 
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
Renato Groff
 
QArentena 21: BDD - com Fábio Araújo
QArentena 21: BDD - com Fábio Araújo
José Correia
 
InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...
InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...
iMasters
 
Apresentação de BDD com SpecFlow e Selenium
Apresentação de BDD com SpecFlow e Selenium
Rafael Cruz, MCT, MBA
 
BDD em Testes de Serviço
BDD em Testes de Serviço
Rafael Lima
 
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Renato Groff
 
Agile trends GOV - Foco no Valor: Utilizando BDD para melhorar a comunicação ...
Agile trends GOV - Foco no Valor: Utilizando BDD para melhorar a comunicação ...
Guilherme Azevedo Cardozo
 
Behavior Driven Development - Unificando propostas de negócio com testes e có...
Behavior Driven Development - Unificando propostas de negócio com testes e có...
Rafael Prallon
 
Agile trends gov 2017 utilizando bdd para melhorar a comunicação e entregar...
Agile trends gov 2017 utilizando bdd para melhorar a comunicação e entregar...
Allan Ferreira
 
Testes utilizando cucumber + PhantomJs
Testes utilizando cucumber + PhantomJs
Locaweb
 
Bdd com cucumber + java + selenium
Bdd com cucumber + java + selenium
Sandy Maciel
 
BDD não é automação de teste - Scrum Gathering
BDD não é automação de teste - Scrum Gathering
Elias Nogueira
 
Teste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste você
Tiago Link
 
Behaviour driven development, com jbehave
Behaviour driven development, com jbehave
Marcelo Zeferino
 

Mais de Rodrigo Urubatan (20)

Ruby code smells
Ruby code smells
Rodrigo Urubatan
 
Data science in ruby is it possible? is it fast? should we use it?
Data science in ruby is it possible? is it fast? should we use it?
Rodrigo Urubatan
 
Data science in ruby, is it possible? is it fast? should we use it?
Data science in ruby, is it possible? is it fast? should we use it?
Rodrigo Urubatan
 
2018 the conf put git to work - increase the quality of your rails project...
2018 the conf put git to work - increase the quality of your rails project...
Rodrigo Urubatan
 
2018 RubyHACK: put git to work - increase the quality of your rails project...
2018 RubyHACK: put git to work - increase the quality of your rails project...
Rodrigo Urubatan
 
TDC2017 - POA - Aprendendo a usar Xamarin para desenvolver aplicações moveis ...
TDC2017 - POA - Aprendendo a usar Xamarin para desenvolver aplicações moveis ...
Rodrigo Urubatan
 
Your first game with unity3d framework
Your first game with unity3d framework
Rodrigo Urubatan
 
Tdc Floripa 2017 - 8 falácias da programação distribuída
Tdc Floripa 2017 - 8 falácias da programação distribuída
Rodrigo Urubatan
 
Rubyconf2016 - Solving communication problems in distributed teams with BDD
Rubyconf2016 - Solving communication problems in distributed teams with BDD
Rodrigo Urubatan
 
resolvendo problemas de comunicação em equipes distribuídas com bdd
resolvendo problemas de comunicação em equipes distribuídas com bdd
Rodrigo Urubatan
 
vantagens e desvantagens de trabalhar remoto
vantagens e desvantagens de trabalhar remoto
Rodrigo Urubatan
 
Using BDD to Solve communication problems
Using BDD to Solve communication problems
Rodrigo Urubatan
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
Rodrigo Urubatan
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Rodrigo Urubatan
 
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
Rodrigo Urubatan
 
Full Text Search com Solr, MySQL Full text e PostgreSQL Full Text
Full Text Search com Solr, MySQL Full text e PostgreSQL Full Text
Rodrigo Urubatan
 
Ruby para programadores java
Ruby para programadores java
Rodrigo Urubatan
 
Treinamento html5, css e java script apresentado na HP
Treinamento html5, css e java script apresentado na HP
Rodrigo Urubatan
 
Ruby on rails impressione a você mesmo, seu chefe e seu cliente
Ruby on rails impressione a você mesmo, seu chefe e seu cliente
Rodrigo Urubatan
 
Mini curso rails 3
Mini curso rails 3
Rodrigo Urubatan
 
Data science in ruby is it possible? is it fast? should we use it?
Data science in ruby is it possible? is it fast? should we use it?
Rodrigo Urubatan
 
Data science in ruby, is it possible? is it fast? should we use it?
Data science in ruby, is it possible? is it fast? should we use it?
Rodrigo Urubatan
 
2018 the conf put git to work - increase the quality of your rails project...
2018 the conf put git to work - increase the quality of your rails project...
Rodrigo Urubatan
 
2018 RubyHACK: put git to work - increase the quality of your rails project...
2018 RubyHACK: put git to work - increase the quality of your rails project...
Rodrigo Urubatan
 
TDC2017 - POA - Aprendendo a usar Xamarin para desenvolver aplicações moveis ...
TDC2017 - POA - Aprendendo a usar Xamarin para desenvolver aplicações moveis ...
Rodrigo Urubatan
 
Your first game with unity3d framework
Your first game with unity3d framework
Rodrigo Urubatan
 
Tdc Floripa 2017 - 8 falácias da programação distribuída
Tdc Floripa 2017 - 8 falácias da programação distribuída
Rodrigo Urubatan
 
Rubyconf2016 - Solving communication problems in distributed teams with BDD
Rubyconf2016 - Solving communication problems in distributed teams with BDD
Rodrigo Urubatan
 
resolvendo problemas de comunicação em equipes distribuídas com bdd
resolvendo problemas de comunicação em equipes distribuídas com bdd
Rodrigo Urubatan
 
vantagens e desvantagens de trabalhar remoto
vantagens e desvantagens de trabalhar remoto
Rodrigo Urubatan
 
Using BDD to Solve communication problems
Using BDD to Solve communication problems
Rodrigo Urubatan
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
Rodrigo Urubatan
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Rodrigo Urubatan
 
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
Rodrigo Urubatan
 
Full Text Search com Solr, MySQL Full text e PostgreSQL Full Text
Full Text Search com Solr, MySQL Full text e PostgreSQL Full Text
Rodrigo Urubatan
 
Ruby para programadores java
Ruby para programadores java
Rodrigo Urubatan
 
Treinamento html5, css e java script apresentado na HP
Treinamento html5, css e java script apresentado na HP
Rodrigo Urubatan
 
Ruby on rails impressione a você mesmo, seu chefe e seu cliente
Ruby on rails impressione a você mesmo, seu chefe e seu cliente
Rodrigo Urubatan
 
Anúncio

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

  • 1. Introdução ao BDD com Rails Por que comunicação é o mais importante
  • 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. O que é BDD?
  • 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
  • 6. Uma história sobre o projeto que não atingia nenhuma métrica
  • 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. Mas o que é cucumber?
  • 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. 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. Reunião com o cliente!
  • 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. 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. 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. 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. 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. 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. 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. 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. 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