Baru-baru ini, saya telah mendorong grup saya untuk memasukkan lebih banyak pengujian saat menulis kode mereka. Ada beberapa bug utama yang membutuhkan waktu lebih lama untuk ditangkap daripada yang mungkin diperlukan, karena kami tidak memiliki rezim pengujian yang baik.
Namun, saya menduga bahwa memiliki alat yang tepat untuk mengotomatisasi (atau membantu merampingkan) proses, tentu akan bermanfaat. Di sisi lain, saya tidak tahu berbagai opsi untuk suite pengujian C ++, dan bagaimana memutuskan di antara mereka?
Apakah ada pedoman untuk apa yang harus dicari — dan apakah ada yang secara khusus diarahkan pada aplikasi numerik?
Saya baru-baru ini menggunakan googletest untuk menguji beberapa perpustakaan numerik yang saya kerjakan, dan sangat senang dengannya. Anda dapat menulis tes yang cukup sederhana dengan sangat cepat atau Anda dapat menulis tes rumit yang memerlukan inisialisasi data dan sebagainya. Ini juga menyediakan (seperti saya yakin banyak orang lain) cara untuk dengan mudah melakukan perbandingan floating point daripada bitwise.
sumber
Jika Anda membuat kode dengan CMake, mekanisme ctest akan menjadi pilihan yang jelas. Ini memungkinkan Anda untuk menguji kode Anda secara manual melalui perintah
ctest
, dan juga mendukung pengujian malam yang luas melalui CDash .sumber
Untuk pustaka biologi C ++ komputasi kami ( Chaste ) kami menggunakan http://cxxtest.com/ . Ini cukup mudah digunakan, berfungsi dengan baik, ia menyediakan beberapa makro untuk pengujian dengan
assert()
pernyataan gaya. Untuk komputasi ilmiah ini umumnya perbandingan langsung denganTS_ASSERT_EQUALS(a,b)
atau perbandingan numerikTS_ASSERT_DELTA(a,b,tolerance)
.Makro tambahan dapat dengan mudah ditulis menggunakan yang dasar ini untuk membandingkan vektor / matriks pilihan Anda sendiri juga. Berguna, Anda juga dapat memeriksa bahwa kode Anda memberikan peringatan dan pesan kesalahan yang sesuai dalam situasi tertentu. Anda dapat menelusuri beberapa contoh di
test
folder kode sumber kami di sini: https://chaste.cs.ox.ac.uk/trac/browser/trunksumber