Laporan cakupan kode terpisah untuk unit dan tes integrasi, atau satu laporan untuk keduanya?

10

Haruskah ada laporan cakupan kode terpisah untuk unit dan tes integrasi, atau satu laporan cakupan kode untuk keduanya?

Pemikiran di balik ini adalah bahwa cakupan kode memungkinkan kami untuk memastikan bahwa kode kami telah dicakup oleh pengujian sejauh mungkin (sebanyak mesin sekarang dapat tetap).

Memiliki laporan terpisah lebih mudah bagi kita untuk mengetahui apa yang belum dicakup oleh tes unit, dan apa yang belum dicakup oleh tes integrasi. Tetapi dengan cara ini kita tidak dapat melihat persentase cakupan total.

Marios
sumber
1
Saya akan montok untuk terpisah. Saya tidak berpikir itu cukup untuk mengatakan "kode itu telah diuji" tanpa mengetahui bagaimana itu diuji. Uji unit & uji Integrasi menggunakan kode yang sama, tetapi dengan cara yang berbeda, misalnya uji unit mungkin menggunakan nilai kasus tepi sementara integrasi menggunakan nilai tengah jalan ("realistis"). Kode yang sama, pengujian yang sangat berbeda.
Mawg mengatakan mengembalikan Monica
Kami menyimpan tes unit dan tes integrasi di perpustakaan terpisah untuk alasan ini.
Robbie Dee
Itu tergantung pada kebutuhan pelanggan.
mouviciel

Jawaban:

12

Di atas segalanya, Anda perlu memiliki dan menganalisis cakupan gabungan (total). Jika Anda memikirkannya, ini adalah cara paling alami untuk memprioritaskan risiko Anda dengan tepat dan memfokuskan upaya pengembangan pengujian Anda.

Cakupan gabungan menunjukkan kepada Anda kode apa yang tidak tercakup oleh tes sama sekali , yaitu yang paling berisiko dan perlu diselidiki terlebih dahulu. Laporan cakupan yang terpisah tidak akan membantu di sini, karena ini tidak memungkinkan Anda mengetahui apakah kode tersebut diuji dengan cara lain atau tidak diuji sama sekali.


Analisis cakupan yang terpisah juga dapat bermanfaat, tetapi akan lebih baik dilakukan setelah Anda selesai dengan analisis gabungan dan lebih disukai juga akan melibatkan hasil analisis cakupan gabungan.

Tujuan analisis cakupan berbeda dari yang digabungkan. Analisis cakupan yang terpisah membantu meningkatkan desain rangkaian pengujian Anda, berbeda dengan analisis cakupan gabungan yang dimaksudkan untuk memutuskan pengujian yang akan dikembangkan, apa pun yang terjadi.

"Oh, celah ini tidak tercakup hanya karena kami lupa menambahkan uji unit (integrasi) sederhana ke dalam unit unit (integrasi) kami, mari kita tambahkan itu" - cakupan dan analisis terpisah sangat berguna di sini, karena gabungan satu dapat menyembunyikan kesenjangan yang ingin Anda bahas dalam suite tertentu.

Dari perspektif di atas, masih diinginkan juga untuk memiliki hasil analisis cakupan gabungan untuk menganalisis kasus yang lebih rumit. Pikirkan itu, dengan hasil ini, keputusan pengembangan tes Anda bisa lebih efisien karena memiliki informasi tentang suite tes "mitra".

"Ada celah di sini, tetapi mengembangkan tes unit (integrasi) untuk menutupnya akan sangat merepotkan, apa saja pilihan kita? Mari kita periksa cakupan gabungan ... oh itu sudah dibahas di tempat lain, yaitu, meliputnya di suite kami bukan t sangat penting. "

agas
sumber
5

Anda tidak menyebutkan alat pengujian Anda. Banyak yang memiliki fungsi "menggabungkan" yang memungkinkan Anda mengagregasi hasil dari beberapa proses atau suite. Jika Anda ingin metrik cakupan agregat, jelajahi fitur menggabungkan di alat cakupan Anda.


Sekarang, bisakah kita bicara tentang gajah di ruangan itu?

Tidak ada sendok. Dan tidak ada "persentase cakupan total." Setidaknya, tidak ada yang sederhana.

Persentase cakupan adalah metrik yang siap dipahami yang disajikan untuk membantu memahami ruang lingkup, kedalaman, dan rentang suite pengujian. Tetapi seperti tolok ukur sederhana lainnya, sangat mudah untuk menjadi target yang terpaku pada nilai ini sebagai semacam jimat ajaib "pengujian lengkap."

Katakanlah Anda telah mencapai kemuliaan "cakupan uji 100%." Yay! Tapi apa artinya itu? 100% dari baris kode diuji, kan? Lalu bagaimana dengan garis ini?

launch_missile = launch_authorized and launch_cmd_given else previous_launch_status

"Menutupi" garis itu berarti sesuatu - tetapi tidak banyak, karena ada berbagai kondisi yang Trueatau Falsedengan beberapa kemungkinan, tetapi tidak mungkin bahwa Anda telah menguji semua kombinasi kondisi tersebut. Sekalipun garis itu tertutupi belasan kali, jika salah satu kondisinya relatif tidak umum, Anda belum mendekati untuk menguji semua hasil nyata yang mungkin terjadi dalam praktik. Untuk membuatnya lebih jelas, contoh yang lebih sintetis:

engage_laser = (laser_armed and safety_disengaged) or random.random() < 0.0000003

Berapa kali Anda harus menutup garis itu untuk benar-benar mengujinya? Berapa kali Anda harus menutupinya untuk mengujinya dalam kombinasi dengan semua variabel lain dalam program (dengan probabilitas mereka sendiri, yang mungkin sangat jarang terjadi)?

Saya tidak mengatakan bahwa metrik cakupan tidak berguna. Mereka sebenarnya hebat . Mereka fokus pada salah satu masalah utama: Seberapa luas sistem perangkat lunak saya diuji? Mereka membantu beralih dari "kami memiliki beberapa tes" ke "kami telah diuji secara menyeluruh."

Tetapi saat Anda mengerjakan "skor gabungan," kenyataannya adalah skor Anda biasanya untuk "cakupan pernyataan" dan bukan "kondisi," "cakupan predikat," atau "jalur" . Jadi berapapun jumlah skor agregat Anda berikan kepada Anda, kecil kemungkinan bahwa angka itu memberi Anda gambaran nyata tentang seberapa banyak status potensial program Anda dan kombinasi status yang sedang diuji. Saat Anda sedang berupaya meningkatkan persentase cakupan Anda, pertimbangkan juga untuk mengukur cakupan predikat Anda. Ini akan memberi Anda pandangan yang lebih realistis - dan hampir selalu, lebih serius - tentang uji kepanjangan dari tes.

Jonathan Eunice
sumber
Jenis metrik cakupan yang digunakan tampaknya sepenuhnya ortogonal terhadap pertanyaan, metrik apa pun dapat dihitung untuk uji unit atau uji integrasi atau keduanya
jk.
Tentu. Dengan cara yang sama Anda dapat menghitung "mil per galon" (bahan bakar yang dikonsumsi) terlepas dari, dan ortogonal, jenis kendaraan yang digunakan. Saya berpendapat bahwa menggabungkan hasil dari roket pendorong angkat berat, truk jarak jauh, dan mobil ekonomi memberikan combo-metrik yang menyesatkan. Saya membayangkan Anda masih bisa menggunakan angka "melintasi armada" untuk beberapa tujuan.
Jonathan Eunice
Jawaban yang menarik, tetapi sedikit di luar topik .... tetap dipilih!
HDave