Langkau ke kandungan
WANCODE
EN

Menguji Output AI

18 minitPertengahanHTML · CSS · JS

Dalam pelajaran ini

  • Tukar setiap keperluan dalam prompt kepada assertion
  • Kenal pasti ujian yang lemah, termasuk ujian yang sekadar mengulang kod
  • Pastikan ujian anda boleh gagal dengan menjalankannya terhadap versi yang rosak

Idea utama

Ujian ialah keperluan yang ditulis sebagai kod yang berjalan setiap kali. Tulis ujian berdasarkan apa yang kod sepatutnya buat, kemudian pastikan setiap satu benar-benar akan gagal jika kod itu salah.

Membaca kod menemui banyak bug. Ujian menemui bakinya — dan terus menemuinya setiap kali seseorang (atau sesuatu) mengubah kod kemudian. Anda tak perlukan framework untuk bermula; assertion hanyalah "input ini sepatutnya memberi output itu".

JavaScript
console.assert(slugify("Hello World") === "hello-world", "lowercases and joins words");
// Prints nothing when it passes, an "Assertion failed" error when it doesn't.

console.assert terbina dalam ialah ujian paling kecil. Dalam sandbox pelajaran ini, kegagalan dipaparkan sebagai error dalam console.

Uji spesifikasi, bukan kod

Pembantu AI juga boleh menulis ujian, dan itu berguna — tetapi bacalah. Kegagalan biasa ialah ujian yang mengira nilai jangkaannya menggunakan function yang sedang diuji, atau yang menyalin apa sahaja yang kod semasa pulangkan. Ujian begini lulus selama-lamanya, ada bug atau tidak.

Apa yang ditulis pembantu AI

JavaScript
check("slugify works",
  slugify("Hello, World!"),
  slugify("Hello, World!")); // always equal

Apa yang dihantar oleh penyemak

JavaScript
check("removes punctuation",
  slugify("Hello, World!"),
  "hello-world"); // written from the requirement

Nilai jangkaan mesti datang daripada keperluan, ditulis dengan tangan. Kalau anda tak boleh nyatakan jawapan yang betul, anda telah jumpa kekurangan dalam spesifikasi.

  • Satu ujian bagi setiap peraturan. Prompt menyenaraikan empat peraturan — huruf kecil, trim, buang tanda baca, sengkang tunggal — jadi anda perlukan sekurang-kurangnya empat ujian.
  • Pilih input yang akan mendedahkan bug. "Hello World" tak boleh beritahu sama ada trim berfungsi; " Hello " boleh.
  • Ujian yang tak boleh gagal bukan ujian. Rosakkan kod dengan sengaja (buang .trim()) dan pastikan ada ujian yang gagal. Tool pengujian memanggil ini mutation testing; anda melakukan versi manual.

Ujian mendedahkan keputusan

Cuba slugify("Café"). Kod jana AI memulangkan "caf" kerana é tiada dalam a-z. Bolehkah diterima? Ia keputusan produk yang tidak pernah dibuat dalam prompt — menulis ujian selalunya cara kita menemui soalan seperti ini.

Tambah ujian dalam runTests(fn) supaya ada sekurang-kurangnya satu ujian bagi setiap peraturan dalam prompt — sekurang-kurangnya 4 ujian kesemuanya. Setiap ujian mesti memanggil fn(...) (bukan slugify secara terus), kerana nanti kita akan jalankan ujian anda terhadap versi lain function itu.

Semua ujian anda mesti lulus terhadap slugify sebenar — jika ada yang gagal, semak sama ada nilai jangkaan anda sepadan dengan keperluan.

Semakan

  • runTests ada sekurang-kurangnya 4 ujian yang memanggil fn
  • Semua ujian lulus terhadap slugify sebenar

Uji kefahaman

Q1

Apa yang salah dengan check("works", add(2, 3), add(2, 3))?

Q2

Anda sengaja membuang .trim() daripada function dan semua ujian masih lulus. Apa maksudnya?

Apa yang anda pelajari

  • Tulis satu assertion bagi setiap keperluan, dengan nilai jangkaan ditulis dengan tangan.
  • Pilih input yang akan mendedahkan setiap bug tertentu.
  • Buktikan ujian boleh gagal: rosakkan kod dengan sengaja dan lihat ia gagal.
  • Semak ujian tulisan AI sama teliti seperti kod tulisan AI.
Pratonton

Output konsol daripada kod anda akan dipaparkan di sini.

Langkah 1 daripada 2