TESTING - Test Case pada TDD
Test driven development adalah metodologi terbaru dalam
pengembangan perangkat lunak. Berbeda dengan metodologi lain yang berbasiskan
develop then test, metodologi ini mewajibkan pembuatan kasus-kasus pengujian
terlebih dahulu sebelum membuat applikasi.
Langkah umumnya adalah :
1. buat class baru
2. buat class pengujinya
3. buat skeleton class baru
4. buat skeleton class penguji
5. kompilasi
6. jalankan di di nunit
7. jika ada kesalahan perbaiki kode class baru dan class
penguji dan lakukan langkah 5 dan 6 lagi
Alasan-alasan yang menyebakan metodologi ini dikembangkan
adalah :
• pengujian belakangan sering tidak lengkap
• sulit menguji ketika applikasi sudah komplek
• sulit menguji ketika sudah ada user interface (data entri
lambat dan tidak reuse)
• manajemen test case sulit dilakukan kecuali pada tataran
dimana perusahaan software sudah besar
• metodologi lain menghasilkan code yang kurang self
explainatory (menjelaskan dirinya)
Kesulitan utama dalam pembuatan dalam metodologi ini adalah
penciptaan kelengkapan kasus pengujian. Ada beberapa teknik yang akan penulis
bagikan sebagai hasil uji coba penulis sejauh ini antara lain refactoring,
boundary testing dan cylomatic testing. Semua jenis testing ini adalah white
box testing. Inti ketiga testing di atas adalah membandingkan hasil yang
diperolah dari method yang kita buat dan hasil kalkulasi yang dilakukan manual.
Semuanya akan penulis jelaskan di bagian bawah artikel ini nanti.
Pembangkitan kasus uji pada prinsipnya mengacu pada
operasi-operasi yang ada dalam sebuah method yang akan diuji. Secara garis
besar operasi elementer dalam sebuah method meliputi :
• kalkulasi
• perulangan
• analisa kasus
Jadi sebagai bagian dari kelengkapan artikel akan dibuat
beberapa contoh yang berdasarkan 3 operasi elementer di atas. Sebagai contoh
akan dibuat beberapa method.
Refactoring adalah teknik memodifikasi source code. Teknik
ini sebenarnya mungkin agak salah kaprah untuk dipakai sebagai bagian dari
metodologi ini, karena tujuan refactoring adalah memperbaiki struktur internal
source code agar mudah dipahami dan dibaca. Namun penulis merasa teknik ini
adalah teknik pengujian parsial yang sangat membantu.
Contoh
Kasus :
Sebagai contoh lihatlah evolusi method penguji bentuk air
pada suhu tertentu di bawah ini
Versi 1
Function bentukair(pIntSuhu as integer) as string
Return “padat”
End function
Maka test casenya
• Bentukair(10) akan bernilai benar jika menghasilkan string
padat
Versi 2
Function bentukair(pIntSuhu as integer) as string
If pIntSuhu<=0 then
Return “padat”
Else if pIntSuhu>=1 and pIntSuhu<=100 then
Return “Cair”
End if
End function
Maka test casenya
• bentukair(0)) akan bernilai benar jika menghasilkan string
“padat”
• bentukair(10)) akan bernilai benar jika menghasilkan
string “cair”
Boundary testing adalah teknik membangkitkan nilai-nilai
test dengan cara menguji nilai-nilai batas yang ada di dalam analisa kasus yang
digunakan. Sebagai contoh lihat method penguji bentuk air pada suhu tertentu di
bawah ini
Function bentukair(pIntSuhu as integer) as string
If pIntSuhu<=0 then
Return “padat”
Else if pIntSuhu>=1 and pIntSuhu<=100 then
Return “cair”
Else
Return “gas”
End if
End function
Contoh ini akan menghasilkan beberapa kasus uji yaitu :
• bentukair(-1) akan bernilai benar jika menghasilkan string
“padat”
• bentukair(0) akan bernilai benar jika menghasilkan string
“padat”
• bentukair(1) akan bernilai benar jika menghasilkan string
“cair”
• bentukair(2) akan bernilai benar jika menghasilkan string
“cair”
• bentukair(99) akan bernilai benar jika menghasilkan string
“cair”
• bentukair(100) akan bernilai benar jika menghasilkan
string “cair”
• bentukair(101) akan bernilai benar jika menghasilkan
string “gas”
Test case di atas diperoleh dari pengurangan dan penambahan
angka 1 terhadap nilai nilai yang dijadikan analisa kasus.
If pIntSuhu<=0 menghasilkan -1, 0 dan 1
If pIntSuhu >=1 and pIntSuhu<=100 menghasilkan
1,2,99,100, 101.
Jika angka 1 tidak memadai gunakan 0.1,0.01,0.001 dan
seterusnya bergantung pada tipe data (integer atau real)
Cyclomatic testing adalah sebuah testing untuk menguji semua
jalur eksekusi yang ada di sebuah program dengan jalan membangkitkan semua test
case yang mungkin. Kembali ke contoh penentu suhu air di atas. Kita dapat
menambahkan variable lain untuk memperumit kondisi diatas katakanlah x yang
berupa integer berisi nilai 1,2,3,4,5,6
Function bentukair(pIntSuhu as integer, x as integer) as
string
If pIntSuhu<=0 then
If x= 1 then
Return “padat1”
Else if x=2 then
Return “padat2”
Else
Return “invalid”
End if
Else if pIntSuhu>=1 and pIntSuhu<=100 then
If x=3 then
Return “cair3”
Else x= 4 then
Return “cair4”
Else
Return “invalid”
End if
Else
If x=5 then
Return “gas5”
Else if x= 6 then
Return “gas6”
Else
Return “invalid”
End if
End function
Karena fungsi di atas merupakan pengembangan dari fungsi
bentukair sebelumya maka kita dapat menggunakan testcase dari bentuk air
sebelumnya menjadi bagian dari test case fungsi sekarang. Berikut ini adalah
daftarnya
• bentukair(-1,0) akan bernilai benar jika menghasilkan
string “invalid”
• bentukair(-1,1) akan bernilai benar jika menghasilkan
string “padat1”
• bentukair(-1,2) akan bernilai benar jika menghasilkan
string “padat2”
• bentukair(-1,3) akan bernilai benar jika menghasilkan
string “invalid”
• bentukair(0,0) akan bernilai benar jika menghasilkan
string “invalid”
• bentukair(0,1) akan bernilai benar jika menghasilkan
string “padat1”
• bentukair(0,2) akan bernilai benar jika menghasilkan
string “padat2”
• bentukair(0,3) akan bernilai benar jika menghasilkan
string “invalid”
• bentukair(1,2) akan bernilai benar jika menghasilkan
string “invalid”
• bentukair(1,3) akan bernilai benar jika menghasilkan
string “cair3”
• bentukair(1,4) akan bernilai benar jika menghasilkan
string “cair4”
• bentukair(1,5) akan bernilai benar jika menghasilkan
string “invalid”
• bentukair(2,2) akan bernilai benar jika menghasilkan
string “invalid”
• bentukair(2,3) akan bernilai benar jika menghasilkan
string “cair3”
• bentukair(2,4) akan bernilai benar jika menghasilkan
string “cair4”
• bentukair(2,5) akan bernilai benar jika menghasilkan
string “invalid”
• bentukair(99,2) akan bernilai benar jika menghasilkan
string “invalid”
• bentukair(99,3) akan bernilai benar jika menghasilkan
string “cair3”
• bentukair(99,4) akan bernilai benar jika menghasilkan
string “cair4”
• bentukair(99,5) akan bernilai benar jika menghasilkan
string “invalid”
• bentukair(100,2) akan bernilai benar jika menghasilkan
string “invalid”
• bentukair(100,3) akan bernilai benar jika menghasilkan
string “cair3”
• bentukair(100,4) akan bernilai benar jika menghasilkan
string “cair4”
• bentukair(100,5) akan bernilai benar jika menghasilkan
string “invalid”
• bentukair(101,4) akan bernilai benar jika menghasilkan
string “invalid”
• bentukair(101,5) akan bernilai benar jika menghasilkan
string “gas5”
• bentukair(101,6) akan bernilai benar jika menghasilkan
string “gas6”
• bentukair(101,7) akan bernilai benar jika menghasilkan
string “invalid”
Untuk operasi elementer kalkulasi sebenarnya cukup sulit
dilakukan karena begitu banyaknya data uji yang dapat dibuat. Sebagai contoh
lihat fungsi tambah1 dibawah ini
Function tambah1(pint as integer) as integer
Return pint+1
End function
Penjelasan
nya :
Kelihatannya mudah. Tetapi untuk menjamin sistem ini benar
maka data ujinya bisa dari – tak hingga sampai + tak hingga. Sangat banyak.
Jadi kita hanya bisa berharap saja.
Untuk operasi elementer perulangan maka dapat digunakan
metode yang sama analisa kasus. Sebagai contoh akan dibuat sebuah fungsi yang
menentukan apakah sebuah elemen bernilai x ada di dalam sebuah array. Array
dinamakan mObjData dan tipe elemennya adalah integer
Function IsExist(x as integer) as boolean
Dim dBolKetemu as boolean =false
Dim I as integer
For i= 0 to mObjData.length-1 do
If x=mObjData[i] then
dBolKetemu=true
exit for
end if
End for
Return dBolKetemu
End function
Maka untuk menguji fungsi diatas adalah
• mObjData kosong tidak memiliki elemen apapun. Akan bernilai
benar jika menghasilkan false
• mObjData berisi beberapa buah elemen dan x tidak ada di
dalamnya. Akan bernilai benar jika menghasilkan false
• mObjData berisi beberapa buah elemen dan x ada di elemen
pertama. Akan bernilai benar jika menghasilkan true
• mObjData berisi beberapa buah elemen dan x ada di elemen
terakhir. Akan bernilai benar jika menghasilkan true jadi pada perulangan yang
harus di test adalah jika :
• loop tidak dimasuki sama sekali
• loop dimasuki 1 kali
• loop dimasuki sebanyak n kali