Apa
yang dimaksud dengan Unit Testing?
Unit Testing adalah sebuah kode yang ditulis oleh developer, yang digunakan untuk menguji bagian kecil/area spesifik dari suatu fungsionalitas dari kode yang akan ditest.
Unit testing dilakukan untuk membuktikan apakah kode yang telah ditulis berfungsi sesuai dengan kehendak programmer.
Unit Testing adalah sebuah kode yang ditulis oleh developer, yang digunakan untuk menguji bagian kecil/area spesifik dari suatu fungsionalitas dari kode yang akan ditest.
Unit testing dilakukan untuk membuktikan apakah kode yang telah ditulis berfungsi sesuai dengan kehendak programmer.
Mengapa
Unit Testing?
Secara implisit, unit testing akan membuat hidup seorang programmer menjadi lebih “mudah”.
Apalagi dengan menggunakan Visual Studio 2010 cukup dengan melakukan generate code untuk testing, Unit Testing pun dapat dilakukan.
Unit testing akan memperbaiki design code dan mengurangi waktu yang digunakan untuk debugging secara drastis.
Secara implisit, unit testing akan membuat hidup seorang programmer menjadi lebih “mudah”.
Apalagi dengan menggunakan Visual Studio 2010 cukup dengan melakukan generate code untuk testing, Unit Testing pun dapat dilakukan.
Unit testing akan memperbaiki design code dan mengurangi waktu yang digunakan untuk debugging secara drastis.
Building house of cards, adalah perumpamaan yang tepat untuk menggambarkan
proses coding tanpa testing. Karena bila pondasi/dasar dari bangunan tersebut
labil, maka bagian-bagian yang dibangun diatasnya juga akan terpengaruh dan
akhirnya runtuh.
Perubahan kecil pada suatu modul/unit akan merambat hingga ke level yang lebih tinggi, yang tentunya juga membutuhkan perbaikan. Oleh karena itu, perubahan pada level dasar harus ditest sebelum mempengaruhi level yg lebih tinggi.
Perubahan kecil pada suatu modul/unit akan merambat hingga ke level yang lebih tinggi, yang tentunya juga membutuhkan perbaikan. Oleh karena itu, perubahan pada level dasar harus ditest sebelum mempengaruhi level yg lebih tinggi.
Siapa
yang melakukan Unit Testing?
Unit testing dilakukan oleh programmer yang menuliskan suatu modul/unit tertentu.
Test code tidak akan dikirimkan ke user, jadi hanya production code (kode yang digunakan dalam program utama) yang di-deliver ke user.
Unit testing dilakukan oleh programmer yang menuliskan suatu modul/unit tertentu.
Test code tidak akan dikirimkan ke user, jadi hanya production code (kode yang digunakan dalam program utama) yang di-deliver ke user.
Kapan
dilakukan Unit Testing?
Unit testing dilakukan setelah programmer selesai menuliskan suatu kode/fungsi/method yang ada dalam suatu class. Dapat juga dilakukan setelah menambahkan sebuah fungsionalitas baru atau setelah melakukan refactoring.
Unit testing dilakukan setelah programmer selesai menuliskan suatu kode/fungsi/method yang ada dalam suatu class. Dapat juga dilakukan setelah menambahkan sebuah fungsionalitas baru atau setelah melakukan refactoring.
Bagaimana
cara melakukan Unit Testing?
Unit testing membutuhkan suatu tools yang spesifik untuk tiap-tiap bahasa pemrograman. Dan tools tersebut terpisah dengan bahasa pemrograman. Beberapa contoh tools yang digunakan pada unit testing :
Unit testing membutuhkan suatu tools yang spesifik untuk tiap-tiap bahasa pemrograman. Dan tools tersebut terpisah dengan bahasa pemrograman. Beberapa contoh tools yang digunakan pada unit testing :
- CUnit : digunakan untuk bahasa C
- JUnit : digunakan untuk bahasa Java
- VBUnit : digunakan untuk bahasa Basic
- NUnit : digunakan untuk bahasa C# (baca: c-sharp)
- PHPUnit : digunakan untuk bahasa PHP
PHPunit
sebagai salah satu tools unit testing
Semakin
cepat ditemukan kesalahan, maka semakin besar kemungkinan untuk memperbaikinya
dengan cost yang sedikit. Itu sebabnya mengapa melakukan testing ketika
software/website siap untuk dirilis sungguh merupakan sebuah hal yang
bermasalah.
Umumnya
sebagai programmer PHP,kita mencoba input-input form dengan nilai-nilai
tertentu. Kemudian misalnya ternyata hasilnya tidak sesuai maka menggunakan echo,
print_r atau mungkin var_dump dan
didampingi fungsi die()untuk mencari kesalahan. Tetapi ada juga programmer yang
levelnya lebih tinggi dari programer biasa. Mereka akan menulis beberapa baris
coding dan kemudian menjalankan skrip kode untuk kelas/fungsi tertentu tersebut
untuk melihat hasilnya sesuai harapan atau tidak. Itulah unit test. Pengetesan
pada class atau fungsi API.
Kali
ini kami akan memperkenalkan salah satu framework untuk testing unit di PHP
yakni PHPUnit. Framework ini diciptakan oleh Sebastian Bergmann, seorang pioner
di bidang quality assurance dalam projek PHP.
Alur
pekerjaan programer pada umumnya adalah membuat terlebih dahulu class, kemudian
testing, setelah itu baru digunakan. Dengan PHPUnit maka akan sedikit berbeda
alurnya. Berikut merupakan kira-kira alur yang cukup baik untuk menjelaskan
dari pear.php.net :
- desain kelas/fungsi
- buat sebuah rangkaian nilai yang ingin dites
- implementasi kelas/fungsi
- jalankan rangkaian test
- perbaiki kesalahan atau error dan kembali ke langkah ke 4
Langkah-langkah
ini mungkin kelihatannya memerlukan waktu yang sangat banyak, tetapi sebenarnya
tidaklah demikian. Faktanya untuk membuat sebuah rangkaian test dengan PHPUnit
cukup beberapa menit dan untuk menjalankan test cukup beberapa detik.
Untuk
memberi gambaran sekilas bagaimana menggunakan PHPUnit maka kami akan
menyajikan contoh-contoh coding dari website pear.php.net.
Pertama,
kita akan membuat kelas terlebih dahulu. Untuk contoh kali ini kita akan
membuat sebuah kelas String.
Setelah
selesai membuat kelas, sekarang langkah berikutnya kita membuat rangkaian tes.
Tes ini akan mengecek semua fungsi di kelas String tadi. Dalam fungsi tes nilai
yang diharapkan akan dibandingkan dengan hasil dari fungsi. Hasil dari
komparasi(membandingkan) nilai ini dilakukan oleh fungsi assert*() yang
disediakan PHPUnit. Fungsi itu akan menentukan apakah lulus atau gagal melewati
tes.
Kita
sudah membuat rangkaian tes, maka langkah selanjutnya adalah mengetes rangkaian
tes itu sendiri dengan mengirim nilai kosong. Kita harus yakin bahwa rangkaian
tes ini harus fail(gagal) semuanya. Mengapa? Karena kita sedang mengetes
sesuatu yang masih kosong. Jadi apabila ternyata rangkaian testnya malah ada
yang pass di tahap ini(padahal sudah jelas-jelas datanya kosong) tentu ada
masalah di koding rangkaian test yang dibuat tadi.
Setelah
selesai mencoba rangkaian tes, maka saatnya untuk implementasi kelas String.
Ketika
implementasi selesai dan kita mencoba menjalankannya dengan commandline:
php -f stringtest.php
php -f stringtest.php
TestCase
stringtest->testtostring() passed
TestCase stringtest->testcopy() passed
TestCase stringtest->testadd() failed: expected true, actual false
TestCase stringtest->testcopy() passed
TestCase stringtest->testadd() failed: expected true, actual false
Tes
sekali lagi dan coba dijalankan lagi:
php -f stringtest.php
php -f stringtest.php
TestCase
stringtest->testtostring() passed
TestCase stringtest->testcopy() passed
TestCase stringtest->testadd() passed
TestCase stringtest->testcopy() passed
TestCase stringtest->testadd() passed
Oke, semuanya berjalan dengan benar. Sekilas dilihat sepertinya banyak sekali yang harus dilakukan hanya untuk mengetes tiga fungsi sederhana. Anda pasti merasa “sepertinya lebih cepat pakai cara echo dan die() deh”. Oke, memang untuk coding sederhana ini terlihat mubazir, tetapi coba pikirkan ketika kita harus mengembangkan aplikasi yang kompleks seperti aplikasi shopping cart, di mana kita mungkin harus membuat kelas Basket atau kelas Checkout yang rumit. Untuk kasus seperti demikian maka PHPUnit benar-benar sangat berguna untuk mendeteksi error secara dini.
Contoh
kegunaan lainnya adalah, bisa saja anda terkadang perlu mengimplementasikan
kelas yang sudah dibuat ke projek atau aplikasi lain. Tanpa adanya rangkaian
tes, kemungkinan untuk merusak sesuatu dalam aplikasi yang tergantung pada
kelas tersebut sangat besar, misalnya karena kita menambah-nambah fitur, tanpa
sengaja mengubah koding lama kelas. Di sinilah letak kekuatan unit test. Anda
akan menciptakan sebuah rangkaian tes, dan mengembangkan kelas kamu, selama dia
lulus tes, maka anda dapat yakin bahwa aplikasi yang bergantung pada kelas
tersebut pasti berjalan.
Sumber :
http://www.computesta.com/blog/2010/09/phpunit-pengecekan-coding-yang-lebih-pro/#.T9gR-lJyPIV
http://eca-ace.blogspot.com/2012/04/unit-testing.html
Sumber :
http://www.computesta.com/blog/2010/09/phpunit-pengecekan-coding-yang-lebih-pro/#.T9gR-lJyPIV
http://eca-ace.blogspot.com/2012/04/unit-testing.html