Chouette! Encore un bug!     Pascal Van Cauwenberghe
Bonjour              Consultant.              Project Manager.              Créateur de JeuxNAYIMAWe make play workwww.nay...
CLAUSE DE NON-RESPONSABILITÉ
Clause de non-responsabilité (1)• Cette présentation contient du code  – Sans garantie que ça compile• Cette présentation ...
Clause de non-responsabilité (2)• Basé sur des histoires vraies  – Equipes différentes  – Projets différents  – Langages d...
Chouette! Encore un bug!Comment passer toute la journée  à corriger un tout petit bug
Maman, d’où viennent les bugs?         Il était une fois...
Le projetL’applicationNous
Contexte•   Grande application web•   Mission critical•   Premier projet Agile de l’équipe•   Nous devons modifier et éten...
Scene 1:un développeur trouve un bug
Que faites vous quand on vous dit “j’ai trouvé un bug...” ?
MERCI!
Algoritme du code parfait1. TROUVER UN BUG2. DIRE “MERCI!”3. ....
Scene 2:Qu’est-ce qu’on fait avec le bug?
CECI N’EST PAS UN BUG
CECI EST UNE OPPORTUNITE
ASTUCE• On ne cherche pas à reprocher• On ne veut pas trouver le “coupable”• Il faut un environnement sans blâme• Attentio...
Scene 3:L’équipe fait une Root Cause Analysis      5 développeurs + architecte
“Le client a droit à unremboursement jusqu’au moment        de la livraison”
Qui voit le problème?boolean refundAllowed(Product product) {  Datetime now = Datetime.now;    Datetime final = Datetime.p...
MERCI!
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/201...
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/201...
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/201...
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/201...
Algoritme du code parfait1.   TROUVER UN BUG2.   DIRE “MERCI!”3.   REPRODUIRE LE PROBLEME4.   ...
Qu’est-ce qu’on fait maintenant?  Est-ce qu’on corrige le bug?        C’est tellement facile!
Algoritme du code parfait1.   TROUVER UN BUG2.   DIRE “MERCI!”3.   REPRODUIRE LE PROBLEME4.   AJOUTER (AU MOINS) UN TEST Q...
Un nouveau testvoid testRefundGivenWhenDeliveryLaterToday() {Datetime now = DateTime.now ;String endofDay = now.strftime(“...
Un nouveau testvoid testRefundGivenWhenDeliveryLaterToday() {Datetime now = DateTime.now ;String endofDay = now.strftime("...
Est-ce qu’on peut corriger le bug          maintenant?
On corrige le bugboolean refundAllowed(Product product) {  Datetime now = Datetime.now;    Datetime final = Datetime.parse...
Un nouveau testvoid testRefundGivenWhenDeliveryLaterToday() {Datetime now = DateTime.now ;String endofDay = now.strftime("...
Algoritme du code parfait1.   TROUVER UN BUG2.   DIRE “MERCI!”3.   REPRODUIRE LE PROBLEME4.   AJOUTER (AU MOINS) UN TEST Q...
Reactions de l’équipe (1)• “Ce truc agile prendra beaucoup de temps si  on va faire ça pour tous les bugs!”• “Oui mais, on...
Reactions de l’équipe (2)• “On devrait contacter léquipe responsable  pour leur dire quon a corrigé le bug.”• “Il y a peut...
ASTUCE• Maintenez une liste de choses à faire  après la Root Cause Analysis (RCA)• “On devrait...” => “On va...”
ON VA...• Contacter l’équipe dev responsable• Informer le service support client
Algoritme du code parfait1.   TROUVER UN BUG2.   DIRE “MERCI!”3.   REPRODUIRE LE PROBLEME4.   AJOUTER (AU MOINS) UN TEST Q...
“Travail bien fait!”“Retournons au boulot!”
LA FIN   Et ils vécurentheureux à tout jamais
Ce n’est pas encore fini !
Scene 4:     Après la correctionLe testeur rejoint les développeurs           et l’architecte
Algoritme du code parfait1.   TROUVER UN BUG2.   DIRE “MERCI!”3.   REPRODUIRE LE PROBLEME4.   AJOUTER (AU MOINS) UN TEST Q...
Comment améliorer nos tests?  On aurait du trouver ce bug plus tôt
Comment améliorer nos tests?  On aurait du va trouver ce genre de             bug plus tôt
Contexte (2)• Presque 80% de code coverage par les tests  automatiques sur toute l’application•   Ce module a une couvertu...
Qui voit le problème?void testRefundGiven() { Product product = ... product.deliveryAt(“2050-12-31 19:00”) ; BusinessRule ...
MERCI!
Comment améliorer les tests?• Il n’y a pas d’ ASSERT !  – Facile d’atteindre 100% de couverture• Pourquoi 2050?  – Qu’est-...
Pourquoi?• Les développeurs ne savent pas comment bien  tester du code qui contient des dates  – “2050” apparait souvent d...
ON VA...• Contacter l’équipe dev responsable• Informer le service support client• Ajouter des tests pour les dates, qui pe...
Reactions de l’équipe (3)• Développeurs: « on a encore beaucoup à  apprendre sur le unit testing »• Architecte: « jai touj...
Creusons encore un peu...    Pourquoi des tests sans ASSERT?• Peu d’experience en testing• But: “augmenter la couverture p...
ON VA...• Contacter l’équipe dev responsable• Informer le service support client• Ajouter des tests pour les dates, qui pe...
Algoritme du code parfait1.   TROUVER UN BUG2.   DIRE “MERCI!”3.   REPRODUIRE LE PROBLEME4.   AJOUTER (AU MOINS) UN TEST Q...
LA FIN          Et ils vécurent       heureux à tout jamais“On a encore beaucoup à apprendre”
Ce n’est pas encore fini !
Scene 5:      Après les testsUn bug ne vient jamais tout seul
Est-ce que ce bug est unique?
On cherche dans le code...• On trouve 10 instances où on parse cette date  – 5 fois avec HH:MM  – 5 fois sans HH:MM• Chacu...
Qu’est-ce que vous dites?
MERCI!
Encore une fois
MERCI!
Algoritme du code parfait1. TROUVER UN BUG2. DIRE “MERCI!”3. REPRODUIRE LE PROBLEME4. AJOUTER (AU MOINS) UN TEST QUI ECHOU...
Reactions de l’équipe (4)• “Qualité sans compromis”. C’est facile à dire  mais très dur à implementer• “Ecrire les tests e...
ENFIN, LA FIN?
Ce n’est pas encore fini !
Est-ce que vous voyez encore un           problème?
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 ...
Améliorer Productclass Product {...  // A enlever quand obsolète  String deliveryAt() ;  // Nouveau. Refactoring graduel d...
Algoritme du code parfait1.    TROUVER UN BUG2.    DIRE “MERCI!”3.    REPRODUIRE LE PROBLEME4.    AJOUTER (AU MOINS) UN TE...
ASTUCE• Si vous pensez qu’il faut écrire du  commentaire pour votre code, repensez  votre code
Avec commentaireclass A {  void methodeA() ;  // Il faut d’abord appeler methode A  void methodeB() ;  void methodeC() ;}....
Sans commentaireclass A {  B methodeA() ;}class B {  void methodeB() ;  void methodeC() ;}a.methodeA().methodeB() ;
Maman, d’où viennent les       strings?   Creusons encore un peu...
Le projet                                    ABCDEFGHIJKLMNO   ABCDEFGHIJKLMNO                                            ...
Le projet (vision)                ABCDEFGHIJKLMNO                                    Systeme AL’application               ...
ON VA...• Contacter l’équipe dev responsable• Informer le service support client• Ajouter des tests pour les dates, qui pe...
GRAND REFACTORING
Proposition A3
Proposition A3          Description du problèmeAVANT                     APRESEtapes:                   Visualisation1. .j...
ASTUCE• L’A3 est visible pendant toute la période  de refactoring• Affichez l’A3 là où on ne peut pas le  louper• Limitez ...
Scene 6:Acte final
Résultats1. On a travaillé tout l’après-midi avec une équipe de 7   personnes + un consultant pour corriger un bug de 6   ...
En résumé
Algoritme du code parfait1.    TROUVER UN BUG2.    DIRE “MERCI!”3.    REPRODUIRE LE PROBLEME4.    AJOUTER (AU MOINS) UN TE...
Mais surtout
MERCI!
Le challenge•   J’applique ceci avec mes équipes•   On est loin du code parfait...•   Je mesure les effets pendant un an• ...
CECI EST UNE OPPORTUNITE
LA FIN   Et ils vécurentheureux à tout jamais
7/7 SESSION FEEDBACK
MERCI               Consultant.               Project Manager.               Créateur de JeuxNAYIMAWe make play workHis Bl...
Chouette! Encore un bug!
Chouette! Encore un bug!
Chouette! Encore un bug!
Chouette! Encore un bug!
Chouette! Encore un bug!
Chouette! Encore un bug!
Chouette! Encore un bug!
Chouette! Encore un bug!
Chouette! Encore un bug!
Prochain SlideShare
Chargement dans…5
×

Chouette! Encore un bug!

1 226 vues

Publié le

Publié dans : Business
0 commentaire
2 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 226
Sur SlideShare
0
Issues des intégrations
0
Intégrations
3
Actions
Partages
0
Téléchargements
26
Commentaires
0
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  • 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

    ×