SlideShare una empresa de Scribd logo
1 de 84
Descargar para leer sin conexión
Fun Driven
    Development com Ruby
                                      @tomas_stefano
                             https://github.com/tomas-stefano
                                  http://rubycasts.com.br/



sábado, 9 de julho de 2011
Objetivo


     - VOCÊ IRÁ APRENDER UMA COISA NOVA DE RUBY.
        OU VOCÊ IRÁ APRENDER UMA COISA NOVA.




sábado, 9 de julho de 2011
Era uma vez ...




            OBS.: Tirada de uma apresentação do
                         Ryan Davis
sábado, 9 de julho de 2011
Mesa de trabalho




sábado, 9 de julho de 2011
Lendo o Código




sábado, 9 de julho de 2011
Ninho de Rato




sábado, 9 de julho de 2011
Ficou nervoso ...




sábado, 9 de julho de 2011
Atirou em todo mundo




sábado, 9 de julho de 2011
Foi preso!




sábado, 9 de julho de 2011
SEGUNDA VERSÃO!



                               OU:
sábado, 9 de julho de 2011
Novo trabalho!




sábado, 9 de julho de 2011
Mesa de trabalho




sábado, 9 de julho de 2011
Lendo o Código




sábado, 9 de julho de 2011
Ninho de Rato




sábado, 9 de julho de 2011
Ficou nervoso ...




sábado, 9 de julho de 2011
Seus conhecimentos




sábado, 9 de julho de 2011
Resolveu o problema
                     (um por um)




sábado, 9 de julho de 2011
Mostrou quem
                               manda!




sábado, 9 de julho de 2011
Moral da história




sábado, 9 de julho de 2011
Pessoas vão te
                             incriminar se você
                                machucá-las!


sábado, 9 de julho de 2011
O código não! :)



sábado, 9 de julho de 2011
O que é código legado?
          Muitos dizem: “Todo código, que você não escreveu, é
          legado”.




sábado, 9 de julho de 2011
O que é código legado?
          Muitos dizem: “Todo código, que você não escreveu, é
          legado”.
          Outros dizem: “Todo código, que você não escreveu e
          não possui testes, é legado”.




sábado, 9 de julho de 2011
O que é código legado?
          Muitos dizem: “Todo código, que você não escreveu, é
          legado”.
          Outros dizem: “Todo código, que você não escreveu e
          não possui testes, é legado”.

         Outros pensaram: “Mas até o meu próprio código
         que eu escrevo, que “apenas funciona” vira um legado
         depois de algumas semanas ...”.


sábado, 9 de julho de 2011
Código Legado




sábado, 9 de julho de 2011
O começo é díficil!




sábado, 9 de julho de 2011
Lidando com a
                             Complexidade




sábado, 9 de julho de 2011
Alguma gem de Testes




sábado, 9 de julho de 2011
RSpec
                             chunky_bacon.should be_awesome




sábado, 9 de julho de 2011
Shoulda

                             chunky_bacon_should_be :awesome




sábado, 9 de julho de 2011
Test::Unit

                             assert_equal(:awesome, chunky_bacon)




sábado, 9 de julho de 2011
Fake Objects



sábado, 9 de julho de 2011
Mocha
                             bacon = stub(:awesome => true)
                             bacon.expects(:taste).returns('good')




sábado, 9 de julho de 2011
Flexmock
                bacon = flexmock(:awesome => true)
                bacon.should_receive(:taste).and_return('good')




sábado, 9 de julho de 2011
RSpec Mocks e Stubs
                bacon.stub!(:awesome).and_return(true)
                bacon.should_receive(:taste).and_return('good')




sábado, 9 de julho de 2011
RR
                             stub(bacon).awesome{true}
                             stub(bacon).taste{'good'}




sábado, 9 de julho de 2011
Métricas




sábado, 9 de julho de 2011
Flog

                     • 1 a 10: Parabéns!
                     • 11 a 20: Não tão ruim assim ...
                     • 21 a 40: Talvez precise refatorar
                     • 41 a 60: Escreva de novo
                     • 61 a 100: WTF are you trying to do?

sábado, 9 de julho de 2011
Flog

                     • 1 a 10: Parabéns!
                     • 11 a 20: Não tão ruim assim ...
                     • 21 a 40: Talvez precise refatorar
                     • 41 a 60: Escreva de novo
                     • 61 a 100: WTF are you trying to do?

sábado, 9 de julho de 2011
Flog

                     • 1 a 10: Parabéns!
                     • 11 a 20: Não tão ruim assim ...
                     • 21 a 40: Talvez precise refatorar
                     • 41 a 60: Escreva de novo
                     • 61 a 100: WTF are you trying to do?

