fun driven development com ruby
DESCRIPTION
My presentation about Ruby at TDC2011 - The developers conferenceTRANSCRIPT
Fun Driven Development com Ruby
@tomas_stefanohttps://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
OU:SEGUNDA VERSÃO!
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
Mochabacon = stub(:awesome => true)bacon.expects(:taste).returns('good')
sábado, 9 de julho de 2011
Flexmockbacon = 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
require 'simplecov'SimpleCov.start
Cobertura de Código:
sábado, 9 de julho de 2011
Simplecov
sábado, 9 de julho de 2011
Simplecov
sábado, 9 de julho de 2011
RoodiProblemas 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çãoSteak
sábado, 9 de julho de 2011
CucumberFuncionalidade: 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
Steakfeature "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') endend
sábado, 9 de julho de 2011
Benchmark
class Integer def simple_prime? (2..Math.sqrt(self).floor).all? {|i| (self % i).nonzero? } endend
sábado, 9 de julho de 2011
Benchmarkrequire "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? } endend
sábado, 9 de julho de 2011
Benchmark
CPU Time SysCpu User+Sys ElapsedTimeSimple 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
Profilerrequire 'profile'(2..10_000).each { |i| i.simple_prime? }
sábado, 9 de julho de 2011
Benchmark e Profilerclass 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? } endend
CPU Time SysCpu User+Sys ElapsedTimeSimple 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 Profilerrequire 'profile'(2..10_000).each { |i| i.fast_prime? }
sábado, 9 de julho de 2011
Extendendo Ruby com C
1) Ruby Inline2) Normal
sábado, 9 de julho de 2011
Ruby Inlineclass Factorial inline do |builder| builder.c " long factorial_c(int max) { int i=max, result=1; while (i >= 2) { result *= i--; } return result; }" endend
sábado, 9 de julho de 2011
Extensão Nativa
require 'mkmf'dir_config('hello_world')create_makefile('hello_world')
#ext/extconf.rb
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 Rubyhello = HelloWorld.newhello.hello_world # => “Hello World!”
sábado, 9 de julho de 2011
AutomatizandoInfinityTest (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_stefanohttps://github.com/tomas-stefano
http://rubycasts.com.br/
sábado, 9 de julho de 2011