SlideShare una empresa de Scribd logo
1 de 21
Descargar para leer sin conexión
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

Más contenido relacionado

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

QArentena 21: BDD - com Fábio Araújo
QArentena 21: BDD - com Fábio AraújoQArentena 21: BDD - com Fábio Araújo
QArentena 21: BDD - com Fábio AraújoJosé Correia
 
Bdd rails 3
Bdd rails 3Bdd rails 3
Bdd rails 3tchandy
 
Seu Cliente no Controle! Testes ágeis
Seu Cliente no Controle! Testes ágeisSeu Cliente no Controle! Testes ágeis
Seu Cliente no Controle! Testes ágeisVanderson Silva
 
Demoiselle Behave - Parte 1
Demoiselle Behave - Parte 1Demoiselle Behave - Parte 1
Demoiselle Behave - Parte 1Vanderson Silva
 
Clean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de SoftwareClean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de SoftwareGabriel Felipe Soares
 
Desenvolvimento em .Net - User Interface
Desenvolvimento em .Net - User InterfaceDesenvolvimento em .Net - User Interface
Desenvolvimento em .Net - User InterfaceVitor Silva
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a TestesGregorio Melo
 
Workshop - Business Process Management
Workshop - Business Process ManagementWorkshop - Business Process Management
Workshop - Business Process ManagementThiago Pereira
 
Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Alex Guido
 
2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao android2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao androidMessias Batista
 
O Impacto das Capacidades Robóticas - Adoção da Força de Trabalho Digital (RPA)
O Impacto das Capacidades Robóticas - Adoção da Força de Trabalho Digital (RPA)O Impacto das Capacidades Robóticas - Adoção da Força de Trabalho Digital (RPA)
O Impacto das Capacidades Robóticas - Adoção da Força de Trabalho Digital (RPA)Eduardo Britto
 
Redu walled garden
Redu walled gardenRedu walled garden
Redu walled gardenGuilherme
 
pepinos do cliente no código de testes da aplicação com OSS
pepinos do cliente no código de testes da aplicação com OSSpepinos do cliente no código de testes da aplicação com OSS
pepinos do cliente no código de testes da aplicação com OSSRodrigo Urubatan
 
Clean code: programando com WordPress de forma profissional
Clean code: programando com WordPress de forma profissionalClean code: programando com WordPress de forma profissional
Clean code: programando com WordPress de forma profissionalLeo Baiano
 

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

QArentena 21: BDD - com Fábio Araújo
QArentena 21: BDD - com Fábio AraújoQArentena 21: BDD - com Fábio Araújo
QArentena 21: BDD - com Fábio Araújo
 
Bdd rails 3
Bdd rails 3Bdd rails 3
Bdd rails 3
 
Seu Cliente no Controle! Testes ágeis
Seu Cliente no Controle! Testes ágeisSeu Cliente no Controle! Testes ágeis
Seu Cliente no Controle! Testes ágeis
 
Demoiselle Behave - Parte 1
Demoiselle Behave - Parte 1Demoiselle Behave - Parte 1
Demoiselle Behave - Parte 1
 
#{GCODE}
#{GCODE}#{GCODE}
#{GCODE}
 
Clean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de SoftwareClean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de Software
 
Aula1
Aula1Aula1
Aula1
 
Desenvolvimento em .Net - User Interface
Desenvolvimento em .Net - User InterfaceDesenvolvimento em .Net - User Interface
Desenvolvimento em .Net - User Interface
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
Cucumber-QA_Night
Cucumber-QA_NightCucumber-QA_Night
Cucumber-QA_Night
 
Workshop - Business Process Management
Workshop - Business Process ManagementWorkshop - Business Process Management
Workshop - Business Process Management
 
Grails
GrailsGrails
Grails
 
Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.
 
2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao android2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao android
 
Ns tutorial so
Ns tutorial soNs tutorial so
Ns tutorial so
 
O Impacto das Capacidades Robóticas - Adoção da Força de Trabalho Digital (RPA)
O Impacto das Capacidades Robóticas - Adoção da Força de Trabalho Digital (RPA)O Impacto das Capacidades Robóticas - Adoção da Força de Trabalho Digital (RPA)
O Impacto das Capacidades Robóticas - Adoção da Força de Trabalho Digital (RPA)
 
Redu walled garden
Redu walled gardenRedu walled garden
Redu walled garden
 
pepinos do cliente no código de testes da aplicação com OSS
pepinos do cliente no código de testes da aplicação com OSSpepinos do cliente no código de testes da aplicação com OSS
pepinos do cliente no código de testes da aplicação com OSS
 
Clean code: programando com WordPress de forma profissional
Clean code: programando com WordPress de forma profissionalClean code: programando com WordPress de forma profissional
Clean code: programando com WordPress de forma profissional
 
Design de Interface - Diretrizes
Design de Interface - DiretrizesDesign de Interface - Diretrizes
Design de Interface - Diretrizes
 

Más de 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?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?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...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...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 ...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 frameworkYour first game with unity3d framework
Your first game with unity3d frameworkRodrigo Urubatan
 
Tdc Floripa 2017 - 8 falácias da programação distribuída
Tdc Floripa 2017 -  8 falácias da programação distribuídaTdc Floripa 2017 -  8 falácias da programação distribuída
Tdc Floripa 2017 - 8 falácias da programação distribuídaRodrigo Urubatan
 
