SlideShare uma empresa Scribd logo
1 de 56
Baixar para ler offline
Teste seu código!
                              não seja imaturo e nem bundão
                                       @lucasrenan




sábado, 24 de março de 2012
http://nudesign.com.br/

sábado, 24 de março de 2012
guru sorocaba

                              http://gurusorocaba.com.br/

sábado, 24 de março de 2012
Como você garante que
              seu código funciona?


sábado, 24 de março de 2012
sábado, 24 de março de 2012
Você confia no seu
                             código?


sábado, 24 de março de 2012
sábado, 24 de março de 2012
Muitos bugs no sistema?
sábado, 24 de março de 2012
Seu chefe fica furioso!
sábado, 24 de março de 2012
Você fica frustrado
sábado, 24 de março de 2012
Programar se torna chato
sábado, 24 de março de 2012
Inspirações da palestra



sábado, 24 de março de 2012
Por que eu sou fanático
              por testes e você é um
                     bundão?
                              Sylvestre Mergulhão



  http://mergulhao.info/2009/10/29/por-que-eu-sou-fan-tico-
                 por-testes-e-voc-um-bund-o

sábado, 24 de março de 2012
Só os imaturos não
                             testam
                              Carlos Brando




    http://nomedojogo.com/2009/04/06/so-os-imaturos-nao-
                          testam/

sábado, 24 de março de 2012
Você é um imaturo!
sábado, 24 de março de 2012
Colar post-its na parede todo
            mundo quer, mas escrever testes
             automatizados ninguém quer.
                              Rodrigo Yoshima




       http://blog.aspercom.com.br/2010/01/12/incrementos/


sábado, 24 de março de 2012
E os testes?
sábado, 24 de março de 2012
Se você não tem
                      segurança, você tem
                             medo!


sábado, 24 de março de 2012
Kent Beck sobre o medo

               • o medo te faz inseguro
               • o medo te faz querer comunicar-se menos
               • o medo te faz afastar-se de feedback
               • o medo te faz mal humorado


sábado, 24 de março de 2012
Calma!



sábado, 24 de março de 2012
sábado, 24 de março de 2012
Manifesto Ágil
Indivíduos e interações mais que processos e
ferramentas
Software em funcionamento mais que
documentação abrangente
Colaboração com o cliente mais que negociação de
contratos
Responder a mudanças mais que seguir um plano




sábado, 24 de março de 2012
Extreme Programming
                              Kent Beck




sábado, 24 de março de 2012
Coragem
sábado, 24 de março de 2012
Testes
             • fazem você se setir confiante
             • fazem você acreditar no seu código
             • fazem você adicionar novas features sem medo
             • fazem você dormir tranquilo



sábado, 24 de março de 2012
Ritmo sustentável
sábado, 24 de março de 2012
TDD
                              test driven development




sábado, 24 de março de 2012
Desenvolvimento guiados por
                   testes é uma forma de
                administrar o medo durante a
                        programação!
                              Kent Beck




sábado, 24 de março de 2012
sábado, 24 de março de 2012
3 fases
sábado, 24 de março de 2012
BDD
                              behaviour driven development




sábado, 24 de março de 2012
Desenvolvimento orientado a
                      comportamento

               • testar o comportamento da sua aplicação
               • mais sobre escrever especificações
               • escrever testes também é documentar



sábado, 24 de março de 2012
Show me the code :)



sábado, 24 de março de 2012
Ruby Test Unit



sábado, 24 de março de 2012
Baby steps



sábado, 24 de março de 2012
require "minitest/autorun"

       class PostTest < MiniTest::Unit::TestCase
         def test_should_initialize_a_post
           post = Post.new
           assert(post)
         end
       end




          ERROR test_should_initialize_a_post (0:00:00.000)
                   uninitialized constant PostTest::Post


sábado, 24 de março de 2012
class Post

       end




                              PASS test_should_initialize_a_post




sábado, 24 de março de 2012
Eu poderia dar passos
                   mais largos caso me
                   sentisse confiante!


sábado, 24 de março de 2012
def test_should_have_a_title_if_is_setted
              post = Post.new
              assert_equal(post.title, "post title")
            end




               ERROR test_should_have_a_title_if_is_setted
                     undefined method `title' for #<Post:
                         0x0000010091dc90>




sábado, 24 de março de 2012
class Post
         def title
           "my post"
         end
       end




                  PASS test_should_have_a_title_if_is_setted




sábado, 24 de março de 2012
def test_should_have_a_title_if_is_setted
              post = Post.new
              post.title = "my post"
              assert_equal(post.title, "my post")
            end




               ERROR test_should_have_a_title_if_is_setted
                    undefined method `title=' for #<Post:
                          0x0000010107ca90>




