SlideShare uma empresa Scribd logo
1 de 50
Desenvolvimento Ágil com Ruby on
        Rails na GoNow
             Rafael Rosa
           Ricardo Almeida
Quem Somos?
            Rafael Rosa          Ricardo Almeida
14 anos na área           Atua na área desde 2002. Atualmente trabalha
Ruby Inside Brasil        com projetos em Ruby on Rails. Escreve para os
Guru-SP                   blogs manifestonaweb.wordpress.com e
                          visaoagil.wordpress.com. Trabalha como editor
                          técnico do Infoq Brasil. Escreve para a revista
                          técnica Java Magazine.
Quem Somos?
            Rafael Rosa          Ricardo Almeida
14 anos na área           Atua na área desde 2002. Atualmente trabalha
Ruby Inside Brasil        com projetos em Ruby on Rails. Escreve para os
Guru-SP                   blogs manifestonaweb.wordpress.com e
                          visaoagil.wordpress.com. Trabalha como editor
                          técnico do Infoq Brasil. Escreve para a revista
                          técnica Java Magazine.
Vamos Experimentar!
               Try Ruby
    http://tryruby.sophrinix.com/
O Que é Ruby

• Desde 1995
• Simples, poderosa e expressiva
• Orientada a Objetos
• Dinâmica e fortemente tipada
Por que Ruby?
O que é Ruby on Rails?

• Framework web
• Criado em 2004
• David Heinemeier Hanson
• Vulgo: DHH
O que é Ruby on Rails?

• Framework web
• Criado em 2004
• David Heinemeier Hanson
• Vulgo: DHH
• Ele tinha 21 anos
O que é Ruby on Rails?
• MVC (Model View Controller)
O que é Ruby on Rails?
• Convention over configuration
 • Pronta para ser usada (full stack)
 • Estrutura
 • ORM - ActiveRecord
 • Javascript - Prototype
O que é Agilidade
O que é Agilidade
Scrum
Por que Rails?
• Produtividade
 • E no início havia o Java...
   • XML
   • Complexo
 • Práticas ágeis
 • Mais resultado em menos tempo
Por que Rails?
• Código de boa qualidade
 • Boa cobertura de Testes
 • Flexibilidade
 • Fácil manutenção
 • DRY
 • Pensado para a web
Exemplos Reais
• Social
• Goin-ads
Como fazemos? Testes
Rspec
describe Account do
  context "transfering money" do
    it "deposits transfer amount to the other account" do
      source = Account.new(50, :USD)
      target = mock('target account')
      target.should_receive(:deposit).with(Money.new(5, :USD))
      source.transfer(5, :USD).to(target)
    end

    it "reduces its balance by the transfer amount" do
      source = Account.new(50, :USD)
      target = stub('target account')
      source.transfer(5, :USD).to(target)
      source.balance.should == Money.new(45, :USD)
    end
  end
end
Cucumber
Funcionalidade: Adição
  Para evitar erros bobos
  Como um péssimo matemático
  Eu quero saber como somar dois números
 
  Cenário: Adicionar dois números
    Dado que eu digitei 50 na calculadora
    E que eu digitei 70 na calculadora
    Quando eu aperto o botão de soma
    Então o resultado na calculadora deve ser 120
Cucumber
Funcionalidade: Cadastrar Business Owner
  Como product owner
  Desejo que os donos de cada negócio se cadastrem
  De modo que consiga segmentar seus dados
 
  Cenário: Padrão
    Dado que estou na página de cadastro
    Quando preencher o email com labs@gonow.com.br
    E clicar Enviar
    Então devo ver a mensagem "Bem vindo ao Goin-Ads"
    E devo ver o token na tela
    E devo ver o email na tela
Remarkable
describe Advertise do
  should_belong_to :business_owner
  should_validate_presence_of :business_owner
  should_have_one :local
  should_have_many :dynamic_attributes,
                   :dependent => :destroy
