Pengujian Perangkat Lunak
Pengujian perangkat lunak (software testing) adalah bagian integral dari sebuah pembangunan perangkat lunak (software development). Sering kali, pembangunan sebuah perangkat lunak disempitkan dengan pengkodean (coding) atau pemograman dan pengujian perangkat lunak adalah salah satu proses vital dalam pembangunan perangkat lunak yang sering diabaikan. Padahal proses ini sangat penting, terutama untuk pembangunan perangkat lunak yang akan diproduksi secara masal (mass production), yang menuntut adanya jaminan mutu dan bebas kesalahan (bug-free) sebelum masuk pada tahap produksi. Meskipun begitu, untuk pembangunan perangkat lunak berdiri sendiri (standalone) atau dibangun untuk keperluan tertentu (in-house development), proses pengujian akan dapat menurunkan secara signifikan biaya pembangunan (development cost) dan biaya perawatan (maintenance cost).
Tulisan ini bertujuan memberikan gambaran umum tentang pengujian perangkat lunak dan mengklarisifikasi beberapa istilah yang sering membingungkan. Secara umum pengujian perangkat lunak adalah satu proses mengeksekusi perangkat lunak yang dibangunkan untuk mendeteksi dan menemukan perbedaan antara aktual dan yang dirancang atau diperlukan atau dituntut atau diharapkan. Lebih detilnya, definisi “Testing” menurut American National Standards Institute dan IEEE adalah sebagai berikut:
“A process of analyzing a software item to detect the differences between existing and required conditions (that is defects/errors/bugs) and to evaluate the features of the software item”
Dapat dikatakan bahwa tujuan utama pengujian perangkat lunak adalah untuk memastikan tidak ada kesalahan dan sesuai dengan ekspektasi yang diharapkan yang tertuang dalam rencana dan perancangan yang telah dibuat dan disetujui sebelumnya.
Lalu kapan sebenarnya pengujian perangkat lunak itu perlu dilakukan dan kapan pengujian harus diakhiri? Tidak ada satu petunjuk yang memastikan kapan harus dimulai, tetapi ditahun 1976 Boehm menyimpulkan dari beberapa studi kasus di beberapa perusahaan besar IT dunia, bahwa semakin lambat satu kesalahan ditemukan, maka biaya perbaikannya akan meningkat pesat secara exponensial seperti digambar berikut.
Menentukan kapan pengujian perangkat lunak harus dihentikan lebih sulit lagi, karena tidak ada seseorang pun yang dapat mengatakan bahwa perangkat lunaknya telah teruji 100%. Akan tetapi ada beberapa kondisi atau keadaan dimana bisa dipertimbangkan bahwa pengujian suatu perangkat lunak bisa dihentikan. Pertama, bila tengat waktu pengujian telah ditentukan dan telah sampai waktu tengatnya. Kedua, bila eksekusi dengan skenario hasil yang ditetapkan telah selesai. Ketiga, bila fungsi yang harus ada dan tingkat pengkodean telah mencapai batas tertentu. Keempat, bila tingkat kesalahan (bug rate) turun pada level yang bisa ditolerir dan tidak ada kesalahan fatal yang terindentifikasi. Dan, terakhir apabila ada keputusan dari pihak manajemen.
Pengujian Perangkat Lunak (Software Testing) Vs Pembetulan Perangkat Lunak (Software Debugging)
Pengujian perangkat lunak bukanlah pembetulan perangkat lunak dan dilakukan oleh dua peran (role) yang berbeda, walau dalam keseharian peran ini bisa dilakukan oleh orang yang sama. Pengujian perangkat lunak yang dilakukan oleh seorang penguji (tester) melibatkan identifikasi kesalahan (error/bug/defect) tanpa terlibat dalam perbaikan. Sedangkan pembetulan perangkat lunak yang dilakukan oleh seorang pemogram (developer) adalah aktivitas mengindentifikasi kesalahan, mengisolirnya dan memperbaiki kesalahan yang ditemukan.
Jadi boleh dikatakan seorang penguji melakukan validasi (validation) terhadap perangkat lunak yang dibangun oleh seorang atau kumpulan pemogram termasuk menguji kesesuaian fungsi-fungsi dengan keperluan/tuntutan (requirement) yang telah didefinisikan. Pertanyaan-pertanyaan yang mungkin muncul dalam proses validasi ini, misalnya:
- Apakah pemogram telah membangun perangkat lunak yang benar?
- Apakah fungsi-fungsi yang didefinisikan bisa bekerja dengan benar?
Proses validasi ini dilakukan dengan anggapan bahwa pemogram telah melakukan proses verifikasi (verification) sebelum dan selama proses pembangunan perangkat lunak untuk mencapai objektif pembangunan sebuah perangkat lunak. Pertanyaan-pertanyaan yang mungkin muncul dalam proses verifikasi ini, misalnya:
- Apakah perangkat lunak dibangun dengan benar?
- Apakah perangkat lunak berfungsi secara benar?
Dalam proses validasi dan verifikasi ini ada beberapa terminologi yang biasa dijumpai:
- Error: Keadaan atau kondisi yang diharapkan berbeda dengan apa yang didapati
- Fault: Keadaan dimana perangkat lunak gagal melakukan apa yang diharapkan
- Failure: Keadaan dimana perangkat gagal melakukan fungsi-fungsi tertentu
Pengujian Perangkat Lunak Vs Jaminan Mutu (Qualitiy Assurrance) dan Pengawasan Mutu (Quality Control)
Dikarenakan pengujian perangkat lunak juga berkenaan dengan mutu, maka beberapa terminologi yang berkenaan dengan mutu sering juga disinggung dalam pembahasan pengujian perangkat lunak. Aktivitas dalam jaminan mutu adalah untuk memastikan bahwa proses, prosedur dan standar yang digunakan dalam proses verifikasi dilakukan sesuai untuk perangkat lunak yang dibangun dan keperluan yang diinginkan. Sedangkan aktivitas pengawasan mutu adalah untuk memastikan bahwa perangkat lunak yang dibangun sesuai dengan keperluan yang sudah didokumentasikan (documented requirements). Jadi kedua aktivitas jaminan dan pengawasan mutu ini berbeda dengan aktivitas dalam pengujian perangkat lunak yang dalam hal ini adalah untuk mengindentifikasi kesalahan.