Saya menemukan bahwa banyak pemrograman sains komputasi saya memiliki persyaratan pengujian yang tidak dicakup oleh kerangka uji standar:
Pengujian waktu komputasi
- Untuk memastikan bahwa algoritma tidak menjadi lebih lambat. Saya bisa melakukan sesuatu seperti
assureSmallerEqual(RuntimeWrapper(algorithm),53)
tetapi saya ingin ambang 53 detik dikurangi terus menerus karena saya bekerja pada algoritma, yaitu sesuatu sepertiassureSmallerEqual(RuntimeWrapper(algorithm),'previousbest+noisetolerance')
- Untuk memastikan bahwa algoritma tidak menjadi lebih lambat. Saya bisa melakukan sesuatu seperti
Pengujian kinerja
- Untuk memastikan bahwa suatu algoritma yang sebelumnya menemukan perkiraan yang baik untuk solusi analitis masih menemukan solusi yang setidaknya sama baiknya atau lebih baik. Sekali lagi, ini bisa ditiru oleh tes integrasi standar, tetapi saya ingin toleransi menyusut terus-menerus karena algoritme menjadi lebih baik dan lebih baik. Pikirkan untuk mengganti
assureAlmostEqual(foo(),1,places=3)
denganassureAlmostEqual(foo(),1,places='previousbest')
- Untuk memastikan bahwa suatu algoritma yang sebelumnya menemukan perkiraan yang baik untuk solusi analitis masih menemukan solusi yang setidaknya sama baiknya atau lebih baik. Sekali lagi, ini bisa ditiru oleh tes integrasi standar, tetapi saya ingin toleransi menyusut terus-menerus karena algoritme menjadi lebih baik dan lebih baik. Pikirkan untuk mengganti
Pengujian persyaratan fisik
- Untuk memastikan bahwa algoritma tidak tiba-tiba membutuhkan lebih banyak ruang memori / hard disk. Sangat mirip dengan 1.
Pengujian persyaratan abstrak
- Untuk memastikan bahwa suatu algoritma yang melakukan baik dengan perkiraan kuadrat tidak tiba-tiba membutuhkan pendekatan kubik, atau suatu algoritma yang baik-baik saja dengan langkah waktu 0,1 tidak tiba-tiba membutuhkan 0,01 untuk stabilitas. Sekali lagi, ini dapat ditiru oleh tes integrasi standar, tetapi tujuannya adalah untuk mengingat apa parameter persyaratan terkecil yang mencapai tujuan tertentu, sehingga ini akan memerlukan banyak pembaruan manual. Misalnya, jika
foo(10)
sebelumnya tidak ada pengecualian, saya ingin kerangka memastikanfoo(10)
masih berfungsi dan juga coba jikafoo(9)
sekarang bekerja (dalam hal ini semua tes di masa depan akan memastikanfoo(9)
masih berfungsi).
- Untuk memastikan bahwa suatu algoritma yang melakukan baik dengan perkiraan kuadrat tidak tiba-tiba membutuhkan pendekatan kubik, atau suatu algoritma yang baik-baik saja dengan langkah waktu 0,1 tidak tiba-tiba membutuhkan 0,01 untuk stabilitas. Sekali lagi, ini dapat ditiru oleh tes integrasi standar, tetapi tujuannya adalah untuk mengingat apa parameter persyaratan terkecil yang mencapai tujuan tertentu, sehingga ini akan memerlukan banyak pembaruan manual. Misalnya, jika
Orang dapat berargumen bahwa apa yang saya minta tidak menggambarkan pengujian dalam arti pengujian unit / integrasi, karena peningkatan runtimes, misalnya, dapat diterima sebagai imbalan untuk perbaikan lainnya.
Namun dalam praktiknya, saya tahu bahwa saya akan menghemat banyak waktu debug jika saya memiliki fungsionalitas pengujian di atas, karena dalam 95% kasus persyaratan dan kinerja menjadi serba salah karena bug yang saya perkenalkan. Memang, saya tahu fakta bahwa banyak bug yang saya temukan (setelah banyak waktu terbuang untuk memeriksa kode saya sendiri) dengan pustaka perangkat lunak numerik eksternal dapat dihindari secara sepele seandainya tes di atas diterapkan dengan ketat.
PS
Pertanyaan dengan nama yang sama /programming/34982863/framework-for-regress-testing-of-numerical-code bukanlah duplikat karena menjelaskan fungsionalitas yang lebih mudah dicapai dengan kerangka pengujian regresi standar.
Pertanyaan Strategi untuk pengujian unit dan pengembangan berbasis tes meminta strategi yang bertentangan dengan kerangka kerja yang membantu mengimplementasikannya (dan strategi yang diminta / yang disediakan dalam jawaban berbeda dari apa yang saya jelaskan di sini, menurut pendapat saya).