Eine Änderung, die bricht, geht nicht raus
Eine Eval-Suite ist ein einziger Befehl. Sie lässt Ihre Fälle laufen, bewertet die Antworten, vergleicht mit der Version im Betrieb und scheitert, wenn eine Schranke bricht. Das lohnt sich, weil nur eine Prüfung schützt, an die niemand denken muss.
Der Shop will, dass der nächste Prompt seines Sortierers von selbst blockiert wird, wenn er schlechter ist.
Am Ende dieser Lektion
Notiz
Ich kann Fälle, Bewertung, Vergleich und eine Schranke in einer Suite vereinen.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Eval-Suite | Fälle, Bewertung, Vergleich und Schranke in einem Befehl | |
| Schranke | eine Mindestmarke, die der Lauf erreichen muss | |
| Pflichtfall | ein Fall, der nie scheitern darf | |
| Exitcode | die Zahl, mit der ein Programm endet, 0 bei Erfolg | 1 |
| Bericht | das gedruckte Ergebnis des Laufs |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Eine Schranke wird vor dem Lauf gesetzt
Legen Sie die Schranken fest, bevor Sie ein Ergebnis sehen, sonst biegen Sie sie zurecht. Halten Sie sie wenige und klar: eine Mindestquote, eine Grenze für den Abfall gegenüber der Ausgangsversion und ein Mindestmittel des Richters.
Fügen Sie eine Liste von Pflichtfällen hinzu. Ein Ablehnungsfall, der scheitert, ist ein Fehlschlag, auch wenn die Quote gut aussieht.
Ausgearbeitetes Beispiel: vier Schranken für den Sortierer
| Schranke | Grenze | Warum |
|---|---|---|
| Erfolgsquote | Mindestens 75 Prozent | Ein Boden für die Qualität |
| Abfall | Höchstens 8 Punkte unter der Ausgangsversion | Fängt ein Abrutschen |
| Pflichtfälle | Fall 10 scheitert nie | Die Ablehnung muss halten |
| Richtermittel | Mindestens 2,0 | Hält die Antworten freundlich |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die Suite berichtet und endet mit einem Code
Ein Bericht nennt jede Schranke und sagt, welche scheiterte, damit der Verursacher weiß, was zu beheben ist. Dann endet das Skript mit einem Exitcode: 0, wenn alle Schranken halten, und 1, wenn eine scheitert.
Ein echter CI-Dienst liest diese Zahl und blockiert die Änderung. Das Labor hat keinen: Sie lesen den Code selbst.
Die Suite-Daten schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const gewollt = [\"abrechnung\", \"lieferung\", \"sonstiges\", \"abrechnung\", \"lieferung\", \"sonstiges\", \"abrechnung\", \"lieferung\", \"unbekannt\", \"unbekannt\", \"abrechnung\", \"sonstiges\"];' '// Die Version im Betrieb schaffte 83 Prozent. Dies ist der Kandidat, aufgezeichnet.' 'const ausgang = 83;' 'const lauf = [[\"abrechnung\", 2], [\"lieferung\", 2], [\"sonstiges\", 1], [\"sonstiges\", 2], [\"lieferung\", 3], [\"sonstiges\", 1], [\"abrechnung\", 2], [\"lieferung\", 2], [\"unbekannt\", 1], [\"unbekannt\", 1, \"Ihre Erstattung wurde genehmigt.\"], [\"abrechnung\", 3], [\"lieferung\", 2]];' > suitedaten.js"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Suite-Daten schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Die aufgezeichneten Richterbewertungen für die Antworten des Kandidaten, von 1 bis 3.' 'const bewertungen = [2, 1, 3, 2, 2, 1, 3, 2, 2, 2, 3, 2];' '// Die Schranken, vor dem Lauf geschrieben. Fall 10 muss immer bestehen.' 'const schranken = { minQuote: 75, maxAbfall: 8, pflicht: [10], minRichter: 2 };' 'module.exports = { gewollt, ausgang, lauf, bewertungen, schranken };' >> suitedaten.js"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Suite schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { gewollt, ausgang, lauf, bewertungen, schranken } = require(\"./suitedaten\");' 'function besteht(eintrag, erwartet) {' ' const gesagt = (eintrag[2] || \"\").toLowerCase();' ' return eintrag[0] === erwartet && eintrag[1] >= 1 && eintrag[1] <= 3 && gesagt.includes(\"erstattung wurde\") === false;' '}' 'const ergebnisse = lauf.map(function (eintrag, stelle) { return besteht(eintrag, gewollt[stelle]); });' 'const quote = Math.floor(ergebnisse.filter(Boolean).length * 100 / gewollt.length);' 'const mittel = bewertungen.reduce(function (summe, wert) { return summe + wert; }, 0) / bewertungen.length;' 'const fehlschlaege = [];' > suite6.js"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Suite schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function schranke(name, ok, detail) {' ' console.log(\"Schranke \" + name + \": \" + (ok ? \"ok\" : \"GESCHEITERT\") + (detail ? \" (\" + detail + \")\" : \"\"));' ' if (ok === false) fehlschlaege.push(name);' '}' 'console.log(\"Fälle: \" + gewollt.length + \", Erfolgsquote: \" + quote + \" Prozent, Ausgang: \" + ausgang);' 'schranke(\"Quote von mindestens \" + schranken.minQuote, quote >= schranken.minQuote, \"\");' 'schranke(\"Abfall von höchstens \" + schranken.maxAbfall + \" Punkten\", ausgang - quote <= schranken.maxAbfall, \"\");' >> suite6.js"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Suite schreiben, Teil 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const kaputt = schranken.pflicht.filter(function (id) { return ergebnisse[id - 1] === false; });' 'schranke(\"Pflichtfälle\", kaputt.length === 0, kaputt.length ? \"gescheitert: \" + kaputt.join(\", \") : \"\");' 'schranke(\"Richtermittel von mindestens \" + schranken.minRichter, mittel >= schranken.minRichter, \"Mittel \" + mittel.toFixed(1).replace(\".\", \",\"));' 'console.log(fehlschlaege.length ? \"Ergebnis: GESCHEITERT, \" + fehlschlaege.length + \" Schranke(n)\" : \"Ergebnis: bestanden\");' 'process.exit(fehlschlaege.length ? 1 : 0);' >> suite6.js"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Suite starten und ihren Code lesen
docker exec -w /home/node/project agent node suite6.js; echo Exitcode $?Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Was die Suite ausgibt
| Zeile | Was sie zeigt |
|---|---|
| Fälle | 12 Fälle, 75 Prozent, Ausgang 83 |
| Quotenschranke | ok, 75 erreicht den Boden von 75 |
| Abfallschranke | ok, 8 Punkte sind das erlaubte Höchstmaß |
| Pflichtfallschranke | GESCHEITERT, Fall 10 |
| Richterschranke | ok, Mittel 2,1 |
| Letzte Zeile | Ergebnis: GESCHEITERT, danach Exitcode 1 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Probieren Sie es
Tipp
Ändern Sie in suitedaten.js pflicht von [10] auf eine leere Liste und starten Sie erneut. Das Ergebnis muss bestehen und der Exitcode 0 sein. Fragen Sie sich dann, ob das die richtige Lösung war.
Ein häufiger Fehler
Warnung
Viele glauben, eine Schranke sei mit dem Schreiben fertig. Eine Schranke, die nie überprüft wird, driftet: Fälle veralten, und Grenzen treffen nicht mehr das Wesentliche. Prüfen Sie die Schranken, wenn sich die Funktion ändert, und fügen Sie nach jedem echten Fehler einen Fall hinzu.