Senin, 21 Oktober 2013

TDD Rekayasa Perangkat Lunak


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

0 komentar:

Posting Komentar