end
Como Fazemos?
• Ferramentas
 • Kanban
 • Pivotal
 • Git - Versionamento de Código
 • Continuous Integration (Signal)
 • Hoptoad
 • New Relic
Como? InheritedResources
   class PerfisController < ApplicationController
     def index
       @perfis = Perfil.all

       respond_to do |format|
         format.html # index.html.erb
         format.xml  { render :xml => @perfis }
       end
     end

     def show
       @perfil = Perfil.find(params[:id])

       respond_to do |format|
         format.html # show.html.erb
         format.xml  { render :xml => @perfil }
       end
     end

     def new
       @perfil = Perfil.new

       respond_to do |format|
         format.html # new.html.erb
         format.xml  { render :xml => @perfil }
       end
     end
    
     def edit
       @perfil = Perfil.find(params[:id])
     end
     .......
Como? InheritedResources

class PerfisController < InheritedResources::Base
  respond_to :html, :xml
end
Como?


• HTML => HAML
• CSS => LESS
Resultado



• Cobertura de Testes
• Duplicação
• Complexidade
Resultado
•   ROI - Return Over Investment
    •   Entregar antes
    •   Entregar o que importa
Resultado

• Reviews
 • Melhoria Contínua
 • Comunicação
Resultado

• Retrospectiva
 • Inspecionar e Adaptar
 • Aprender
 • Motivação
 • Linha do Tempo
Resultado
• Documentação
 • Viva
 • Útil
 • Atualizada
 • Executável
• Cucumber
Serve para mim?
Serve para mim?
Serve para mim?
• Programação poliglota
 • Melhora habilidades em todas
• Integração com o mundo corporativo
Serve para mim?
• Programação poliglota
 • Melhora habilidades em todas
• Integração com o mundo corporativo
E agora?
•   Fácil de aprender
•   Comunidade
    •   Rails Guides
    •   Github
    •   Ruby Inside Brasil
    •   Ruby Onda
    •   Guru-SP
    •   Listas e fóruns
    •   Vídeos e Screencasts
E agora?
•   Fácil de aprender
•   Comunidade
    •   Rails Guides
    •   Github
    •   Ruby Inside Brasil
    •   Ruby Onda
    •   Guru-SP
    •   Listas e fóruns
    •   Vídeos e Screencasts
E agora?
•   Fácil de aprender
•   Comunidade
    •   Rails Guides
    •   Github
    •   Ruby Inside Brasil
    •   Ruby Onda
    •   Guru-SP
    •   Listas e fóruns
    •   Vídeos e Screencasts
E agora?
•   Fácil de aprender
•   Comunidade
    •   Rails Guides
    •   Github
    •   Ruby Inside Brasil
    •   Ruby Onda
    •   Guru-SP
    •   Listas e fóruns
    •   Vídeos e Screencasts
E agora?
•   Fácil de aprender
•   Comunidade
    •   Rails Guides
    •   Github
    •   Ruby Inside Brasil
    •   Ruby Onda
    •   Guru-SP
    •   Listas e fóruns
    •   Vídeos e Screencasts
Obrigado!
• http://www.gonow.com.br/treinamentos
• http://manifestonaweb.wordpress.com
• @almeidaricardo
• @rafaelrosafu
• ricardoluiz1.almeida@gmail.com
• rafaelrosafu@gmail.com

Mais conteúdo relacionado

Semelhante a Desenvolvimento Ágil com Ruby on Rails

Ruby On Rails - Porque Utilizar?
Ruby On Rails - Porque Utilizar?Ruby On Rails - Porque Utilizar?
Ruby On Rails - Porque Utilizar?David Ruiz
 
Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)Joao Lucas Santana
 
Java e Mercado de Trabalho
Java e Mercado de TrabalhoJava e Mercado de Trabalho
Java e Mercado de TrabalhoEduardo Carvalho
 
Reuso De Código Com Rails
Reuso De Código Com RailsReuso De Código Com Rails
Reuso De Código Com RailsRodrigo Urubatan
 
Introdução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em RailsIntrodução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em Railsoverduka
 
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
 
