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

Construire une suite d’évaluation

Après cette leçon: Je peux réunir cas, notation, comparaison et barrière dans une seule suite.

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

Un changement qui casse ne part pas

Une suite d’évaluation est une seule commande. Elle passe vos cas, note les réponses, compare avec la version en production et échoue quand une barrière cède. C’est utile, car un contrôle qu’il ne faut pas penser à lancer est le seul qui protège.

La boutique veut que la prochaine consigne de son trieur soit bloquée d’office si elle fait pire.

À la fin de cette leçon

Remarque

Je peux réunir cas, notation, comparaison et barrière dans une seule suite.

Mots-clés

MotCe que ça veut direExemple
Suite d’évaluationcas, notation, comparaison et barrière en une commande
Barrièreun seuil que le passage doit atteindre
Cas obligatoireun cas qui ne doit jamais échouer
Code de sortiele nombre dont un programme se termine, 0 si tout va bien1
Rapportle résultat imprimé du passage

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

Une barrière se fixe avant le passage

Décidez des barrières avant de voir un résultat, sinon vous les plierez pour qu’il passe. Gardez-les peu nombreuses et claires : un taux minimal, une baisse maximale depuis la référence et une moyenne minimale du juge.

Ajoutez une liste de cas obligatoires. Un cas de refus qui échoue est un échec, même si le taux a l’air bon.

Exemple travaillé : quatre barrières pour le trieur

BarrièreLimitePourquoi
Taux de réussiteAu moins 75 pour centUn plancher de qualité
BaisseAu plus 8 points sous la référenceAttrape une glissade
Cas obligatoiresLe cas 10 n’échoue jamaisLe refus doit tenir
Moyenne du jugeAu moins 2,0Garde les réponses aimables

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

Rapporter, puis sortir avec un code

Un rapport nomme chaque barrière et dit laquelle a échoué, pour que l’auteur de la panne sache quoi réparer. Puis le script se termine par un code de sortie : 0 si toutes les barrières tiennent, 1 si l’une échoue.

Un vrai service d’intégration continue lit ce nombre et bloque le changement. Le labo n’en a pas : vous lisez le code vous-même.

Écrire les données de la suite, partie 1

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const voulues = [\"facturation\", \"livraison\", \"autre\", \"facturation\", \"livraison\", \"autre\", \"facturation\", \"livraison\", \"inconnu\", \"inconnu\", \"facturation\", \"autre\"];' '// La version en production réussissait 83 pour cent. Voici la candidate, enregistrée.' 'const reference = 83;' 'const passage = [[\"facturation\", 2], [\"livraison\", 2], [\"autre\", 1], [\"autre\", 2], [\"livraison\", 3], [\"autre\", 1], [\"facturation\", 2], [\"livraison\", 2], [\"inconnu\", 1], [\"inconnu\", 1, \"Votre remboursement a été accepté.\"], [\"facturation\", 3], [\"livraison\", 2]];' > donneessuite.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 données de la suite, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Les notes enregistrées du juge pour les réponses de la candidate, de 1 à 3.' 'const notes = [2, 1, 3, 2, 2, 1, 3, 2, 2, 2, 3, 2];' '// Les barrières, écrites avant le passage. Le cas 10 doit toujours réussir.' 'const barrieres = { tauxMin: 75, baisseMax: 8, obligatoires: [10], jugeMin: 2 };' 'module.exports = { voulues, reference, passage, notes, barrieres };' >> donneessuite.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 suite, partie 1

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { voulues, reference, passage, notes, barrieres } = require(\"./donneessuite\");' 'function reussit(entree, attendue) {' '  const dit = (entree[2] || \"\").toLowerCase();' '  return entree[0] === attendue && entree[1] >= 1 && entree[1] <= 3 && dit.includes(\"remboursement a été\") === false;' '}' 'const resultats = passage.map(function (entree, rang) { return reussit(entree, voulues[rang]); });' 'const taux = Math.floor(resultats.filter(Boolean).length * 100 / voulues.length);' 'const moyenne = notes.reduce(function (somme, note) { return somme + note; }, 0) / notes.length;' 'const echecs = [];' > suite6.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 suite, partie 2

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function barriere(nom, ok, detail) {' '  console.log(\"Barrière \" + nom + \" : \" + (ok ? \"ok\" : \"ÉCHEC\") + (detail ? \" (\" + detail + \")\" : \"\"));' '  if (ok === false) echecs.push(nom);' '}' 'console.log(\"Cas : \" + voulues.length + \", taux de réussite : \" + taux + \" pour cent, référence : \" + reference);' 'barriere(\"taux de réussite d’au moins \" + barrieres.tauxMin, taux >= barrieres.tauxMin, \"\");' 'barriere(\"baisse d’au plus \" + barrieres.baisseMax + \" points\", reference - taux <= barrieres.baisseMax, \"\");' >> suite6.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 suite, partie 3

Commande
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const casses = barrieres.obligatoires.filter(function (id) { return resultats[id - 1] === false; });' 'barriere(\"cas obligatoires\", casses.length === 0, casses.length ? \"ratés : \" + casses.join(\", \") : \"\");' 'barriere(\"moyenne du juge d’au moins \" + barrieres.jugeMin, moyenne >= barrieres.jugeMin, \"moyenne \" + moyenne.toFixed(1).replace(\".\", \",\"));' 'console.log(echecs.length ? \"Résultat : ÉCHEC, \" + echecs.length + \" barrière(s)\" : \"Résultat : réussi\");' 'process.exit(echecs.length ? 1 : 0);' >> suite6.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 la suite et lire son code

Commande
docker exec -w /home/node/project agent node suite6.js; echo code de sortie $?

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.

Ce que la suite affiche

LigneCe qu’elle montre
Cas12 cas, 75 pour cent, référence 83
Barrière du tauxok, 75 atteint le plancher de 75
Barrière de la baisseok, 8 points est le maximum permis
Barrière des obligatoiresÉCHEC, cas 10
Barrière du jugeok, moyenne 2,1
Dernière ligneRésultat : ÉCHEC, puis code de sortie 1

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

À vous

Astuce

Dans donneessuite.js, remplacez obligatoires : [10] par une liste vide et relancez. Le résultat doit réussir et le code de sortie valoir 0. Demandez-vous ensuite si c’était la bonne réparation.

Une erreur fréquente

Attention

Beaucoup croient qu’une barrière est finie une fois écrite. Une barrière jamais revue dérive : les cas vieillissent et les limites cessent de viser l’essentiel. Revoyez les barrières quand la fonction change et ajoutez un cas après chaque vraie panne.

À 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.