sábado, 9 de julho de 2011
Flog

                     • 1 a 10: Parabéns!
                     • 11 a 20: Não tão ruim assim ...
                     • 21 a 40: Talvez precise refatorar
                     • 41 a 60: Escreva de novo
                     • 61 a 100: WTF are you trying to do?

sábado, 9 de julho de 2011
Flog

                     • 1 a 10: Parabéns!
                     • 11 a 20: Não tão ruim assim ...
                     • 21 a 40: Talvez precise refatorar
                     • 41 a 60: Escreva de novo
                     • 61 a 100: o.O - WTF are you trying to do?

sábado, 9 de julho de 2011
Flog




sábado, 9 de julho de 2011
Flay




sábado, 9 de julho de 2011
SimpleCov
                             Cobertura de Código:

                              require 'simplecov'
                              SimpleCov.start




sábado, 9 de julho de 2011
Simplecov




sábado, 9 de julho de 2011
Simplecov




sábado, 9 de julho de 2011
Roodi
                             Problemas de design no seu código




sábado, 9 de julho de 2011
Repita Comigo


                     • “Medir e analisar meu código, serve para
                             conhecer o meu próprio código.” Brian
                             Liles (TAFT - Test all the F* time)




sábado, 9 de julho de 2011
Testes de Aceitação
                                          Steak




sábado, 9 de julho de 2011
Cucumber
                             Funcionalidade: Relatorio Completo
                              Sendo cliente
                              Quero o Relatório Completo com os dados dos meus clientes
                              Para uma Analise de crédito de uma ou várias empresas

                              Cenário: Identificação da Empresa Filial
                               Dado que estou consultando um CNPJ de uma empresa "filial"
                               Quando eu aperto "Consultar em uma Página"
                               Então deverá trazer os dados da "matriz" vindos da receita federal
                               E deverá trazer os dados da "filial" vindos da receita federal




sábado, 9 de julho de 2011
Steak
                             feature "Articles", %q{
                               In order to have an awesome blog
                              As an author
                               I want to create and manage articles
                             } do

                              scenario "Article index" do
                               Article.create!(:title => 'One')
                               Article.create!(:title => 'Two')
                               visit article_index
                               page.should have_content('One')
                               page.should have_content('Two')
                              end
                             end


sábado, 9 de julho de 2011
Benchmark

    class Integer
      def simple_prime?
       (2..Math.sqrt(self).floor).all? {|i| (self % i).nonzero? }
      end
    end




sábado, 9 de julho de 2011
Benchmark
                             require "benchmark"
                             Benchmark.benchmark do |bench|
                              bench.report("Simple Prime") do
                                (2..10_000).each { |i| i.simple_prime? }
                              end
                              bench.report('Stdlib') do
                                (2..10_000).each { |i| i.prime? }
                              end
                             end




sábado, 9 de julho de 2011
Benchmark
             CPU Time SysCpu   User+Sys ElapsedTime
Simple Prime 0.130000 0.000000 0.130000 ( 0.133931)
Stdlib       0.230000 0.000000 0.230000 ( 0.230975)




sábado, 9 de julho de 2011
Profiler
                             require 'profile'
                             (2..10_000).each { |i| i.simple_prime? }




sábado, 9 de julho de 2011
Benchmark e Profiler
           class Integer
             def fast_prime?
              return true if self.equal?(2)
              return false if self.even?
              3.step(Math.sqrt(self).floor, 2).all? { |i| (self % i).nonzero? }
             end
           end
                         CPU Time SysCpu          User+Sys ElapsedTime
           Simple Prime 0.130000 0.000000         0.130000 ( 0.133931)
           Fast Prime   0.070000 0.000000         0.070000 ( 0.079083)
           Stdlib       0.230000 0.000000         0.230000 ( 0.230975)

sábado, 9 de julho de 2011
Benchmark e Profiler
                        require 'profile'
                        (2..10_000).each { |i| i.fast_prime? }




sábado, 9 de julho de 2011
Extendendo Ruby com C

                      1) Ruby Inline
                      2) Normal




sábado, 9 de julho de 2011
Ruby Inline
                             class Factorial
                               inline do |builder|
                                 builder.c "
                                 long factorial_c(int max) {
                                   int i=max, result=1;
                                   while (i >= 2) { result *= i--; }
                                   return result;
                                 }"
                               end
                             end