Palestra ror edted
Palestra ror edtedPalestra ror edted
Palestra ror edtedbrunoaalves
 
Locaweb + Spree: transformando código aberto em um projeto comercial
Locaweb + Spree: transformando código aberto em um projeto comercialLocaweb + Spree: transformando código aberto em um projeto comercial
Locaweb + Spree: transformando código aberto em um projeto comercialFernando Hamasaki de Amorim
 
Carreira de Desenvolvimento
Carreira de DesenvolvimentoCarreira de Desenvolvimento
Carreira de DesenvolvimentoAlvaro Viebrantz
 
Ruby on Rails - Filosofia e Prática
Ruby on Rails - Filosofia e PráticaRuby on Rails - Filosofia e Prática
Ruby on Rails - Filosofia e PráticaGabriel Molter
 
Como funciona uma empresa ágil de desenvolvimento de software
Como funciona uma empresa ágil de desenvolvimento de softwareComo funciona uma empresa ágil de desenvolvimento de software
Como funciona uma empresa ágil de desenvolvimento de softwareElvis Lima
 
Bdd rails 3
Bdd rails 3Bdd rails 3
Bdd rails 3tchandy
 
Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011Andre Bernardes
 
Ruby on Rails Colocando a web nos trilhos
Ruby on Rails Colocando a web nos trilhosRuby on Rails Colocando a web nos trilhos
Ruby on Rails Colocando a web nos trilhosjpaulolins
 
Dev in Rio - Uma Visão do Mundo Ruby
Dev in Rio - Uma Visão do Mundo RubyDev in Rio - Uma Visão do Mundo Ruby
Dev in Rio - Uma Visão do Mundo RubyFabio Akita
 
Mini-curso RoR - Apresentação
Mini-curso RoR - ApresentaçãoMini-curso RoR - Apresentação
Mini-curso RoR - ApresentaçãoAgence Educacional
 
ruby on rails e o mercado
ruby on rails e o mercadoruby on rails e o mercado
ruby on rails e o mercadoelliando dias
 

Semelhante a Desenvolvimento Ágil com Ruby on Rails (20)

Ruby On Rails - Porque Utilizar?
Ruby On Rails - Porque Utilizar?Ruby On Rails - Porque Utilizar?
Ruby On Rails - Porque Utilizar?
 
Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)
 
Java e Mercado de Trabalho
Java e Mercado de TrabalhoJava e Mercado de Trabalho
Java e Mercado de Trabalho
 
Reuso De Código Com Rails
Reuso De Código Com RailsReuso De Código Com Rails
Reuso De Código Com Rails
 
Introdução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em RailsIntrodução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em Rails
 
Ruby on Rails
Ruby on RailsRuby on Rails
Ruby on Rails
 
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
 
Palestra ror edted
Palestra ror edtedPalestra ror edted
Palestra ror edted
 
Locaweb + Spree: transformando código aberto em um projeto comercial
Locaweb + Spree: transformando código aberto em um projeto comercialLocaweb + Spree: transformando código aberto em um projeto comercial
Locaweb + Spree: transformando código aberto em um projeto comercial
 
Carreira de Desenvolvimento
Carreira de DesenvolvimentoCarreira de Desenvolvimento
Carreira de Desenvolvimento
 
Ruby on Rails - Filosofia e Prática
Ruby on Rails - Filosofia e PráticaRuby on Rails - Filosofia e Prática
Ruby on Rails - Filosofia e Prática
 
Como funciona uma empresa ágil de desenvolvimento de software
Como funciona uma empresa ágil de desenvolvimento de softwareComo funciona uma empresa ágil de desenvolvimento de software
Como funciona uma empresa ágil de desenvolvimento de software
 
Aula00
Aula00Aula00
Aula00
 
Bdd rails 3
Bdd rails 3Bdd rails 3
Bdd rails 3
 
Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011
 
Ruby on Rails Colocando a web nos trilhos
Ruby on Rails Colocando a web nos trilhosRuby on Rails Colocando a web nos trilhos
Ruby on Rails Colocando a web nos trilhos
 
