Statement Coverage Technique

Pada artikel sebelumnya, yaitu pada Code Coverage : White Box Testing Techniques telah dibahas beberapa kelompok testing yang termasuk Code Coverage yaitu Statement Coverage,Path Coverage,Condition Coverage dan Function Coverage. Pada artikel ini akan dibahas lebih mendetail dari masing-masing testing tersebut.

Sebagian besar bahasa pemrograman bisa dibangun dari sequential control flow, a 2o-way decision statement seperti if – then – else, multi-way decision statement seperti switch atau perulangan seperi while, do, repeat until dan for. Lihat kembali tentang Control Flow Graph & Notations .
Every algorithm may be implemented using just the constructs sequence, selection, iteration [Bohm and Jacobini, 1966]
Statement coverage mengacu pada penulisan kasus uji (test cases) yang mengeksekusi setiap pernyataan program statements. Diasumsikan "more the code covered, the better is the testing of the functionality" atau semakin banyak pernyataan yang diungkapkan semakin baik pengujian fungsionalitasnya.

Untuk pernyataan sequential (misal, tanpa pencabangan kondisi), kasus uji (test cases) dapat didesain untuk berjalan dari atas ke bawah. Tetapi hal ini tidaklah selalu benar pada dua kasus berikut.
  1.  Jika terdapat asynchronous exceptions pada kode, seperti divide by zero, maka walaupun kita memulai kasus uji pada awal section, kasus uji bisa tidak dapat mengungkapkan semua pernyataan pada section tersebut. Jadi, walaupun pada kasus pernyataan sequential, pengunkapan semua pernyataan bisa tidak dicapai.
  2. Suatu section dari program bisa berasal dari berbagai titik
Pada kasus pernyataan if then-else, jika kita ingin mengungkapkan semua pernyataan maka kita harus ungkapkan bagian pernyataan 'then' dan pernyataan 'else'. Hal ini mensyaratkan bahwa setidaknya harus ada satu kasus uji untuk bagian 'then' dan satu kasus uji untuk bagian 'else'.

Pada multi-way, pernyataan switch dapat dikurangi menjadi multiple two-way pernyataan if. Untuk mengungkapkan semua kemungkinan switch cases, maka harus ada multiple test cases.

Cacat program dapat terjadi karena perulangan (loops) yang tidak bekerja dengan baik, bahkan lebih sering lagi loop gagal pada suatu kondisi batas "boundary conditions". Sebab itu kita harus menguji kasus berikut:
  1. Melompati loop secara lengkap yaitu situasi terminasi kondisi menjadi true sebelum loop diuji
  2. Memeriksa loop untuk kasus for n=1
  3. Mencoba mengungkapkan loop pada nilai batas n, misal dibawah n dan diatas n
Statement coverage untuk suatu program, yaitu persentase pernyataan aktual yang dieksekusi dari suatu pengujian (set of tests), dapat dihitung dengan formula berikut:

SC = (TSEd) / (TNoESP) x 100
dimana:
SC = Statement Coverage
TSEd = Total Statements Exercised; total pernyataan yang dilatih
TNoESP = Total Number of Executable Statements in Program; total seluruh pernyataan pada program

Seperti yang telah kita ketahui exhaustive testing atau 100% testing adalah tidak mungkin, dengan demikian exhaustive coverage of untuk semua pernyataan pada program akan menjadi tidak mungkin untuk prakteknya. Dengan demikian jika kita mendapatkan angka yang tinggi dari Statement Coverage, itu tidak berarti bahwa program ini bebas dari cacat.

Dalam program yang mengimplementasikan persyaratan yang salah (wrong requirement) dan jika kode tersebut sepenuhnya diuji mencapai 100%, tetap saja masih merupakan program yang salah. Oleh karena itu 100% Statement Coverage tidak berarti apa-apa.

Kita lihat contoh lain di sini.
i = 0 ;
if (kode == 'y') {
    pernyataan-1 ;
    pernyataan–2 ;
    :
    :
    pernyataan-n ;
}
else
    hasil = {nilai / i} * 100 ;

Pada program ini , ketika kita uji dengan kode = 'y', kita akan mendapatkan 80% code coverage. Tetapi jika distribusi data pada dunia nyata 90% dari keseluruhan, nilai kode bukan = 'y', maka, program akan gagal 90% karena masalah exception-divide by zero. Dengan demikian, walaupun code coverage of 80%, kita meninggalkan cacat program kepada user sebesar 90%.

Untuk itu path coverage technique akan mengatasi masalah tersebut dan dibuat pada postingan berikutnya.