Clean code et refactoring - 23 - Glossaire — tous les termes de la serie

Glossaire alphabetique de tous les termes techniques abordes dans la serie clean code et refactoring, avec définitions et liens.

  1. 01 Clean code et refactoring - 00 - Pourquoi le clean code est un investissement, pas un luxe
  2. 02 Clean code et refactoring - 01 - Nommage : la competence la plus sous-estimee
  3. 03 Clean code et refactoring - 02 - Fonctions : courtes, claires, responsables
  4. 04 Clean code et refactoring - 03 - Conditions et lisibilité : sortir de la pyramide
  5. 05 Clean code et refactoring - 04 - Commentaires et documentation : quand le code ne suffit pas
  6. 06 Clean code et refactoring - 05 - Immutabilite et effets de bord : moins de surprises, moins de bugs
  7. 07 Clean code et refactoring - 06 - Gestion des erreurs propre : fail fast, fail loud
  8. 08 Clean code et refactoring - 07 - Programmation defensive vs offensive : valider aux frontieres, faire confiance a l'intérieur
  9. 09 Clean code et refactoring - 08 - SOLID en pratique avec TypeScript
  10. 10 Clean code et refactoring - 09 - DRY, KISS, YAGNI
  11. 11 Clean code et refactoring - 10 - Couplage et cohesion
  12. 12 Clean code et refactoring - 11 - Complexite cyclomatique
  13. 13 Clean code et refactoring - 12 - Abstractions prematurees vs tardives
  14. 14 Clean code et refactoring - 13 - Code smells
  15. 15 Clean code et refactoring - 14 - Techniques de refactoring
  16. 16 Clean code et refactoring - 15 - Refactoring legacy sans tout casser
  17. 17 Clean code et refactoring - 16 - Tests comme filet de sécurité pour le refactoring
  18. 18 Clean code et refactoring - 17 - Structurer un projet — feature-based vs layer-based
  19. 19 Clean code et refactoring - 18 - Constantes, configuration et magic numbers
  20. 20 Clean code et refactoring - 19 - Linting et formatting — ESLint, Biome, automatiser la qualité
  21. 21 Clean code et refactoring - 20 - Conventions d'équipe et ADR
  22. 22 Clean code et refactoring - 21 - Dette technique — quand elle est acceptable, quand elle tue le projet
  23. 23 Clean code et refactoring - 22 - Code review — donner et recevoir du feedback
  24. 24 Clean code et refactoring - 23 - Glossaire — tous les termes de la serie

23 - Glossaire — tous les termes de la serie

Ce que tu vas apprendre

  • Les définitions de tous les termes utilises dans la serie
  • Des liens vers l'article ou chaque concept est traite en profondeur
  • Un document de référencé rapide a garder sous la main

Prerequisites

Article précédent : 22 - Code review


Cette serie compte 23 articles et beaucoup de vocabulaire technique. Ce glossaire rassemble tous les termes au meme endroit. Chaque entree contient une définition courte et un lien vers l'article qui traite le sujet. Tu peux l'utiliser comme référencé rapide quand tu croises un terme que tu ne connais pas ou que tu veux reviser. D'autres ressources sont disponibles sur paltemps.fr.


A

Abstraction

Mecanisme qui cache les détails d'implementation derrière une interface simplifiee. Une fonction est une abstraction : elle cache sa logique interne derrière un nom et des paramètres. Trop d'abstraction rend le code difficile a suivre. Pas assez rend le code duplique et rigide. Voir 11 - Composition vs héritage.

ADR (Architecture Décision Record)

Document court qui capture une décision d'architecture : le contexte, la décision prise et ses consequences. Les ADR vivent dans le repository et sont versiones avec le code. Voir 20 - Conventions et ADR.

As const

Assertion TypeScript qui transforme une valeur en type literal readonly. Permet de créer des types union à partir de tableaux ou d'objets de constantes. Voir 18 - Constantes.

B

Barrel file

Fichier index.ts qui reexporte les symboles publics d'un module. Simplifie les imports pour les consommateurs externes. Peut ralentir le bundler et créer des dépendances circulaires si mal utilise. Voir 17 - Structure projet.

Boy scout rule

Principe qui consiste a laisser le code plus propre que tu ne l'as trouve. Chaque modification est l'occasion d'une petite amelioration : renommer une variable, extraire une constante, simplifier une condition. Voir 13 - Quand refactoriser.

Biome

Outil tout-en-un écrit en Rust qui gere le linting et le formatting pour JavaScript et TypeScript. Alternative rapide a ESLint + Prettier. Voir 19 - Linting.

C

Characterization test

Test écrit pour capturer le comportement actuel d'un code existant, sans juger si ce comportement est correct. Utilise avant un refactoring pour créer un filet de sécurité. Voir 16 - Tests et refactoring.

Clean code