Dev in Rio - Uma Visão do Mundo Ruby
Dev in Rio - Uma Visão do Mundo RubyDev in Rio - Uma Visão do Mundo Ruby
Dev in Rio - Uma Visão do Mundo Ruby
 
Mini-curso RoR - Apresentação
Mini-curso RoR - ApresentaçãoMini-curso RoR - Apresentação
Mini-curso RoR - Apresentação
 
Mercado hoje
Mercado hojeMercado hoje
Mercado hoje
 
ruby on rails e o mercado
ruby on rails e o mercadoruby on rails e o mercado
ruby on rails e o mercado
 

Mais de almeidaricardo

Mais de almeidaricardo (6)

Pipeline - Continuous Delivery
Pipeline - Continuous DeliveryPipeline - Continuous Delivery
Pipeline - Continuous Delivery
 
Excelencia puc
Excelencia pucExcelencia puc
Excelencia puc
 
Excelência - PUC
Excelência - PUCExcelência - PUC
Excelência - PUC
 
Event machine
Event machineEvent machine
Event machine
 
Canaries in the air #gurusorocaba
Canaries in the air #gurusorocabaCanaries in the air #gurusorocaba
Canaries in the air #gurusorocaba
 
Bdd e ci
Bdd e ciBdd e ci
Bdd e ci
 

