0
 
Quem? <ul><ul><li>WWR since 2005 </li></ul></ul><ul><ul><li>workingwithrails.com/person/9354 </li></ul></ul><ul><ul><li>Ex...
Quem? <ul><li><propaganda> </li></ul><ul><ul><li>mailee.me </li></ul></ul><ul><ul><li>Envia e-mails HTML personalizados </...
Quem? <propaganda> &quot;Encontramos no Mailee o que faltava para nossas necessidades como agência digital. Os padrões de ...
Roteiro “ It is impossible not to notice Ruby on Rails. It has had a huge effect both in and outside the Ruby community......
Roteiro Apresentar práticas ágeis e ferramentas Rails que as suportam. Sempre com drops da sabedoria de Martin Fowler.
Comunicação “ Remember your code is for a human first and a computer second.” - Martin Fowler, Refactoring
Comunicação # Relacionamentos de modelo class   Presentation   <   ActiveRecord::Base belongs_to  :conference has_one  :sp...
Comunicação # Escopos de modelo class   Customer   <   ActiveRecord::Base named_scope  :active ,   :condition   =>  &quot;...
Comunicação # Comportamento! class   Category   <   ActiveRecord::Base acts_as_tree end Category .find_by_name( &quot;Ruby...
Comunicação # Transações Account .transaction  do john .draw( 100 )‏ mary .deposit( 100 )‏ end
Testes Ferramentas TDD padrão: - Unit (modelos)‏ - Functional (controles)‏ - Integration - Performance
Testes Unit def  test_should_not_save_speaker_without_name speaker  =  Speaker .new assert !  speaker .save,  &quot;Salvou...
Testes Functional def  test_should_get_index get  :index assert_response  :success  assert_not_nil assigns( :conferences )...
Testes Integração def  test_login_and_browse_conferences https! get  '/login' assert_response  :success post_via_redirect ...
Testes <ul><li>E muitos addons para TDD: </li></ul><ul><ul><li>Mocha  mocha.rubyforge.org </li></ul></ul><ul><ul><li>NullD...
Testes # Mocha Sum .expects( :do ).with( 2 , 2 ).returns( 4 )‏ assert_equal  4 ,  Sum .do( 2 , 2 )‏ # FactoryGirl Factory ...
Testes # Machinist Sham .define  do name  {  Faker :: Name .name } address  {  Faker :: Lorem .paragraph } end Speaker .bl...
Testes # Watir (e similares)‏ browser  =  Watir :: Browser .new browser .goto  'http://www.google.com' browser .text_field...
Testes &quot;With a business-readable DSL, programmers write the code but they show that code frequently to business peopl...
Testes <ul><li>Ferramentas BDD: </li></ul><ul><ul><li>Shoulda  thoughtbot.com/projects/shoulda </li></ul></ul><ul><ul><li>...
Testes # Cucumber Gherkin Funcionalidade :  Cadastrar palestrantes Para  ter palestrantes nos eventos Como  um usuário adm...
Testes # Cucumber + RSpec + WebRat Given  /que estou na página de novo palestrante/   do   visit   '/speakers/new' end Giv...
Testes # executando... Funcionalidade: Cadastrar palestrantes Para ter palestrantes nos eventos Como um usuário administra...
Propriedade coletiva Trocando figurinhas: rake notes:fixme rake notes:optimize rake notes:todo rake notes:custom  ANNOTATI...
Propriedade coletiva rake db:migrate create_table  :speaker  do | t | t .string  :name t .string  :address t .timestamps end
Integração contínua Continuous Integration is a software development practice where members of a team integrate their work...
Integração contínua <ul><li>Git + GitHub </li></ul><ul><ul><li>Virou padrão na comunidade Rails </li></ul></ul><ul><ul><li...
Integração contínua Integrity integrityapp.com Cerberus cerberus.rubyforge.org CruiseControl.rb cruisecontrolrb.thoughtwor...
Integração contínua CriuseControl.rb e semelhantes No &quot;git push&quot; baixa os arquivos, executa os testes e notifica...
Integração contínua Integration Baixa, atualiza, testa, gerar reports e se tudo estiver ok... comita. rake integrate task ...
More stuff Documentação rake doc:app Style Check (style-check.rb)‏ cs.umd.edu/~nspring/software/style-check-readme.html ru...
Conclusão &quot;... I'm increasingly positive about using Ruby for serious work where speed, responsiveness, and productiv...
Upcoming SlideShare
Loading in...5
×

