Jumat, 18 Desember 2009

Pengujian Perangkat Lunak

Abstrak
Untuk menghasilkan perangkat lunak yang terbaik, maka harus dilakukan pengujian terhadap perangkat lunak yang dibuat. Pengujian tidak dapat memastikan suatu perangkat lunak bebas dari kesalahan, namun memastikan bahwa tidak ada kesalahan yang ditemukan pada saat pengujian.



1. Pendahuluan
Perangkat lunak merupakan bagian yang tak terpisahkan dari suatu komputer. Sama halnya seperti perangkat keras, kesalahan ataupun kegagalan pada perangkat lunak, juga dapat mengakibatkan hal yang fatal [PAT09]. Oleh karena itu harus dilakukan pengujian pada sebuah perangkat lunak sebelum digunakan secara luas.
Hal utama yang perlu digarisbawahi adalah pengujian perangkat lunak tidak dapat memastikan perangkat lunak yang diuji sama sekali tidak memiliki kesalahan. Pengujian perangkat lunak hanya memastikan bahwa tidak ditemukan kekeliruan saat dilakukan pengujian terhadap perangkat lunak tersebut [ROG01].

2. Pembahasan
Pengujian perangkat lunak merupakan salah satu tahapan yang harus dilalui dalam sebuah siklus hidup pembuatan perangkat lunak (Software Development Life-Cycle: SDLC). Pengujian perangkat lunak adalah suatu cara menjalankan program atau bagian dari program dimana input dan output dari pengujian tersebut dapat diperkirakan dan diamati apakah terdapat kesalahan atau penyimpangan dari yang diharapkan atau disyaratkan [PHI07]. Hal ini akan meningkatkan kualitas perangkat lunak, karena kualitas perangkat lunak tidak dihasilkan hanya dengan suatu pemikiran atau pendugaan, namun harus ditingkatkan saat pembuatan serta dilakukan validasi setelah selesai dibuat [AND08].
Meskipun tidak dapat menjamin suatu perangkat lunak terbebas dari kesalahan, namun pengujian perangkat lunak dapat meningkatkan kepercayaan bahwa perangkat lunak tersebut sudah sesuai dengan yang dibutuhkan atau disyaratkan [PHI07]. Oleh karena itu sangat penting untuk menentukan metode pengujian perangkat lunak sehingga probabilitas diketemukannya kesalahan dalam perangkat lunak sangat tinggi.
Menurut Pressman [ROG01], terdapat beberapa prinsip yang harus diperhatikan dalam melakukan pengujian perangkat lunak, yaitu:
Ø  Semua pengujian harus dapat ditelusuri hingga persyaratan pelanggan.
Ø  Pengujian harus sudah direncanakan jauh sebelum pengujian tersebut dilakukan.
Ø  Prinsip pareto (80/20) berlaku di dalam pengujian perangkat lunak.
Ø  Pengujian dimulai dari yang “kecil” dikembangkan hingga yang “besar”.
Ø  Tidak mungkin melakukan pengujian yang mendalam (detil).
Ø  Untuk memperoleh hasil yang paling efektif, pengujian sebaiknya dilakukan oleh pihak ketiga.
Pengujian sebaiknya sudah dapat dilakukan sejak tahap awal pembuatan perangkat lunak, tanpa harus menunggu perangkat lunak selesai dibuat. Hal ini disebabkan karena biaya perbaikan kesalahan yang dilakukan setelah perangkat lunak selesai dibuat, dapat mencapai lebih dari 100 kali lipat seandainya kesalahan tersebut diketahui dan diperbaiki pada tahap-tahap awal [YUK06].
Seberapa mudah sebuah perangkat lunak diuji, dapat diketahui dari tingkat Operability, Observability, Controllability, Decomposability, Simplicity, Stability, dan Understandability perangkat lunak tersebut [ROG01].
Untuk perangkat lunak yang bukan dibuat dengan konsep object-oriented, fase pengujian dapat dibagi 2 [IAN01], yaitu:
Ø  Component testing, yang dilakukan oleh developer perangkat lunak.
Ø  Integration testing, yang dilakukan oleh independent testing team.
Pengujian komponen (component testing) atau pengujian kerusakan (defect testing) memiliki tujuan untuk memastikan setiap komponen sistem tidak menunjukkan kesalahan dan sudah sesuai dengan persyaratan yang diberikan. Secara umum, pengujian ini dapat dibagi menjadi Black-Box testing dan White-Box testing.
Pengujian Black-Box berfokus pada persyaratan fungsional perangkat lunak dan dilakukan untuk berusaha menemukan kesalahan dengan kategori:
Ø  Fungsi-fungsi yang tidak benar atau bahkan tidak ada.
Ø  Kesalahan interface.
Ø  Kesalahan dalam struktur data atau akses basis data eksternal.
Ø  Kesalahan kinerja.
Ø  Kesalahan inisialisasi maupun terminasi.
Pengujian Black-Box sering disebut juga dengan pengujian behavioral atau pengujian partisi. Pengujian ini umumnya dilakukan pada tahap akhir pembuatan perangkat lunak atau setelah perangkat lunak selesai dibuat. Pengujian yang dilakukan:
Ø  Graph-Based Testing Methods
Ø  Equivalence Partitioning
Ø  Boundary Value Analysis
Ø  Comparison Testing
Ø  Orthogonal Array Testing
Berbeda dengan pengujian White-Box yang sering juga disebut dengan Glass-Box testing atau Clear testing dilakukan untuk:
Ø  Menjamin bahwa setiap jalur independen pada suatu modul telah digunakan setidaknya satu kali.
Ø  Menggunakan semua keputusan logis pada sisi true maupun false.
Ø  Mengeksekusi semua loop pada batas mereka serta batas operasional mereka.
Ø  Menggunakan struktur data internal untuk menjamin validitasnya.
Pengujian white-box dapat dilakukan sejak tahap awal pembuatan perangkat lunak. Pengujian yang dapat dilakukan:
Ø  Basis Path Testing
Ø  Control Structure Testing

