Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Faire écrire des tests à un assistant

Après cette leçon: Je peux demander des tests à un assistant et juger si chacun peut vraiment échouer.

Leçon de 60 min5 commandesLab agent de code IA : utiliser opencode pour expliquer et corriger du code, et vérifier son travail

Quinze tests, tous verts

Un assistant de code peut écrire des tests pour une fonction en une minute. Ces tests passent tous, et cela rassure.

Pourtant, un test qui ne peut jamais échouer ne prouve rien. Cette leçon apprend à demander des tests à un assistant, puis à juger si chacun est capable de signaler une faute.

À la fin de cette leçon

Remarque

Je peux demander des tests à un assistant et juger si chacun peut vraiment échouer.

Mots-clés

MotCe que ça veut direExemple
Spécificationce que le code doit faire, écrit avant le code
Cas limiteune valeur au bord d’une règle9 et 10 articles
Test inutileun test qui passe même quand le code est faux
Recopieun test dont la valeur attendue vient du code
Code cassé exprèsune copie fausse, pour voir si les tests la repèrent

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Les tests partent de la règle

Donnez à l’assistant la règle écrite en phrases, pas seulement le code. Par exemple : « à partir de dix articles, 10 pour cent de remise ».

Demandez un cas pour chaque morceau de la règle et pour chaque bord. Un bord est la valeur où la règle change : ici 9 et 10. La valeur attendue vient de la règle. Si elle vient du code, le test ne peut qu’être d’accord avec lui.

Exemple travaillé : de la règle aux cas

CasArticlesAttendu, en centimesCe que le cas vérifie
Un article1150Le prix sans remise
Neuf articles91350Le dernier cas sans remise
Dix articles101350Le premier cas avec remise
Aucun article00Le plus petit cas

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une demande possible

Voici une demande possible : « Voici la règle : 10 pour cent de remise dès dix articles. Écris des tests pour prix(quantite, centimes), un par ligne de ce tableau. Écris les valeurs attendues à la main, sans les calculer avec le code. »

Ce que l’assistant renvoie change d’une fois à l’autre. Relisez chaque test, et vérifiez d’abord que les bords y sont.

Un test doit pouvoir échouer

Pour savoir si un test sert à quelque chose, cassez le code exprès. Faites-en une copie avec une petite faute, puis lancez les mêmes tests dessus. Si tout passe encore, ces tests ne vous protègent de rien.

Les Run suivants écrivent dans un dossier demo-tests/ le bon code, une copie cassée et deux fichiers d’essais écrits à la main. Le dernier lance chaque essai sur chaque code. Ce ne sont pas des réponses d’un assistant.

Écrire le bon code

Commande
docker exec -w /home/node/project agent sh -c "mkdir -p demo-tests && printf '%s\n' '// Prix de quantite articles, en centimes. Remise de 10 pour cent des dix articles.' 'function prix(quantite, centimes) {' '  const brut = quantite * centimes;' '  if (quantite >= 10) return Math.round(brut * 0.9);' '  return brut;' '}' 'module.exports = { prix };' > demo-tests/remise.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire la copie cassée

Commande
docker exec -w /home/node/project agent sh -c "mkdir -p demo-tests && printf '%s\n' '// Copie cassee expres : la remise ne commence qu’au-dela de dix articles.' 'function prix(quantite, centimes) {' '  const brut = quantite * centimes;' '  if (quantite > 10) return Math.round(brut * 0.9);' '  return brut;' '}' 'module.exports = { prix };' > demo-tests/remise-cassee.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire les bons essais

Commande
docker exec -w /home/node/project agent sh -c "mkdir -p demo-tests && printf '%s\n' 'const prix = require(process.argv[2]).prix;' 'let echecs = 0;' 'function verifier(nom, vrai) {' '  if (vrai === false) {' '    echecs = echecs + 1;' '    console.log(\"echec : \" + nom);' '  }' '}' '// Cas tires de la regle, valeurs attendues ecrites a la main.' 'verifier(\"un article\", prix(1, 150) === 150);' 'verifier(\"neuf articles\", prix(9, 150) === 1350);' 'verifier(\"dix articles\", prix(10, 150) === 1350);' 'verifier(\"aucun article\", prix(0, 150) === 0);' 'console.log(\"bons.js sur \" + process.argv[2] + \" : \" + echecs + \" echec(s)\");' > demo-tests/bons.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire les essais faibles

Commande
docker exec -w /home/node/project agent sh -c "mkdir -p demo-tests && printf '%s\n' 'const prix = require(process.argv[2]).prix;' 'let echecs = 0;' 'function verifier(nom, vrai) {' '  if (vrai === false) {' '    echecs = echecs + 1;' '    console.log(\"echec : \" + nom);' '  }' '}' '// Un calcul recopie du code qui etait sous les yeux, seuil compris.' 'function attendu(quantite, centimes) {' '  if (quantite > 10) return Math.round(quantite * centimes * 0.9);' '  return quantite * centimes;' '}' 'prix(10, 150);' 'verifier(\"sans comparer\", true);' 'verifier(\"est un nombre\", typeof prix(10, 150) === \"number\");' 'verifier(\"meme calcul\", prix(10, 150) === attendu(10, 150));' 'console.log(\"faibles.js sur \" + process.argv[2] + \" : \" + echecs + \" echec(s)\");' > demo-tests/faibles.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lancer chaque essai sur chaque code

Commande
docker exec -w /home/node/project/demo-tests agent sh -c "node bons.js ./remise.js; node bons.js ./remise-cassee.js; node faibles.js ./remise.js; node faibles.js ./remise-cassee.js"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un test peut copier le code

Le troisième essai faible calcule la valeur attendue avec une copie du code, seuil compris. Il a été écrit en lisant la copie cassée, donc il copie sa faute. Il passe sur la copie cassée et échoue sur le bon code.

C’est la recopie. Elle arrive quand l’assistant a le code sous les yeux et que vous ne lui avez pas donné la règle. Une valeur attendue doit être un nombre écrit à la main.

Une erreur fréquente

Attention

Beaucoup pensent que plus il y a de tests, plus le code est sûr. Quinze tests qui ne peuvent pas échouer valent zéro. Comptez ce qu’un test peut attraper, pas leur nombre : cassez le code exprès et regardez qui rougit.

Exemple travaillé : quatre lancers

EssaisCodeAffichage
bons.jsremise.jsbons.js sur ./remise.js : 0 echec(s)
bons.jsremise-cassee.jsechec : dix articles, puis 1 echec(s)
faibles.jsremise.jsechec : meme calcul, puis 1 echec(s)
faibles.jsremise-cassee.jsfaibles.js sur ./remise-cassee.js : 0 echec(s)

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Plus loin : essayer sur un autre changement

C’est le bon moment pour essayer ces idées sur un autre changement. Ne touchez pas au bogue du labo, qui est le travail de la leçon 6. Essayez plutôt une nouvelle règle de remise dans une copie de shop.js.

Écrivez la règle en phrases, demandez des tests à l’assistant, puis cassez votre code exprès. Notez chaque test qui reste vert, et dites pourquoi il ne voit rien.

À propos de ce labo et de sa source: Lab agent de code IA : utiliser opencode pour expliquer et corriger du code, et vérifier son travail

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.