Pengertian Unit Testing :
Metode dimana unit individu dari kode sumber yang diuji
untuk menentukan apakah mereka cocok untuk digunakan. Unit adalah bagian terkecil
dari diuji aplikasi. Dalam pemrograman prosedural unit mungkin merupakan fungsi
individual atau prosedur.
• Unit testing berfokus pada usaha verifikasi pada unit terkecil dari disain software – komponen atau modul software.
• Unit testing berfokus pada usaha verifikasi pada unit terkecil dari disain software – komponen atau modul software.
• Penggunaan diskripsi disain tingkat
komponen sebagai tuntunan, jalur kendali yang penting dites untuk menemukan errors,
terbatas pada modul tersebut.
• Kompleksitas relatif terhadap tes dan
errors yang dicakup dibatasi oleh batasan-batasan dari cakupan yang
telah ditetapkan pada unit testing.
• Unit testing
berorientasi white box, dan tahapan dapat dilakukan secara paralel pada
banyak komponen.
Hal-hal yang perlu diperhatikan pada unit testing
• Tes yang terdapat pada unit
testing:
– Modul antar muka dites
untuk memastikan aliran informasi telah berjalan seperti yang diharapkan (masuk
dan keluar dari unit program yang dites).
– Struktur data lokal
diperiksa untuk memastikan penyimpanan data telah merawat integritasnya secara
temporal selama tahap eksekusi algoritma.
– atasan kondisi dites
untuk memastikan modul beroperasi dengan benar pada batasan yang telah
ditetapkan untuk limitasi atau batasan pemrosesan.
– Semua jalur independen (basis
paths) pada struktur kendali diperiksa untuk memastikan semua pernyataan
dalam modul telah dieksekusi minimal sekali.
– Semua jalur
penanganan kesalahan dites.
• Tes aliran data antar modul
dibutuhkan sebelum inisialisasi tes lainnya. Jika data tidak masuk dan keluar
dengan benar, semua tes lainnya disangsikan. Sebagai tambahan, struktur data
lokal harus diperiksa dan akibat pada data global ditentukan (jika
memungkinkan) selama unit testing.
• Pemilihan jalur eksekusi
testing adalah tugas yang esensial selama unit test. Test cases
harus didisain untuk mencakup kesalahan dari komputasi yang salah, komparasi
yang tak benar atau alur kendali yang tak tepat. Basis path dan loop
testing adalah teknik yang efektif untuk hal ini.
• Kesalahan komputasi
yang umum terjadi:
–
Kesalahan prioritas aritmetik.
–
Mode operasi campuran.
–
Inisialisasi tak benar.
–
Ketidakakuratan presisi.
–
Ketidakbenaran representasi simbolik dari ekspresi.
• Komparasi dan alur
kendali merupakan satu kesatuan. Biasanya perubahan alur kendali terjadi
setelah komparasi.
• Test case harus mencakup
kesalahan:
–
Komparasi tipe data berbeda
–
Operator logika dan prioritas yang tak benar
–
Kemungkinan persamaan jika kesalahan presisi, menjadikan hasil dari persamaan
tidak sebagaimana yang diharapkan.
–
Kesalahan komparasi antar variabel.
–
Terminasi loop yang tidak konsisten atau tidak semestinya.
–
Kegagalan keluar bilamana konflik iterasi terjadi.
–
Modifikasi variabel loop yang tidak semestinya.
• Disain yang baik meliputi kondisi
kesalahan yang diantisipasi dan jalur penanganan kesalahan diset untuk dapat
digunakan kembali atau proses pembersihan pada terminasi saat kesalahan
terjadi. Pendekatan ini disebut sebagai antibugging oleh Yourdon
[YOU75].
• Kesalahan potensial
yang harus dites saat evaluasi penanganan kesalahan:
–
Diskripsi kesalahan tidak jelas.
–
Catatan kesalahan tidak berfungsi untuk menghitung kesalahan.
–
Kondisi kesalahan menyebabkan interfensi sistem terhadap penangan kesalahan
tertentu.
–
Pemrosesan kondisi perkecualian tidak benar.
–
Diskripsi kesalahan tidak menyediakan informasi yang cukup untuk mengarahkan
penyebab kesalahan.
• Batasan testing adalah tugas
terakhir dari unit testing. Software kadang gagal terhadap
batasannya. Kesalahan kadang terjadi ketika elemen ke n dari dimensi array ke n
diproses, ketika repetisi ke i dari loop dilakukan, ketika nilai
maksimum dan minimum dihitung.
Prosedur-prosedur
unit test :
• Setelah kode dikembangkan, dan
diverifikasi terhadap tingkat disain komponen bersangkutan, disain test case
dari unit test dimulai.
• Review informasi disain
menyediakan tuntunan untuk menetapkan test cases agar dapat mendekati
keseluruhan cakupan kesalahan di tiap kategori sebagaimana didiskusikan
sebelumnya.
• Tiap test case
harus dihubungkan dengan hasil yang diharapkan.
• Karena komponen bukan
program yang berdiri sendiri, drivers dan atau stubs software
harus dikembangkan untuk tiap unit test.
• Pada kebanyakan aplikasi drivers
tidak lebih dari “program utama” yang menerima data test case,
memasukkan data ke komponen yang dites, dan mencetak hasil yang bersangkutan.
• Stubs berlaku
untuk menggantikan modul-modul yang merupakan subordinat (dipanggil oleh)
komponen yang dites. Stub atau “dummy subprogram” menggunakan
antar muka modul subordinat, mungkin melakukan manipulasi data minimal, mencetak
masukan verifikasi, dan mengembalikan kendali ke modul yang sedang dites.
• Drivers dan stubs
menimbulkan biaya overhead. Karena software harus ada penambahan
kode (biasanya tidak berdasarkan disain formal), yang tidak diikutsertakan saat
produk software dirilis.
• Bila drivers
dan stubs cukup sederhana, overhead yang sebenarnya menjadi relatif
rendah.
• Namun
pada kenyataannya, kebanyakan komponen tidaklah cukup bila hanya dilakukan tes
dengan overhead yang rendah (sederhana).
• Pada kasus-kasus
tertentu, testing dapat ditunda penyelesaiannya (kondisi komplit) sampai tahap integration
test (dimana drivers atau stubs juga digunakan).
• Unit
testing disederhanakan bila suatu komponen didisain dengan kohesi tinggi.
• Bilamana hanya satu
fungsi yang dialamatkan oleh suatu komponen, jumlah test cases dapat
dikurangi dan errors dapat lebih mudah untuk diprediksi dan dicakup.
• Ada beberapa situasi
dimana sumber daya tidak mencukupi untuk melakukan unit testing secara
komplit.
• Untuk itu perlu melakukan
pemilihan modul-modul yang kritis dan yang mempunyai cyclomatic complexity
tinggi, untuk unit testing.
Driver
·
Adalah program yang menerima data untuk test case dan menyalurkan ke modul yang
diuji dan mencetak hasilnya
·
Program control pengujian yang ditulis untuk mengatur input test case dan
output
Stubs
·
Melayani pemindahan modul yang akan dipanggil untuk diuji.