84
Fun Driven Development com Ruby @tomas_stefano https://github.com/tomas-stefano http://rubycasts.com.br / sábado, 9 de julho de 2011

Fun driven development com Ruby

Embed Size (px)

DESCRIPTION

My presentation about Ruby at TDC2011 - The developers conference

Citation preview

Page 1: Fun driven development com Ruby

Fun Driven Development com Ruby

@tomas_stefanohttps://github.com/tomas-stefano

http://rubycasts.com.br/

sábado, 9 de julho de 2011

Page 2: Fun driven development com Ruby

Objetivo

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

sábado, 9 de julho de 2011

Page 3: Fun driven development com Ruby

Era uma vez ...

OBS.: Tirada de uma apresentação do Ryan Davis

sábado, 9 de julho de 2011

Page 4: Fun driven development com Ruby

Mesa de trabalho

sábado, 9 de julho de 2011

Page 5: Fun driven development com Ruby

Lendo o Código

sábado, 9 de julho de 2011

Page 6: Fun driven development com Ruby

Ninho de Rato

sábado, 9 de julho de 2011

Page 7: Fun driven development com Ruby

Ficou nervoso ...

sábado, 9 de julho de 2011

Page 8: Fun driven development com Ruby

Atirou em todo mundo

sábado, 9 de julho de 2011

Page 9: Fun driven development com Ruby

Foi preso!

sábado, 9 de julho de 2011

Page 10: Fun driven development com Ruby

OU:SEGUNDA VERSÃO!

sábado, 9 de julho de 2011

Page 11: Fun driven development com Ruby

Novo trabalho!

sábado, 9 de julho de 2011

Page 12: Fun driven development com Ruby

Mesa de trabalho

sábado, 9 de julho de 2011

Page 13: Fun driven development com Ruby

Lendo o Código

sábado, 9 de julho de 2011

Page 14: Fun driven development com Ruby

Ninho de Rato

sábado, 9 de julho de 2011

Page 15: Fun driven development com Ruby

Ficou nervoso ...

sábado, 9 de julho de 2011

Page 16: Fun driven development com Ruby

Seus conhecimentos

sábado, 9 de julho de 2011

Page 17: Fun driven development com Ruby

Resolveu o problema(um por um)

sábado, 9 de julho de 2011

Page 18: Fun driven development com Ruby

Mostrou quem manda!

sábado, 9 de julho de 2011

Page 19: Fun driven development com Ruby

Moral da história

sábado, 9 de julho de 2011

Page 20: Fun driven development com Ruby

Pessoas vão te incriminar se você

machucá-las!

sábado, 9 de julho de 2011

Page 21: Fun driven development com Ruby

O código não! :)

sábado, 9 de julho de 2011

Page 22: Fun driven development com Ruby

O que é código legado?

Muitos dizem: “Todo código, que você não escreveu, é legado”.

sábado, 9 de julho de 2011

Page 23: Fun driven development com Ruby

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

Page 24: Fun driven development com Ruby

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

Page 25: Fun driven development com Ruby

Código Legado

sábado, 9 de julho de 2011

Page 26: Fun driven development com Ruby

O começo é díficil!

sábado, 9 de julho de 2011

Page 27: Fun driven development com Ruby

Lidando com a Complexidade

sábado, 9 de julho de 2011

Page 28: Fun driven development com Ruby

Alguma gem de Testes

sábado, 9 de julho de 2011

Page 29: Fun driven development com Ruby

RSpec

chunky_bacon.should be_awesome

sábado, 9 de julho de 2011

Page 30: Fun driven development com Ruby

Shoulda

chunky_bacon_should_be :awesome

sábado, 9 de julho de 2011

Page 31: Fun driven development com Ruby

Test::Unit

assert_equal(:awesome, chunky_bacon)

sábado, 9 de julho de 2011

Page 32: Fun driven development com Ruby

Fake Objects

sábado, 9 de julho de 2011

Page 33: Fun driven development com Ruby

Mochabacon = stub(:awesome => true)bacon.expects(:taste).returns('good')

sábado, 9 de julho de 2011

Page 34: Fun driven development com Ruby

Flexmockbacon = flexmock(:awesome => true)bacon.should_receive(:taste).and_return('good')

sábado, 9 de julho de 2011

Page 35: Fun driven development com Ruby

RSpec Mocks e Stubs

bacon.stub!(:awesome).and_return(true)bacon.should_receive(:taste).and_return('good')

sábado, 9 de julho de 2011

Page 36: Fun driven development com Ruby

RR

stub(bacon).awesome{true}stub(bacon).taste{'good'}

sábado, 9 de julho de 2011

Page 37: Fun driven development com Ruby

Métricas

sábado, 9 de julho de 2011