sábado, 9 de julho de 2011
Extensão Nativa

                             #ext/extconf.rb
                             require 'mkmf'
                             dir_config('hello_world')
                             create_makefile('hello_world')




sábado, 9 de julho de 2011
Extensão Nativa
                     /* hello_world.c */
                     #include <ruby.h>
                     VALUE hello_world(VALUE self){
                     	

 return rb_str_new2("Hello World!");
                     }
                     VALUE class_Hello;
                     void Init_hello_world(){
                     	

 class_Hello = rb_define_class("HelloWorld", rb_cObject);
                     	

 rb_define_method(class_Hello, "hello_world", hello_world, 0);
                     }

                      # In Ruby
                      hello = HelloWorld.new
                      hello.hello_world # => “Hello World!”

sábado, 9 de julho de 2011
Automatizando
                             InfinityTest (To Infinity and beyond)




sábado, 9 de julho de 2011
InfinityTest
                             $ infinity_test --rspec




sábado, 9 de julho de 2011
InfinityTest
                             $ infinity_test --rspec




sábado, 9 de julho de 2011
InfinityTest
                             $ infinity_test --rspec




sábado, 9 de julho de 2011
Ruby!




sábado, 9 de julho de 2011
“Não Entendi nada!!”




sábado, 9 de julho de 2011
RubyCasts




sábado, 9 de julho de 2011
Pra acabar



sábado, 9 de julho de 2011
Você precisa se
                       importar pelo código.


sábado, 9 de julho de 2011
Ame-o



sábado, 9 de julho de 2011
Ou o odeie



sábado, 9 de julho de 2011
Se você amar seu
                                  código:


sábado, 9 de julho de 2011
Cuide!



sábado, 9 de julho de 2011
Faça o crescer



sábado, 9 de julho de 2011
Se você o odiar:



sábado, 9 de julho de 2011
Reescreva-o no seu
                             tempo devido e da
                               forma correta.


sábado, 9 de julho de 2011
Seja apaixonado pelo
                        que está trabalhando.


sábado, 9 de julho de 2011
Caso contrário você
                  está morto por dentro.


sábado, 9 de julho de 2011
Assim como seu
                                 código.


sábado, 9 de julho de 2011
Mas não esqueça antes
                          de tudo:


sábado, 9 de julho de 2011
Se divirta!




sábado, 9 de julho de 2011
Obrigado! ;)




                                      @tomas_stefano
                             https://github.com/tomas-stefano
                                  http://rubycasts.com.br/

sábado, 9 de julho de 2011

Más contenido relacionado

Último

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 

Último (8)

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 

