TL; DR
Menulis tes yang baik dan bermanfaat sulit, dan memiliki biaya tinggi dalam C ++. Dapatkan Anda pengembang yang berpengalaman membagikan alasan Anda tentang apa dan kapan menguji?
Cerita panjang
Saya biasa melakukan pengembangan yang digerakkan oleh tes, seluruh tim saya sebenarnya, tetapi itu tidak berhasil bagi kami. Kami memiliki banyak tes, tetapi tampaknya tidak pernah mencakup kasus di mana kami memiliki bug dan regresi sebenarnya - yang biasanya terjadi ketika unit berinteraksi, bukan dari perilaku mereka yang terisolasi.
Hal ini seringkali sangat sulit untuk diuji pada tingkat unit sehingga kami berhenti melakukan TDD (kecuali untuk komponen yang benar-benar mempercepat pengembangan), dan sebagai gantinya menginvestasikan lebih banyak waktu untuk meningkatkan cakupan uji integrasi. Sementara tes unit kecil tidak pernah menangkap bug nyata dan pada dasarnya hanya pemeliharaan overhead, tes integrasi benar-benar sepadan dengan usaha.
Sekarang saya telah mewarisi proyek baru, dan saya bertanya-tanya bagaimana cara mengujinya. Ini adalah aplikasi C ++ / OpenGL asli, jadi tes integrasi sebenarnya bukan pilihan. Tetapi pengujian unit dalam C ++ sedikit lebih sulit daripada di Jawa (Anda harus membuat barang secara eksplisit virtual
), dan program ini tidak terlalu berorientasi objek, jadi saya tidak bisa mengejek / mematikan beberapa hal.
Saya tidak ingin mencabik-cabik dan OO-ize semuanya hanya untuk menulis beberapa tes demi tes menulis. Jadi saya bertanya kepada Anda: Untuk apa saya harus menulis tes? misalnya:
- Fungsi / Kelas yang saya harapkan akan sering berubah?
- Fungsi / Kelas yang lebih sulit untuk diuji secara manual?
- Fungsi / Kelas yang sudah mudah diuji?
Saya mulai menyelidiki beberapa basis kode C ++ yang terhormat untuk melihat bagaimana mereka melakukan pengujian. Saat ini saya sedang mencari kode sumber Chromium, tetapi saya merasa sulit untuk mengekstrak alasan pengujian dari kode tersebut. Jika ada yang punya contoh atau posting yang baik tentang seberapa populer pengguna C ++ (orang-orang dari komite, penulis buku, Google, Facebook, Microsoft, ...) mendekati ini, itu akan sangat membantu.
Memperbarui
Saya telah mencari di situs ini dan di web sejak menulis ini. Menemukan beberapa barang bagus:
- Kapan tepat untuk tidak menguji unit?
- /programming/109432/what-not-to-test-when-it-comes-to-unit-testing
- http://junit.sourceforge.net/doc/faq/faq.htm#best
Sayangnya, semua ini agak Java / C # centric. Menulis banyak tes di Java / C # bukan masalah besar, jadi manfaatnya biasanya melebihi biaya.
Tapi seperti yang saya tulis di atas, lebih sulit di C ++. Terutama jika basis kode Anda tidak begitu-OO, Anda harus mengacaukan segalanya untuk mendapatkan cakupan tes unit yang baik. Sebagai contoh: Aplikasi yang saya warisi memiliki Graphics
ruang nama yang merupakan lapisan tipis di atas OpenGL. Untuk menguji entitas mana pun - yang semuanya menggunakan fungsinya secara langsung - saya harus mengubahnya menjadi antarmuka dan kelas dan menyuntikkannya ke semua entitas. Itu hanya satu contoh.
Jadi ketika menjawab pertanyaan ini, harap diingat bahwa saya harus melakukan investasi yang agak besar untuk tes menulis.