Chouette! Encore un bug!

1,174 views
1,002 views

Published on

Published in: Business
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,174
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
26
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • Portia and Pascal introduce themselves by sharing a bit about their background.
  • Portia and Pascal introduce themselves by sharing a bit about their background.
  • Chouette! Encore un bug!

    1. 1. Chouette! Encore un bug! Pascal Van Cauwenberghe
    2. 2. Bonjour Consultant. Project Manager. Créateur de JeuxNAYIMAWe make play workwww.nayima.beblog.nayima.be
    3. 3. CLAUSE DE NON-RESPONSABILITÉ
    4. 4. Clause de non-responsabilité (1)• Cette présentation contient du code – Sans garantie que ça compile• Cette présentation peut contenir 0, 1 ou plus insectes – A éviter pour les entomophobes
    5. 5. Clause de non-responsabilité (2)• Basé sur des histoires vraies – Equipes différentes – Projets différents – Langages différents – Pays différents• Chantier en cours – Notre code contient encore des bugs
    6. 6. Chouette! Encore un bug!Comment passer toute la journée à corriger un tout petit bug
    7. 7. Maman, d’où viennent les bugs? Il était une fois...
    8. 8. Le projetL’applicationNous
    9. 9. Contexte• Grande application web• Mission critical• Premier projet Agile de l’équipe• Nous devons modifier et étendre une petite partie de l’application
    10. 10. Scene 1:un développeur trouve un bug
    11. 11. Que faites vous quand on vous dit “j’ai trouvé un bug...” ?
    12. 12. MERCI!
    13. 13. Algoritme du code parfait1. TROUVER UN BUG2. DIRE “MERCI!”3. ....
    14. 14. Scene 2:Qu’est-ce qu’on fait avec le bug?
    15. 15. CECI N’EST PAS UN BUG
    16. 16. CECI EST UNE OPPORTUNITE
    17. 17. ASTUCE• On ne cherche pas à reprocher• On ne veut pas trouver le “coupable”• Il faut un environnement sans blâme• Attention au langage: – “Exercice”, “Apprendre”, “Améliorer” – “Nous”, “Notre code”, “Notre problème”• Approche “Solution Focus”
    18. 18. Scene 3:L’équipe fait une Root Cause Analysis 5 développeurs + architecte
    19. 19. “Le client a droit à unremboursement jusqu’au moment de la livraison”
    20. 20. Qui voit le problème?boolean refundAllowed(Product product) { Datetime now = Datetime.now; Datetime final = Datetime.parse("yyyy-MM-dd“, product.deliveryAt()); return now <= final ;}
    21. 21. MERCI!
    22. 22. On teste l’application• Livraison le 26/05/2012 à 16:00• Il est maintenant 25/05/2012 12:00• 25/05/2012 12:00 <= 26/05/2012 00:00 ?
    23. 23. On teste l’application• Livraison le 26/05/2012 à 16:00• Il est maintenant 25/05/2012 12:00• 25/05/2012 12:00 <= 26/05/2012 00:00 ? Remboursement: OUI
    24. 24. On teste l’application• Livraison le 25/05/2012 à 16:00• Il est maintenant 25/05/2012 12:00• 25/05/2012 12:00 <= 25/05/2012 00:00 ?
    25. 25. On teste l’application• Livraison le 25/05/2012 à 16:00• Il est maintenant 25/05/2012 12:00• 25/05/2012 12:00 <= 25/05/2012 00:00 ? Remboursement: NON
    26. 26. Algoritme du code parfait1. TROUVER UN BUG2. DIRE “MERCI!”3. REPRODUIRE LE PROBLEME4. ...
    27. 27. Qu’est-ce qu’on fait maintenant? Est-ce qu’on corrige le bug? C’est tellement facile!
    28. 28. Algoritme du code parfait1. TROUVER UN BUG2. DIRE “MERCI!”3. REPRODUIRE LE PROBLEME4. AJOUTER (AU MOINS) UN TEST QUI ECHOUE5. ...
    29. 29. Un nouveau testvoid testRefundGivenWhenDeliveryLaterToday() {Datetime now = DateTime.now ;String endofDay = now.strftime(“yyyy-MM-dd") + " 23:59" ;Product product = ...product.deliveryAt(endOfDay) ;BusinessRule businessRule = ...bool refund = businessRule.refundAllowed(product);assertTrue(refund,“Remboursement jusquau moment de la livraison, aussi si cest le même jour") ;}
    30. 30. Un nouveau testvoid testRefundGivenWhenDeliveryLaterToday() {Datetime now = DateTime.now ;String endofDay = now.strftime("YYYY-MM-DD") + " 23:59" ;Product product = ...product.deliveryAt(endOfDay) ;BusinessRule businessRule = ...bool refund = businessRule.refundAllowed(product);assertTrue(refund,“Remboursement jusquau moment de la livraison, aussi si cest le même jour") ;}
    31. 31. Est-ce qu’on peut corriger le bug maintenant?
    32. 32. On corrige le bugboolean refundAllowed(Product product) { Datetime now = Datetime.now; Datetime final = Datetime.parse("yyyy-MM-dd HH:MM”, product.deliveryAt()); return now <= final ;}
    33. 33. Un nouveau testvoid testRefundGivenWhenDeliveryLaterToday() {Datetime now = DateTime.now ;String endofDay = now.strftime("YYYY-MM-DD") + " 23:59" ;Product product = ...product.deliveryAt(endOfDay) ;BusinessRule businessRule = ...bool refund = businessRule.refundAllowed(product);assertTrue(refund,“Remboursement jusquau moment de la livraison, aussi si cest le même jour") ;}
    34. 34. Algoritme du code parfait1. TROUVER UN BUG2. DIRE “MERCI!”3. REPRODUIRE LE PROBLEME4. AJOUTER (AU MOINS) UN TEST QUI ECHOUE5. CORRIGER LE PROBLEME6. TOUS LES TESTS REUSSISSENT
    35. 35. Reactions de l’équipe (1)• “Ce truc agile prendra beaucoup de temps si on va faire ça pour tous les bugs!”• “Oui mais, on a plus de confiance quon a bien corrigé le bug en quon na pas cassé autre chose”• “On a vraiment suivi notre principe ‘qualité sans compromis’: on a amélioré le code, même si le bug nest pas dans notre code et avant que le client réclame”
    36. 36. Reactions de l’équipe (2)• “On devrait contacter léquipe responsable pour leur dire quon a corrigé le bug.”• “Il y a peut-être déjà des réclamations des clients. Il faudrait aussi informer le service support client”
    37. 37. ASTUCE• Maintenez une liste de choses à faire après la Root Cause Analysis (RCA)• “On devrait...” => “On va...”
    38. 38. ON VA...• Contacter l’équipe dev responsable• Informer le service support client
    39. 39. Algoritme du code parfait1. TROUVER UN BUG2. DIRE “MERCI!”3. REPRODUIRE LE PROBLEME4. AJOUTER (AU MOINS) UN TEST QUI ECHOUE5. CORRIGER LE PROBLEME6. TOUS LES TESTS REUSSISSENT7. EXECUTER LES ACTIONS ISSUES DU RCA
    40. 40. “Travail bien fait!”“Retournons au boulot!”
    41. 41. LA FIN Et ils vécurentheureux à tout jamais
    42. 42. Ce n’est pas encore fini !
    43. 43. Scene 4: Après la correctionLe testeur rejoint les développeurs et l’architecte
    44. 44. Algoritme du code parfait1. TROUVER UN BUG2. DIRE “MERCI!”3. REPRODUIRE LE PROBLEME4. AJOUTER (AU MOINS) UN TEST QUI ECHOUE5. CORRIGER LE PROBLEME6. TOUS LES TESTS REUSSISSENT7. EXECUTER LES ACTION ISSUES DU RCA8. AMELIORER LES TESTS
    45. 45. Comment améliorer nos tests? On aurait du trouver ce bug plus tôt
    46. 46. Comment améliorer nos tests? On aurait du va trouver ce genre de bug plus tôt
    47. 47. Contexte (2)• Presque 80% de code coverage par les tests automatiques sur toute l’application• Ce module a une couverture de tests de 100%• Mais contient quand même un bug• Pourquoi?• Regardons les tests...
    48. 48. Qui voit le problème?void testRefundGiven() { Product product = ... product.deliveryAt(“2050-12-31 19:00”) ; BusinessRule businessRule = ... bool allowed = businessRule.refundAllowed(product)}
    49. 49. MERCI!
    50. 50. Comment améliorer les tests?• Il n’y a pas d’ ASSERT ! – Facile d’atteindre 100% de couverture• Pourquoi 2050? – Qu’est-ce qui se passe le 1 janvier 2051?• Il faut au moins 4 tests – Livraison avant aujourd’hui – Livraison aujourd’hui avant maintenant – Livraison aujourd’hui après maintenant – Livraison après aujourd’hui
    51. 51. Pourquoi?• Les développeurs ne savent pas comment bien tester du code qui contient des dates – “2050” apparait souvent dans les tests• Très peu de développeurs avec experience en unit testing• Pas de formation ou coaching sur les aspects techniques Agile
    52. 52. ON VA...• Contacter l’équipe dev responsable• Informer le service support client• Ajouter des tests pour les dates, qui peuvent servir comme exemple• Montrer les exemples aux autres équipes
    53. 53. Reactions de l’équipe (3)• Développeurs: « on a encore beaucoup à apprendre sur le unit testing »• Architecte: « jai toujours eu des doutes au sujet de lefficacité des tests automatiques. Maintenant je comprends mieux pourquoi. »• Testeur: « Si vous voulez, je peux vous aider à définir les tests. »
    54. 54. Creusons encore un peu... Pourquoi des tests sans ASSERT?• Peu d’experience en testing• But: “augmenter la couverture par les tests automatiques” au lieu de “augmenter la qualit锕 Pression pour livrer des fonctionnalités• Développement TEST LAST au lieu de TEST FIRST• Pas de formation ou coaching sur les aspects techniques Agile
    55. 55. ON VA...• Contacter l’équipe dev responsable• Informer le service support client• Ajouter des tests pour les dates, qui peuvent servir comme exemple• Montrer les exemples aux autres équipes• Appliquer le TDD en binôme avec le coach• Ajouter « manque de coaching technique » à la liste des risques du coach meeting
    56. 56. Algoritme du code parfait1. TROUVER UN BUG2. DIRE “MERCI!”3. REPRODUIRE LE PROBLEME4. AJOUTER (AU MOINS) UN TEST QUI ECHOUE5. CORRIGER LE PROBLEME6. TOUS LES TESTS REUSSISSENT7. EXECUTER LES ACTION ISSUES DU RCA8. AMELIORER LES TESTS9. AMELIORER LA FACON D’ECRIRE LES TESTS
    57. 57. LA FIN Et ils vécurent heureux à tout jamais“On a encore beaucoup à apprendre”
    58. 58. Ce n’est pas encore fini !
    59. 59. Scene 5: Après les testsUn bug ne vient jamais tout seul
    60. 60. Est-ce que ce bug est unique?
    61. 61. On cherche dans le code...• On trouve 10 instances où on parse cette date – 5 fois avec HH:MM – 5 fois sans HH:MM• Chacun analyse un cas• Resultat: encore deux bugs
    62. 62. Qu’est-ce que vous dites?
    63. 63. MERCI!
    64. 64. Encore une fois
    65. 65. MERCI!
    66. 66. Algoritme du code parfait1. TROUVER UN BUG2. DIRE “MERCI!”3. REPRODUIRE LE PROBLEME4. AJOUTER (AU MOINS) UN TEST QUI ECHOUE5. CORRIGER LE PROBLEME6. TOUS LES TESTS REUSSISSENT7. EXECUTER LES ACTION ISSUES DU RCA8. AMELIORER LES TESTS9. AMELIORER LA FACON D’ECRIRE LES TESTS10. DES PROBLEMES SIMILAIRES? GOTO 2
    67. 67. Reactions de l’équipe (4)• “Qualité sans compromis”. C’est facile à dire mais très dur à implementer• “Ecrire les tests et corriger les problèmes devient de plus en plus de la routine. Ca va de plus en plus vite!”
    68. 68. ENFIN, LA FIN?
    69. 69. Ce n’est pas encore fini !
    70. 70. Est-ce que vous voyez encore un problème?
    71. 71. Creusons encore un peu... Pourquoi est-ce qu’on s’est trompé?• On ne se rend pas compte qu’il y a une date + temps• On a 10x le même code• => 10 opportunités de se tromper• Eliminons la duplication
    72. 72. Améliorer Productclass Product {... // A enlever quand obsolète String deliveryAt() ; // Nouveau. Refactoring graduel des clients DateTime deliveryAtDateTime() ;...}
    73. 73. Algoritme du code parfait1. TROUVER UN BUG2. DIRE “MERCI!”3. REPRODUIRE LE PROBLEME4. AJOUTER (AU MOINS) UN TEST QUI ECHOUE5. CORRIGER LE PROBLEME6. TOUS LES TESTS REUSSISSENT7. EXECUTER LES ACTION ISSUES DU RCA8. AMELIORER LES TESTS9. AMELIORER LA FACON D’ECRIRE LES TESTS10. RECHERCHER DES PROBLEMES SIMILAIRES. GOTO 211. RENDRE IMPOSSIBLE DE REFAIRE LA MEME ERREUR
    74. 74. ASTUCE• Si vous pensez qu’il faut écrire du commentaire pour votre code, repensez votre code
    75. 75. Avec commentaireclass A { void methodeA() ; // Il faut d’abord appeler methode A void methodeB() ; void methodeC() ;}...a.methodeB() ; // ERREURa.methodeA() ; // ERREUR!!
    76. 76. Sans commentaireclass A { B methodeA() ;}class B { void methodeB() ; void methodeC() ;}a.methodeA().methodeB() ;
    77. 77. Maman, d’où viennent les strings? Creusons encore un peu...
    78. 78. Le projet ABCDEFGHIJKLMNO ABCDEFGHIJKLMNO Systeme AABCDEFGHIJKLMNO ABCDEFGHIJKLMNOL’application ABCDEFGHIJKLMNO ABCDEFGHIJKLMNO ABCDEFGHIJKLMNO ABCDEFGHIJKLMNO Systeme B
    79. 79. Le projet (vision) ABCDEFGHIJKLMNO Systeme AL’application ABCDEFGHIJKLMNO Systeme B
    80. 80. ON VA...• Contacter l’équipe dev responsable• Informer le service support client• Ajouter des tests pour les dates, qui peuvent servir comme exemple• Montrer les exemples aux autres équipes• Appliquer le TDD en binôme avec le coach• Ajouter « manque de coaching technique » à la liste des risques du coach meeting• Encapsuler toutes les données qui viennent de l’exterieur
    81. 81. GRAND REFACTORING
    82. 82. Proposition A3
    83. 83. Proposition A3 Description du problèmeAVANT APRESEtapes: Visualisation1. .jdlkjds2. Kmlkdmlkd3. Dkqjdlkjds4. Sqkjlkdlksqmk5. BIERE !
    84. 84. ASTUCE• L’A3 est visible pendant toute la période de refactoring• Affichez l’A3 là où on ne peut pas le louper• Limitez le nombre d’A3 qu’on peut afficher
    85. 85. Scene 6:Acte final
    86. 86. Résultats1. On a travaillé tout l’après-midi avec une équipe de 7 personnes + un consultant pour corriger un bug de 6 caractères. Est-ce raisonnable?2. On a trouvé beaucoup moins de bugs en test que dans des projets “normaux”. Est-ce qu’il y a un lien?3. Ceci a soulagé le travail de l’équipe test, goulot d’étranglement du projet. Est-ce qu’il faut économiser sur l’effort d’une équipe non-goulot?4. Le projet a été livré en 5 mois au lieu des 8 estimés. Est-ce que la qualité coute cher?
    87. 87. En résumé
    88. 88. Algoritme du code parfait1. TROUVER UN BUG2. DIRE “MERCI!”3. REPRODUIRE LE PROBLEME4. AJOUTER (AU MOINS) UN TEST QUI ECHOUE5. CORRIGER LE PROBLEME6. TOUS LES TESTS REUSSISSENT7. EXECUTER LES ACTION ISSUES DU RCA8. AMELIORER LES TESTS9. AMELIORER LA FACON D’ECRIRE LES TESTS10. RECHERCHER DES PROBLEMES SIMILAIRES. GOTO 211. RENDRE IMPOSSIBLE DE REFAIRE LA MEME ERREUR
    89. 89. Mais surtout
    90. 90. MERCI!
    91. 91. Le challenge• J’applique ceci avec mes équipes• On est loin du code parfait...• Je mesure les effets pendant un an• Je présente les résultats à la Conférence 2013• Si vous appliquez ces techniques• Contactez-moi• On présente nos résultats ensemble
    92. 92. CECI EST UNE OPPORTUNITE
    93. 93. LA FIN Et ils vécurentheureux à tout jamais
    94. 94. 7/7 SESSION FEEDBACK
    95. 95. MERCI Consultant. Project Manager. Créateur de JeuxNAYIMAWe make play workHis Blog: blog.nayima.be

    ×