Saya sudah memiliki sedikit pengalaman dengan pengujian unit sebelumnya, dalam apa yang saya sebut (tidak merendahkan) proyek rekayasa perangkat lunak klasik: sebuah MVC, dengan GUI pengguna, database, logika bisnis di lapisan tengah, dll. Sekarang saya ' m menulis perpustakaan komputasi ilmiah di C # (yeah, saya tahu C # terlalu lambat, gunakan C, jangan menemukan kembali roda, dan semua itu, tapi kami memiliki banyak orang melakukan perhitungan ilmiah di fakultas saya di C #, dan kami membutuhkannya). Ini adalah proyek kecil, dalam hal industri pengembangan perangkat lunak, karena saya menulis sebagian besar sendiri, dan dari waktu ke waktu dengan bantuan beberapa rekan. Juga, saya tidak dibayar untuk itu, dan yang paling penting, adalah proyek akademik. Maksud saya, saya berharap ini memiliki kualitas profesional suatu hari nanti, karena saya berencana untuk open source,
Bagaimanapun, proyek ini semakin besar (sekitar 18.000 baris kode, yang saya pikir besar untuk proyek satu orang), dan keluar dari tangan saya. Saya menggunakan git untuk kontrol sumber, dan saya pikir saya sudah cukup baik-baik saja, tapi saya menguji seperti jadul, maksud saya, menulis aplikasi konsol penuh yang menguji sebagian besar sistem, terutama karena saya tidak tahu caranya untuk melakukan pengujian unit dalam skenario ini, meskipun saya merasa itulah yang harus saya lakukan. Masalahnya adalah bahwa perpustakaan sebagian besar berisi algoritma, misalnya, algoritma grafik, pengklasifikasi, pemecah angka, distribusi acak, dll. Saya hanya tidak tahu bagaimana menentukan kasus uji kecil untuk masing-masing algoritma ini, dan karena banyak dari mereka adalah stochastic Saya tidak tahu bagaimana memvalidasi kebenaran. Untuk klasifikasi, misalnya, adalah beberapa metrik seperti presisi dan penarikan, tetapi metrik ini lebih baik untuk membandingkan dua algoritma daripada menilai algoritma tunggal. Jadi, bagaimana saya bisa mendefinisikan kebenaran di sini?
Akhirnya ada juga masalah kinerja. Saya tahu ini adalah serangkaian tes yang berbeda, tetapi kinerja adalah salah satu fitur penting dari alat ilmiah, daripada kepuasan pengguna, atau metrik rekayasa perangkat lunak lainnya.
Salah satu masalah terbesar saya adalah dengan struktur data. Satu-satunya tes yang dapat saya lakukan untuk kd-tree adalah tes stres: memasukkan banyak vektor acak dan kemudian melakukan banyak pertanyaan acak, dan membandingkannya dengan pencarian linear yang naif. Sama untuk kinerja. Dan dengan pengoptimal numerik, saya memiliki fungsi tolok ukur yang dapat saya uji, tetapi sekali lagi, ini adalah tes stres. Saya tidak berpikir tes ini dapat digolongkan sebagai unit test, dan yang paling penting, berjalan terus menerus, karena kebanyakan dari mereka agak berat. Tapi saya juga berpikir bahwa tes ini perlu dilakukan, saya tidak bisa hanya memasukkan dua elemen, pop root, dan ya, itu berfungsi untuk case 0-1-n.
Jadi, apa, jika ada, pendekatan pengujian (unit) untuk perangkat lunak semacam ini? Dan bagaimana cara mengatur tes unit dan yang berat di sekitar siklus code-build-commit-integr?