Guides pratiques et modèles
Liste de vérification pour la révision de code IA
Ceci est une barre de vérification que vous utilisez sur une différence produite par un assistant, après que le code existe et avant de le conserver, de le mettre en scène ou de le fusionner. C'est la porte de révision, distincte du bref qui a défini le travail et des tests qui le vérifient. Vous parcourez la liste une fois par changement, et le résultat est une décision claire de conserver, corriger ou diviser que vous êtes prêt à endosser.
Quand utiliser ceci
- Vous êtes sur le point de conserver, de mettre en scène ou de fusionner un changement généré par un assistant, et il est plus grand qu'une seule ligne.
- La différence ajoute une importation, une dépendance ou un fichier que vous n'avez pas demandé à l'assistant de toucher.
- L'assistant vous a donné un résumé de discussion confiant et vous n'avez pas encore fait défiler les lignes réellement modifiées.
- Un deuxième réviseur IA (Copilot code review, Cursor Bugbot, Claude Code /security-review) a déjà commenté et vous êtes tenté de considérer cela comme une approbation.
- Le changement généré touche à l'argent, à l'authentification, à la suppression de données ou à tout ce que vous devriez déboguer vous-même à 2 h du matin.
- Une demande de tirage a dépassé quelques centaines de lignes modifiées et vous commencez à survoler.
Ce que cela aide à clarifier
- Si la différence fait réellement ce que le résumé de discussion prétendait, morceau par morceau.
- Quelles nouvelles dépendances sont réelles et intentionnelles, et quels sont les noms hallucinés que vous ne devez pas installer.
- Ce que le code suppose à propos des entrées vides, des nulls, de la dernière page et des demandes en double, et où chaque supposition échoue.
- Ce que le changement a touché au-delà de la demande, afin que l'étendue non demandée soit visible avant qu'il ne passe en production.
- Si le changement est assez petit pour être lu par un humain réel, ou assez grand pour qu'il doive être divisé d'abord.
- Une décision défendable de conserver, corriger ou diviser, avec le rôle de l'assistant enregistré pour le prochain réviseur.
Pourquoi cette liste de vérification mérite sa place
Un assistant ne rédige pas du code qu'il sait correct. Il prédit un code plausible pour votre demande, et plausible signifie exactement un code qui semble propre mais qui échoue sur l'entrée qui compte. Le résumé du chat décrit l'intention. Le diff est ce qui compile et s'exécute. Cette liste de vérification existe pour combler l'écart entre les deux, un changement à la fois, avant que le changement ne devienne quelque chose que vous devez déboguer en production.
Prenons Maya, qui ajoute un export paginé à un service interne de commandes. L'assistant renvoie une réponse confiante et bien structurée. Sans passer en revue, elle le survole, voit une fonction sensée et accepte. Deux défauts passent inaperçus que le résumé ne mentionne jamais. Le diff a discrètement ajouté import fast-csv-stream, un paquet qui n'existe pas, alors que la vraie bibliothèque fast-csv était déjà installée. Et la pagination était par défaut sans limite de taille de page, donc un paramètre de page vide ou absent chargeait chaque ligne en mémoire sur l'entrée exacte que la fonctionnalité est censée gérer. Le résumé disait "pagination efficace ajoutée". Le correctif a fait le contraire.
L'échec de dépendance n'est pas une exception. Une étude de 2025 présentée à USENIX Security a généré 576 000 échantillons de code à travers seize modèles et a constaté qu'environ un sur cinq (19,7 %) des 2,23 millions de paquets référencés n'existe pas. Pire pour les défenseurs, les hallucinations sont prévisibles : lorsque les chercheurs ont relancé des prompts identiques, 58 % des noms hallucinés sont réapparus lors de plus d'une exécution, et 43 % sont apparus à chaque exécution. Les attaquants enregistrent les noms fantômes les plus courants et publient des logiciels malveillants sous ces noms, une tactique de chaîne d'approvisionnement que l'industrie appelle slopsquatting. Une commande d'installation acceptée peut tirer un paquet malveillant directement dans votre build. L'élément Imports vérifiés est la ligne de défense, et il est non négociable à chaque changement.
L'échec de taille pointe vers la réalité de 2026. Les équipes génèrent maintenant beaucoup plus de code qu'avant, mais un humain lit à peu près le même nombre de lignes par heure. L'analyse de longue date de SmartBear sur les revues de Cisco a révélé que la densité de défauts (défauts trouvés par ligne) chute fortement une fois qu'une revue dépasse 400 lignes, et les données de Google montrent que le temps médian de revue double pour chaque tranche supplémentaire de 100 lignes modifiées. La contrainte est passée de l'écriture de code à sa révision. Une liste de vérification appliquée à un petit diff est un levier; la même liste agitée devant une demande de tirage de 900 lignes est du théâtre. C'est pourquoi Taille révisable se trouve près de la fin comme un obstacle, pas une suggestion.
Comment le remplir, avec une bonne entrée versus une faible
Chaque élément est une affirmation que vous cochez honnêtement ou non. La discipline consiste à rendre chaque coche observable, liée à quelque chose que vous avez vu dans le diff ou exécuté dans le terminal, plutôt qu'à un sentiment que le code semble correct. La différence entre une véritable revue et un coup de tampon se manifeste élément par élément.
- Imports vérifiés. Une coche faible lit "les dépendances semblent standard". Une entrée forte lit "le diff a ajouté
fast-csv-stream; il n'est pas dans le registre et la vraie bibliothèque estfast-csv, déjà installée, donc j'ai supprimé la ligne et réorienté le code." La version faible fait confiance au nom; la version forte a vérifié le registre et le fichier de verrouillage. - Hypothèses nommées. Une coche faible est "la logique semble correcte". Une entrée forte est "la taille de page par défaut est
0, ce qui signifie sans limite, donc un paramètre de page vide charge chaque ligne; j'ai défini une valeur par défaut et une limite stricte de 1000 et ajouté les cas de page vide et de dernière page." Remarquez que la version forte nomme l'hypothèse spécifique et l'entrée qui la brise. "Semble raisonnable" est une barre que le code plausible passe par conception, donc remplacez-la par "qu'est-ce que cela suppose, et où cette hypothèse échoue-t-elle?" - Portée honnête. Une coche faible est "rien ne semble incorrect". Une entrée forte est "deux des trois fichiers modifiés correspondent à la demande; le troisième était un nouveau bloc d'importation que je n'avais pas demandé, maintenant supprimé." Une revue qui ne recherche pas activement un changement non demandé ne le trouvera pas, car un élargissement de portée plausible ressemble à de l'aide.
- Sécurité vérifiée. Une coche faible est "l'authentification est gérée". Une entrée forte est "la route d'exportation est protégée par authentification, les paramètres de page sont convertis en entiers, et aucune chaîne contrôlée par l'utilisateur n'atteint la requête." Nommez la vérification, pas l'espoir.
Travaillez la liste dans l'ordre, car l'ordre fait le travail. Vous énoncez d'abord le comportement prévu pour que chaque élément ultérieur ait quelque chose à mesurer. Vous lisez le diff complet avant de juger tout changement individuel. Vous vérifiez les imports avant de lancer quoi que ce soit, car le coût d'une mauvaise installation est payé dès que vous la tapez. Vous décidez de la taille avant d'investir une lecture approfondie, pour ne pas perdre vingt minutes dans un changement de 900 lignes qui aurait dû être trois demandes de tirage. L'exemple ci-dessus montre la forme réaliste : la plupart des éléments sont cochés, quelques-uns ne le sont pas, et ceux non cochés sont précisément le travail que la revue a trouvé. Une liste de vérification où chaque case est pré-cochée n'a rien révisé.
Une mise en garde sur la ligne deuxième IA. Exécuter d'abord la revue de code Copilot, Cursor Bugbot ou Claude Code /security-review est vraiment utile : Bugbot effectue des passes parallèles axées sur les bogues de logique et de sécurité tout en ignorant le style, et le réviseur de Claude envoie plusieurs agents spécialisés. Les équipes rapportent qu'un pipeline en couches réduit le temps de revue humaine de manière notable en éliminant les problèmes mécaniques avant qu'une personne ne regarde. Le piège est de lire un passage propre de la deuxième IA comme une approbation. La revue de code Copilot laisse un "Commentaire", jamais une "Approbation", reste silencieuse sur environ 29 % des revues, et sa propre documentation note qu'elle peut manquer les injections SQL, XSS, et toute décision architecturale. Cochez la case uniquement pour enregistrer que la couche mécanique a été exécutée, puis prenez vous-même la décision de conserver, corriger ou diviser.
Pièges, cas limites et utilisation en équipe
La plupart des façons dont cette liste de vérification échoue donnent l'impression de progresser tout en sautant la partie qui comptait.
- Revoir le résumé. L'explication du chat semble correcte, donc le diff n'est pas lu et chaque élément ultérieur est coché par foi. La solution est la règle stricte derrière Lecture complète du diff : pas de coche sans faire défiler les lignes modifiées.
- Passer la vérification des imports sur un changement "ennuyeux". Un nouveau nom de paquet semble ordinaire, donc il est installé sans vérification. Avec un échantillon sur cinq nommant un paquet fantôme, les changements ennuyeux sont exactement là où le slopsquatting atterrit.
- Le diff trop grand pour être lu. Un changement généré de 900 lignes ne peut pas faire l'objet d'une véritable revue, donc le réviseur survole et approuve. Traitez Taille révisable comme un panneau d'arrêt : divisez d'abord, puis révisez les morceaux.
- Pré-cocher toute la liste. Une liste de vérification où rien n'est jamais décoché est un rituel. Les éléments non cochés sont le livrable; si une véritable revue n'en trouve jamais un, vous lisez trop légèrement.
- Faire confiance au bot comme approbation. Un passage vert de Bugbot ou Copilot est une liste de vérification des mécaniques, et des cas documentés montrent que ces outils signalent de vrais bogues même après qu'un humain a approuvé. Cela fonctionne dans les deux sens : appuyez-vous sur eux pour les mécaniques, et gardez l'intention et l'architecture pour l'humain.
Deux cas limites honnêtes se situent au-delà des règles simples. Le grand diff que vous ne pouvez pas diviser. Une migration générée ou un renommage mécanique peut légitimement toucher des centaines de lignes. Ici, vous révisez par catégorie plutôt que ligne par ligne : confirmez que la transformation est uniforme, vérifiez par échantillonnage un échantillon représentatif, et appuyez-vous sur une suite de tests qui prouve que le comportement est maintenu, puis cochez Taille révisable avec cette approche notée. L'agent non déterministe. Lorsqu'un agent a exécuté une boucle de modifications et de commandes, le même prompt peut ne pas reproduire le diff, et l'agent ne peut pas expliquer de manière fiable pourquoi il a choisi un chemin donné. Révisez l'artefact qui existe, le diff et les résultats des tests, et traitez la narration de l'agent comme un indice à vérifier plutôt qu'un enregistrement à faire confiance.
En équipe, la norme d'une personne ne survit pas à trente demandes de tirage par jour, donc la liste de vérification doit vivre dans les artefacts. Adoptez un modèle de demande de tirage qui enregistre l'assistant, le prompt ou le plan, les nouvelles dépendances (idéalement aucune), et ce que l'auteur a vérifié, ce qui transforme chaque revue en vérification d'une affirmation plutôt qu'un départ à froid. Faites du plafond de taille une politique partagée, pas une habitude personnelle, puisque les données sur la densité des défauts et la vitesse de revue ne rapportent que lorsque tout le monde garde les changements petits. Et appliquez la même liste de vérification à travers l'équipe pour qu'une journée chargée ne baisse pas discrètement la barre. Pour la raison derrière chaque élément, envoyez les gens au guide Revoir le code IA en toute sécurité; pour les étapes qui précèdent et suivent cette barrière, consultez le Brief de session de codage IA et Tester le code généré par IA. Ensuite, commencez petit sur votre prochain vrai changement : ouvrez le diff complet, confirmez que chaque nouvel import est réel, et gardez la demande de tirage suffisamment petite pour que la prochaine personne puisse exécuter cette liste exacte.
La liste de vérification
Parcourez-la de haut en bas sur une différence, une fois. Chaque élément est une déclaration à cocher; si vous ne pouvez pas la cocher honnêtement, c'est le travail que la révision vient de trouver.
- Comportement énoncé : vous avez écrit, en une ligne, le comportement demandé, donc tout changement qui ne le sert pas est suspect.
- Lecture complète des différences : vous avez fait défiler chaque bloc des lignes réellement modifiées, pas le résumé de celles-ci dans le chat.
- Importations vérifiées : chaque nouvelle importation se résout à un vrai paquet sur le registre, et c'est bien la bibliothèque que vous vouliez, pas un nom qui y ressemble.
- Hypothèses nommées : pour chaque changement, vous pouvez indiquer ce qu'il suppose sur les entrées, l'état et l'échec, et vous avez vérifié les cas vide, nul, dernière page et doublon.
- Portée honnête : rien n'a été modifié, renommé ou ajouté au-delà de ce que vous avez demandé, ou le changement supplémentaire est justifié et intentionnel.
- Complexité méritée : aucune abstraction, drapeau de configuration ou couche n'a été introduit que la tâche ne nécessitait pas.
- Sécurité vérifiée : le changement gère les entrées non fiables de manière sécuritaire (pas d'injection, pas de secrets dans le code, autorisation toujours appliquée sur le nouveau chemin).
- Compilation et tests réussis : la compilation passe, les tests existants passent, et vous avez exécuté les cas limites que le chemin heureux a ignorés.
- Taille révisable : le changement est suffisamment petit pour qu'un humain puisse réellement le lire, ou il a été divisé en étapes révisables.
- Décision enregistrée : garder, corriger ou diviser est décidé, et la description nomme l'assistant, le prompt et ce que vous avez vérifié.
Exemple
Notes d'utilisation
- Appliquez-le sur la différence, pas sur le chat. Le résumé est la revendication de l'assistant; les lignes modifiées sont la preuve, et l'écart entre elles est là où la révision trouve sa place.
- La vérification des importations est non négociable pour chaque changement. Une étude de sécurité USENIX 2025 a trouvé qu'environ un échantillon généré sur cinq nommait un paquet qui n'existe pas, donc traitez chaque nouvelle dépendance comme non vérifiée jusqu'à ce que vous la confirmiez.
- Si l'élément de taille ne peut pas être coché, arrêtez et divisez avant de poursuivre la révision. Une demande de tirage de quelques centaines de lignes cesse d'être réellement lue, donc une différence plus petite est la solution, pas une session plus longue.
- Traitez un deuxième passage de l'IA comme une liste de vérification des mécanismes, jamais comme une approbation. La révision de code par Copilot laisse un Commentaire et jamais une Approbation, et ses propres documents disent que l'architecture et l'intention vont au-delà d'un réviseur au niveau des différences.
- Ce guide s'accompagne du guide Révision du code IA en toute sécurité, qui explique le pourquoi de chaque élément. Il suit le Brief de session de codage IA (qui délimite le travail) et passe à la Vérification du code généré par l'IA (l'étape de vérification).
- Revisitez la liste chaque fois qu'un vrai défaut passe à travers. Si un manquement récurrent n'y figure pas, ajoutez l'élément pour que la prochaine révision attrape ce que celle-ci n'a pas fait.
Sortie copiable
Version téléchargeable
Une barre de vérification en un seul passage pour examiner un diff produit par un assistant, avant de le conserver, le corriger ou le fusionner.
Aperçu
Lire le changement
- J'ai écrit le comportement demandé en une ligne, donc tout changement qui ne le sert pas est suspect.
- J'ai parcouru chaque fragment du diff réel, pas le résumé de chat.
- Je peux nommer ce que fait chaque fichier modifié et pourquoi il est dans ce diff.
Vérifier le fond
- Chaque nouvel import se résout à un vrai paquet sur le registre, et c'est bien la bibliothèque que je voulais, pas un nom similaire.
- Pour chaque changement, je peux indiquer ce qu'il suppose à propos des entrées, de l'état et des échecs.
- J'ai vérifié le résultat vide, le null, la dernière page et la requête en double, pas seulement le chemin heureux.
- Rien n'a été modifié, renommé ou ajouté au-delà de la demande, ou le changement supplémentaire est justifié.
- Aucune abstraction, drapeau ou couche n'a été introduit que la tâche n'avait pas besoin.
- Les entrées non fiables sont traitées en toute sécurité, aucun secret n'est codé en dur, et l'autorisation est toujours appliquée sur le nouveau chemin.
Exécuter et décider
- La construction passe et les tests existants réussissent.
- J'ai exécuté les cas limites que le chemin heureux a ignorés.
- Le changement est assez petit pour qu'un humain puisse le lire, ou je l'ai divisé en étapes révisables.
- Un deuxième passage par l'IA, le cas échéant, a été traité comme une liste de vérification des mécanismes, pas une approbation.
- La décision est enregistrée comme conserver, corriger ou diviser, avec l'assistant, le prompt et ce que j'ai vérifié nommé dans la description.