Code dont quelqu'un s'est occupe. Du code lisible, comprehensible et modifiable. Pas du code parfait — du code soigne. Voir 00 - Introduction.

Code smell

Signal dans le code qui indique un problème plus profond. Pas un bug — le code fonctionne — mais un indicateur que quelque chose merite attention. Exemples : fonction trop longue, classe god object, paramètres en exces. Voir 13 - Quand refactoriser.

Cognitive complexity

Mesure de la difficulte a comprendre un morceau de code. Prend en compte l'imbrication, les ruptures de flux lineaire et les structures repetees. Sonar utilise cette metrique plutot que la complexité cyclomatique pour évaluer la lisibilité. Voir 03 - Conditions.

Cohesion

Degre auquel les éléments d'un module sont lies entre eux et travaillent ensemble vers un meme objectif. Un module cohesif fait une seule chose. Un module peu cohesif melange des responsabilités non-liees. Voir 10 - Separation des responsabilités.

Colocation

Principe d'organisation qui place les fichiers lies au meme endroit : tests a cote du code, styles a cote des composants, types a cote de l'implementation. Voir 17 - Structure projet.

Complexite cyclomatique

Nombre de chemins independants dans une fonction. Chaque if, for, while, case ou catch ajoute un chemin. Plus le nombre est eleve, plus la fonction est difficile a tester et comprendre. Voir 03 - Conditions.

Composition

Technique qui construit des objets complexes en combinant des objets plus simples, par opposition a l'héritage. Favorise la flexibilité et le découplage. Voir 11 - Composition vs héritage.

Convention

Regle partagee par une équipe pour standardiser la facon d'écrire du code : nommage, structure, gestion d'erreurs, workflow git. Reduit la charge cognitive et accéléré l'onboarding. Voir 20 - Conventions et ADR.

Couplage

Degre de dépendance entre deux modules. Un couplage fort signifie que modifier un module oblige a modifier l'autre. L'objectif est un couplage faible : les modules interagissent via des interfaces stables. Voir 10 - Separation des responsabilités.

D

Dead code

Code qui n'est jamais exécuté : fonctions non appelees, branches de conditions impossibles, imports inutilises. Le dead code ajoute du bruit et de la confusion. Supprime-le — le contrôle de version te permet de le retrouver si besoin. Voir 14 - Techniques de refactoring.

Dependency Inversion Principle (DIP)

Le D de SOLID. Les modules de haut niveau ne doivent pas dépendre des modules de bas niveau. Les deux doivent dépendre d'abstractions. Voir 08 - SOLID.

Dette technique

Raccourci technique pris consciemment qui accéléré la livraison mais impose des "interets" sous forme de complexité accrue. A distinguer du code sale écrit par manque de competence. Voir 21 - Dette technique.

