Kamis, 14 Juni 2012

UNIT TESTING


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.
       •  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.