Desenvolvimento Ágil com Ruby on Rails

  • 1. Desenvolvimento Ágil com Ruby on Rails na GoNow Rafael Rosa Ricardo Almeida
  • 2. Quem Somos? Rafael Rosa Ricardo Almeida 14 anos na área Atua na área desde 2002. Atualmente trabalha Ruby Inside Brasil com projetos em Ruby on Rails. Escreve para os Guru-SP blogs manifestonaweb.wordpress.com e visaoagil.wordpress.com. Trabalha como editor técnico do Infoq Brasil. Escreve para a revista técnica Java Magazine.
  • 3. Quem Somos? Rafael Rosa Ricardo Almeida 14 anos na área Atua na área desde 2002. Atualmente trabalha Ruby Inside Brasil com projetos em Ruby on Rails. Escreve para os Guru-SP blogs manifestonaweb.wordpress.com e visaoagil.wordpress.com. Trabalha como editor técnico do Infoq Brasil. Escreve para a revista técnica Java Magazine.
  • 4. Vamos Experimentar! Try Ruby http://tryruby.sophrinix.com/
  • 5. O Que é Ruby • Desde 1995 • Simples, poderosa e expressiva • Orientada a Objetos • Dinâmica e fortemente tipada
  • 7. O que é Ruby on Rails? • Framework web • Criado em 2004 • David Heinemeier Hanson • Vulgo: DHH
  • 8. O que é Ruby on Rails? • Framework web • Criado em 2004 • David Heinemeier Hanson • Vulgo: DHH • Ele tinha 21 anos
  • 9.
  • 10.
  • 11. O que é Ruby on Rails? • MVC (Model View Controller)
  • 12. O que é Ruby on Rails? • Convention over configuration • Pronta para ser usada (full stack) • Estrutura • ORM - ActiveRecord • Javascript - Prototype
  • 13. O que é Agilidade
  • 14. O que é Agilidade
  • 15.
  • 16. Scrum
  • 17. Por que Rails? • Produtividade • E no início havia o Java... • XML • Complexo • Práticas ágeis • Mais resultado em menos tempo
  • 18. Por que Rails? • Código de boa qualidade • Boa cobertura de Testes • Flexibilidade • Fácil manutenção • DRY • Pensado para a web
  • 21. Rspec describe Account do context "transfering money" do it "deposits transfer amount to the other account" do source = Account.new(50, :USD) target = mock('target account') target.should_receive(:deposit).with(Money.new(5, :USD)) source.transfer(5, :USD).to(target) end it "reduces its balance by the transfer amount" do source = Account.new(50, :USD) target = stub('target account') source.transfer(5, :USD).to(target) source.balance.should == Money.new(45, :USD) end end end
  • 22. Cucumber Funcionalidade: Adição   Para evitar erros bobos   Como um péssimo matemático   Eu quero saber como somar dois números     Cenário: Adicionar dois números     Dado que eu digitei 50 na calculadora     E que eu digitei 70 na calculadora     Quando eu aperto o botão de soma     Então o resultado na calculadora deve ser 120
  • 23. Cucumber Funcionalidade: Cadastrar Business Owner   Como product owner   Desejo que os donos de cada negócio se cadastrem   De modo que consiga segmentar seus dados     Cenário: Padrão     Dado que estou na página de cadastro     Quando preencher o email com labs@gonow.com.br     E clicar Enviar     Então devo ver a mensagem "Bem vindo ao Goin-Ads" E devo ver o token na tela E devo ver o email na tela
  • 24. Remarkable describe Advertise do   should_belong_to :business_owner   should_validate_presence_of :business_owner   should_have_one :local   should_have_many :dynamic_attributes,                    :dependent => :destroy end
  • 25. Como Fazemos? • Ferramentas • Kanban • Pivotal • Git - Versionamento de Código • Continuous Integration (Signal) • Hoptoad • New Relic
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33. Como? InheritedResources class PerfisController < ApplicationController   def index     @perfis = Perfil.all     respond_to do |format|       format.html # index.html.erb       format.xml  { render :xml => @perfis }     end   end   def show     @perfil = Perfil.find(params[:id])     respond_to do |format|       format.html # show.html.erb       format.xml  { render :xml => @perfil }     end   end   def new     @perfil = Perfil.new     respond_to do |format|       format.html # new.html.erb       format.xml  { render :xml => @perfil }     end   end     def edit     @perfil = Perfil.find(params[:id])   end   .......
  • 34. Como? InheritedResources class PerfisController < InheritedResources::Base respond_to :html, :xml end
  • 35. Como? • HTML => HAML • CSS => LESS
  • 36. Resultado • Cobertura de Testes • Duplicação • Complexidade
  • 37. Resultado • ROI - Return Over Investment • Entregar antes • Entregar o que importa
  • 38. Resultado • Reviews • Melhoria Contínua • Comunicação
  • 39. Resultado • Retrospectiva • Inspecionar e Adaptar • Aprender • Motivação • Linha do Tempo
  • 40. Resultado • Documentação • Viva • Útil • Atualizada • Executável • Cucumber
  • 43. Serve para mim? • Programação poliglota • Melhora habilidades em todas • Integração com o mundo corporativo
  • 44. Serve para mim? • Programação poliglota • Melhora habilidades em todas • Integração com o mundo corporativo
  • 45. E agora? • Fácil de aprender • Comunidade • Rails Guides • Github • Ruby Inside Brasil • Ruby Onda • Guru-SP • Listas e fóruns • Vídeos e Screencasts
  • 46. E agora? • Fácil de aprender • Comunidade • Rails Guides • Github • Ruby Inside Brasil • Ruby Onda • Guru-SP • Listas e fóruns • Vídeos e Screencasts
  • 47. E agora? • Fácil de aprender • Comunidade • Rails Guides • Github • Ruby Inside Brasil • Ruby Onda • Guru-SP • Listas e fóruns • Vídeos e Screencasts
  • 48. E agora? • Fácil de aprender • Comunidade • Rails Guides • Github • Ruby Inside Brasil • Ruby Onda • Guru-SP • Listas e fóruns • Vídeos e Screencasts
  • 49. E agora? • Fácil de aprender • Comunidade • Rails Guides • Github • Ruby Inside Brasil • Ruby Onda • Guru-SP • Listas e fóruns • Vídeos e Screencasts
  • 50. Obrigado! • http://www.gonow.com.br/treinamentos • http://manifestonaweb.wordpress.com • @almeidaricardo • @rafaelrosafu • ricardoluiz1.almeida@gmail.com • rafaelrosafu@gmail.com