Ton cerveau ne ment pas : la science derrière le code propre
Quand le code se prenait pour des mathématiques : le fantôme de Halstead
Remontons en 1977. Maurice Halstead publie ce qu’il appelle la “science du logiciel”. L’idée est audacieuse, presque belle : et si on pouvait mettre le code en équations ?
Sa méthode consiste à décomposer chaque programme en deux ingrédients de base. Les opérateurs (les symboles qui agissent,
comme +, =, if) et les opérandes (les choses sur lesquelles on agit, les variables, les valeurs). En comptant et en combinant
ces éléments, Halstead dérive toute une famille de métriques : le volume du programme, sa difficulté, et même un “effort mental”
théorique nécessaire pour le comprendre. Sur le papier, c’est séduisant. On tient enfin une physique du code, une formule qui
transforme la lisibilité en nombre.
Un an avant Halstead, Thomas McCabe proposait une autre mesure : la complexité cyclomatique. Elle compte le nombre
de chemins d’exécution indépendants dans une fonction, soit 1 + nombre de points de décision (if, for, while,
case, &&, ||).
Une fonction sans branchement vaut 1. Chaque if ajoute 1. Une valeur au-delà de 10 est généralement considérée comme
un signal de refactoring.
L’idée est plus robuste que Halstead car elle capture la structure plutôt que le volume. Elle reste pourtant aveugle au même problème : deux fonctions à complexité cyclomatique identique peuvent être radicalement différentes à lire. Le nombre de chemins ne dit rien de la charge que chaque chemin impose au lecteur.
Le souci, c’est que cette physique a très mal vieilli. Les programmes de 1977 étaient des séquences d’instructions relativement linéaires. Le code que tu écris aujourd’hui est orienté objet, asynchrone, parfois fonctionnel, truffé d’abstractions et de couches qui n’existaient pas à l’époque. Une analyse de gros systèmes Java l’a d’ailleurs montré : la fameuse équation de longueur de Halstead, censée relier la taille d’un programme à son vocabulaire, n’y tient tout simplement plus à l’échelle.
Pourquoi ? Parce que compter des tokens ne dit rien de la fatigue qu’ils provoquent. Deux fonctions peuvent embarquer exactement le même nombre d’opérateurs et d’opérandes, et l’une te coûtera dix secondes quand l’autre t’en coûtera dix minutes. La différence ne se trouve pas dans le décompte, elle se trouve dans l’agencement. Juger un code à son nombre de tokens, c’est comme évaluer un roman de Victor Hugo en comptant ses verbes : tu obtiens un chiffre exact et parfaitement inutile.
Halstead avait pourtant raison sur un point fondamental, et c’est ce qui rend son fantôme attachant. Il pressentait qu’un programme se comporte comme un texte, avec un vocabulaire et des régularités. Il a juste cherché ces régularités du mauvais côté, du côté des mathématiques, alors qu’elles se cachaient dans le langage.
Tags
Articles similaires
L'informatique est faite pour automatiser
L'IA générative ne révolutionne pas l'histoire du développement. Elle en est le prochain chapitre.
Quand l'IA code à votre place, qui écrit les règles ?
L'IA génère du code en secondes. Sans schémas contractualisés, elle génère aussi vos futurs bugs de production. Voici comment construire une architecture de la confiance.
Écoconception
Empreinte environnementale estimée · Modèle SWD v4 · 442 g CO₂eq/kWh