Setelah melakukan pengujian komponen, maka selanjutnya dapat dilakukan pengujian integrasi (intergration testing). Integration testing memiliki tujuan untuk memastikan setiap kompoen saat diintegrasikan tidak memberikan kesalahan. Pengujian sebaiknya dilakukan secara bertahap, yaitu setiap komponen ditambahkan satu-per-satu ke dalam sistem dan langsung dilakukan pengujian terhadapnya maupun terhadap sistem secara keseluruhan. Hal ini dilakukan berulang hingga seluruh komponen selesai diintegrasikan ke dalam sistem. Tahapan-tahapan ini dapat dilakukan secara top-down maupun bottom-up.
Pada metode top-down, pengujian dilakukan terlebih dahulu pada rutin umum/global lalu dilanjutkan ke rutin-rutin maupun sub-rutin ataupun modul-modul yang diakses dari rutin umum tersebut. Sebaliknya, pada metode bottom-up, dilakukan pengujian pada rutin-rutin atau modul-modul kecil, lalu dilanjut pada super-rutin atau super-modul atau super-menu hingga pada bagian utama.
Pengujian lain yang termasuk dalam integration testing adalah interface testing yang bertujuan untuk mencari kesalahan pada sisi interfacing antar komponen/modul program. Sering terjadi bahwa setiap modul maupun rutin telah berjalan dengan baik, namun ketika disatukan atau digabungkan, terjadi kegagalan akibat pemberian parameter yang salah atau perbedaan tipe parameter. Hal semacam inilah yang diuji pada integration testing.
Dengan berkembangnya pemrograman berorientasi obyek (object-oriented programming: OOP), maka harus pula dikembangkan pengujian perangkat lunak berbasis OOP. Hal ini karena OOP memiliki karakteristik yang berbeda dengan pemrograman terstruktur, dimana program terdiri dari kelas-kelas dan obyek-obyek yang memiliki state dan behaviour.
Pada sebuah sistem berbasis OOP, terdapat empat level pengujian [IAN01], yaitu:
Ø  Pengujian operasi-operasi individual yang berasosiasi dengan obyek-obyek.
Ø  Pengujian kelas-kelas obyek individual.
Ø  Pengujian cluster-cluster dari obyek-obyek.
Ø  Pengujian keseluruhan sistem berbasis OOP.
Untuk mempermudah proses pengujian, saat ini sudah terdapat tools yang dapat membantu proses pengujian perangkat lunak. Tools ini dapat dikategorikan [IAN01]:
Ø  Test Manager
Ø  Test Data Generator
Ø  Oracle
Ø  File Comparator
Ø  Report Generator
Ø  Dynamic Analyser
Ø  Simulator
Namun demikian, karena tools tersebut dibuat untuk keperluan yang umum maka perlu penyesuaian yang harus dilakukan untuk setiap perangkat lunak yang akan diuji. Hal ini disebabkan karena setiap perangkat lunak yang dibuat, belum tentu sama dengan yang lain atau yang sudah ada. Penyesuaian yang perlu dilakukan umumnya adalah dengan menambahkan script-script tertentu agar tools tersebut dapat berfungsi dengan baik untuk menguji perangkat lunak yang dimaksud.

3. Kesimpulan
Ø  Pengujian perangkat lunak merupakan salah satu tahapan dalam SDLC yang harus dilalui untuk memperoleh perangkat lunak yang berkualitas.
Ø  Pengujian perangkat lunak tidak menjamin bahwa perangkat lunak tersebut bebas kesalahan, namun hanya memastikan tidak ada kesalahan yang terjadi saat pengujian, oleh karena itu pengujian harus dilakukan dengan cara yang sebaik-baiknya.
Ø  Pengujian perangkat lunak dapat dilakukan dengan metode White-Box maupun Black-Box.
Ø  Untuk mempermudah pengujian, saat ini sudah banyak dibuat tools yang membantu dalam proses pengujian perangkat lunak.


Referensi:
[AND08]     Andrea De Lucia, et.al., Emerging Methods, Technologies and Process Management in Software Engineering, John Wiley & Sons, Inc., New Jersey, 2008.
[IAN01]      Ian Sommerville, Software Engineering, 6th ed., Pearson Education Ltd., NY, 2001.
[PAT09]      Patricia A McQuaid, Software Disasters: What Have We Learned?, Software Quality Professional; Jun 2009; 11, 3, p.28.
[PHI07]       Phillip A.Laplante, What Every Engineer Should Know about Software Engineering, CRC Press, New York, 2007.
[ROG01]     Roger S. Pressman, Software Engineering: A Practitioner’s Approach, 5th ed., McGraw-Hill Companies, Inc., NY, 2001.
[YUK06]     Yu Kuen Wong, Modern Software Review: Techniques and Technologies, IRM Press, London, 2006.


Tidak ada komentar: