Tampilkan postingan dengan label testing. Tampilkan semua postingan
Tampilkan postingan dengan label testing. Tampilkan semua postingan

Minggu, 30 November 2008

Lakukan Test Terhadap Program Anda

Dapat dikatakan bahwa "melakukan test terhadap kode program" merupakan salah satu kebiasaan yang paling penting dalam melakukan pembuatan program. Dengan testing yang baik, kita akan mendapatkan keleluasaan dalam pembuatan program.

Kedengarannya seperti suatu kesimpulan yang aneh. Kemungkinan kita akan berfikir, bahwa testing merupakan halangan bagi keleluasaan pembuatan program. Tapi jika kita dapat melihat bahwa sebuah test yang baik terhadap method-method public di dalam sebuah class akan membuat kita bebas untuk merubah implementasi dari method public tersebut. Kita tidak perlu takut lagi bahwa perubahan yang dilakukan akan menyebabkan kita harus merubah atau lebih parah merusak keseluruhan program kita.

Selama kita dapat melewati Unit Test yang telah dibuat untuk method-method yang public, artinya method public kita memiliki parameter dan menghasilkan keluaran seperti yang diharapkan dalam test, kita dapat yakin bahwa keseluruhan program kita dapat tetap berjalan dengan lancar.

Memastikan bahwa keseluruhan program kita dapat berjalan dengan baik hanya merupakan tujuan pertama dari dilakukannya test. Beberapa hal lain yang kita bisa harapkan dengan adanya test secara menyeluruh terhadap program kita adalah:
  1. Testing memaksa kita membuat program yang dapat dengan mudah ditest. Ketika kita membuat sebuah method, kita akan selalu berfikir bagaimana kita akan melakukan test dengan menyeluruh terhadap method kita tersebut. Hal ini membawa kita untuk melakukan perubahan-perubahan di method dan tentunya keseluruhan program yang kita buat. Hasilnya adalah bagian-bagian program yang tidak saling terikat ('loose coupling'), fleksible dan lebih modular. Dengan begitu, perubahan terhadap program di kemudian hari dapat dilakukan dengan lebih mudah.
  2. Penulisan test mendorong kita untuk fokus dan mendefinisikan dengan jelas harapan kita terhadap bagaimana seharusnya program kita bekerja. Kita akan mendefinisikan dengan jelas, jika parameter A dimasukan, maka nilai B akan dihasilkan dan seterusnya. Setelah melihat harapan kita tentang keluaran dengan berbagai masukan, selanjutnya kita akan memikirkan mengenai kemungkinan-kemungkinan input yang akan diterima oleh program kita dan kemungkinan-kemungkinan keluarannya, yang mungkin berada di luar nilai sewajarnya. Dari situ kita akan harus mengambil keputusan mengenai bagaimana kita akan menanggulanginya. Hal ini mendorong kita untuk membuat program yang lebih fleksibel terhadap masukan dan menghindari kesalahan yang dapat menghentikan jalannya program secara keseluruhan.
  3. Dengan test case yang kita miliki, orang lain dapat melihat tujuan dibuatnya method yang kita test, berikut pula cara pemakaiannya. Dengan begitu, test dapat dijadikan sebagai dokumentasi yang jelas dari program yang kita bangun. Dan, pada point 1, karena kita akan cendrung membuat method kita mudah untuk ditest dan simple, maka tentunya akan memudahkan orang lain memahami mengenai keseluruhan program yang kita tulis.
Saya berharap dengan argumentasi di atas membuat penulisan Unit Test menjadi suatu hal yang menarik untuk dilakukan karena keuntungannya akan melebihi harapan awal anda. Selain itu, untuk mulai melakukan Unit testing di PHP bukanlah suatu hal yang sulit untuk dilakukan.

Senin, 24 November 2008

Unit Testing di PHP (Bagian 1 Instalasi)

Sejalan dengan berkembangnya Object Oriented di PHP, penggunaan Testing Framework menjadi hal yang semakin banyak dibicarakan. Selain itu, PHP juga telah berkembang dari sekedar menambahkan efek dinamis di sebuah website kecil, menjadi bahasa pemrogramman aplikasi besar yang perlu memperhatikan ketepatan jalannya sebuah logika aplikasi. Dengan melakukan test yang menyeluruh, kita dapat memastikan ketepatan dari aplikasi yang kita bangun, seperti yang dijelaskan pada blog mengenai keuntungan melakukan test. Melihat hal tersebut, kita sebagai pembangun aplikasi di PHP harus sesegera mungkin mempelajari Testing Framework yang dapat membantu dalam pembangunan aplikasi.

