← Lexique

Code smells :
ce que le code trahit.

Un code smell — une odeur de code — est un indice visible en surface qui suggère un problème plus profond de conception. Ce n'est pas un bug : le programme fonctionne. C'est un signal que le prochain changement va coûter plus cher qu'il ne devrait.

Définition et origine

Le terme vient de Kent Beck et a été popularisé par Martin Fowler dans Refactoring. L'analogie est volontaire : une odeur ne prouve pas qu'il y a un problème, mais elle justifie d'aller regarder.

La nuance est importante et souvent perdue. Une odeur est une heuristique, pas une règle. Une méthode de cent lignes est suspecte, pas condamnée. Un outil d'analyse statique qui refuse une fusion parce qu'une méthode dépasse trente lignes transforme une heuristique en dogme, et vous obtiendrez du code découpé artificiellement pour satisfaire le linter — plus difficile à lire que l'original.

Le catalogue, par famille

Les gonflements

Les duplications

Les couplages

Les jetables

L'odeur la plus chère, et la moins citée

La logique métier dispersée. Le calcul d'une même remise existe dans le contrôleur web, dans le traitement par lots nocturne et dans l'export comptable — avec trois arrondis légèrement différents. Rien ne plante. Les chiffres ne concordent simplement pas, et on met six mois à comprendre pourquoi.

Aucun outil d'analyse statique ne la détecte. Elle se trouve en écoutant les gens du métier dire « oui mais l'écran affiche autre chose que le rapport ».

Quand ignorer une odeur

Toujours la même question : est-ce que ce code va changer ? Une odeur dans un module stable depuis quatre ans, que personne n'ouvre, ne coûte rien. La même odeur dans le code touché à chaque sprint coûte à chaque sprint.

Priorisez donc par fréquence de modification, pas par gravité théorique. L'historique de votre dépôt vous donne cette information gratuitement : les fichiers les plus modifiés, croisés avec les fichiers les plus complexes, forment votre vraie liste de travail.

Les outils, et leurs limites

Les analyseurs statiques — SonarQube, ESLint, RuboCop, PMD et les autres — détectent bien les odeurs mécaniques : duplication, complexité cyclomatique, longueur, code mort. Ils sont utiles et devraient tourner en intégration continue.

Ils ne détectent pas les odeurs de conception : mauvaise frontière de module, abstraction qui ment sur ce qu'elle fait, concept métier absent du code. Ces trois-là coûtent bien plus cher que tout ce qu'un linter signale, et se trouvent uniquement en refactorant et en relisant du code à plusieurs.

Conseil de terrain sur un code existant : n'activez pas cinq cents règles d'un coup. Vous obtiendrez douze mille avertissements que personne ne lira, et l'équipe apprendra à ignorer l'outil. Bloquez uniquement sur le code neuf, laissez l'ancien s'améliorer au passage.

Questions fréquentes

Qu'est-ce qu'un code smell ?

C'est un indice visible dans le code qui suggère un problème de conception plus profond. Ce n'est pas un bug : le programme fonctionne. C'est un signal que le prochain changement coûtera plus cher que nécessaire.

Quelle est la différence entre un code smell et un bug ?

Un bug produit un comportement incorrect maintenant. Un code smell ne produit rien d'incorrect : il rend le code plus difficile et plus risqué à modifier, ce qui finit par produire des bugs, mais plus tard.

Quels sont les code smells les plus fréquents ?

Le code dupliqué, les méthodes trop longues, les classes qui font tout, les listes de paramètres interminables, les chaînes de messages, et la logique métier dupliquée à plusieurs endroits avec de légères divergences.

Faut-il corriger tous les code smells ?

Non. Une odeur dans du code que personne ne modifie ne coûte rien. Priorisez selon la fréquence de modification : croisez les fichiers les plus souvent touchés avec les plus complexes, et vous obtenez la vraie liste de travail.

À lire ensuite

Parlons de votre projet

On reprend régulièrement des bases de code que d'autres ont laissées derrière eux. Si la vôtre vous ralentit, on peut la regarder et vous dire honnêtement ce qu'elle vaut.

← Lexique Nous parler