Apa Itu Code Coverage?
Sebelum berbicara tentang apa itu code coverage, kita harus tahu dulu apa itu White-box testing karena coverage testing merupakan salah satu teknik pengujian dari White-box.
Dalam software testing, kita tentu mengenal istilah Black-box Testing dan White-box Testing. Black-box Testing adalah metode dalam software testing dimana para tester atau QA tidak berfokus pada struktur internal (code) dari sebuah aplikasi atau sistem yang sedang dibangun. Tester hanya perlu menguji interface dan memastikan bahwa semua fungsi telah berjalan sesuai dengan yang requirement. Sedangkan White-box Testing adalah metode pengujian dimana QA perlu menganalisis dan memeriksa apakah ada bug/error pada kode program. Kebalikan dari Black-box, pada metode ini tidak perlu berfokus seperti apa requirement atau tampilan dari aplikasi itu. Dalam menjalankan White-box testing, terdapat beberapa teknik yang dapat dilakukan, salah satunya adalah code coverage.
Sesuai dengan namanya, code coverage, merupakan alat ukur utama untuk mengukur usaha pengujian pada code yang sudah di-develop sebelumnya oleh tim developer atau programmer. Code coverage sendiri adalah salah satu pendekatan dari pengujian coverage dimana pengujian coverage itu memiliki 3 pendekatan; Requirement Coverage, Code Coverage, dan Test Coverage berdasarkan hasil analisis data dari control flow. Di tulisan kali ini, kita hanya akan mendalami makna Code Coverage. Hasil dari code coverage ini dapat dijadikan sebagai standar dalam mengukur kualitas dari aplikasi yang kita bangun. Semakin tinggi hasil dari code coverage, akan menunjukkan bahwa semakin baik kualitas aplikasi tersebut. Sebaliknya, semakin rendah hasil code coverage menunjukkan bahwa semakin rendah kualitas aplikasi kita. Kenapa? Karena rendahnya hasil code coverage menandakan bahwa masih banyak code yang masih belum diuji. Hal ini dapat berdampak bukan hanya pada munculnya bug/error di waktu yang tidak dapat kita prediksi tetapi juga dapat meningkatkan maintanance cost yang dibutuhkan. Bayangkan jika sebuah aplikasi yang nilai code coverage-nya masih rendah namun tetap di-up ke stage production, lalu client menemukan bug/error dan QA harus menganalisis ulang terkait code yang belum sempat di-uji. Hal ini tentu akan membutuhkan maintanance cost yang besar. Jadi, untuk menghindari hal itu, QA perlu mengusahakan nilai code coverage yang dihasilkan harus berada di rentang 80% ke atas.
Dalam menghitung nilai code coverage, ada beberapa aspek yang dijadikan bahan evaluasi, diantaranya :
1. Statement Coverage
Statement coverage ini digunakan untuk mengevaluasi berapa banyak pernyataan yang ada dan memastikan bahwa semua statement yang ada di code sudah dieksekusi setidaknya satu kali. Dengan statement coverage dapat memungkinkan untuk dilakukannya isolasi bagian dari code yang tidak dapat dieksekusi. Artinya, saat statement coverage dihasilkan, akan diketahui statement mana yang bisa dijalankan dan statement mana yang tidak dapat dijalankan. Sehingga dari hasil itu, QA dapat menarik kesimpulan di bagian code mana yang terdapat error/bug. Contoh statement yang dimaksud adalah loops, conditional, assertions, dsb. Saat kita menjalankan code coverage menggunakan Eclipse, terdapat pilihan Loop Coverage pada properties TestCodeCover.
2. Branch (Decision) Coverage
Decision coverage digunakan untuk menguji berapa banyak branch/output yang ada di code setelah di eksekusi. Pengujian decision coverage ini dilakukan dengan mengeksekusi bagian code yang lebih dalam karena di pengujian ini akan dilakukan sejumlah test case untuk memastikan setiap branch dijalankan minimal satu kali.
3. Condition Coverage
Condition coverage digunakan untuk menguji berapa banyak boolean yang ada pada code.
4. Path Coverage
Path coverage digunakan untuk mengeksekusi ada berapa banyak path yang ada pada code. Misalkan ada sejumlah N decision, maka akan terdapat 2^N path di code tersebut. Sedangkan pada statement loop, maka jumlah paths nya akan menjadi tak terhingga. Kekurangan dari path coverage ini adalah dengan jumlah path pada aplikasi yang sangat banyak bahkan sampai tidak terhingga, path coverage cenderung tidak digunakan karena sangat sulit untuk diimplementasikan.
Ada beberapa tools yang dapat digunakan untuk melakukan code coverage, seperti misalnya Lcov-Gcov, PHPUnit, dsb. tergantung pada bahasa pemrograman yang digunakan. Misalnya Lcov digunakan untuk bahasa pemrograman Java, Gcov digunakan untuk bahasa pemrograman C, dan sebagainya. Secara teknis, code coverage dan unit testing itu saling melengkapi. Unit testing sendiri mengacu kepada kebutuhan kinerja, sedangkan sisanya akan di-handle oleh code coverage.
Sampai disini dulu pembahasan terkait Code Coverage. Mungkin di tulisan selanjutnya akan kita bahas mengenai cara melakukan pengujian code coverage dengan menggunakan salah satu tools yang sudah sempat disebutkan di atas. Semoga artikel ini bermanfaat buat teman-teman semuanya! Terima kasih.