Aller au contenu principal

Ton cerveau ne ment pas : la science derrière le code propre

10 min de lecture

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.

La complexité cyclomatique, cousin de la même époque

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

Écoconception

Empreinte environnementale estimée · Modèle SWD v4 · 442 g CO₂eq/kWh

Poids de la page
Énergie par requête
Budget carbone du build