Salah satu testing framework yang sering digunakan untuk melakukan Unit Testing di PHP adalah PHPunit. PHPunit merupakan bagian dari xUnit Testing Framework yang memudahkan penulisan testing dan menganalisa hasil dari test yang dilakukan. Instalasi PHPunit sendiri sangat mudah karena menggunakan bantuan PEAR installer dalam menjalankannya. Berikut cara instalasi PHPunit menggunakan PEAR installer.

Pertama-tama kita perlu mendaftarkan PEAR channel yang digunakan untuk mendistribusi PHPunit. Hal ini dilakukan dengan memberikan perintah:

pear channel-discover pear.phpunit.de

Setelah hal tersebut dijalankan, instalasi dapat dilakukan dengan:

pear install phpunit/PHPUnit


Setelah instalasi selesi, kita dapat menemukan file source PHPUnit di tempat kita meletakkan PEAR package. Hal ini tergantung distribusi PHP anda. Ada baiknya kita menambahkan directory tempat phpunit ke dalam PATH sehingga kita bisa memanggil program tersebut dari mana saja. Untuk memastikan instalasi berhasil, coba jalankan perintah berikut:

phpunit --version

akan keluar versi dari phpunit yang terinstall di tempat anda. Sekarang, kita tinggal membuat Unit Test yang sesuai dengan aplikasi yang kita bangun dan memanggil phpunit untuk menjalankannya. Bagaimana cara membuat unit test pertama anda, dengan menggunakan PHPUnit, akan dijelaskan pada tulisan berikutnya.

Jumat, 21 November 2008

Stress Test Aplikasi Web dengan Apache ab2

Salah satu tugas dari pembangun aplikasi adalah melakukan test terhadap aplikasi yang dibangunnya. Salah satu test yang perlu untuk dilakukan adalah Stress Test. Stress test aplikasi web bertujuan untuk melihat apakah aplikasi yang telah dibangun di atas sebuah web server dapat berjalan dengan stabil dengan beban yang diberikan. Dalam tersebut kita memberikan beban yang berbeda-beda kepada aplikasi dan melihat respon dari aplikasi web tersebut.

Untuk melakukan stress test aplikasi web tersedia berbagai macam tools. Salah satu yang menarik adalah Apache Ab (ab2 di Opensuse). Tools tersebut disediakan langsung oleh apache web server sebagai bagian dari system toolsnya. Penggunaannya sangat mudah dan tidak memerlukan banyak setting. Di Opensuse tools tersebut bisa didapatkan dengan menginstall paket apache2-utils. Untuk menggunakannya lakukan perintah berikut:

# ab -kc 10 -t 30 http://localhost/
Perintah di atas akan melakukan sepuluh koneksi secara bersamaan ke web server anda dan melakukan request secara terus menerus selama 30 detik. Hasil yang dilaporkan pun cukup menarik dan bisa diexport ke gnuplot format ataupun csv. Berikut contoh hasil dari perintah di atas:

This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Finished 50000 requests


Server Software: Apache/2.2.4
Server Hostname: localhost
Server Port: 80

Document Path: /
Document Length: 163 bytes

Concurrency Level: 10
Time taken for tests: 8.804394 seconds
Complete requests: 50000
Failed requests: 0
Write errors: 0
Keep-Alive requests: 49509
Total transferred: 22530617 bytes
HTML transferred: 8150978 bytes
Requests per second: 5678.98 [#/sec] (mean)
Time per request: 1.761 [ms] (mean)
Time per request: 0.176 [ms] (mean, across all concurrent requests)
Transfer rate: 2498.98 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 4
Processing: 0 1 4.2 1 282
Waiting: 0 1 4.2 1 282
Total: 0 1 4.2 1 282

Percentage of the requests served within a certain time (ms)
50% 1
66% 1
75% 1
80% 1
90% 2
95% 2
98% 4
99% 5
100% 282 (longest request)


Untuk melihat performance dari aplikasi web kita, ganti nilai -kc (concurrent connetion) dengan angka yang terus bertambah (hingga 50 sebagai contoh) dan tingkatkan batas waktu (-t) sehingga test dapat dilakukan dalam jangka waktu yang cukup untuk diukur. Kemudian, bandingkan hasil antara jumlah conccurent connection yang berbeda-beda tersebut. Selamat mencoba