sábado, 24 de março de 2012
class Post
         def title
           "my post"
         end

         def title=(title)
         end
       end




                  PASS test_should_have_a_title_if_is_setted



sábado, 24 de março de 2012
def test_should_have_a_blank_title_if_none_is_setted
     post = Post.new
     assert_equal(post.title, nil)
   end




    FAIL test_should_have_a_blank_title_if_none_is_setted
                        Expected: "my post"
                             Actual: nil



sábado, 24 de março de 2012
class Post
         def title
           @title
         end

         def title=(title)
           @title = title
         end
       end




    PASS test_should_have_a_blank_title_if_none_is_setted



sábado, 24 de março de 2012
Refatorar



sábado, 24 de março de 2012
class Post
         attr_accessor :title
       end




   PASS test_should_have_a_blank_title_if_none_is_setted
   PASS test_should_initialize_a_post
   PASS test_should_have_a_title_if_is_setted




sábado, 24 de março de 2012
Exemplo meio idiota
                              porém, ilustra bem o ciclo do TDD :)




sábado, 24 de março de 2012
RSpec



sábado, 24 de março de 2012
describe User do
    describe "authentication" do
      it "should be active to authentication" do
        user = Factory.build(:user, :loggable => true)
        user.active_for_authentication?.should be_true
      end

      it "should not be active to authentication" do
         user = Factory.build(:user, :loggable =>
  false)
         user.active_for_authentication?.should
  be_false
      end
    end
  end


sábado, 24 de março de 2012
RSpec + Capybara



sábado, 24 de março de 2012
describe "authentication" do
   let(:user) { Factory.create(:user, :password =>
 "123456", :password_confirmation => "123456") }

      describe "logging" do
        it "should login with valid credentials" do
          visit root_path
          fill_in "user_email", :with => user.email
          fill_in "user_password", :with => "123456"
          click_button "Login"

               page.should have_content("successfully logged"
 )
     end
   end
 ...

sábado, 24 de março de 2012
Cucumber



sábado, 24 de março de 2012
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




sábado, 24 de março de 2012
Before do
     @calc = Calculadora.new
   end

   Dado /que eu digitei (d+) na calculadora/ do |n|
     @calc.push n.to_i
   end

   Quando 'eu aperto o botão de soma' do
     @result = @calc.soma
   end

   Então /o resultado na calculadora deve ser (d*)/
   do |result|
     @result.should == result.to_i
   end


sábado, 24 de março de 2012
Você ainda vai continuar
               sendo um bundão???


sábado, 24 de março de 2012
Obrigado   http://lucasrenan.com




sábado, 24 de março de 2012

Mais conteúdo relacionado

Mais de Lucas Renan

Movimentando Comunidades - GURU ABC
Movimentando Comunidades - GURU ABCMovimentando Comunidades - GURU ABC
Movimentando Comunidades - GURU ABCLucas Renan
 
Ruby on Rails - UNISO
Ruby on Rails - UNISORuby on Rails - UNISO
Ruby on Rails - UNISOLucas Renan
 
REST Active Resource - 7º Encontro do GURU Sorocaba
REST Active Resource - 7º Encontro do GURU SorocabaREST Active Resource - 7º Encontro do GURU Sorocaba
REST Active Resource - 7º Encontro do GURU SorocabaLucas Renan
 
Ruby on Rails + MongoDB - FATEC Sorocaba
Ruby on Rails + MongoDB - FATEC SorocabaRuby on Rails + MongoDB - FATEC Sorocaba
Ruby on Rails + MongoDB - FATEC SorocabaLucas Renan
 
Ruby on Rails - Clube Startup
Ruby on Rails -  Clube StartupRuby on Rails -  Clube Startup
Ruby on Rails - Clube StartupLucas Renan
 
Movimente sua comunidade local - LT RubyConf Br 2012
Movimente sua comunidade local - LT RubyConf Br 2012Movimente sua comunidade local - LT RubyConf Br 2012
Movimente sua comunidade local - LT RubyConf Br 2012Lucas Renan
 
AIESEC Sorocaba - CONACT Effect
AIESEC Sorocaba - CONACT EffectAIESEC Sorocaba - CONACT Effect
AIESEC Sorocaba - CONACT EffectLucas Renan
 
Ruby on Rails + MongoDB
Ruby on Rails + MongoDBRuby on Rails + MongoDB
Ruby on Rails + MongoDBLucas Renan
 
