Programação Orientada a Testes

3.879 visualizações

Publicada em

Programação Orientada a Testes na prática, apresentando experiência de TDD em ambiente corporativo de empresa pública

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
3.879
No SlideShare
0
A partir de incorporações
0
Número de incorporações
1.071
Ações
Compartilhamentos
0
Downloads
32
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide






















































































  • Programação Orientada a Testes

    1. 1. Programação Orientada a Testes Experiências num ambiente corporativo Gregório Enrico Linhares de Melo @gregoriomelo
    2. 2. O que é POT (TDD)?
    3. 3. O que é POT (TDD)? Seria mais uma PO*?
    4. 4. O que é POT (TDD)? Seria mais uma PO*? Seria mais uma teoria com pouca prática?
    5. 5. O que é POT (TDD)? Seria mais uma PO*? Seria mais uma teoria com pouca prática? Alguém usa?
    6. 6. O que é POT (TDD)? Seria mais uma PO*? Seria mais uma teoria com pouca prática? Alguém usa? Minha vida vai melhorar?
    7. 7. Situação atual
    8. 8. Situação atual
    9. 9. Situação atual
    10. 10. Situação atual
    11. 11. Situação atual
    12. 12. Situação atual Quem nunca virou a noite programando?
    13. 13. Situação atual Quem nunca virou a noite programando? Quem nunca mudou o código antes de apresentar?
    14. 14. Situação atual Quem nunca virou a noite programando? Quem nunca mudou o código antes de apresentar? Quem nunca ficou com medo nessa hora?
    15. 15. Situação atual Quem nunca virou a noite programando? Quem nunca mudou o código antes de apresentar? Quem nunca ficou com medo nessa hora?
    16. 16. Caos
    17. 17. Caos Programação por coincidência
    18. 18. Caos Programação por coincidência Frameworks antes de funcionalidades
    19. 19. Caos Programação por coincidência Frameworks antes de funcionalidades Analysis Paralysis
    20. 20. Caos Programação por coincidência Frameworks antes de funcionalidades Analysis Paralysis Manutenção difícil
    21. 21. Sonho
    22. 22. Sonho Fim das coincidências
    23. 23. Sonho Fim das coincidências Apresentar funcionalidades mais rapidamente
    24. 24. Sonho Fim das coincidências Apresentar funcionalidades mais rapidamente Fim do medo
    25. 25. Sonho Fim das coincidências Apresentar funcionalidades mais rapidamente Fim do medo Não usar o debug :)
    26. 26. Sonho Fim das coincidências Apresentar funcionalidades mais rapidamente Fim do medo Não usar o debug :) Dormir em paz antes da apresentação :))))))))))
    27. 27. De onde vem o TDD?
    28. 28. De onde vem o TDD? @KentBeck
    29. 29. De onde vem o TDD? @KentBeck
    30. 30. TDD significa:
    31. 31. TDD significa: Código autoexplicativo
    32. 32. // if the guess is correct if ([guess isEqualToString:[correctAnswer convertToDisplayName]]) { // make the text color a medium green answerLabel.textColor = [UIColor colorWithRed:0.0 green:0.7 blue:0.0 alpha:1.0]; TDD significa: answerLabel.text = @"Correct!"; // set the text in the label // get the correct answer from the correct file name NSString *correct = [correctAnswer convertToDisplayName]; Código autoexplicativo // loop through each bar for (UISegmentedControl *bar in bars) { bar.enabled = NO; // don't let the user choose another answer // loop through the bar segments for (int i = 0; i < 3; i++) { // get the segment's title NSString *title = [bar titleForSegmentAtIndex:i]; // if this segment does not have the correct choice // disable segment if (![title isEqualToString:correct]) [bar setEnabled:NO forSegmentAtIndex:i]; } // end for } // end for ++numCorrect; . . .
    33. 33. TDD significa: Código autoexplicativo Código reutilizável
    34. 34. TDD significa: Código autoexplicativo Código reutilizável Saber o que se faz e quando está pronto
    35. 35. TDD significa: Código autoexplicativo Código reutilizável Saber o que se faz e quando está pronto Facilidade na integração (colaboração)
    36. 36. TDD significa: Segurança no desenvolvimento
    37. 37. TDD significa: Segurança no desenvolvimento Mitigação de bugs
    38. 38. if (countAttr != null && countAttr.length() > 0) { TDD significa: Object countObj = findValue(countAttr); if (countObj instanceof Integer) { Segurança no desenvolvimento count = ((Integer)countObj).intValue(); } else if (countObj instanceof Float) { Mitigação de bugs count = ((Float)countObj).intValue(); } else if (countObj instanceof Long) { count = ((Long)countObj).intValue(); } else if (countObj instanceof Double) { count = ((Long)countObj).intValue(); } }
    39. 39. if (countAttr != null && countAttr.length() > 0) { TDD significa: Object countObj = findValue(countAttr); if (countObj instanceof Integer) { Segurança no desenvolvimento count = ((Integer)countObj).intValue(); } else if (countObj instanceof Float) { Mitigação de bugs count = ((Float)countObj).intValue(); } else if (countObj instanceof Long) { count = ((Long)countObj).intValue(); } else if (countObj instanceof Double) { count = ((Long)countObj).intValue(); } }
    40. 40. TDD significa: Segurança no desenvolvimento Mitigação de bugs Arquitetura flexível
    41. 41. TDD significa: Segurança no desenvolvimento Mitigação de bugs Arquitetura flexível
    42. 42. Mitos
    43. 43. Mitos Só funciona para equipes pequenas
    44. 44. Mitos Só funciona para equipes pequenas Só funciona para projetos pequenos
    45. 45. Mitos Só funciona para equipes pequenas Só funciona para projetos pequenos “Não temos tempo para criar testes”
    46. 46. Caso de sucesso
    47. 47. Caso de sucesso
    48. 48. Caso de sucesso - WebCNIS
    49. 49. Caso de sucesso - WebCNIS 13 pessoas
    50. 50. Caso de sucesso - WebCNIS 13 pessoas 2300 pontos de função
    51. 51. Caso de sucesso - WebCNIS 13 pessoas 2300 pontos de função 2 anos
    52. 52. Caso de sucesso - WebCNIS 13 pessoas 2300 pontos de função 2 anos Integração com diversos sistemas legados
    53. 53. Caso de sucesso - WebCNIS 13 pessoas 2300 pontos de função 2 anos Integração com diversos sistemas legados Módulo para outros projetos do CNIS
    54. 54. Caso de sucesso - WebCNIS
    55. 55. Caso de sucesso - WebCNIS Documentação compilável
    56. 56. Caso de sucesso - WebCNIS Documentação compilável Código autoexplicativo
    57. 57. Caso de sucesso - WebCNIS Documentação compilável Código autoexplicativo Integração contínua
    58. 58. Caso de sucesso - WebCNIS Documentação compilável Código autoexplicativo Integração contínua Sistema compreensível para novos integrantes
    59. 59. Caso de sucesso - WebCNIS Fácil adaptação às mudanças de requisitos
    60. 60. Caso de sucesso - WebCNIS Fácil adaptação às mudanças de requisitos Fácil adaptação às mudanças de serviços
    61. 61. Caso de sucesso - WebCNIS Fácil adaptação às mudanças de requisitos Fácil adaptação às mudanças de serviços PD baseado nas experiências do WebCNIS
    62. 62. Caso de sucesso - WebCNIS Fácil adaptação às mudanças de requisitos Fácil adaptação às mudanças de serviços PD baseado nas experiências do WebCNIS Adoção de TDD por outros projetos
    63. 63. Caso de sucesso - WebCNIS Fácil adaptação às mudanças de requisitos Fácil adaptação às mudanças de serviços PD baseado nas experiências do WebCNIS Adoção de TDD por outros projetos Tempo de manutenção reduzido
    64. 64. Bugs em produção ?
    65. 65. Bugs em produção 2
    66. 66. Mitos?
    67. 67. #ComoFaz?
    68. 68. #ComoFaz?
    69. 69. #ComoFaz?
    70. 70. #ComoFaz? - Metodologia, + Filosofia
    71. 71. #ComoFaz? - Metodologia, + Filosofia Testes Unitários + Testes de Integração
    72. 72. #ComoFaz? - Metodologia, + Filosofia Testes Unitários + Testes de Integração Ferramentas (xUnit, RSpec...)
    73. 73. #ComoFaz? - Metodologia, + Filosofia Testes Unitários + Testes de Integração Ferramentas (xUnit, RSpec...) não bastam
    74. 74. #ComoFaz? - Metodologia, + Filosofia Testes Unitários + Testes de Integração Ferramentas (xUnit, RSpec...) não bastam Nada é tão simples que não mereça ser testado
    75. 75. #ComoFaz? Testes devem ser: Decisivos,Válidos, Completos, Repetíveis, Isolados, Automáticos
    76. 76. describe "failure" do #ComoFaz? before(:each) do @attr = { :name => "", :email => "", :password => "", :password_confirmation => "" } end it "should not create a user" do lambda do post :create, :user => @attr end.should_not change(User, :count) end it "should have the right title" do post :create, :user => @attr response.should have_selector("title", :content => "Sign up") end it "should have the 'new' page" do post :create, :user => @attr response.should render_template('new') end end
    77. 77. describe "success" do before(:each) do @attr = { :name => "New User", :email => "user@example.com", :password => "foobar", :password_confirmation => "foobar" } end #ComoFaz? it "should create a user" do lambda do post :create, :user => @attr end.should change(User, :count).by(1) end it "should redirect to the user show page" do post :create, :user => @attr response.should redirect_to(user_path(assigns(:user))) end it "should have a welcome message" do post :create, :user => @attr flash[:success].should =~ /welcome/i end it "should sign the user in" do post :create, :user => @attr controller.should be_signed_in end end end
    78. 78. #ComoFaz? def create @user = User.new(params[:user]) if @user.save sign_in @user flash[:success] = "Welcome!" redirect_to @user else @title = 'Sign up' @user.password = nil @user.password_confirmation = nil render 'new' end end
    79. 79. #ComoFaz?
    80. 80. #ComoFaz?
    81. 81. #ComoFaz? Pratique!
    82. 82. ?
    83. 83. Obrigado!
    84. 84. Programação Orientada a Testes Experiências num ambiente corporativo Gregório Enrico Linhares de Melo @gregoriomelo

    ×