Saya ingin bertanya kepada kalian, dalam hal ini masuk akal untuk menguji unit kode fungsional yang diketik secara statis, seperti yang ditulis dalam haskell, scala, ocaml, nemerle, f # atau haXe (yang terakhir adalah apa yang saya benar-benar tertarik, tetapi saya ingin memanfaatkan pengetahuan komunitas yang lebih besar).
Saya menanyakan ini karena dari pengertian saya:
Salah satu aspek dari unit test adalah memiliki spesifikasi dalam bentuk runnable. Namun ketika menggunakan gaya deklaratif, yang secara langsung memetakan spesifikasi yang diformalkan ke semantik bahasa, apakah bahkan mungkin untuk mengekspresikan spesifikasi dalam bentuk runnable secara terpisah, yang menambah nilai?
Aspek yang lebih jelas dari unit test adalah untuk melacak kesalahan yang tidak dapat diungkapkan melalui analisis statis. Mengingat bahwa jenis kode fungsional aman adalah alat yang baik untuk mengkodekan sangat dekat dengan apa yang dipahami oleh penganalisa statis Anda, tampaknya Anda dapat mengubah banyak keamanan ke arah analisis statis. Namun kesalahan sederhana seperti menggunakan
x
alih-alihy
(keduanya merupakan koordinat) dalam kode Anda tidak dapat dibahas. OTOH kesalahan seperti itu juga bisa muncul saat menulis kode tes, jadi saya tidak yakin apakah itu sepadan dengan usaha.Tes unit memang memperkenalkan redundansi, yang berarti bahwa ketika persyaratan berubah, kode yang mengimplementasikannya dan tes yang mencakup kode ini harus diubah. Overhead ini tentu saja konstan, jadi orang bisa berargumen bahwa itu tidak masalah. Faktanya, dalam bahasa seperti Ruby, itu benar-benar tidak sebanding dengan manfaatnya, tetapi mengingat bagaimana pemrograman fungsional yang diketik secara statis mencakup banyak tes unit darat yang dimaksudkan, rasanya seperti overhead konstan yang dapat dengan mudah dikurangi tanpa penalti.
Dari sini saya menyimpulkan bahwa tes unit agak usang dalam gaya pemrograman ini. Tentu saja klaim semacam itu hanya dapat menyebabkan perang agama, jadi izinkan saya meringkasnya menjadi pertanyaan sederhana:
Ketika Anda menggunakan gaya pemrograman seperti itu, sampai sejauh mana Anda menggunakan tes unit dan mengapa (kualitas apa yang ingin Anda peroleh untuk kode Anda)? Atau sebaliknya: apakah Anda memiliki kriteria di mana Anda dapat memenuhi syarat satu unit kode fungsional yang diketik secara statis sebagaimana dicakup oleh penganalisa statis dan karenanya tanpa perlu cakupan uji unit?