- 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
Opini Hacker News
clojure.spec.alphadantest.checkcukup baikhypothesisdi Python dihentikan pemakaiannya karena tidak bisa menangani set data besarproptestdi RustStateModelmemerlukan kode framework tambahan sehingga kurang efisien