Page 38: Fun driven development com Ruby

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

Page 39: Fun driven development com Ruby

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

Page 40: Fun driven development com Ruby

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

Page 41: Fun driven development com Ruby

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

Page 42: Fun driven development com Ruby

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

Page 43: Fun driven development com Ruby

Flog

sábado, 9 de julho de 2011

Page 44: Fun driven development com Ruby

Flay

sábado, 9 de julho de 2011

Page 45: Fun driven development com Ruby

SimpleCov

require 'simplecov'SimpleCov.start

Cobertura de Código:

sábado, 9 de julho de 2011

Page 46: Fun driven development com Ruby

Simplecov

sábado, 9 de julho de 2011

Page 47: Fun driven development com Ruby

Simplecov

sábado, 9 de julho de 2011

Page 48: Fun driven development com Ruby

RoodiProblemas de design no seu código

sábado, 9 de julho de 2011

Page 49: Fun driven development com Ruby

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

Page 50: Fun driven development com Ruby

Testes de AceitaçãoSteak

sábado, 9 de julho de 2011

Page 51: Fun driven development com Ruby

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

Page 52: Fun driven development com Ruby

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

Page 53: Fun driven development com Ruby

Benchmark

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

sábado, 9 de julho de 2011

Page 54: Fun driven development com Ruby

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

Page 55: Fun driven development com Ruby

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

Page 56: Fun driven development com Ruby

Profilerrequire 'profile'(2..10_000).each { |i| i.simple_prime? }

sábado, 9 de julho de 2011

Page 57: Fun driven development com Ruby

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

Page 58: Fun driven development com Ruby

Benchmark e Profilerrequire 'profile'(2..10_000).each { |i| i.fast_prime? }

sábado, 9 de julho de 2011

Page 59: Fun driven development com Ruby

Extendendo Ruby com C

1) Ruby Inline2) Normal

sábado, 9 de julho de 2011

Page 60: Fun driven development com Ruby

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

Page 61: Fun driven development com Ruby

Extensão Nativa

require 'mkmf'dir_config('hello_world')create_makefile('hello_world')

#ext/extconf.rb

sábado, 9 de julho de 2011

Page 62: Fun driven development com Ruby

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

Page 63: Fun driven development com Ruby

AutomatizandoInfinityTest (To Infinity and beyond)

sábado, 9 de julho de 2011

Page 64: Fun driven development com Ruby

InfinityTest$ infinity_test --rspec

sábado, 9 de julho de 2011

Page 65: Fun driven development com Ruby

InfinityTest$ infinity_test --rspec

sábado, 9 de julho de 2011

Page 66: Fun driven development com Ruby

InfinityTest$ infinity_test --rspec

sábado, 9 de julho de 2011

Page 67: Fun driven development com Ruby

Ruby!

sábado, 9 de julho de 2011

Page 68: Fun driven development com Ruby

“Não Entendi nada!!”

sábado, 9 de julho de 2011

Page 69: Fun driven development com Ruby

RubyCasts

sábado, 9 de julho de 2011

Page 70: Fun driven development com Ruby

Pra acabar

sábado, 9 de julho de 2011

Page 71: Fun driven development com Ruby

Você precisa se importar pelo código.

sábado, 9 de julho de 2011

Page 72: Fun driven development com Ruby

Ame-o

sábado, 9 de julho de 2011

Page 73: Fun driven development com Ruby

Ou o odeie

sábado, 9 de julho de 2011

Page 74: Fun driven development com Ruby

Se você amar seu código:

sábado, 9 de julho de 2011

Page 75: Fun driven development com Ruby

Cuide!

sábado, 9 de julho de 2011

Page 76: Fun driven development com Ruby

Faça o crescer

sábado, 9 de julho de 2011

Page 77: Fun driven development com Ruby

Se você o odiar:

sábado, 9 de julho de 2011

Page 78: Fun driven development com Ruby

Reescreva-o no seu tempo devido e da

forma correta.

sábado, 9 de julho de 2011

Page 79: Fun driven development com Ruby

Seja apaixonado pelo que está trabalhando.

sábado, 9 de julho de 2011

Page 80: Fun driven development com Ruby

Caso contrário você está morto por dentro.

sábado, 9 de julho de 2011

Page 81: Fun driven development com Ruby

Assim como seu código.

sábado, 9 de julho de 2011

Page 82: Fun driven development com Ruby

Mas não esqueça antes de tudo:

sábado, 9 de julho de 2011

Page 83: Fun driven development com Ruby

Se divirta!

sábado, 9 de julho de 2011

Page 84: Fun driven development com Ruby

Obrigado! ;)

@tomas_stefanohttps://github.com/tomas-stefano

http://rubycasts.com.br/

sábado, 9 de julho de 2011