Destacado

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Destacado (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Fun driven development com Ruby

  • 1. Fun Driven Development com Ruby @tomas_stefano https://github.com/tomas-stefano http://rubycasts.com.br/ sábado, 9 de julho de 2011
  • 2. Objetivo - VOCÊ IRÁ APRENDER UMA COISA NOVA DE RUBY. OU VOCÊ IRÁ APRENDER UMA COISA NOVA. sábado, 9 de julho de 2011
  • 3. Era uma vez ... OBS.: Tirada de uma apresentação do Ryan Davis sábado, 9 de julho de 2011
  • 4. Mesa de trabalho sábado, 9 de julho de 2011
  • 5. Lendo o Código sábado, 9 de julho de 2011
  • 6. Ninho de Rato sábado, 9 de julho de 2011
  • 7. Ficou nervoso ... sábado, 9 de julho de 2011
  • 8. Atirou em todo mundo sábado, 9 de julho de 2011
  • 9. Foi preso! sábado, 9 de julho de 2011
  • 10. SEGUNDA VERSÃO! OU: sábado, 9 de julho de 2011
  • 11. Novo trabalho! sábado, 9 de julho de 2011
  • 12. Mesa de trabalho sábado, 9 de julho de 2011
  • 13. Lendo o Código sábado, 9 de julho de 2011
  • 14. Ninho de Rato sábado, 9 de julho de 2011
  • 15. Ficou nervoso ... sábado, 9 de julho de 2011
  • 16. Seus conhecimentos sábado, 9 de julho de 2011
  • 17. Resolveu o problema (um por um) sábado, 9 de julho de 2011
  • 18. Mostrou quem manda! sábado, 9 de julho de 2011
  • 19. Moral da história sábado, 9 de julho de 2011
  • 20. Pessoas vão te incriminar se você machucá-las! sábado, 9 de julho de 2011
  • 21. O código não! :) sábado, 9 de julho de 2011
  • 22. O que é código legado? Muitos dizem: “Todo código, que você não escreveu, é legado”. sábado, 9 de julho de 2011
  • 23. O que é código legado? Muitos dizem: “Todo código, que você não escreveu, é legado”. Outros dizem: “Todo código, que você não escreveu e não possui testes, é legado”. sábado, 9 de julho de 2011
  • 24. O que é código legado? Muitos dizem: “Todo código, que você não escreveu, é legado”. Outros dizem: “Todo código, que você não escreveu e não possui testes, é legado”. Outros pensaram: “Mas até o meu próprio código que eu escrevo, que “apenas funciona” vira um legado depois de algumas semanas ...”. sábado, 9 de julho de 2011
  • 25. Código Legado sábado, 9 de julho de 2011
  • 26. O começo é díficil! sábado, 9 de julho de 2011
  • 27. Lidando com a Complexidade sábado, 9 de julho de 2011
  • 28. Alguma gem de Testes sábado, 9 de julho de 2011
  • 29. RSpec chunky_bacon.should be_awesome sábado, 9 de julho de 2011
  • 30. Shoulda chunky_bacon_should_be :awesome sábado, 9 de julho de 2011
  • 31. Test::Unit assert_equal(:awesome, chunky_bacon) sábado, 9 de julho de 2011
  • 32. Fake Objects sábado, 9 de julho de 2011
  • 33. Mocha bacon = stub(:awesome => true) bacon.expects(:taste).returns('good') sábado, 9 de julho de 2011
  • 34. Flexmock bacon = flexmock(:awesome => true) bacon.should_receive(:taste).and_return('good') sábado, 9 de julho de 2011
  • 35. RSpec Mocks e Stubs bacon.stub!(:awesome).and_return(true) bacon.should_receive(:taste).and_return('good') sábado, 9 de julho de 2011
  • 36. RR stub(bacon).awesome{true} stub(bacon).taste{'good'} sábado, 9 de julho de 2011
  • 37. Métricas sábado, 9 de julho de 2011
  • 38. Flog • 1 a 10: Parabéns! • 11 a 20: Não tão ruim assim ... • 21 a 40: Talvez precise refatorar • 41 a 60: Escreva de novo • 61 a 100: WTF are you trying to do? sábado, 9 de julho de 2011
  • 39. Flog • 1 a 10: Parabéns! • 11 a 20: Não tão ruim assim ... • 21 a 40: Talvez precise refatorar • 41 a 60: Escreva de novo • 61 a 100: WTF are you trying to do? sábado, 9 de julho de 2011
  • 40. Flog • 1 a 10: Parabéns! • 11 a 20: Não tão ruim assim ... • 21 a 40: Talvez precise refatorar • 41 a 60: Escreva de novo • 61 a 100: WTF are you trying to do? sábado, 9 de julho de 2011
  • 41. Flog • 1 a 10: Parabéns! • 11 a 20: Não tão ruim assim ... • 21 a 40: Talvez precise refatorar • 41 a 60: Escreva de novo • 61 a 100: WTF are you trying to do? sábado, 9 de julho de 2011
  • 42. Flog • 1 a 10: Parabéns! • 11 a 20: Não tão ruim assim ... • 21 a 40: Talvez precise refatorar • 41 a 60: Escreva de novo • 61 a 100: o.O - WTF are you trying to do? sábado, 9 de julho de 2011
  • 43. Flog sábado, 9 de julho de 2011
  • 44. Flay sábado, 9 de julho de 2011
  • 45. SimpleCov Cobertura de Código: require 'simplecov' SimpleCov.start sábado, 9 de julho de 2011
  • 46. Simplecov sábado, 9 de julho de 2011
  • 47. Simplecov sábado, 9 de julho de 2011
  • 48. Roodi Problemas de design no seu código sábado, 9 de julho de 2011
  • 49. Repita Comigo • “Medir e analisar meu código, serve para conhecer o meu próprio código.” Brian Liles (TAFT - Test all the F* time) sábado, 9 de julho de 2011
  • 50. Testes de Aceitação Steak sábado, 9 de julho de 2011
  • 51. Cucumber Funcionalidade: Relatorio Completo Sendo cliente Quero o Relatório Completo com os dados dos meus clientes Para uma Analise de crédito de uma ou várias empresas Cenário: Identificação da Empresa Filial Dado que estou consultando um CNPJ de uma empresa "filial" Quando eu aperto "Consultar em uma Página" Então deverá trazer os dados da "matriz" vindos da receita federal E deverá trazer os dados da "filial" vindos da receita federal sábado, 9 de julho de 2011
  • 52. Steak feature "Articles", %q{ In order to have an awesome blog As an author I want to create and manage articles } do scenario "Article index" do Article.create!(:title => 'One') Article.create!(:title => 'Two') visit article_index page.should have_content('One') page.should have_content('Two') end end sábado, 9 de julho de 2011
  • 53. Benchmark class Integer def simple_prime? (2..Math.sqrt(self).floor).all? {|i| (self % i).nonzero? } end end sábado, 9 de julho de 2011
  • 54. Benchmark require "benchmark" Benchmark.benchmark do |bench| bench.report("Simple Prime") do (2..10_000).each { |i| i.simple_prime? } end bench.report('Stdlib') do (2..10_000).each { |i| i.prime? } end end sábado, 9 de julho de 2011
  • 55. Benchmark CPU Time SysCpu User+Sys ElapsedTime Simple Prime 0.130000 0.000000 0.130000 ( 0.133931) Stdlib 0.230000 0.000000 0.230000 ( 0.230975) sábado, 9 de julho de 2011
  • 56. Profiler require 'profile' (2..10_000).each { |i| i.simple_prime? } sábado, 9 de julho de 2011
  • 57. Benchmark e Profiler class Integer def fast_prime? return true if self.equal?(2) return false if self.even? 3.step(Math.sqrt(self).floor, 2).all? { |i| (self % i).nonzero? } end end CPU Time SysCpu User+Sys ElapsedTime Simple Prime 0.130000 0.000000 0.130000 ( 0.133931) Fast Prime 0.070000 0.000000 0.070000 ( 0.079083) Stdlib 0.230000 0.000000 0.230000 ( 0.230975) sábado, 9 de julho de 2011
  • 58. Benchmark e Profiler require 'profile' (2..10_000).each { |i| i.fast_prime? } sábado, 9 de julho de 2011
  • 59. Extendendo Ruby com C 1) Ruby Inline 2) Normal sábado, 9 de julho de 2011
  • 60. Ruby Inline class Factorial inline do |builder| builder.c " long factorial_c(int max) { int i=max, result=1; while (i >= 2) { result *= i--; } return result; }" end end sábado, 9 de julho de 2011
  • 61. Extensão Nativa #ext/extconf.rb require 'mkmf' dir_config('hello_world') create_makefile('hello_world') sábado, 9 de julho de 2011
  • 62. Extensão Nativa /* hello_world.c */ #include <ruby.h> VALUE hello_world(VALUE self){ return rb_str_new2("Hello World!"); } VALUE class_Hello; void Init_hello_world(){ class_Hello = rb_define_class("HelloWorld", rb_cObject); rb_define_method(class_Hello, "hello_world", hello_world, 0); } # In Ruby hello = HelloWorld.new hello.hello_world # => “Hello World!” sábado, 9 de julho de 2011
  • 63. Automatizando InfinityTest (To Infinity and beyond) sábado, 9 de julho de 2011
  • 64. InfinityTest $ infinity_test --rspec sábado, 9 de julho de 2011
  • 65. InfinityTest $ infinity_test --rspec sábado, 9 de julho de 2011
  • 66. InfinityTest $ infinity_test --rspec sábado, 9 de julho de 2011
  • 67. Ruby! sábado, 9 de julho de 2011
  • 69. RubyCasts sábado, 9 de julho de 2011
  • 70. Pra acabar sábado, 9 de julho de 2011
  • 71. Você precisa se importar pelo código. sábado, 9 de julho de 2011
  • 72. Ame-o sábado, 9 de julho de 2011
  • 73. Ou o odeie sábado, 9 de julho de 2011
  • 74. Se você amar seu código: sábado, 9 de julho de 2011
  • 75. Cuide! sábado, 9 de julho de 2011
  • 76. Faça o crescer sábado, 9 de julho de 2011
  • 77. Se você o odiar: sábado, 9 de julho de 2011
  • 78. Reescreva-o no seu tempo devido e da forma correta. sábado, 9 de julho de 2011
  • 79. Seja apaixonado pelo que está trabalhando. sábado, 9 de julho de 2011
  • 80. Caso contrário você está morto por dentro. sábado, 9 de julho de 2011
  • 81. Assim como seu código. sábado, 9 de julho de 2011
  • 82. Mas não esqueça antes de tudo: sábado, 9 de julho de 2011
  • 83. Se divirta! sábado, 9 de julho de 2011
  • 84. Obrigado! ;) @tomas_stefano https://github.com/tomas-stefano http://rubycasts.com.br/ sábado, 9 de julho de 2011