rails_and_agile

951

Published on

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
951
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
13
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "rails_and_agile"

  1. 2. Quem? <ul><ul><li>WWR since 2005 </li></ul></ul><ul><ul><li>workingwithrails.com/person/9354 </li></ul></ul><ul><ul><li>Exclusivamente desde o início de 2008 </li></ul></ul><ul><ul><li>Uma dúzia de projetos </li></ul></ul><ul><ul><li>TargetTrust </li></ul></ul><ul><ul><li>Yes, we do consulting. </li></ul></ul>
  2. 3. Quem? <ul><li><propaganda> </li></ul><ul><ul><li>mailee.me </li></ul></ul><ul><ul><li>Envia e-mails HTML personalizados </li></ul></ul><ul><ul><li>Recebe os retornos e trata </li></ul></ul><ul><ul><li>Sistema de templates muito foda (graças ao Hpricot)‏ </li></ul></ul><ul><ul><li>Envios automáticos por URL ou RSS </li></ul></ul><ul><ul><li>Relatórios completos (ajax, links no próprio e-mail, geográficos...)‏ </li></ul></ul><ul><ul><li>Importa contatos em vários formatos </li></ul></ul><ul><ul><li>Permite integração com site ou por REST </li></ul></ul><ul><li></propaganda> </li></ul>
  3. 4. Quem? <propaganda> &quot;Encontramos no Mailee o que faltava para nossas necessidades como agência digital. Os padrões de qualidade e usabilidade são incomparáveis e ganham de longe de qualquer outra solução de e-mail marketing que já utilizamos.&quot; - Lucas Wendling, GO-GO Internet Para Negócios &quot;O tipo de serviço que o Mailee oferece é, sem duvidas, um dos melhores já vistos. O que mais me chamou a atenção foi o seu design inovador web 2.0. Garanto que muitas pessoas vão se divertir de forma profissional ao usar o Mailee. Fantástico.&quot; - Ricardo Aureliano, Grupo Ribeiro Filho &quot;O que eu gostei no Mailee é a simplicidade de usar, atrelada aos recursos. Posso exportar todos meus contatos do e-mail sem nenhum esforço e manipular meu template facilmente. Para usá-lo não precisa nem FAQ, de tão intuitivo.&quot; - Leonardo Faria, Auto Simulado &quot;Testei várias ferramentas de email-marketing, mas nenhuma era rápida, precisa e prática de usar. Encontrei estas qualidades no Mailee e estou muito satisfeito. Estou indicando para todos os meus clientes, pois realmente confio no trabalho e na seriedade da equipe do Mailee. &quot; - Edison Marcelo dos Santos, CredInfo </propaganda>
  4. 5. Roteiro “ It is impossible not to notice Ruby on Rails. It has had a huge effect both in and outside the Ruby community... Rails has become a standard to which even well-established tools are comparing themselves to.” - Martin Fowler
  5. 6. Roteiro Apresentar práticas ágeis e ferramentas Rails que as suportam. Sempre com drops da sabedoria de Martin Fowler.
  6. 7. Comunicação “ Remember your code is for a human first and a computer second.” - Martin Fowler, Refactoring
  7. 8. Comunicação # Relacionamentos de modelo class Presentation < ActiveRecord::Base belongs_to :conference has_one :speaker has_many :listeners end ra = Presentation .find_by_name( &quot;Rails & Agile&quot; )‏ ra .speaker.name ==> &quot;Juan Maiz&quot; ra .conference.name ==> &quot;Agile Weekend&quot; ra .listeners.count ==> 3560 (Megalomaniac...)‏
  8. 9. Comunicação # Escopos de modelo class Customer < ActiveRecord::Base named_scope :active , :condition => &quot;active&quot; named_scope :recent , :order => &quot;created_at desc&quot; end Customer . active . recent
  9. 10. Comunicação # Comportamento! class Category < ActiveRecord::Base acts_as_tree end Category .find_by_name( &quot;Ruby&quot; ).parent.name => Programming Languages
  10. 11. Comunicação # Transações Account .transaction do john .draw( 100 )‏ mary .deposit( 100 )‏ end
  11. 12. Testes Ferramentas TDD padrão: - Unit (modelos)‏ - Functional (controles)‏ - Integration - Performance
  12. 13. Testes Unit def test_should_not_save_speaker_without_name speaker = Speaker .new assert ! speaker .save, &quot;Salvou speaker sem nome&quot; end
  13. 14. Testes Functional def test_should_get_index get :index assert_response :success assert_not_nil assigns( :conferences )‏ end
  14. 15. Testes Integração def test_login_and_browse_conferences https! get '/login' assert_response :success post_via_redirect &quot;/login&quot; , :user => 'foo' , :pass => 'bar' assert_equal '/welcome' , path assert_equal 'Seja bem vindo, Foo!' , flash[ :notice ] get '/conferences' assert_response :success assert assigns( :conferences )‏ end
  15. 16. Testes <ul><li>E muitos addons para TDD: </li></ul><ul><ul><li>Mocha mocha.rubyforge.org </li></ul></ul><ul><ul><li>NullDB avdi.org/projects/nulldb </li></ul></ul><ul><ul><li>FactoryGirl github.com/thoughtbot/factory_girl </li></ul></ul><ul><ul><li>Machinist github.com/notahat/machinist </li></ul></ul><ul><ul><li>Selenium seleniumhq.org/projects/on-rails </li></ul></ul><ul><ul><li>Watir (FireWatir, SafariWatir, ChromeWatir) wtr.rubyforge.org </li></ul></ul><ul><ul><li>Celerity celerity.rubyforge.org </li></ul></ul><ul><ul><li>WebRat svn.eastmedia.net/public/plugins/webrat </li></ul></ul><ul><ul><li>RCov eigenclass.org/hiki/rcov </li></ul></ul><ul><ul><li>ZenTest zentest.rubyforge.org </li></ul></ul>
  16. 17. Testes # Mocha Sum .expects( :do ).with( 2 , 2 ).returns( 4 )‏ assert_equal 4 , Sum .do( 2 , 2 )‏ # FactoryGirl Factory .define :speaker do | s | s .name 'Juan' s .address 'Mock address' end speaker = Factory .create( :speaker )‏
  17. 18. Testes # Machinist Sham .define do name { Faker :: Name .name } address { Faker :: Lorem .paragraph } end Speaker .blueprint do name email end Speaker .make
  18. 19. Testes # Watir (e similares)‏ browser = Watir :: Browser .new browser .goto 'http://www.google.com' browser .text_field( :name , 'q' ).set 'rails' browser .button( :name , 'btnG' ).click #WebRat test 'login' do User.create!( :user => 'foo' , :pass => 'bar' )‏ visit login_url fill_in 'Usuário' , :with => 'foo' fill_in 'Senha', :with => 'bar' click_button 'Enviar' assert_contain 'Seja bem vindo, foo.' end
  19. 20. Testes &quot;With a business-readable DSL, programmers write the code but they show that code frequently to business people who can understand what it means. These customers can then make changes, maybe draft some code...&quot; - Martin Fowler martinfowler.com/bliki/BusinessReadableDSL.html
  20. 21. Testes <ul><li>Ferramentas BDD: </li></ul><ul><ul><li>Shoulda thoughtbot.com/projects/shoulda </li></ul></ul><ul><ul><li>RSpec rspec.info </li></ul></ul><ul><ul><li>Remarkable github.com/carlosbrando/remarkable </li></ul></ul><ul><ul><li>Cucumber cukes.info </li></ul></ul><ul><ul><li>Pickle github.com/ianwhite/pickle </li></ul></ul><ul><li>Dan North user story </li></ul><ul><li>dannorth.net/whats-in-a-story </li></ul><ul><li>RSpec book </li></ul><ul><li>pragprog.com/titles/achbd/the-rspec-book </li></ul>
  21. 22. Testes # Cucumber Gherkin Funcionalidade : Cadastrar palestrantes Para ter palestrantes nos eventos Como um usuário administrador Eu quero poder inserir palestrantes Cenário : Cadastrar novo palestrante Dado que estou na página de novo palestrante E o total de palestrantes é 0 Quando preencho &quot;Nome&quot; com &quot;Foo&quot; E preencho &quot;Endereço&quot; com &quot;Bar&quot; E clico em &quot;Criar&quot; Então devo ver &quot;Foo&quot; E devo ver &quot;Bar&quot; E o total de palestrantes deve ser 1
  22. 23. Testes # Cucumber + RSpec + WebRat Given /que estou na página de novo palestrante/ do visit '/speakers/new' end Given /o total de palestrantes é 0/ do Speaker .delete_all end # Generalizando! When /^preencho &quot;(.+?)&quot; com &quot;(.+?)&quot;/ do | field , value | fill_in( field , :with => value ) end Then /^I should see &quot;([^&quot;]*)&quot;$/ do | text | response .should contain( text )‏ end Then /o total de palestrantes deve ser (d+?)/ do | num | Speaker .count.should == num end
  23. 24. Testes # executando... Funcionalidade: Cadastrar palestrantes Para ter palestrantes nos eventos Como um usuário administrador Eu quero poder inserir palestrantes Cenário: Cadastrar novo palestrante Dado que estou na página de novo palestrante E o total de palestrantes é 0 Quando preencho &quot;Nome&quot; com &quot;Foo&quot; E preencho &quot;Endereço&quot; com &quot;Bar&quot; E clico em &quot;Criar&quot; Então devo ver &quot;Foo&quot; E devo ver &quot;Bar&quot; E o total de palestrantes deve ser 1
  24. 25. Propriedade coletiva Trocando figurinhas: rake notes:fixme rake notes:optimize rake notes:todo rake notes:custom ANNOTATION=HELP
  25. 26. Propriedade coletiva rake db:migrate create_table :speaker do | t | t .string :name t .string :address t .timestamps end
  26. 27. Integração contínua Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Martin Fowler martinfowler.com/articles/continuousIntegration.html
  27. 28. Integração contínua <ul><li>Git + GitHub </li></ul><ul><ul><li>Virou padrão na comunidade Rails </li></ul></ul><ul><ul><li>Controle distribuído (commit rápido)‏ </li></ul></ul><ul><ul><li>git init </li></ul></ul><ul><ul><li>git add file.txt </li></ul></ul><ul><ul><li>git commit -a -m 'comment' </li></ul></ul><ul><ul><li>git push </li></ul></ul><ul><ul><li>git pull </li></ul></ul><ul><ul><li>Propriedade social de código </li></ul></ul><ul><ul><li>vimeo.com/1780571 </li></ul></ul><ul><ul><li>Fork and go </li></ul></ul>
  28. 29. Integração contínua Integrity integrityapp.com Cerberus cerberus.rubyforge.org CruiseControl.rb cruisecontrolrb.thoughtworks.com Continuous Builder dev.rubyonrails.org/svn/rails/plugins/continuous_builder Integration integration.rubyforge.org
  29. 30. Integração contínua CriuseControl.rb e semelhantes No &quot;git push&quot; baixa os arquivos, executa os testes e notifica a equipe. Fork no GitHub para Git: github.com/benburkert/cruisecontrolrb jamesshore.com/Blog/Why I Dont Like CruiseControl.html
  30. 31. Integração contínua Integration Baixa, atualiza, testa, gerar reports e se tudo estiver ok... comita. rake integrate task scm:status:check task log:clear task tmp:clear task backup:local task scm:update task db:migrate test:units test:functionals test:integration spec:lib spec:models spec:helpers spec:controllers spec:views test:rcov:units test:rcov:units:verify test:rcov:functionals test:rcov:functionals:verify spec:rcov spec:rcov:verify test:plugins:selected spec:plugins:selected test:selenium:server:start test_acceptance test:selenium:server:stop scm:commit
  31. 32. More stuff Documentação rake doc:app Style Check (style-check.rb)‏ cs.umd.edu/~nspring/software/style-check-readme.html rubyinside.com/
  32. 33. Conclusão &quot;... I'm increasingly positive about using Ruby for serious work where speed, responsiveness, and productivity are important.&quot; - Martin Fowler em 10/5/2006 martinfowler.com/bliki/EvaluatingRuby.html
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×