Rubyconf2016 - Solving communication problems in distributed teams with BDD
Rubyconf2016 - Solving communication problems in distributed teams with BDDRubyconf2016 - Solving communication problems in distributed teams with BDD
Rubyconf2016 - Solving communication problems in distributed teams with BDDRodrigo Urubatan
 
resolvendo problemas de comunicação em equipes distribuídas com bdd
resolvendo problemas de comunicação em equipes distribuídas com bddresolvendo problemas de comunicação em equipes distribuídas com bdd
resolvendo problemas de comunicação em equipes distribuídas com bddRodrigo Urubatan
 
vantagens e desvantagens de trabalhar remoto
vantagens e desvantagens de trabalhar remotovantagens e desvantagens de trabalhar remoto
vantagens e desvantagens de trabalhar remotoRodrigo Urubatan
 
Using BDD to Solve communication problems
Using BDD to Solve communication problemsUsing BDD to Solve communication problems
Using BDD to Solve communication problemsRodrigo Urubatan
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JSRodrigo Urubatan
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Rodrigo Urubatan
 
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015  - Interfaces Ricas com Rails e React.JSTDC São Paulo 2015  - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JSRodrigo Urubatan
 
Full Text Search com Solr, MySQL Full text e PostgreSQL Full Text
Full Text Search com Solr, MySQL Full text e PostgreSQL Full TextFull Text Search com Solr, MySQL Full text e PostgreSQL Full Text
Full Text Search com Solr, MySQL Full text e PostgreSQL Full TextRodrigo Urubatan
 
Ruby para programadores java
Ruby para programadores javaRuby para programadores java
Ruby para programadores javaRodrigo Urubatan
 
Treinamento html5, css e java script apresentado na HP
Treinamento html5, css e java script apresentado na HPTreinamento html5, css e java script apresentado na HP
Treinamento html5, css e java script apresentado na HPRodrigo Urubatan
 
Ruby on rails impressione a você mesmo, seu chefe e seu cliente
Ruby on rails  impressione a você mesmo, seu chefe e seu clienteRuby on rails  impressione a você mesmo, seu chefe e seu cliente
Ruby on rails impressione a você mesmo, seu chefe e seu clienteRodrigo Urubatan
 

Más de Rodrigo Urubatan (20)

Ruby code smells
Ruby code smellsRuby code smells
Ruby code smells
 
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?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?
 
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?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?
 
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...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...
 
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...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...
 
TDC2017 - POA - Aprendendo a usar Xamarin para desenvolver aplicações moveis ...
TDC2017 - POA - Aprendendo a usar Xamarin para desenvolver aplicações moveis ...TDC2017 - POA - Aprendendo a usar Xamarin para desenvolver aplicações moveis ...
TDC2017 - POA - Aprendendo a usar Xamarin para desenvolver aplicações moveis ...
 
Your first game with unity3d framework
Your first game with unity3d frameworkYour first game with unity3d framework
Your first game with unity3d framework
 
Tdc Floripa 2017 - 8 falácias da programação distribuída
Tdc Floripa 2017 -  8 falácias da programação distribuídaTdc Floripa 2017 -  8 falácias da programação distribuída
Tdc Floripa 2017 - 8 falácias da programação distribuída
 
Rubyconf2016 - Solving communication problems in distributed teams with BDD
Rubyconf2016 - Solving communication problems in distributed teams with BDDRubyconf2016 - Solving communication problems in distributed teams with BDD
Rubyconf2016 - Solving communication problems in distributed teams with BDD
 
resolvendo problemas de comunicação em equipes distribuídas com bdd
resolvendo problemas de comunicação em equipes distribuídas com bddresolvendo problemas de comunicação em equipes distribuídas com bdd
resolvendo problemas de comunicação em equipes distribuídas com bdd
 
vantagens e desvantagens de trabalhar remoto
vantagens e desvantagens de trabalhar remotovantagens e desvantagens de trabalhar remoto
vantagens e desvantagens de trabalhar remoto
 
Using BDD to Solve communication problems
Using BDD to Solve communication problemsUsing BDD to Solve communication problems
Using BDD to Solve communication problems
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
 
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015  - Interfaces Ricas com Rails e React.JSTDC São Paulo 2015  - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
 
Full Text Search com Solr, MySQL Full text e PostgreSQL Full Text
Full Text Search com Solr, MySQL Full text e PostgreSQL Full TextFull Text Search com Solr, MySQL Full text e PostgreSQL Full Text
Full Text Search com Solr, MySQL Full text e PostgreSQL Full Text
 
Ruby para programadores java
Ruby para programadores javaRuby para programadores java
Ruby para programadores java
 
Treinamento html5, css e java script apresentado na HP
Treinamento html5, css e java script apresentado na HPTreinamento html5, css e java script apresentado na HP
Treinamento html5, css e java script apresentado na HP
 
Ruby on rails impressione a você mesmo, seu chefe e seu cliente
Ruby on rails  impressione a você mesmo, seu chefe e seu clienteRuby on rails  impressione a você mesmo, seu chefe e seu cliente
Ruby on rails impressione a você mesmo, seu chefe e seu cliente
 
Mini curso rails 3
Mini curso rails 3Mini curso rails 3
Mini curso rails 3
 

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