| Empat Alasan Untuk Melakukan Unit Test | |
|---|---|
| Tweet Topic Started: Sep 9 2012, 10:25 PM (240 Views) | |
| jockihendry | Sep 9 2012, 10:25 PM Post #1 |
|
32-bit
![]() ![]() ![]() ![]() ![]()
|
Berhubung sudah ada yang nge-post di forum ini, gw ikutan juga. Topiknya adalah mengapa kita perlu melakukan unit test? Kebanyakan developer mulai membangun sebuah sistem mulai dari back-end, misalnya mulai dari DAO dan Service Layer. Setelah back-end selesai, biasanya developer baru beralih ke front-end (presentation layer, seperti PHP, JSP, dan HTML). Pertanyaannya adalah pada saat back-end selesai dibangun, bagaimana developer bisa yakin back-end nya sudah benar dan bisa jalan? Padahal, kita tahu bahwa untuk menguji sebuah program baik web maupun desktop harus ada tampilan dulu (presentation layer) yang bisa di-klik/di-ketik, bukankah begitu? Tidak! Kita bisa menguji dengan unit test, misalnya dengan JUnit atau PHPUnit. Sebagai contoh, untuk menguji method login di class UserService, developer bisa membuat unit test berikut:
Pada kode program di atas, developer menyimpan sebuah objek User dengan memanggil service saveUser(). Lalu dengan assertEquals(1, super.countRowsInTable("user")), developer memastikan bahwa pada database harus ada 1 record. Bila tidak ada record baru, maka method tidak akan lulus ujian. Setelah itu, developer menguji service login(). Ia memberikan tiga assert: pertama, untuk kasus username dan password benar; kedua, untuk kasus username benar dan password salah; dan ketiga, untuk kasus username salah dan password benar. Contoh tampilan hasil pengujian unit test untuk seluruh service di class User di Eclipse STS: ![]() Jadi, mengapa kita perlu melakukan unit test?
INFO: Sebenarnya yang saya tunjukkan disini disebut integration test, dan kode program di atas tidak hanya memakai JUnit tetapi AbstractTransactionalJUnit4SpringContextTests dari Spring yang secara otomatis akan mengosongkan database sebelum dan setelah mulai menguji (atau teknis-nya: rollback transaction) Edited by jockihendry, Sep 9 2012, 10:34 PM.
|
![]() |
|
| zhang | Sep 10 2012, 05:17 AM Post #2 |
|
Hotchick Hunter
![]() ![]() ![]()
|
wow!! kalau wa sendiri bikin program selalu presentation Layer yang pertama, trus baru Logic dan database xD btw, unit test ini tujuannya sama kayak COMTESTER yang pernah dibuat kemaren ya? penjelasan umumnya, untuk mengetahui hasil dari function/method yang kita hasilkan, berfungsi atau tidak ![]() |
![]() |
|
| dreamteather | Sep 10 2012, 12:43 PM Post #3 |
|
16-bit
![]() ![]() ![]() ![]()
|
![]() maksud dari angka dibelakang apa bro??? testing yang anda lakukan menunjukkan apa aja? maklum newbie..perlu petunjuk..
Edited by dreamteather, Sep 10 2012, 12:44 PM.
|
![]() |
|
| jockihendry | Sep 10 2012, 01:14 PM Post #4 |
|
32-bit
![]() ![]() ![]() ![]() ![]()
|
Haha.. tergantung situasi dan kondisi, pada beberapa kasus, bisa jadi itu memang pilihan terbaik. Seandainya kalau kita punya banyak resources (punya banyak programmer), lebih baik lagi kalau front-end dan back-end dikerjakan secara serempak sehingga proyek lebih cepat selesai. Beda dengan COMTESTER.. Kalo COMTESTER itu sebuah tools yang harus dijalankan secara manual. Sementara unit test disini adalah sebuah pengujian yang dilakukan secara otomatis. Analoginya: Bayangkan jika kamu punya robot-robot yang setiap kali kamu melakukan kesalahan, dia akan memberitahu kamu. Berbeda dengan syntax error yang highlight hanya merah2, unit test memastikan sebuah class benar-benar bekerja seperti yang kita harapkan. Misalnya, jika kamu mengharapkan method A bisa INSERT 1 record ke database, maka unit test akan memberitahu kamu jika method tersebut ternyata ga bisa insert ![]()
Angka di belakang itu adalah berapa lama waktu yang diperlukan untuk mengerjakan testing method tersebut. Misalnya, untuk menguji method getUser(), saya membuat fungsi testGestUser() yang selesai dikerjakan dalam waktu 0,079 detik (s). Warna hijau dan tanda centang menunjukkan bahwa test sukses sesuai harapan. Warna merah memberitahukan bahwa test gagal karena syntax error. Warna kelam menunjukkan bahwa walaupun ga ada syntax error, secara logika ada yang salah (assert fail). Testing yang saya melakukan, misalnya di testGetUser(), saya menyimpan sebuah User, kemudian saya memanggil getUser(), dan saya membandingkan apakah User yang saya get persis sama seperti yang akan saya simpan. Begitu juga, misalnya di testDeleteUser(), saya menyimpan sebuah User. lalu saya memanggil deleteUser(), lalu saya memeriksa (dengan assert) untuk memastikan di database sudah kosong. Dan sebagainya... |
![]() |
|
| zhang | Sep 10 2012, 05:34 PM Post #5 |
|
Hotchick Hunter
![]() ![]() ![]()
|
wah Jock, ada yg diatas 6,303 s itu hasil testnya, kok bisa paling lama sendiri ya? apakah terlalu berat atau data yg di load terlalu besar? |
![]() |
|
| jockihendry | Sep 10 2012, 07:09 PM Post #6 |
|
32-bit
![]() ![]() ![]() ![]() ![]()
|
Wow.. Ga tau tuh.. Gw blom memeriksa isinya seperti apa... Hahaha...Biarpun gw blom bikin tampilan, ternyata sudah ketahuan ada satu method yang bakal lama kalau dipanggil.. Semua berkat unit tes dan ketelitian orang yang melihat hasil unit test-nya
|
![]() |
|
| zhang | Sep 10 2012, 10:21 PM Post #7 |
|
Hotchick Hunter
![]() ![]() ![]()
|
nah satu pertanyaan dariku... kecepatan yang diberikan oleh UNIT TEST ini, secara standar/umum atau tidak?? maksudnya, apakah dipengaruhi juga dengan spek komputer kita?? btw, itu di atas bisa tembus 6 second, pdhal method lain hanya nol koma seper sekian detik, pasti ada problem tuh di codingnya, hehehehe.. soalnya rentang waktu antara method itu dan method lain bedanya beratus" kali lipat |
![]() |
|
| jockihendry | Sep 10 2012, 10:29 PM Post #8 |
|
32-bit
![]() ![]() ![]() ![]() ![]()
|
Kecepatan yang diberikan itu tergantung pada komputer kita.. Sangat sulit membuat benchmark yg seragam dan tidak tergantung dengan hardware yang dipakai dalam benchmark. Dalam dunia industri TI, yang paling mendekati untuk mengukur 'kecepatan' adalah Transaction Per Second (TPS) = berapa banyak transaksi yg bisa di-handle dalam 1 detik.. Tapi itu diluar topik JUnit, karena fungsi JUnit hanya untuk unit testing. Yup, benar, ada yang patut dicurigai di method tersebut dan perlu diperiksa
|
![]() |
|
| dreamteather | Sep 13 2012, 01:25 AM Post #9 |
|
16-bit
![]() ![]() ![]() ![]()
|
ow...tq jadi ngerti hahahah..
|
![]() |
|
| 1 user reading this topic (1 Guest and 0 Anonymous) | |
| « Previous Topic · Dokumentasi dan Pengujian · Next Topic » |
| Theme: Zhang Paradise | Track Topic · E-mail Topic |
3:51 PM Jul 11
|





![]](http://z5.ifrm.com/static/1/pip_r.png)

gambar1.png (12.81 KB)





3:51 PM Jul 11