DRY (Don't Repeat Yourself)

Principe qui dit que chaque piece de connaissance doit avoir une representation unique dans le système. Attention : DRY concerne la connaissance, pas le code. Deux blocs de code identiques qui representent des concepts différents ne doivent pas etre fusionnes. Voir 09 - DRY, KISS, YAGNI.

E

Early return

Pattern qui consiste a sortir d'une fonction le plus tot possible quand une condition d'erreur ou un cas special est détecté. Reduit l'imbrication et ameliore la lisibilité. Voir 03 - Conditions.

Effet de bord (side effect)

Modification d'un état extérieur a la fonction : écriture en base, modification d'une variable globale, envoi d'un email, log dans la console. Les effets de bord rendent le code difficile a tester et a raisonner. Voir 05 - Immutabilite.

Extract function

Technique de refactoring qui consiste a prendre un bloc de code et a le deplacer dans une nouvelle fonction nommee. La technique de refactoring la plus frequente. Voir 14 - Techniques de refactoring.

F

Fail fast

Stratégie qui consiste a détecter et signaler les erreurs le plus tot possible, plutot que de laisser l'exécution continuer avec des donnees invalides. Voir 07 - Programmation defensive.

Feature flag

Constante (souvent dynamique) qui permet d'activer ou désactiver une fonctionnalité sans déployer du code. Utile pour les déploiements progressifs et les experimentations A/B. Voir 18 - Constantes.

Fonction pure

Fonction sans effets de bord dont le résultat depend uniquement de ses paramètres. Appeler une fonction pure avec les memes arguments retourne toujours le meme résultat. Facile a tester et a raisonner. Voir 05 - Immutabilite.

G

God object

Objet ou classe qui fait trop de choses et connaît trop de détails sur le reste du système. Anti-pattern classique qui viole le principe de responsabilité unique. Voir 08 - SOLID.

Guard clause

Condition en début de fonction qui vérifié une precondition et sort immédiatement si elle n'est pas remplie. Synonyme d'early return applique a la validation. Voir 03 - Conditions.

I

Immutabilite

Propriété d'une donnee qui ne peut pas etre modifiee apres sa création. Reduit les bugs lies aux modifications inattendues. En TypeScript, readonly et as const renforcent l'immutabilité au niveau du type system. Voir 05 - Immutabilite.

Interface Segregation Principle (ISP)

Le I de SOLID. Les clients ne doivent pas etre forces de dépendre d'interfaces qu'ils n'utilisent pas. Prefere plusieurs interfaces spécifiques a une interface générale et massive. Voir 08 - SOLID.

K

KISS (Keep It Simple, Stupid)

Principe qui favorise la simplicité. La solution la plus simple qui resout le problème est généralement la meilleure. Ne confonds pas simple et facile : une solution simple peut demander du travail pour etre trouvee. Voir 09 - DRY, KISS, YAGNI.

L

Legacy code

Code existant sans tests, difficile a modifier. Selon Michael Feathers, tout code sans tests est du legacy code. La stratégie pour le gerer : ajouter des tests, puis refactoriser. Voir 15 - Refactoring legacy.

Lint / Linter

Outil d'analyse statique qui détecté des erreurs, des patterns dangereux et des violations de conventions dans le code source. ESLint et Biome sont les linters principaux de l'ecosysteme TypeScript. Voir 19 - Linting.

Liskov Substitution Principle (LSP)

Le L de SOLID. Un objet d'un type derive doit pouvoir remplacer un objet du type de base sans casser le programme. Voir 08 - SOLID.

Loi de Demeter

Principe qui dit qu'un objet ne doit parler qu'a ses voisins directs. Evite les chaînes d'appels comme order.getCustomer().getAddress().getCity(). Voir 12 - Loi de Demeter.

M

Magic number

Valeur numérique qui apparaît directement dans le code sans nom ni explication. Rend le code incomprehensible et fragile. La solution : extraire la valeur dans une constante nommee. Voir 18 - Constantes.

O

Open/Closed Principle (OCP)

Le O de SOLID. Les modules doivent etre ouverts a l'extension mais fermes a la modification. Ajouter un comportement ne devrait pas nécessiter de modifier le code existant. Voir 08 - SOLID.

R

Red-green-refactor

Cycle TDD en trois étapes : écrire un test qui echoue (red), écrire le code minimal pour le faire passer (green), ameliorer la structure sans casser les tests (refactor). Voir 16 - Tests et refactoring.

S

Separation des responsabilités (Separation of Concerns)

Principe qui dit que chaque module doit gerer un seul aspect du système. La presentation ne gere pas la logique métier. La logique métier ne gere pas la persistance. Voir 10 - Separation des responsabilités.

Single Responsibility Principle (SRP)

Le S de SOLID. Un module doit avoir une seule raison de changer. Plus precisement : un seul acteur (stakeholder) qui pourrait demander une modification. Voir 08 - SOLID.

SOLID

Acronyme de cinq principes de conception orientes objet : Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion. Voir 08 - SOLID.

Strangler fig pattern

Stratégie de migration qui remplace progressivement un système legacy par un nouveau système. Le nouveau code entoure l'ancien comme un figuier etrangleur entoure un arbre. L'ancien code est retire par morceaux. Voir 15 - Refactoring legacy.

T

Test d'intégration

Test qui vérifié le comportement de plusieurs modules qui interagissent ensemble. Survit mieux au refactoring que les tests unitaires car il teste le comportement observable. Voir 16 - Tests et refactoring.

Test unitaire

Test qui vérifié le comportement d'une unité isolee de code (typiquement une fonction). Rapide a exécuter et precis dans la localisation des erreurs, mais couple a l'implementation. Voir 16 - Tests et refactoring.

Y

YAGNI (You Aren't Gonna Need It)

Principe qui dit de ne pas implementer une fonctionnalité tant qu'elle n'est pas effectivement nécessaire. Lutte contre la tendance a anticiper des besoins futurs qui ne se materialisent jamais. Voir 09 - DRY, KISS, YAGNI.


Comment utiliser ce glossaire

Ce document est une référencé, pas un article a lire de bout en bout. Mets-le en favori. Quand tu tombes sur un terme dans la serie ou dans une discussion technique, reviens ici pour une définition rapide et un lien vers l'article complet.

Si un terme manque, c'est probablement que je l'ai oublie. La serie evolue et ce glossaire avec.

Résumé

  • Ce glossaire couvre plus de 40 termes techniques de la serie
  • Chaque terme est défini en une a trois phrases
  • Les liens renvoient vers l'article qui traite le sujet en profondeur
  • Utilise ce document comme référencé rapide, pas comme lecture lineaire

Article précédent : 22 - Code review

Serie suivante : a venir.

Sources

Réservez un audit gratuit de 30 minutes. Je vous montre concrètement ce qu'on peut automatiser.