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

  • View
    337

  • Download
    4

Embed Size (px)

DESCRIPTION

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.

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

  • 1. Introduo ao BDD com Rails Por que comunicao 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 fcil e Rpido de aplicaes web" 3. O que BDD? 4. BDD : Uma forma de melhorar a comunicao entre equipes Uma forma de melhorar a comunicao com o cliente Uma forma de utilizar uma nica linguagem do negcio ao cdigo da aplicao Uma forma de organizar o desenvolvimento da aplicao focando nas necessidades do cliente 5. BDD = Comunicao 6. Uma histria sobre o projeto que no atingia nenhuma mtrica 7. Exemplos em Rails Eu precisava escolher uma ferramenta para os exemplos Integrao 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. Automao de testes Cucumber = ferramenta de automao 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 nvel de testes a ser escrito 10. Ok, ento igual TDD? O foco principal do BDD comunicao Linguagem ubiqua do negcio ao cdigo Automao de testes importante, mas no o principal ( possvel usar BDD sem automao, mas no nada divertido) 11. Reunio com o cliente! 12. Funcionalidade 1 Funcionalidade: Acesso ao sistema Como um usurio Eu quero acessar o sistema utilizando minhas credenciais Para que eu possa utilizar todos os recursos necessrios ao meu trabalho 13. Cenrio 1 Cenrio: Acesso de um administrador do sistema Dado que exista um usurio "admin" com a senha "password" E que este usurio seja um administrador Quando eu acessar a pgina "login" E digitar "admin" no campo "Nome" E digitar "password" no campo "Senha" E pressionar "Login" Ento devo ver o menu "Administrao" E devo ver as seguintes opes: |opcao | |Criar usurio | |Cadastrar Aluno | |Lista de usurios| |Lista de alunos | 14. Cenrio 1 (v2) Cenrio: Acesso de um administrador do sistema Dado que exista um usurio "administrador" de nome "admin" e senha "password" Quando eu acessar o sistema com as credenciais "admin" "password" Ento devo ver o menu "Administrao" com as seguintes opes: |opcao | |Criar usurio | |Cadastrar Aluno | |Lista de usurios| |Lista de alunos | 15. Domain Driven Design O cliente fala usurio O cdigo tem uma entidade usurio No chamar de nenhuma outra coisa O cliente fala Aluno O cdigo tem uma entidade Aluno No chamar de cliente ou qualquer outra coisa 16. Backend dos testes # encoding: utf-8 Dado(/^que exista um usurio "(.*?)" 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 Ento(/^devo ver o menu "(.*?)" com as seguintes opes:$/) 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 padro BDD Reunio com usurio Escrever cenrios Validar cenrios com usurio Implementar cdigo para tornar o cenrio vlido Refatorar 18. Cenrio 2 Cenrio: Acesso de um secretrio do sistema Dado que exista um usurio "secretario" de nome "sect" e senha "sectpass" Quando eu acessar o sistema com as credenciais "sect" "sectpass" Ento devo ver o menu "Secretaria" com as seguintes opes: |opcao | |Lista de usurios| |Lista de alunos | Ento no devo ver as seguintes opes no menu "Secretaria": |opcao | |Criar usurio | |Cadastrar Aluno | 19. Backend dos testes Ento(/^no devo ver as seguintes opes 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 Comunicao Linguagem ubiqua O cliente no vai escrever testes, mas se ele conseguir ler, metade dos problemas de comunicao sero resolvidos A comunicao no importante s com clientes, equipes diferentes, com no programadores tambm se beneficiam bastante