Heim  >  Artikel  >  Web-Frontend  >  Unit-Test-Generierung mit früher KI

Unit-Test-Generierung mit früher KI

Linda Hamilton
Linda HamiltonOriginal
2024-10-20 18:32:30355Durchsuche

Beschleunigen Sie die Generierung von Unit-Tests und verbessern Sie die Codequalität

Kürzlich hatte ich die Gelegenheit, tief in Early einzutauchen, einen KI-Agenten, der für die automatische Generierung von Unit-Tests entwickelt wurde. Als jemand, der regelmäßig mit TypeScript und ExpressoTS Framework arbeitet, war ich gespannt, wie Early meinen Arbeitsablauf optimieren kann. Ich beschloss, die vscode-Erweiterung zu testen, die sie auf meiner neuen NPM-Bibliothek namens @expressots/share erstellt hatten, die ich gerade entwickelte.

Erste Eindrücke

Das erste, was mir an Early auffiel, war die Fähigkeit, automatisch Unit-Tests für meine vorhandene Codebasis zu generieren. Anstatt Tests von Grund auf neu zu erstellen, könnte ich mich auf die Verfeinerung der generierten Tests und die Verbesserung der Robustheit und Testbarkeit meines Codes konzentrieren. Dieser Wandel hat meinen Entwicklungsprozess deutlich beschleunigt. Der andere interessante Aspekt, der mir aufgefallen ist, ist, dass ich bei 83 % des generierten Codes keine Anpassungen vorgenommen habe, er sofort funktionierte und meine Codeabdeckung erhöhte. Sparen Sie mir eine Menge Zeit.

Zeitersparnis und erhöhte Abdeckung

In nur 8,5 Stunden habe ich Folgendes geschafft:

  • Generieren Sie Komponententests für etwa 3.000 Codezeilen.
  • Beheben Sie Probleme und verbessern Sie die Testbarkeit des Codes.
  • Erreichen Sie mit 96 Tests eine Gesamtcodeabdeckung von 88 %.

Die Tatsache, dass ich das alles an einem einzigen Tag schaffen konnte, war bemerkenswert. Das ideale Szenario für einen Unit-Test besteht darin, ihn durchzuführen, während Sie Ihre Funktionen tatsächlich entwickeln. Dies habe ich getan, nachdem ich bereits über eine Bibliothek verfügte, sodass einige Anpassungen erforderlich waren, um den Code testbar zu machen.

Positive Ergebnisse

Automatische Generierung von Edge-Case-Tests. Beispielsweise wurden Komponententests für Szenarien mit leeren Zeichenfolgen generiert, selbst wenn Parameter erforderlich waren:

export function printSuccess(message: string, component: string): void {
  stdout.write(chalk.green(`${message}:`, chalk.bold(chalk.white(`[${component}] ✔️\n`))));
}

Anfangs hätte ich in einer so einfachen Funktion keine Tests für leere Zeichenfolgen erstellt. Allerdings förderte Earlys Ansatz defensive Programmierpraktiken und zwang mich dazu, Randfälle zu behandeln, die ich vielleicht übersehen hätte.

Erkennung potenzieller Probleme

Beim Verfeinern der generierten Tests bin ich auf ein Problem mit der Typinkongruenz gestoßen:

Problem: jest.fn() gibt „any“ zurück, aber „process.exit“ gibt „never“ zurück, was zu einer Typinkongruenz in TypeScript führt.
Lösung: Ändern Sie den Mock so, dass er mit der Process.exit-Signatur übereinstimmt, um sicherzustellen, dass der Typ korrekt ist.
Diese Entdeckung veranlasste mich, meinen Code für eine bessere Typsicherheit anzupassen und hervorzuheben, wie Early dabei helfen kann, subtile Probleme zu erkennen, die andernfalls möglicherweise unbemerkt bleiben würden.

Bereiche mit Verbesserungspotenzial

Trotz der insgesamt positiven Erfahrung bin ich auf einige Herausforderungen gestoßen, die, wenn sie angegangen werden, die Benutzerfreundlichkeit von Early verbessern könnten:

  • Kompatibilität der Bibliotheksversionen. Frühe generierte Tests, die in einigen Fällen veraltete Jest-Methoden verwenden, zum Beispiel:

Verwenden von Jest 29.7

expect(Compiler.loadConfig()).rejects.toThrowError("process.exit() was called with code 1");

// Korrigierte Version

export function printSuccess(message: string, component: string): void {
  stdout.write(chalk.green(`${message}:`, chalk.bold(chalk.white(`[${component}] ✔️\n`))));
}
  • Anpassungsoptionen für die Testgenerierung Während das Generieren von Tests für Randfälle von Vorteil war, ist es in manchen Szenarien möglicherweise nicht notwendig:

Beobachtung: Das Generieren von Tests für jede mögliche Eingabe, einschließlich leerer Zeichenfolgen, kann manchmal übertrieben sein.

Vorschlag: Führen Sie Optionen ein, um den Grad der Testgenerierung anzupassen, sodass Entwickler sich bei Bedarf für defensive Programmiertests entscheiden können.

  • Verbesserungen der Benutzeroberfläche in der VSCODE-Erweiterung Beim Navigieren zwischen Early und anderen Tools wurden einige Einschränkungen der Benutzeroberfläche deutlich:

Sichtbarkeit der Testergebnisse: Ich musste zwischen Early und Jest wechseln, um zu sehen, welche Tests bestanden oder nicht bestanden wurden.

Dateibaumstatus: Die Projekthierarchie in Early bricht zusammen, wenn ich von anderen Anwendungen zurückwechsele, sodass ich Ordner wiederholt neu öffnen muss.
Vorschlag: Verbessern Sie die Benutzeroberfläche, um Testergebnisse in Early anzuzeigen und die Struktur von Jest widerzuspiegeln. Die Beibehaltung des Status des Dateibaums würde auch die Benutzererfahrung verbessern.

Unit Test Generation with Early AI

  • Verspottung und Typensicherheit Das Problem, dass jest.fn() „any“ zurückgibt, legt die Notwendigkeit einer präziseren Verspottung nahe:

Beobachtung: Die Verwendung beliebiger Typen in Mocks kann zu Typkonflikten und möglicherweise zu Maskierungsfehlern führen.
Vorschlag: Verfeinern Sie die Mock-Generierung, um genaue Signaturen zu verwenden, um eine bessere Typsicherheit zu fördern und den Bedarf an manuellen Korrekturen zu reduzieren.

Abschluss

Alles in allem war meine Erfahrung mit Early äußerst positiv. Das Tool hat meinen Unit-Testing-Prozess erheblich beschleunigt, sodass ich mich auf die Verfeinerung der Tests konzentrieren kann, anstatt sie von Grund auf neu zu schreiben. Es hat mich auch dazu ermutigt, Randfälle in Betracht zu ziehen und die Robustheit meines Codes zu verbessern.

Die Bereiche mit Verbesserungsbedarf sind relativ gering und drehen sich um die Verbesserung der Benutzerfreundlichkeit und Anpassung. Die Behebung dieser Probleme würde das Tool zu einem noch leistungsfähigeren Verbündeten in der Softwareentwicklung machen.

Ein großes Lob an das Early-Team für ihre hervorragende Arbeit! Ich bin gespannt, wie sich das Tool weiterentwickelt und gebe gerne weiterhin Feedback, um es weiter zu verfeinern.

Das obige ist der detaillierte Inhalt vonUnit-Test-Generierung mit früher KI. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn