Saya sedang mengerjakan pembanding daftar untuk membantu menyortir daftar hasil pencarian yang tidak teratur per persyaratan yang sangat spesifik dari klien kami. Persyaratan membutuhkan algoritme relevansi yang diperingkat dengan aturan berikut sesuai kepentingan:
- Pencocokan tepat pada nama
- Semua kata permintaan pencarian dalam nama atau sinonim dari hasil
- Beberapa kata permintaan pencarian dalam nama atau sinonim dari hasil (% menurun)
- Semua kata dari permintaan pencarian dalam deskripsi
- Beberapa kata dari permintaan pencarian dalam deskripsi (% menurun)
- Tanggal modifikasi terakhir turun
Pilihan desain alami untuk pembanding ini tampaknya adalah peringkat skor berdasarkan kekuatan 2. Jumlah aturan yang kurang penting tidak akan pernah lebih dari kecocokan positif pada aturan kepentingan yang lebih tinggi. Ini dicapai dengan skor berikut:
- 32
- 16
- 8 (skor tie-breaker sekunder berdasarkan% menurun)
- 4
- 2 (skor tie-breaker sekunder berdasarkan% menurun)
- 1
Dalam semangat TDD saya memutuskan untuk memulai dengan unit test saya terlebih dahulu. Untuk memiliki test case untuk setiap skenario yang unik akan ada setidaknya 63 case test unik yang tidak mempertimbangkan test case tambahan untuk logika tie breaker sekunder pada aturan 3 dan 5. Ini sepertinya sombong.
Namun, tes yang sebenarnya akan lebih sedikit. Berdasarkan aturan aktual itu sendiri, aturan tertentu memastikan bahwa aturan yang lebih rendah akan selalu benar (Misalnya. Ketika 'Semua kata Permintaan Pencarian muncul dalam deskripsi' maka aturan 'Beberapa kata Permintaan Pencarian muncul dalam deskripsi' akan selalu benar). Masih apakah tingkat upaya dalam menulis setiap kasus uji ini sepadan? Apakah ini tingkat pengujian yang biasanya diperlukan ketika berbicara tentang cakupan pengujian 100% dalam TDD? Jika tidak maka apa yang akan menjadi strategi pengujian alternatif yang dapat diterima?