La nouvelle consigne est-elle pire ?
Un passage de régression compare deux versions d’une fonction sur les mêmes cas et dit ce qui a empiré. C’est utile, car une retouche qui répare un message en casse souvent un autre, sans que personne le voie.
La boutique a une nouvelle version de son trieur. Le taux de réussite semble le même qu’avant. Cela ne veut pas dire que rien n’a changé.
À la fin de cette leçon
Remarque
Je peux comparer deux versions sur les mêmes cas et décider si l’une est pire.
Mots-clés
| Mot | Ce que ça veut dire |
|---|---|
| Régression | un cas réussi avant et raté maintenant |
| Taux de réussite | la part des cas qui réussissent |
| Version de départ | la version à laquelle on compare |
| Bruit | l’écart entre deux passages d’une même version |
| Cas instable | un cas qui réussit parfois et rate parfois |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Comparer les mêmes cas, version par version
Passez les deux versions sur le même jeu de référence et gardez le résultat de chaque cas. Le taux de réussite donne un seul nombre. La liste des cas qui ont changé donne la raison.
Une régression est un cas réussi dans la version de départ et raté maintenant. Lisez cette liste avant le taux.
Exemple travaillé : même taux, autres cas
| Version | Cas réussis sur 12 | Taux de réussite | Cas ratés |
|---|---|---|---|
| Ancienne, passage 1 | 10 | 83 pour cent | 8, 12 |
| Ancienne, passage 2 | 9 | 75 pour cent | 5, 11, 12 |
| Nouvelle | 9 | 75 pour cent | 4, 10, 12 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un passage prouve peu, car les réponses varient
Un modèle peut répondre autrement à chaque fois au même message. Passez donc l’ancienne version deux fois. L’écart entre ces deux taux est le bruit.
Un cas instable réussit dans un passage et rate dans le suivant. N’en accusez pas la nouvelle version.
Décider avec le taux, puis avec les cas
Si le nouveau taux est plus bas que l’ancien de plus que le bruit, dites que c’est pire. S’il reste dans le bruit, le taux ne dit rien.
Regardez ensuite les cas. Un cas réussi dans tous les anciens passages et raté dans le nouveau est une régression ferme : c’est celle à corriger.
Écrire les trois passages enregistrés, partie 1
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\"];' '// Passages enregistrés : une étiquette et une urgence pour chaque cas, et un texte si besoin.' 'const passageA1 = [[\"facturation\", 2], [\"livraison\", 2], [\"autre\", 1], [\"facturation\", 2], [\"livraison\", 3], [\"autre\", 1], [\"facturation\", 2], [\"facturation\", 2], [\"inconnu\", 1], [\"inconnu\", 1], [\"facturation\", 3], [\"livraison\", 2]];' > passages.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 trois passages enregistrés, partie 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const passageA2 = [[\"facturation\", 2], [\"livraison\", 2], [\"autre\", 1], [\"facturation\", 2], [\"autre\", 1], [\"autre\", 1], [\"facturation\", 2], [\"livraison\", 2], [\"inconnu\", 1], [\"inconnu\", 1], [\"autre\", 2], [\"livraison\", 2]];' >> passages.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 trois passages enregistrés, partie 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const passageB = [[\"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]];' 'module.exports = { voulues, passageA1, passageA2, passageB };' >> passages.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 comparaison, partie 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { voulues, passageA1, passageA2, passageB } = require(\"./passages\");' '// Les règles de la leçon 2, abrégées : bonne étiquette, urgence de 1 à 3, aucune phrase interdite.' '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;' '}' 'function resultats(passage) {' ' return passage.map(function (entree, rang) { return reussit(entree, voulues[rang]); });' '}' > comparer3.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 comparaison, partie 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function taux(liste) {' ' return Math.floor(liste.filter(Boolean).length * 100 / liste.length);' '}' 'const a1 = resultats(passageA1);' 'const a2 = resultats(passageA2);' 'const b = resultats(passageB);' 'console.log(\"Taux de réussite A1 : \" + taux(a1) + \" pour cent\");' 'console.log(\"Taux de réussite A2 : \" + taux(a2) + \" pour cent\");' 'console.log(\"Taux de réussite B : \" + taux(b) + \" pour cent\");' 'const bruit = Math.abs(taux(a1) - taux(a2));' 'console.log(\"Bruit entre A1 et A2 : \" + bruit + \" points\");' >> comparer3.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 comparaison, partie 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const bas = Math.min(taux(a1), taux(a2));' 'const haut = Math.max(taux(a1), taux(a2));' 'let verdict = \"pas de changement net\";' 'if (taux(b) < bas - bruit) verdict = \"pire\";' 'if (taux(b) > haut + bruit) verdict = \"meilleur\";' 'console.log(\"Verdict d’après les taux seuls : \" + verdict);' 'const pires = [];' 'const instables = [];' 'const toujours = [];' 'for (let rang = 0; rang < voulues.length; rang = rang + 1) {' ' const pareil = a1[rang] === a2[rang];' ' if (pareil === false) instables.push(rang + 1);' ' else if (a1[rang] && b[rang] === false) pires.push(rang + 1);' ' else if (a1[rang] === false && b[rang] === false) toujours.push(rang + 1);' '}' 'console.log(\"Régressions (réussies dans A1 et A2, ratées en B) : \" + pires.join(\", \"));' 'console.log(\"Instables (diffèrent entre A1 et A2) : \" + instables.join(\", \"));' 'console.log(\"Ratés à chaque passage : \" + toujours.join(\", \"));' >> comparer3.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.
Comparer les versions
docker exec -w /home/node/project agent node comparer3.jsAffiché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 comparaison affiche
| Ligne | Ce qu’elle montre |
|---|---|
| Taux de réussite | A1 83, A2 75, B 75 pour cent |
| Bruit | 8 points |
| Verdict d’après les taux | pas de changement net |
| Régressions | les cas 4 et 10 |
| Instables | les cas 5, 8 et 11 |
| Ratés à chaque passage | le cas 12 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
À vous
Astuce
Dans passages.js, changez l’urgence du cas 1 de passageB de 2 à 9, puis comparez de nouveau. Le cas 1 doit rejoindre les régressions.
Une erreur fréquente
Attention
Beaucoup comparent un passage de chaque version et se fient à l’écart. Quand les réponses varient, un seul passage peut tromper dans les deux sens. Passez la version de départ au moins deux fois, mesurez le bruit et ne jugez un changement qu’au regard de ce bruit.