Votre travail consiste à livrer du code dont le fonctionnement est prouvé
(simonwillison.net)- Dans les environnements de développement assistés par l’IA, les cas où des ingénieurs peu expérimentés soumettent de gros PR non vérifiés se multiplient
- La mission essentielle d’un développeur n’est pas simplement d’écrire du code, mais de fournir du code dont le fonctionnement est démontré
- Pour y parvenir, il faut impérativement suivre deux étapes : les tests manuels et les tests automatisés
- Il faut aussi configurer les agents de codage pour qu’ils vérifient eux-mêmes les modifications qu’ils produisent
- Au final, la responsabilité incombe aux développeurs humains, et seul le code accompagné de preuves de vérification a une véritable valeur
Le problème des soumissions de code non vérifié
- Le texte évoque des cas où des ingénieurs juniors utilisant des outils LLM soumettent de très gros PR non vérifiés en s’en remettant à la revue de code
- C’est présenté comme impoli, inefficace et comme un abandon de responsabilité de la part du développeur
- Le rôle d’un ingénieur logiciel n’est pas simplement de produire du code, mais de fournir du code dont le fonctionnement est prouvé
- Le code non vérifié est considéré comme une manière de transférer la charge au relecteur
Les deux étapes pour prouver qu’un code fonctionne
- La première étape est le test manuel : il faut vérifier soi-même que le code fonctionne correctement
- Cela implique de remettre le système dans son état initial, d’appliquer les modifications, puis de valider le résultat
- On peut le prouver en joignant des commandes de terminal et leurs sorties dans un commentaire de revue de code, ou via une capture vidéo d’écran
- Une fois le fonctionnement normal confirmé, il faut rechercher d’éventuels problèmes via des tests de cas limites
- La deuxième étape est le test automatisé, présenté comme une procédure indispensable grâce aux progrès des outils LLM
- Les modifications doivent être accompagnées de tests automatisés, et si l’on annule l’implémentation, ces tests doivent échouer
- L’écriture des tests suit la même procédure que les tests manuels, et la capacité à les intégrer au test harness est essentielle
- Considérer que les seuls tests automatisés suffisent et omettre les tests manuels est décrit comme une mauvaise approche
Le rôle des agents de codage et la vérification
- Parmi les grandes tendances du domaine des LLM en 2025 figure la croissance fulgurante des agents de codage, avec notamment Claude Code et Codex CLI
- Ils peuvent exécuter du code et corriger eux-mêmes les problèmes
- Les agents de codage doivent eux aussi prouver leurs propres modifications, en réalisant des tests manuels et automatisés
- Pour les outils CLI, on peut entraîner l’agent à les exécuter directement, ou automatiser cela avec un système comme CLIRunner de Click
- En cas de modification CSS, on peut les configurer pour vérifier le résultat à l’aide de captures d’écran
- Si le projet dispose déjà de tests, l’agent peut les étendre ou réutiliser les motifs existants
- La structure et la qualité du code de test ont un impact direct sur la qualité des tests générés par l’agent
- Un sens esthétique appliqué au code de test est présenté comme une compétence clé qui distingue les ingénieurs seniors
La responsabilité humaine et la valeur du code
- Un ordinateur ne peut pas être tenu responsable : ce rôle doit être assumé par un humain
- Le fait qu’un LLM puisse générer de gros patchs n’a plus, en soi, une grande valeur
- La véritable valeur réside dans la capacité à fournir du code dont le fonctionnement est prouvé
- Lors de la soumission d’un PR, il faut impérativement inclure des preuves montrant que le code fonctionne correctement
4 commentaires
Je suis tout à fait d’accord. Avec le mode de fonctionnement actuel des PR, la responsabilité du code est en pratique reportée sur les mainteneurs et les reviewers. Il n’y a aucun désavantage pour ceux qui soumettent du code généré par un LLM sans l’avoir revu.
Quand on contribue à la codebase de Google, il me semble qu’ils mesurent des choses comme le crédit du contributeur ; j’ai l’impression que d’autres projets open source / entreprises vont aussi adopter ce genre de mécanisme. Je pense que la confiance va devenir un actif encore plus important.
Oh, donc Google utilise ce concept.
Réactions sur Hacker News
On voit souvent ces temps-ci une anecdote déprimante : un ingénieur junior dopé aux outils LLM balance une PR énorme, non testée, à ses collègues ou à un mainteneur open source, en s’attendant à ce que la code review fasse le reste. Le pire, c’est que ce comportement ne vient pas seulement des juniors, mais aussi de développeurs seniors
Les bonnes pratiques pour rédiger une PR valent autant pour le code généré par IA que pour tout le reste. Quand j’écris la description d’une PR, j’organise toujours dans l’ordre le fonctionnement actuel, la raison du changement, puis ce qui change. J’ajoute aussi la méthode de test, des captures d’écran, et même les commandes de test E2E pour réduire la charge côté reviewer. C’est aussi très utile pour la collaboration asynchrone ou les équipes réparties sur plusieurs fuseaux horaires
L’essence du métier d’ingénieur, c’est de comprendre les exigences, de les transformer en enchaînements logiques, d’arbitrer les trade-offs et d’assumer le résultat. Générer du code ou soumettre des PR au hasard est le symptôme d’un manque sur ces fondamentaux. Les agents de code sont même l’occasion de redécouvrir ce qu’est réellement l’ingénierie
Les tests sont nécessaires, mais pas suffisants. Il faut aussi valider le code sur le plan logique. Les tests ne font que démontrer un fonctionnement correct sur certaines entrées et dans un environnement donné
Je ne fais pas des tests par obligation. Je les fais simplement parce que j’ai envie de voir que le code fonctionne vraiment. Si voir son code tourner ne vous enthousiasme pas, ce métier n’est peut-être pas fait pour vous
J’ai entendu dire que, grâce aux LLM, des juniors jetaient d’énormes PR, mais dans notre organisation, on ne voit pas encore ça
Je ne suis pas d’accord avec l’idée que « votre travail consiste à livrer du code dans un état prouvé ». Le vrai travail, c’est de résoudre un problème métier. Bien sûr, dans la plupart des cas cela passe par du code, mais la distinction est importante
Dans mon ancien emploi, je travaillais chez un fabricant japonais de matériel haut de gamme, et si le service QA trouvait un bug, la sortie du produit était suspendue. Chaque département de développement avait donc mis en place sa propre équipe QC pour renforcer les tests en amont. Résultat : le logiciel était validé de manière extrêmement rigoureuse
Aujourd’hui, l’essence du travail s’est réduite à fermer des tickets. Comme la qualité du code n’apparaît pas dans les statistiques, elle cesse d’avoir de l’importance. Je ne participe pas à ce genre de système. L’artisanat a disparu ; tout le monde ne veut plus que du contreplaqué bon marché et de la colle
Le problème, c’est ce qu’on entend par « code prouvé ». Il arrive aussi qu’on soumette d’énormes PR en y joignant des tests générés par LLM. Moi aussi, je fais du vibe coding sur mes projets perso, mais à l’échelle d’une équipe, c’est une mauvaise habitude. Si l’on embauche des ingénieurs, c’est pour acheter leur expertise