Ruby on Rails + MongoDB - GURU Sorocaba
Ruby on Rails + MongoDB - GURU SorocabaRuby on Rails + MongoDB - GURU Sorocaba
Ruby on Rails + MongoDB - GURU SorocabaLucas Renan
 

Mais de Lucas Renan (9)

Movimentando Comunidades - GURU ABC
Movimentando Comunidades - GURU ABCMovimentando Comunidades - GURU ABC
Movimentando Comunidades - GURU ABC
 
Ruby on Rails - UNISO
Ruby on Rails - UNISORuby on Rails - UNISO
Ruby on Rails - UNISO
 
REST Active Resource - 7º Encontro do GURU Sorocaba
REST Active Resource - 7º Encontro do GURU SorocabaREST Active Resource - 7º Encontro do GURU Sorocaba
REST Active Resource - 7º Encontro do GURU Sorocaba
 
Ruby on Rails + MongoDB - FATEC Sorocaba
Ruby on Rails + MongoDB - FATEC SorocabaRuby on Rails + MongoDB - FATEC Sorocaba
Ruby on Rails + MongoDB - FATEC Sorocaba
 
Ruby on Rails - Clube Startup
Ruby on Rails -  Clube StartupRuby on Rails -  Clube Startup
Ruby on Rails - Clube Startup
 
Movimente sua comunidade local - LT RubyConf Br 2012
Movimente sua comunidade local - LT RubyConf Br 2012Movimente sua comunidade local - LT RubyConf Br 2012
Movimente sua comunidade local - LT RubyConf Br 2012
 
AIESEC Sorocaba - CONACT Effect
AIESEC Sorocaba - CONACT EffectAIESEC Sorocaba - CONACT Effect
AIESEC Sorocaba - CONACT Effect
 
Ruby on Rails + MongoDB
Ruby on Rails + MongoDBRuby on Rails + MongoDB
Ruby on Rails + MongoDB
 
Ruby on Rails + MongoDB - GURU Sorocaba
Ruby on Rails + MongoDB - GURU SorocabaRuby on Rails + MongoDB - GURU Sorocaba
Ruby on Rails + MongoDB - GURU Sorocaba
 

