Test

terima kasih telah mengunjungi blog saya

Sabtu, 09 Juni 2012

UNIT TESTING ( PHPUNIT )


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.

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

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.

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.

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 :
  • 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 :
  1. desain kelas/fungsi
  2. buat sebuah rangkaian nilai yang ingin dites
  3. implementasi kelas/fungsi
  4. jalankan rangkaian test
  5. 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
TestCase stringtest->testtostring() passed
TestCase stringtest->testcopy() passed
TestCase stringtest->testadd() failed: expected true, actual false
Tes sekali lagi dan coba dijalankan lagi:
php -f stringtest.php
TestCase stringtest->testtostring() 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


Baca Selengkapnya......