Quelle est l'utilité de la relecture de code ? Bonnes pratiques, mauvaises pratiques, comment s'y prendre pour mener cette tâche à bien malgré les obstacles organisationnels ?
Cette session vise à sensibiliser les participants à la problématique de relecture de code. Souvent ce sont les outils qui font le buzz, reléguant les pratiques et leur adoption au second plan. Loin des effets whaou de la démo d'un outil, je souhaite vous sensibiliser au pourquoi et comment, tout en illustrant par des pratiques : de la plus élémentaire à la plus tendance. Des pistes seront données à l'audience pour mettre en place ou renforcer la démarche qualité sur le terrain, ainsi que les références aux outils qui s'inscrirons dans ces pratiques.
A l'image du premier principe du manifeste agile (Les individus et leurs interactions plus que les processus et les outils), la présentation sera donc largement tournée sur l'humain, le relationnel, elle ne détaille ni ne fait la promotion d'un processus ou d'un outil donné de relecture de code (qui seront néanmoins mentionnés).
4. Une orientation selon le manifeste agile :
● Les individus et leurs interactions plus
que les processus et les outils
● Des logiciels opérationnels plus qu’une documentation
exhaustive
● La collaboration avec les clients plus que la négociation
contractuelle
● L’adaptation au changement plus que le suivi d’un plan
#AgileLaval16 #codeReview@esiber
5. Qui suis-je ?
#AgileLaval16 #codeReview@esiber
Dans le monde du service en IT, en Région
Parisienne depuis plus de 10 ans :
● Agile Java Craftsman
● Creative Ecosystem Organizer
● Runner et Papa 2.0
6. Qui suis-je ?
Dans le monde du service en IT, en Région
Parisienne depuis plus de 10 ans :
● Agile Java Craftsman
● Creative Ecosystem Organizer
● Runner et Papa 2.0
Sur le plan communautaire :
● Membre actif, modérateur, rédacteur et responsable
bénévole Java sur Developpez.com de 2005 à 2009
● Co-organisateur de la conférence Agile France en 2013
● Interventions en conférence (Scrum Day, Agile Toulouse,
Breizhcamp, Agile France)
#AgileLaval16 #codeReview@esiber
7. De quoi va-t-on parler ?
● Bénéfices attendus
● Quelques statistiques
● Typologies de relectures
● Aspects humains
● Scope de la relecture (le quoi, le quand)
● Facteurs clés de succès
● Eléments disruptifs
● Quelques références
#AgileLaval16 #codeReview@esiber
8. Qui estime avoir déjà fait de la relecture de code ?
#AgileLaval16 #codeReview@esiber
9. Qui estime avoir déjà bénéficié d’une
relecture de code ?
#AgileLaval16 #codeReview@esiber
19. « the average effectiveness of design and code
inspections are 55 and 60 percent »
« software testing alone has limited
effectiveness -- the average defect detection
rate is only 25 percent for unit testing, 35
percent for function testing, and 45 percent for
integration testing »
#AgileLaval16 #codeReview@esiber
20. « A study of an organization at AT&T with more
than 200 people reported a 14 percent
increase in productivity and a 90 percent
decrease in defects after the organization
introduced reviews. »
Source : “Code Complete”
#AgileLaval16 #codeReview@esiber
21. « In a group of 11 programs developed by the same
group of people, the first 5 were developed without
reviews. The remaining 6 were developed with
reviews. After all the programs were released to
production, the first 5 had an average of 4.5 errors
per 100 lines of code. The 6 that had been inspected
had an average of only 0.82 errors per 100.
Reviews cut the errors by over 80 percent. »
Source : “Code Complete”
#AgileLaval16 #codeReview@esiber
23. Expérience d’un client sur un projet de 10 000 LOC avec 10
développeurs :
● les anomalies détectées par l’homologation et les utilisateurs
sur une période de 6 mois ont été consignées
● un groupe de développeur a fait une revue de code sur la
même base de code initial et a identifié 162 bugs
supplémentaires
● d’après des métriques ils ont estimé que la revue de code
aurait pu réduire de 50% le coût de correction des
anomalies
Source : Best Kept Secrets of Peer Code Review
#AgileLaval16 #codeReview@esiber
32. Typologies de relecture : variantes
● Réunions de type revue / relecture de code
● Plusieurs intervenants (de 3 à 6)
● Différents rôles attribués
● « Formal Inspections » (défini comme une 5ème typologie
dans Best Kept Secrets of Peer Code Review)
● Mob Programming
● Remote Pair-programming
● Partage de bureau à distance
● VS Anywhere
● Eclipse Saros
#AgileLaval16 #codeReview@esiber
40. ● Augmentation de ses exigences ?
o Davantage d’efforts dans la rédaction du
code ?
Comment appréhender d’être relu ?
#AgileLaval16 #codeReview@esiber
41. ● Attendre ou solliciter la relecture ?
o Crainte de la relecture ?
o Frustration de ne pas avoir de feedback ?
Comment appréhender d’être relu ?
#AgileLaval16 #codeReview@esiber
42. ● Evaluer le code, pas son auteur
● Poser des questions
○ Chercher à comprendre le raisonnement suivi
○ Eviter le « pourquoi » trop accusateur
● Conseiller plutôt que réprimander
● Ne pas chercher systématiquement à
imaginer comment on aurait fait soi même
○ Il y toujours plusieurs solutions à un problème
Comment s’y prendre pour relire ?
#AgileLaval16 #codeReview@esiber
43. ● Illustre une absence de pédagogie
● Justifié ou non, l’auteur initial n’aura rien
appris et continuera à faire ce type d’erreur
● Risque de conflit et de défiance / compétition
Les dérives de la modification directe du code
Ces conseils peuvent s’appliquer hors
revue de code !
#AgileLaval16 #codeReview@esiber
44. ● Jeu de rôle pour le candidat
o Relire un code existant qu’on lui présente
o Subir la relecture sur un code qu’il a produit
o Situation de Pair-programming
● Les aspects humains comptent pour 50%,
autant que les aspects techniques
L’exercice de relecture peut s’appliquer dans
le cadre d’un entretien de recrutement
#AgileLaval16 #codeReview@esiber
46. ● Un ensemble de ressources remplissant une
fonction ?
● Un différentiel lié à la mise en place d’une
nouvelle fonctionnalité ?
● Une couche applicative ?
● Etc.
Quoi ?
#AgileLaval16 #codeReview@esiber
48. ● Projet terminé ?
● Fonctionnalité livrée sur un environnement
donné ?
● Itération de développement terminée ?
● Développement d’une fonctionnalité
complète terminée ?
● Code propagé ?
Quand (dans le cycle de vie) ?
#AgileLaval16 #codeReview@esiber
49. Focus sur le commit, 2 nuances à considérer
• Pre-commit review
• Post-commit review
Quand (dans le cycle de vie) ?
Source : h@p://devmag.fr/pourquoi-il-vous-faut-adopter-les-pull-requests/
#AgileLaval16 #codeReview@esiber
50. • Moins intrusif qu’une intervention sur une
anomalie de production (sauf s’il faut relire la
correction)
• L’impact est lié au workflow employé
Ne pas négliger l’interruption de l’activité
courante
#AgileLaval16 #codeReview@esiber
51. Le quand et le quoi sont à confronter à un
aspect quantitatif
Une tendance
• Le plus souvent
• La plus petite unité de code (le moins
longtemps)
#AgileLaval16 #codeReview@esiber
58. Ce qui a fait évoluer les pratiques dans le
passé récent
• Les DVCS (ex. Git) et l’apparition de workflows
de développement
• Les interactions avec les plateformes
d’intégration continue (PIC)
• Le Cloud comme support aux 2 outils
précédemment mentionnés
#AgileLaval16 #codeReview@esiber
59. Quelques prédictions / tendances pour
l’avenir (déjà bien en route)
• Elaboration de solutions ALM complètes
o Poussé par la tendance Cloud
o Favorisé par l’évolution des technologies Web tel HTML5
• Percée des Web-IDE
o Encore davantage d’interactions
o Favorisé par l’évolution des technologies Web tel HTML5
• Solutions de type realtime sharing (ex. Google
Docs)
#AgileLaval16 #codeReview@esiber