1 poin oleh GN⁺ 2024-07-06 | 1 komentar | Bagikan ke WhatsApp
  • Pengujian berbasis properti adalah contoh langka riset akademis yang berhasil menjadi arus utama dalam waktu kurang dari 30 tahun.
  • Di bawah slogan "jangan menulis pengujian, tetapi hasilkanlah pengujian", pendekatan ini mendapat dukungan dari berbagai komunitas bahasa pemrograman.
  • Halaman Wikipedia untuk QuickCheck, yang awalnya merupakan library Haskell, mencantumkan 57 implementasi ulang dalam bahasa lain.

Survei library pengujian berbasis properti

  • Meneliti library pengujian berbasis properti yang saat ini paling banyak digunakan dan membandingkannya dengan teknologi tercanggih 15 tahun lalu (2009).
  • Sebagian besar library tidak menyediakan fitur pengujian berbasis properti yang paling maju.

Mengapa library pengujian berbasis properti berada dalam keadaan yang menyedihkan ini?

Pengujian berbasis state dan paralel tidak seberguna pengujian murni

  • Pemodelan berbasis state memerlukan pelatihan.
  • Ada klaim bahwa closed source membantu adopsi di industri.

Pemodelan berbasis state memerlukan pelatihan

  • Pengujian berbasis state dan paralel menuntut cara berpikir yang berbeda dari pengujian pada umumnya.
  • Saat memberikan alat-alat ini kepada pengguna baru, diperlukan pelatihan yang memadai.

Ada klaim bahwa closed source membantu adopsi di industri

  • Ada argumen bahwa open source tidak berhasil, dan bahwa produk closed source beserta layanan terkait membantu adopsi.

Apa yang bisa kita lakukan

  • Menyediakan implementasi open source yang ringkas untuk pengujian berbasis properti yang berbasis state dan paralel.
  • Membuat bagian spesifikasi formal lebih mudah agar kebutuhan pelatihan pengembang berkurang.

Ringkasan pengujian berbasis properti murni

  • Menguji fungsi atau fitur baru dianggap sebagai praktik yang baik.
  • Misalnya, jika menulis fungsi reverse untuk membalik linked list, masuk akal untuk mengujinya pada beberapa list seperti list kosong.
  • Menghasilkan input acak adalah fitur utama pengujian berbasis properti.
  • Gagasannya adalah bahwa input acak pada akhirnya akan menemukan corner case.

Pengujian properti berbasis state

  • Saat menguji komponen berbasis state, input yang sama tidak selalu menghasilkan output yang sama.
  • Dalam pengujian berbasis state, urutan input dihasilkan untuk menguji bagaimana sistem berubah seiring waktu.
  • State dijelaskan secara eksplisit menggunakan implementasi referensi di memori (model).

Contoh: counter

  • Mengimplementasikan counter menggunakan variabel global yang dapat diubah.
  • Model direpresentasikan sebagai bilangan bulat.
  • Pengujian menghasilkan dan menjalankan urutan perintah, lalu membandingkan output aktual dengan output model.

Pengujian properti paralel

  • Pengujian paralel menggunakan kembali model pengujian berbasis state untuk mendeteksi race condition.
  • Pengujian paralel menjalankan pengujian paralel melalui linearizability dengan menggunakan model state machine sekuensial.

Kesimpulan dan pekerjaan selanjutnya

  • Untuk memperbaiki kondisi pengujian berbasis properti, perlu menyediakan implementasi open source dan membuat spesifikasi formal lebih mudah.

Opini GN⁺

  • Tulisan ini menjelaskan dengan baik sejarah dan kondisi terkini pengujian berbasis properti.
  • Tulisan ini menekankan pentingnya pengujian berbasis state dan paralel, serta mengangkat kebutuhan akan implementasi open source.
  • Tulisan ini mengusulkan cara untuk membuat pengujian berbasis properti lebih mudah diakses.
  • Proyek lain dengan fungsi serupa antara lain Hypothesis (Python) dan PropEr (Erlang).
  • Tulisan ini menekankan bahwa pelatihan dan dukungan diperlukan saat mengadopsi teknologi baru atau open source.

1 komentar

 
GN⁺ 2024-07-06
Opini Hacker News
  • Pengalaman menggunakan clojure.spec.alpha dan test.check cukup baik
    • hypothesis di Python dihentikan pemakaiannya karena tidak bisa menangani set data besar
  • Fuzzing berbasis coverage di bahasa Go didukung dengan baik
    • Melalui pengujian fuzzing dan pemeriksaan invarian, hasil yang mirip dengan property testing bisa diperoleh
  • Tuntutan bahwa makalah riset harus dapat direproduksi dengan alat open source bisa membuat informasi yang berguna hilang
  • Sering menulis property testing berbasis state dengan proptest di Rust
    • Pengujian paralel kadang berguna, tetapi bisa jadi lebih mudah menjalankan beberapa pengujian secara paralel
  • Sudah membaca makalah Quviq QuickCheck, tetapi menulis pengujian berbasis state secara langsung mungkin lebih baik
    • StateModel memerlukan kode framework tambahan sehingga kurang efisien
  • Selain aspek state machine dan paralel, property testing berbasis coverage bisa memberi dampak yang lebih besar
    • Penting untuk mempertahankan semua invarian saat menghasilkan nilai sambil tetap menjaga fitur penyusutan otomatis
    • Pendekatan "penyusutan internal" milik Hypothesis adalah yang paling efektif
  • Clojure juga memiliki library QuickCheck berbasis state
    • Pengujian paralel masih belum menjadi masalah besar
  • Untuk property-based testing, jika memungkinkan menulis pengujian yang ketat, lebih baik diintegrasikan ke sistem tipe
    • "Smoke test" sederhana lebih mudah dilakukan dengan input acak
  • Ada juga QuickCheck Mini, versi gratis dari QuviQ Erlang QuickCheck
  • Penasaran apakah di JavaScript ada library property-based testing yang bisa menghasilkan nilai acak yang tidak memenuhi kondisi tertentu