Teste seu código! não seja imaturo e nem bundão.

  • 1. Teste seu código! não seja imaturo e nem bundão @lucasrenan sábado, 24 de março de 2012
  • 3. guru sorocaba http://gurusorocaba.com.br/ sábado, 24 de março de 2012
  • 4. Como você garante que seu código funciona? sábado, 24 de março de 2012
  • 5. sábado, 24 de março de 2012
  • 6. Você confia no seu código? sábado, 24 de março de 2012
  • 7. sábado, 24 de março de 2012
  • 8. Muitos bugs no sistema? sábado, 24 de março de 2012
  • 9. Seu chefe fica furioso! sábado, 24 de março de 2012
  • 10. Você fica frustrado sábado, 24 de março de 2012
  • 11. Programar se torna chato sábado, 24 de março de 2012
  • 12. Inspirações da palestra sábado, 24 de março de 2012
  • 13. Por que eu sou fanático por testes e você é um bundão? Sylvestre Mergulhão http://mergulhao.info/2009/10/29/por-que-eu-sou-fan-tico- por-testes-e-voc-um-bund-o sábado, 24 de março de 2012
  • 14. Só os imaturos não testam Carlos Brando http://nomedojogo.com/2009/04/06/so-os-imaturos-nao- testam/ sábado, 24 de março de 2012
  • 15. Você é um imaturo! sábado, 24 de março de 2012
  • 16. Colar post-its na parede todo mundo quer, mas escrever testes automatizados ninguém quer. Rodrigo Yoshima http://blog.aspercom.com.br/2010/01/12/incrementos/ sábado, 24 de março de 2012
  • 17. E os testes? sábado, 24 de março de 2012
  • 18. Se você não tem segurança, você tem medo! sábado, 24 de março de 2012
  • 19. Kent Beck sobre o medo • o medo te faz inseguro • o medo te faz querer comunicar-se menos • o medo te faz afastar-se de feedback • o medo te faz mal humorado sábado, 24 de março de 2012
  • 20. Calma! sábado, 24 de março de 2012
  • 21. sábado, 24 de março de 2012
  • 22. Manifesto Ágil Indivíduos e interações mais que processos e ferramentas Software em funcionamento mais que documentação abrangente Colaboração com o cliente mais que negociação de contratos Responder a mudanças mais que seguir um plano sábado, 24 de março de 2012
  • 23. Extreme Programming Kent Beck sábado, 24 de março de 2012
  • 24. Coragem sábado, 24 de março de 2012
  • 25. Testes • fazem você se setir confiante • fazem você acreditar no seu código • fazem você adicionar novas features sem medo • fazem você dormir tranquilo sábado, 24 de março de 2012
  • 26. Ritmo sustentável sábado, 24 de março de 2012
  • 27. TDD test driven development sábado, 24 de março de 2012
  • 28. Desenvolvimento guiados por testes é uma forma de administrar o medo durante a programação! Kent Beck sábado, 24 de março de 2012
  • 29. sábado, 24 de março de 2012
  • 30. 3 fases sábado, 24 de março de 2012
  • 31. BDD behaviour driven development sábado, 24 de março de 2012
  • 32. Desenvolvimento orientado a comportamento • testar o comportamento da sua aplicação • mais sobre escrever especificações • escrever testes também é documentar sábado, 24 de março de 2012
  • 33. Show me the code :) sábado, 24 de março de 2012
  • 34. Ruby Test Unit sábado, 24 de março de 2012
  • 35. Baby steps sábado, 24 de março de 2012
  • 36. require "minitest/autorun" class PostTest < MiniTest::Unit::TestCase def test_should_initialize_a_post post = Post.new assert(post) end end ERROR test_should_initialize_a_post (0:00:00.000) uninitialized constant PostTest::Post sábado, 24 de março de 2012
  • 37. class Post end PASS test_should_initialize_a_post sábado, 24 de março de 2012
  • 38. Eu poderia dar passos mais largos caso me sentisse confiante! sábado, 24 de março de 2012
  • 39. def test_should_have_a_title_if_is_setted post = Post.new assert_equal(post.title, "post title") end ERROR test_should_have_a_title_if_is_setted undefined method `title' for #<Post: 0x0000010091dc90> sábado, 24 de março de 2012
  • 40. class Post def title "my post" end end PASS test_should_have_a_title_if_is_setted sábado, 24 de março de 2012
  • 41. def test_should_have_a_title_if_is_setted post = Post.new post.title = "my post" assert_equal(post.title, "my post") end ERROR test_should_have_a_title_if_is_setted undefined method `title=' for #<Post: 0x0000010107ca90> sábado, 24 de março de 2012
  • 42. class Post def title "my post" end def title=(title) end end PASS test_should_have_a_title_if_is_setted sábado, 24 de março de 2012
  • 43. def test_should_have_a_blank_title_if_none_is_setted post = Post.new assert_equal(post.title, nil) end FAIL test_should_have_a_blank_title_if_none_is_setted Expected: "my post" Actual: nil sábado, 24 de março de 2012
  • 44. class Post def title @title end def title=(title) @title = title end end PASS test_should_have_a_blank_title_if_none_is_setted sábado, 24 de março de 2012
  • 45. Refatorar sábado, 24 de março de 2012
  • 46. class Post attr_accessor :title end PASS test_should_have_a_blank_title_if_none_is_setted PASS test_should_initialize_a_post PASS test_should_have_a_title_if_is_setted sábado, 24 de março de 2012
  • 47. Exemplo meio idiota porém, ilustra bem o ciclo do TDD :) sábado, 24 de março de 2012
  • 48. RSpec sábado, 24 de março de 2012
  • 49. describe User do describe "authentication" do it "should be active to authentication" do user = Factory.build(:user, :loggable => true) user.active_for_authentication?.should be_true end it "should not be active to authentication" do user = Factory.build(:user, :loggable => false) user.active_for_authentication?.should be_false end end end sábado, 24 de março de 2012
  • 50. RSpec + Capybara sábado, 24 de março de 2012
  • 51. describe "authentication" do let(:user) { Factory.create(:user, :password => "123456", :password_confirmation => "123456") } describe "logging" do it "should login with valid credentials" do visit root_path fill_in "user_email", :with => user.email fill_in "user_password", :with => "123456" click_button "Login" page.should have_content("successfully logged" ) end end ... sábado, 24 de março de 2012
  • 52. Cucumber sábado, 24 de março de 2012
  • 53. 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 sábado, 24 de março de 2012
  • 54. Before do @calc = Calculadora.new end Dado /que eu digitei (d+) na calculadora/ do |n| @calc.push n.to_i end Quando 'eu aperto o botão de soma' do @result = @calc.soma end Então /o resultado na calculadora deve ser (d*)/ do |result| @result.should == result.to_i end sábado, 24 de março de 2012
  • 55. Você ainda vai continuar sendo um bundão??? sábado, 24 de março de 2012
  • 56. Obrigado http://lucasrenan.com sábado, 24 de março de 2012