Yukihiro "Matz" Matsumoto

Often people, especially computer engineers, focus on the machines. They think, "By doing this, the machine will run fast. By doing this, the machine will run more effectively. By doing this, the machine will something something something." They are focusing on machines. But in fact we need to focus on humans, on how humans care about doing programming or operating the application of the machines. We are the masters. They are the slaves.
Yukihiro "Matz" Matsumoto, Creator of Ruby

Senin, 20 Oktober 2014

Konsep Dasar Test Driven Development Pada Rails

Dalam mengembangkan suatu fitur baru didalam website, dikenal istilah Test Driven Development dalam proses pengembangan. TDD merujuk pada suatu pendekatan dimana kita melakukan list dari spesifikasi fitur yang kita inginkan dalam aplikasi web, menjalankan tersebut dengan hasil fail, melakukan penulisan kode agar hasil dapat dilalui dengan success, kemudian setelah tes berhasil, dilakukan refactor untuk meningkatkan kualitas kode yang ditulis. Proses ini sering disebut, red(fail)-green(success)-blue(refactor). 

Dengan melakukan pendekatan ini, programmer dapat lebih meningkatkan kepercayaan diri mereka akan kode-kode yang mereka tulis, karena kode harus melewati tahapan green terlebih dahulu untuk mengetahui apakah tidak ada kesalahan atau typo dalam penulisan kode. Cara ini mungkin terlihat lamban bagi anda yang baru pertama kali mengenalnya, saya juga mengalami hal yang sama. Sebelumnya, saya tidak pernah melakukan test secara intensif pada kode yang saya tulis, sehingga hampir selalu terjadi error yang sangat sulit saya deteksi dan saya harus buka tutup browser, reload page untuk melakukan debugging sehingga menghabiskan waktu yang cukup lama. Untuk beradaptasi terhadap TDD adalah anda harus terus berlatih dalam menggunakannya sampai pendekatan ini benar-benar menjadi kebiasaan anda dalam penulisan kode.

Berikut saya akan memperlihatkan konsep dasar dalam penulisan kode Rails menggunakan pendekatan TDD ini. Untuk test library yang saya gunakan adalah berupa RSpec dan Capybara. Untuk melihat instalasinya pada aplikasi Rails anda dapat melihat pada artikel ini, RSpec pada Rails.

Contoh ini akan mengimplementasikan fitur routing pada web.


Didalam folder spec, dibuat terlebih dahulu folder baru dengan nama features yang akan menampilkan spec fitur-fitur baru yang akan dibuat. Dalam contoh, ini dibuat spec list product yang akan menampilkan produk dalam route products_path. Dalam file spec, terlebih dahulu diimpor rails_helper yang akan digunakan RSpec dalam menggunakan konfigurasi yang ada. Kemudian digunakan kata kunci describe yang memberikan blok untuk mendeskripsikan konteks dari test yang akan kita lakukan, dimana pada saat ini kita akan menamplikan list indeks dari produk. Di dalam blok deskripsi ini kita akan memberikan test-test yang akan kita lakukan dengan kata kunci it beserta penjelasan dari test yang akan menerima blok berisi ekspetasi yang kita harapkan dari test tersebut.

Dalam spek test diatas, diharapkan agar user sukses menuju ke http://www.example.com/products. Digunakan method RSpec expect untuk melakukan pengecekan apakah path yang berhasil dikunjugi sama dengan products_path.



Tentu saja hasil yang dihasilkan adalah failure, karena belum dibuat implementasi dari kode ini. Hal yang penting disini adalah kita tidak panik dan takut dengan deskripsi error yang dihasilkan, melainkan kita langsung menganalisa error tersebut. Di sini terlihat deskripsi no route matches [get] products, yang berarti Rails belum mengetahui routes /products dalam konfigurasinya. Dari error ini, kita dapat langsung mengimplementasikan kode yang akan kita buat agar hasil nya menjadi hijau atau success.



Pada konfigurasi routes.rb ditambahkan route GET yaitu products yang akan merespon pada action index pada products controller. Kita lakukan lagi test pada RSpec...


Hasil yang didapatkan masih tetap failure, tetapi dengan deskripsi error yang berbeda, sekarang deskripsinya berupa unitialized constant product controller. Langkah berikut yang harus kita lakukan adalah membuat product controller dengan Rails generator beserta method index didalamnya.


Menggunakan rails generator command untuk membuat controller products, disini digunakan kata products dalam bentuk plural sebagai konvensi dari Rails bahwa kontroller menampilkan objek dalam bentuk plural. Berbeda dengan model yang menggunakan bentuk singular.


Setelah products controller berhasil dibuat, berikutanya kita tambahkan method index ke dalam products controller tersebut. Berikutnya kita akan melakukan test lagi melalui Rspec.


Hasil yang diberikan adalah failure dengan deskripsi bahwa Rails tidak menemukan template view untuk ditampilkan yang dalam konvensi rails sesuai dengan nama action yang kita berikan yaitu, index.html.erb dalam folder views/products. Berikut kita akan membuat file tersebut melalui sublime text.


File ini terletak pada path app/views/products, dan digunakan file dengan ekstensi html.erb yang merupaka konvensi dari Ruby untuk menampilkan html yang akan kita tampilkan pada pengguna.
Selanjutnya kita akan melakukan test akhir karena semua kode telah berhasil kita buat, kita akan mengecek apakah ada kesalahan/typo yang kita lakukan pada penulisan kode.


Hasil yang dihasilkan adalah success, test yang dilakukan berhasil untuk menuju ke products_path dan memastikan url yang dituju sama dengan products_path. Apabila anda ingin melakukan refactor code, anda dapat melakukannya, dan pastikan agar hasil yang diberikan melalui RSpec tetap memberikan hasil success.

Begitulah proses secra garis besar yang dilakukan pada saat kita melakukan pengembangan dengan pendekatan TDD. Proses ini memakan waktu yang lebih lama, tetapi dapat meningkatkan kepercayaan diri akan keakuratan kode yang telah kita buat. Saya menganjurkan anda yang belum pernah menggunakan TDD agar mencoba terbiasa untuk menggunakan pendekatan ini, karena pendekatan ini sangat berfungsi dalam jangka panjang, apalagi bila anda mengerjakan proyek dalam skala besar.

Tidak ada komentar:

Posting Komentar