Dalam dunia komputasi numerik, memastikan akurasi dan keandalan library matematika menghadirkan tantangan unik yang melampaui pendekatan pengujian perangkat lunak tradisional. Diskusi terkini di antara para profesional industri telah mengungkapkan wawasan penting tentang pengujian rutin numerik, khususnya dalam lingkungan komputasi kinerja tinggi dan library matematika khusus.
Tantangan Presisi Floating-Point
Salah satu tantangan terbesar dalam pengujian numerik adalah menangani presisi floating-point. Para ahli industri mencatat bahwa penggunaan nilai toleransi tetap seperti 1e-6 bisa menjadi problematik. Seperti yang disoroti dalam diskusi komunitas, kesalahan relatif daripada kesalahan absolut seharusnya menjadi pendekatan standar untuk matematika floating-point, meskipun ini juga memiliki keterbatasannya.
Namun kesalahan relatif juga bukan solusi sempurna. Jika saya menghitung 1 + 1e9, maka menghasilkan 1e9 - 1 akan dengan mudah masuk dalam batas kesalahan relatif 1e-6. Secara lebih umum, kesalahan relatif hanya berfungsi jika perhitungan Anda berskala multiplikatif dari nol.
Masalah Mengejutkan pada Library Vendor
Temuan yang patut dicatat dari komunitas adalah penemuan berbagai bug dalam library matematika yang disediakan vendor. Para insinyur yang bekerja dengan Kokkos Kernels telah menemukan masalah di library utama termasuk OpenBLAS, MKL, cuSparse, dan rocSparse. Ini menekankan pentingnya pengujian menyeluruh bahkan ketika menggunakan solusi vendor yang sudah mapan.
Kasus Khusus dan Matriks Sederhana
Pengujian dengan kasus khusus terbukti menjadi salah satu strategi paling efektif. Para profesional merekomendasikan pengujian dengan matriks berdimensi {0,1,2,3,4} dan nilai-nilai khusus seperti NaN, +0, -0, +1, -1, +Inf, -Inf. Kasus-kasus sederhana ini sering mengungkap masalah kritis yang mungkin terlewatkan oleh kasus uji yang lebih kompleks.
Pendekatan Pengujian Utama untuk Pustaka Numerik:
- Pengujian kasus batas dengan matriks berdimensi {0,1,2,3,4}
- Pengujian nilai khusus: NaN, +0, -0, +1, -1, +Inf, -Inf
- Pengujian berbasis properti dengan input acak
- Pengujian fungsi invers (verifikasi pulang-pergi)
- Pengujian terhadap solusi analitis yang telah diketahui
Masalah Kompatibilitas Versi
Masalah kritis yang diangkat oleh komunitas melibatkan kompatibilitas antar versi dalam library numerik. Banyak library numerik Python mengubah representasi internal dan algoritma mereka antar versi, yang berpotensi menghasilkan hasil yang sedikit berbeda. Ini dapat memiliki implikasi serius untuk industri seperti keuangan di mana reproduktibilitas sangat penting.
Pertimbangan Tingkat Perangkat Keras
Komunitas telah menyoroti bahwa bahkan di tingkat perangkat keras, operasi floating-point dapat bervariasi. Prosesor x64 modern dapat melakukan operasi floating-point menggunakan register SSE (64-bit IEEE) atau instruksi x87 (presisi diperluas 80-bit), yang berpotensi menghasilkan hasil berbeda tergantung pada pengaturan kompiler dan kemampuan perangkat keras.
Sebagai kesimpulan, pengujian rutin numerik membutuhkan pendekatan multi-aspek yang menggabungkan pengujian unit tradisional dengan teknik khusus untuk menangani aritmatika floating-point. Pengalaman komunitas menunjukkan bahwa strategi pengujian yang komprehensif harus mencakup kasus khusus, pengujian berbasis properti, dan pertimbangan cermat terhadap masalah kompatibilitas perangkat keras dan versi.
Sumber Kutipan: Unit Testing Numerical Routines