Gewinne:
- Fähigkeit, Unit-, Integrations- und Edge-Case-Tests mit aussagekräftiger Aussage mit KI zu erstellen
- Möglichkeit, Testabdeckung, Grenzwerte und Negativszenarien mit KI-Unterstützung systematisch zu extrahieren
- Möglichkeit zu überprüfen, ob die von der KI erstellten Tests tatsächlich das Verhalten überprüfen und nicht nur vorhandenen Code wiederholen
Beim Testen handelt es sich um den Mechanismus, der beweist, dass sich die Software tatsächlich wie versprochen verhält. Eine gute Testsuite sagt Ihnen in Sekundenschnelle, ob eine Änderung etwas kaputt macht und gibt dem Ingenieur die Freiheit, mit Zuversicht zu handeln. KI beschleunigt den mühsamsten und am häufigsten übersprungenen Teil des Testschreibens: das Generieren einer Vielzahl von Szenarien, Haltepunkten und negativen Fällen. Aber hier gibt es eine heimliche Falle: KI kann Tests schreiben, die das aktuelle (vielleicht fehlerhafte) Verhalten des Codes überprüfen, nicht sein angebliches Verhalten; Oder es kann zu leeren Tests führen, die immer erfolgreich sind, ohne dass tatsächlich etwas überprüft wird. Der Wert eines Tests liegt nicht darin, ob er bestanden wird, sondern darin, ob er prüft, ob das Richtige ist und rot wird, wenn es falsch ist.
In dieser Einheit erfahren Sie, wie Sie Unit-, Integrations- und Edge-Case-Tests mit aussagekräftigen Aussagen erstellen. wie man Testabdeckung, Haltepunkte und Abwärtsszenarien systematisch extrahiert; und wir werden sehen, wie Sie überprüfen können, ob die von der KI erstellten Tests tatsächlich das Verhalten validieren.
Konzepte: Unit-Test: Testet eine einzelne Funktion/Klasse isoliert. Integrationstest: Testet, ob mehrere Teile korrekt zusammenarbeiten. Assert: Eine Anweisung, die prüft, ob ein Ergebnis dem erwarteten Ergebnis entspricht; Dies ist das Herzstück des Tests. Abdeckung: Wie viel des Codes wird durch Tests ausgeführt? Eine hohe Abdeckung ist keine Garantie für Qualität.
Aussagekräftige Tests erstellen
Ein guter Test macht eindeutig drei Dinge: Er stellt einen Zustand her, er führt eine Aktion aus, er bestätigt das Ergebnis. Geben Sie beim Drucken von Tests an die KI an, welches Verhalten Sie überprüfen möchten und welche Szenarien es abdecken soll; Andernfalls entstehen oberflächliche Tests, die immer bestehen.
- Definieren Sie das zu testende Verhalten. „Was gilt als richtig?“ Beantworten Sie die Frage klar und deutlich.
- Fragen Sie nach Szenariotypen. Normal, Grenzwert, negativ, Fehlerzustand.
- Importieren Sie eine aussagekräftige Behauptung. Es hat nicht nur „einen Fehler ausgegeben“, sondern auch „den korrekten Wert zurückgegeben“.
- Überprüfen Sie die Genauigkeit des Tests. Wird der Test rot, wenn Sie den Code bewusst brechen?
Umfassende Eingabeaufforderung zur Testgenerierung: „Schreiben Sie Komponententests für die folgende Funktion „Applydiscount(Betrag, Coupon)“. MINDESTENS ein Szenario in den folgenden Kategorien: (1) normaler gültiger Coupon, (2) Haltepunkte (0 Betrag, 100 % Rabatt), (3) negativ (ungültiger Coupon, negativer Betrag), (4) Fehlerfall (Nullcoupon). Stellen Sie den KONKRETEN erwarteten Wert in jedem Test fest (nicht nur „funktioniert“). Benennen Sie die Tests lesbar. Code: [Code]“
Eingabeaufforderung zur Grenzwertextraktion: „Führen Sie eine Grenzwertanalyse für die Eingaben dieser Funktion durch. Extrahieren Sie für jeden Parameter die Werte „gerade an der Grenze“, „gerade unter der Grenze“, „gerade über der Grenze“ als Tabelle. Listen Sie dann die Testszenarien auf, die diese Grenzen abdecken. Schreiben Sie noch keinen Code, sondern nur Analyse und Szenarioliste. Funktion: [Signatur]“
Achtung: Eine hohe Testabdeckung (z. B. 90 %) beweist nicht, dass der Code korrekt ist. Die Abdeckung misst, wie viele Zeilen ausgeführt wurden; nicht, dass diese Zeilen das richtige Ergebnis liefern. Ein Test ohne aussagekräftige Behauptung erhöht die Abdeckung, garantiert jedoch nichts. Der Inhalt der Behauptung bestimmt die Qualität, nicht die Anzahl der Behauptungen.
Den Test selbst testen: Die Logik der Mutation
Der praktischste Weg, um zu verstehen, ob der KI-generierte Test tatsächlich funktioniert, besteht darin, den Code absichtlich zu knacken (Mutationstestlogik). Eine Bedingung umkehren, ein +-Zeichen setzen -; Wenn kein Test rot angezeigt wird, behalten Ihre Tests dieses Verhalten nicht bei.
Eingabeaufforderung zur Suche nach Testschwachstellen: „Sagen Sie mir, welche potenziellen Fehler in diesem Code die folgenden Tests NICHT abfangen dürfen. Schlagen Sie 5 kleine Mutationen vor, die am Code vorgenommen werden könnten (z. B. >= statt >, - statt +) und geben Sie für jede an, ob bestehende Tests sie abfangen würden. Für diejenigen, die nicht entdeckt wurden, schlagen Sie Tests vor, die hinzugefügt werden sollten. Code: [Code] Tests: [Test]“
Schwache Eingabeaufforderung / Starke Eingabeaufforderung
SCHWACH: „Schreiben Sie einen Test für diese Funktion.“ (Ergebnis: normalerweise ein glückliches Szenario, schwache Behauptung; Fehler werden übersehen.) STRONG: „Schreiben Sie einen Test für diese ‚passwordStrong‘-Funktion. Regel: mindestens 8 Zeichen, 1 Großbuchstabe, 1 Ziffer erforderlich. Decken Sie die folgenden Szenarios als SEPARATE Tests ab: genau 8 Zeichen (Limit), 7 Zeichen (unter Limit), keine Großbuchstaben, keine Ziffern, leere Zeichenfolge, nur Leerzeichen, zu lang (1000 Zeichen) Erwartetes Wahr/Falsch explizit bestätigen Geben Sie in jedem Test einen Wert an und benennen Sie den Test entsprechend dem, was er prüft.“
Leistungsstarke Eingabeaufforderung mit Regeln und vollständigen Grenzszenarien. Grenzpaare wie „genau 8/7 Zeichen“ sind die häufigsten Fehlerstellen (Verwechslung von > mit >=). Eine schwache Eingabeaufforderung umgeht diese Grenzen und trägt den Fehler in die Produktion.
Testtypen und Verwendungszweck
Testtyp
Was bestätigt es?
KI-Beitrag
Achtung
Einheit
Einzelne Funktion/Klasse
Erzeugt schnell mehrere Szenarien
Eine aussagekräftige Behauptung ist erforderlich
Integration
Teile arbeiten zusammen
Szenario und Scheindatenentwurf
Echtes Suchtverhalten
beenden/akzeptieren
Gesamter Benutzerfluss
Schrittliste und Erwartungen
anfällig für Sprödigkeit
Rückschritt
Alter Fehler kommt nicht zurück
Fehlerspezifische Prüfung
Sollte zu jedem Fix hinzugefügt werden
Mini-Hüllen
Fall 1 – Der Test, der immer besteht. AI schreibt 12 Tests in eine Funktion und alle bestehen sie. Der Ingenieur wird misstrauisch und verfälscht absichtlich den Rückgabewert der Funktion; Nur 3 der Tests werden rot. Die anderen 9 Tests enthalten keine aussagekräftigen Aussagen. Tests werden durch Mutationssuche verstärkt; Echter Schutz wird in 9 Szenarien erreicht.
Fall 2 – Grenzfehler. Eine Altersüberprüfungsfunktion sollte lauten: „18 und älter ist gültig“, aber >18 wird geschrieben, was bedeutet, dass das Alter von 18 Jahren abgelehnt wird. Der Fehler zeigt sich beim Testen sofort, da die KI durch die Breakpoint-Analyse das Szenario „genau 18“ generiert. Ein einziger Grenzwerttest verhindert echte Benutzerbeschwerden.
Fall 3 – Beheben des aktuellen Verhaltens. Wenn die KI angewiesen wird, „einen Test basierend auf diesem Code zu schreiben“, erstellt sie einen Test, der einen Rundungsfehler, der bereits im Code vorhanden ist, als „richtig“ akzeptiert. Wenn der Techniker den Test gemäß der Anforderung (erwarteter korrekter Wert) und nicht gemäß dem Code ausdruckt, wird der Test rot und der eigentliche Fehler tritt auf. Tests sollten von Erwartungen abgeleitet werden, nicht vom Code.
Häufige Fehler
- Sinnlose Behauptung. „Es wurde kein Fehler ausgegeben“ reicht nicht aus; Der korrekte Wert muss überprüft werden.
- Umfang und Qualität verwechseln. Eine hohe Abdeckung ist keine Garantie für genaue Ergebnisse.
- Drucken des Tests per Code. Behebt den aktuellen Fehler auf „true“; Tests sollten aus Erwartungen abgeleitet werden.
- Grenzwerte überspringen. Die Verwechslung von > mit >= ist der häufigste Fehler; Grenzpaare müssen getestet werden.
- Der Test selbst wird nicht geprüft. Ein Test, der nicht rot wird, wenn Sie den Code knacken, bietet keinen Schutz.
Zusammenfassend
Eine gute Testsuite ist der Schlüssel zur sicheren Durchführung von Änderungen. KI generiert schnell eine Vielzahl von Szenarien, Grenzen und negativen Situationen; Aber wenn es Tests aus Code und nicht aus Anforderungen ableitet, kann es vorhandene Fehler beheben oder bedeutungslose Tests schreiben, die immer bestehen. Stellen Sie in jedem Test den konkreten erwarteten Wert fest, schließen Sie gebundene Paare ein und überprüfen Sie, ob Ihre Tests tatsächlich Schutz bieten, indem sie den Code absichtlich brechen. Der Inhalt der Behauptung, nicht die Anzahl der Bereiche, bestimmt die Qualität.
Anwendungsaufgabe
Wählen Sie eine Funktion aus und lassen Sie sie Tests in vier Kategorien (Normal, Grenzwert, Negativ, Fehler) mit einer umfassenden Eingabeaufforderung zur Testgenerierung generieren; Lassen Sie in jedem Test den konkreten Erwartungswert geltend machen. Führen Sie dann die Testaufforderung zur Schwachstellensuche aus, schlagen Sie fünf kleine Mutationen im Code vor und führen Sie die Tests aus, um zu überprüfen, welche Mutationen erkannt werden. Fügen Sie einen neuen Test für mindestens eine Mutation hinzu, die nicht erkannt wurde, und zeigen Sie, dass sie jetzt rote Zahlen schreibt.
Checkliste
- [ ] Ich habe die Tests basierend auf dem erwarteten/richtigen Verhalten gedruckt, nicht auf dem Code.
- [ ] Ich habe Normal-, Grenz-, Negativ- und Fehlerszenarien behandelt.
- [ ] Ich habe in jedem Test den konkreten Erwartungswert geltend gemacht.
- [ ] Ich habe Grenzpaare getestet (knapp oben-unten / knapp oben-unten).
- [ ] Durch absichtliches Brechen des Codes habe ich bestätigt, dass die Tests rot wurden.
- [ ] Ich habe einen neuen Test für unentdeckte Mutationen hinzugefügt.