Code review
chez LesFurets.com

Alexandre DuBreuil

Mathieu Bolla

Alexandre DuBreuil

Tech lead équipe panel assureur

Mathieu Bolla

Développeur backend équipe panel assureur

LesFurets.com

1er site indépendant de comparaison d’assurance, lancé en Septembre 2012

Un lieu unique pour comparer rapidement des centaines d’offres (assurances auto, moto, MRH, santé et emprunteur)

Organisation

L'équipe de développement est séparée en 4 streams ou feature teams, avec 20+ développeurs

Les différents streams sont responsables de la qualité de leur code... nous n'avons pas de QA

Linus' law

"Given enough eyes, all bugs are shallow" -Linus Tolvalds

Contenu

Pourquoi

Qui

Quoi

Comment

Eviter

POURQUOI

Notre définition du pourquoi : "Nous cherchons à construire une équipe qui discute sur la qualité, à créer une culture d'artisans du code (software craftsmanship)."

Construction d'une équipe

Partage de connaissance

Apprentissage de nouvelles méthodes

Démarre la conversation sur le code

Moyen de prendre du recul

Documentation (implicite ou explicite)

Forme de documentation commune

Identification des "code smells"

Base d'argumentaire (style guide)

Code style

Idéalement automatique : Intellij Save Action Plugin

Qualité

Auto code review

Intentions explicites

Donner un sens aux métriques

QUI

Notre définition du qui : "Pour bâtir une connaissance commune, toute affectation de relecteur est pertinente. Toutefois, pour trouver des erreurs, certains relecteurs sont plus pertinants que d'autres."

Nos développeurs vedettes

HervéLe champion

FrançoisLe vieux de la vieille

OlegFraichement sorti de l'oeuf

Le combo gagnant

Relis/CodeHervé le championFrançois l'ancienOleg le nouveau
Hervé le champion
François l'ancien
Oleg le nouveau

Qualité

Code métier (règles fonctionnelles, points d'extension...)

Code technique (sécurité, performance...)

Architecture

Paires

Paire "expérimenté / débutant"

Paire "développeur fonctionnel / procédural"

Les paires apportent des bénéfices différents

Garder le "coaching" à l'esprit

Règles du jeu obligatoires

Les relecteurs n'ont pas travaillé sur le code

Relecteurs sélectionnés selon la méthodologie de travail

Règles du jeu optionnelles

Relecteur désigné par le développeur

Relecteur externe à l'équipe

QUOI

Notre définition du quoi : "Chaque ligne de code incomprise est une ligne de code ajoutant de la dette technique."

Tests unitaires

Tests unitaires nécessaires

Donne le domaine métier du code

Permet de vérifier la couverture

Nouvelles lignes et lignes modifiées

Compréhension

Relire toutes les lignes ajoutés ou modifiées

Explications sur les lignes incompréhensibles

Refactoring et retours basés sur les incompréhensions

Anti-patterns et code smells

Faciles à lister et repérer

Automatisation (partielle) possible

Cachent des problèmes plus graves

Exemples de code smells

Code dupliqué

God object

Trop de paramètres

...

Quizz : cherchez l'erreur

if ((err = ReadyHash(&SSLHashSHA1, &hashCtx)) != 0) {

    goto fail;

}

if ((err = SSLHashSHA1.update(&hashCtx, &clientRandom)) != 0) {

    goto fail;

}

if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0) {

    goto fail;

}

if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) {

    goto fail;

}

    goto fail;

if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0) {

    goto fail;

}

Apple's "goto fail" bug : CVE-2014-1266

COMMENT

Notre définition du comment : "Commencer à faire de la code review avec un crime partner. Étendre graduellement aux intéressés."

Comment procéder ?

"Be the change you want to see" -Gandhi le relecteur de code

La recette de Gandhi

1.   Trouver un "partenaire de crime"

2.   Faire une première revue de code

3.   Discuter et valider les hypothèses

4.   Étendre (prendre son temps)

Outils

Prenez ce qui marche pour vous

Commencez le plus à poil possible

Un bout de papier suffit (presque...)

... mais il faut pouvoir documenter les discussions

Mise en place chez LesFurets.com

Sur le tableau / dans JIRA : case à cocher

Condition nécessaire pour la mise en production

... pour les pro

GitHub : puissant, la référence

GitLab : si GitHub n'est pas une option

Gerrit : pour un but très précis, très contraignant

...

EVITER

Notre définition de ce qu'il ne faut pas faire : "Oublier l'objectif de partage de connaissance."

La honte

Pas d'humiliation publique

Pas de réunion de code

Pas de culture orale

Pas de sur-relecture

BONUS

Qu'est-ce que la code review résout parfois ?
(mais pas toujours)

Code legacy

N'améliore que les parties modifiées

Architecture

Entraîne parfois des discussions sur l'architecture si les développeurs prennent suffisament de recul

Ne remplace pas le pair programming

Ne répond pas à la même problématique

N'a pas les mêmes bénéfices...

... même si c'est très semblable

Voir Pair programming chez LesFurets.com

"Quand on se lance dans la revue de code"

fin + questions