Gewinne:
- Fähigkeit, Unit-, Integrations- und UI-Tests mit künstlicher Intelligenz gemäß der Testpyramide zu erstellen und Grenz- und Fehlersituationen sowie glückliche Szenarien abzudecken
- Möglichkeit, leere/nutzlose Tests und aufgeblähte Abdeckung auszusortieren, indem überprüft wird, ob jeder generierte Test tatsächlich ein Verhalten validiert
- Sicherstellen, dass der Test den Fehler erkennt und verhindert, dass er behoben wird, indem er der KI mitteilt, was der Code tun soll
Das Schreiben von Code ist die halbe Arbeit; Der Beweis, dass der Code korrekt funktioniert, ist die andere Hälfte. Mobile Apps treffen auf Hunderte verschiedene Geräte, Bildschirmgrößen, Betriebssystemversionen und Benutzerverhalten. Es ist unmöglich, alle davon manuell zu testen; Aus diesem Grund sind automatisierte Tests (Code-Testcode – Tests, die ohne einen menschlichen Klick ausgeführt werden) das Rückgrat der mobilen Qualität. KI ist beim Schreiben von Tests unglaublich effizient, weil das Schreiben von Tests genau die Art von Musterarbeit ist, die sie mag: die Validierung eines bestimmten Verhaltens für bestimmte Eingaben. In dieser Einheit lernen wir, wie wir Unit-Tests, Schnittstellentests und Automatisierung mit KI beschleunigen, aber die Qualität des Tests durch menschliche Augen sicherstellen können.
Testpyramide: was und wie viel getestet werden soll
Eine gesunde Teststrategie ähnelt einer Pyramide. Die Basis umfasst eine große Anzahl von Unit-Tests (Schnelltests, die eine einzelne Funktion oder Klasse isoliert testen); sie sind schnell und günstig. In der Mitte gibt es weniger Integrationstests (Testen, wie mehrere Teile zusammenarbeiten). Oben gibt es minimale UI-/End-to-End-Tests (Tests werden durchgeführt, indem der Benutzer auf den Bildschirm klickt); Sie sind realistisch, aber langsam und zerbrechlich. KI hilft auf jeder Ebene, aber der größte Wert liegt an der Basis: die schnelle Erstellung von Unit-Tests der Geschäftslogik.
Testtyp
Umfang
Geschwindigkeit
KI-Effizienz
Unit-Tests
Einzelne Funktion/Klasse
sehr schnell
sehr hoch
Integration
Zwischenschicht
mittel
hoch
Benutzeroberfläche / End-to-End
Alle Bildschirmstreams
langsam
Mittel (zerbrechlich)
Tipp: Wenn Sie die KI anweisen, „Tests für diese Funktion zu generieren“, fragen Sie explizit nach Randfällen: leere Eingabe, Null, negative Zahl, sehr großer Wert, Netzwerkfehler. KI erzeugt leicht einen glücklichen Weg; Die wirklichen Fehler verstecken sich in den Rändern und springen heraus, wenn man sie dort nicht haben möchte.
Schritte zum Schreiben von Tests mit KI
- Definieren Sie das zu testende Verhalten. „Diese Funktion sollte diese Ausgabe an diese Eingabe übergeben.“
- Geben Sie den Rahmen an. JUnit + MockK auf Android, XCTest auf iOS, Espresso (Android) oder XCUITest (iOS) für UI.
- Fragen Sie nach Grenzzuständen. Glückliches Szenario + Fehler + Haltepunkte.
- Scheinobjekte verwalten. Externe Abhängigkeiten wie Netzwerk und Datenbank werden zum Testen emuliert (Mock – gesteuerter Mock anstelle des eigentlichen Dienstes).
- Führen Sie den Test durch und überprüfen Sie ihn. Ist der Test bestanden, bestätigt er etwas wirklich Sinnvolles?
Der fünfte Schritt ist entscheidend. KI produziert manchmal nutzlose Tests, die „immer bestehen“; zum Beispiel ein Test, der nichts verifiziert oder seine eigenen gefälschten Daten überprüft. Eine bestandene Prüfung und eine wertvolle Prüfung sind verschiedene Dinge.
Achtung: Nur weil die KI produzieren kann, heißt das nicht, dass der Test korrekt ist. Manchmal akzeptiert die KI das aktuelle (vielleicht fehlerhafte) Verhalten des Codes als „richtig“ und schreibt Tests entsprechend. Solche Tests beheben den Fehler, anstatt ihn zu erkennen. Sie bestimmen, was der Test erwartet; Sagen Sie der KI, was sie tun soll, nicht was der Code tut.
Testabdeckungsmaß und Irrtum
Die Testabdeckung (wie viel Prozent des Codes wird von Tests ausgeführt) ist eine nützliche, aber irreführende Metrik. Eine Abdeckung von 90 % bedeutet, dass 90 % des Codes ausgeführt wurden. Es wurde jedoch nicht überprüft, ob diese Leitungen ordnungsgemäß funktionieren. Ein Test, der eine Zeile ausführt und das Ergebnis nicht überprüft, vergrößert den Umfang, bietet aber keine Sicherheit. Das Ziel sind nicht hohe Zahlen, sondern eine aussagekräftige Validierung. Sie können mit KI schnell skalieren, aber stellen Sie sicher, dass bei jedem Test tatsächlich ein Verhalten getestet wird.
drei Mini-Koffer
Fall 1 – Grenzsituation erfasst. AI wurde gebeten, Tests für eine Geldtransferfunktion in einer Bankanwendung durchzuführen, und es wurden speziell Szenarien mit „negativem Betrag“ und „mehr als Saldo“ hinzugefügt. Der Test ergab, dass die Überweisung nicht mit einem negativen Betrag blockiert war; Dies wäre eine große Sicherheitslücke in der Produktion. Geschlossen durch Hinzufügen eines einzeiligen Steuerelements. Lektion: Grenztests sind die wertvollsten Tests.
Fall 2 – Fake-Test. Ein Team war erleichtert, die Abdeckung mit 40 von KI erstellten Unit-Tests auf 85 % steigern zu können. Bei der Inspektion stellte sich heraus, dass die meisten Tests keine tatsächliche Ausgabe überprüften, sondern nur die Funktion aufriefen und „assertTrue(true)“ schrieben. Die Abdeckung war hoch, aber der Schutz war gleich null. Die Tests wurden überarbeitet und mit echten Validierungen neu geschrieben. Lektion: Berichterstattungszahlen können lügen.
Fall 3 – UI-Tests beschleunigt. Ein E-Commerce-Team hat in 20 Minuten ein XCUITest-Skript für den Add-to-Cart-Ablauf mit KI geschrieben; Wäre es handschriftlich geschrieben, würde es einen halben Tag dauern. Die KI hat die Identifikatoren der Bildschirmelemente erraten; Das Team hat sie mit dem echten Code abgeglichen und behoben. Die Entwurfsgeschwindigkeit ist real, aber die Überprüfung der Identifikatoren ist menschliche Arbeit.
Schwache Eingabeaufforderung / Starke Eingabeaufforderung
Schwache Eingabeaufforderung: „Schreiben Sie einen Test für diese Funktion.“
Leistungsstarke Eingabeaufforderung: „Erstellen Sie Unit-Tests für diese Kotlin-Funktion mit JUnit5 + MockK. Funktion: Geldtransfer (Betrag, Quelle, Ziel). Zu testende Verhaltensweisen (was der Code tun soll): – Gültige Überweisung muss erfolgreich sein – Negativer Betrag oder Nullbetrag muss abgelehnt werden – Betrag größer als der Saldo muss abgelehnt werden – Netzwerkfehler muss entsprechende Ausnahme auslösen. Jeder Test sollte nur eine Sache überprüfen, ihre Namen sollten beschreibend sein, den externen Dienst verspotten. Schreiben Sie keine leere Behauptung.“
Kopierbare Vorlagen
Unit-Test-Vorlage: „Generieren Sie [JUnit/XCTest]-Unit-Tests für diese Funktion für [Sprache]. Erwartetes Verhalten: [was zu tun ist]. Einschließen: Happy-Szenario, Null-Eingabe, Haltepunkte, Fehlerfall. Lassen Sie jeden Test ein einzelnes Verhalten überprüfen; verwenden Sie eine aussagekräftige Behauptung; verspotten Sie. [Code]“
UI-Testvorlage: „Schreiben Sie einen UI-Test des folgenden Ablaufs mit [Espresso/XCUITest]: [Benutzerablauf Schritt für Schritt]. Wählen Sie Bildschirmelemente mit Barrierefreiheits-ID aus, verwenden Sie ID anstelle von Text. Fügen Sie Wartestrategie hinzu. Erinnern Sie mich daran, Element-IDs mit dem tatsächlichen Code abzugleichen.“
Test-Audit-Vorlage: „Untersuchen Sie diese Tests: 1) Verifizieren sie tatsächlich eine Ausgabe/ein Verhalten oder sind sie null? 2) Decken sie Grenzfälle ab? 3) Beheben sie Fehler im Code oder erwarten sie korrektes Verhalten? Kennzeichnen und verstärken Sie schwache Tests. [Tests]“
Vorlage zur Abdeckungsoptimierung: „Identifizieren Sie ungetestete Teile dieser Klasse und schlagen Sie sinnvolle Tests vor. Priorisieren Sie Pfade mit echtem Risiko, nicht nur die Anzahl der Abdeckungen. [Code]“
Häufige Fehler
- Ich teste nur das glückliche Szenario. Fehler werden in Grenzzuständen gespeichert; Bitten Sie offen darum.
- Akzeptieren eines leeren/nutzlosen Tests. Tests vom Typ „asserTrue(true)“ erweitern den Gültigkeitsbereich und bieten keinen Schutz.
- Lassen Sie die KI überprüfen, was der Code tut. Beim Testen sollte erwartet werden, was der Code tun soll. Andernfalls wird der Fehler behoben.
- Verwechselung der Scope-Nummer mit dem Zweck. Eine Abdeckung von 90 % bedeutet nicht eine Genauigkeit von 90 %.
- Verlinkung zu Text beim UI-Testen. Der Test wird unterbrochen, wenn sich der Text ändert; Verwenden Sie eine stabile Kennung (id).
- Mocks falsch einrichten. Der „Unit-Test“, der den eigentlichen Dienst aufruft, wird langsam und spröde sein.
Zusammenfassend
Tests sind das Rückgrat der mobilen Qualität, und KI ist in diesem Bereich sehr effizient, insbesondere beim Unit-Testen. Folgen Sie der Testpyramide: viele Einheiten, mittlere Integration, wenig UI-Tests. Fragen Sie die KI explizit nach dem glücklichen Szenario sowie nach Grenzfällen und Fehlerpfaden. Stellen Sie sicher, dass jeder generierte Test tatsächlich ein Verhalten validiert. Leere Tests und überhöhte Deckungssummen sind irreführend. Am wichtigsten ist es, der KI mitzuteilen, was der Code tun soll und nicht, was er tut, damit der Test den Fehler erkennt und nicht behebt.
Anwendungsaufgabe
Fordern Sie Tests von der KI mithilfe der „Unit-Test-Vorlage“ für eine Geschäftslogikfunktion (z. B. Rabattberechnung oder Formularvalidierung) an und geben Sie explizit Grenzfälle an (null, negativ, zu groß). Führen Sie die generierten Tests aus und lassen Sie dann dieselben Tests mit der „Test-Audit-Vorlage“ prüfen. Finden Sie mindestens einen schwachen Test, verstärken Sie ihn und testen Sie, ob die Tests einen tatsächlichen Fehler der Funktion erkennen (indem Sie einen kleinen Fehler hinzufügen).
Checkliste
- [ ] Ich habe die entsprechende Ebene für die Testpyramide ausgewählt (Prioritätseinheit)
- [ ] Ich wollte neben dem glücklichen Szenario auch Grenz- und Fehlerfälle
- [ ] Ich habe überprüft, dass jeder Test eine aussagekräftige Aussage enthält
- [ ] Ich habe der KI gesagt, was der Code tun soll, nicht was er tut
- [ ] Ich habe mich auf die tatsächlichen Risikopfade konzentriert, nicht auf die Anzahl der Deckungen
- [ ] Ich habe in UI-Tests eine stabile Kennung verwendet und keine Bindung an Text vorgenommen