Red, Green, Refactor

Dinda Inas
7 min readApr 6, 2021

Dalam mengembangkan suatu software, diperlukan suatu jaminan kualitas atau quality assurance bahwa software tersebut dapat berjalan dengan baik. Untuk menjamin kualitas ini, perlu dilakukan software testing.

Software Testing

Software testing merupakan suatu metode untuk memastikan apakah suatu produk software telah memenuhi expected requirement dan bebas dari bug atau cacat. Tujuan dari software testing yaitu untuk mengidentifikasi adanya eror, celah, atau missing requirement pada software.

Pentingnya Software Testing

Software Testing penting untuk dilakukan karena akan menghemat biaya pengembangan produk pada jangka waktu yang lama. Dengan melakukan software testing, eror akan dapat lebih cepat dideteksi sehingga tidak menyebabkan dampak separah apabila ditemukan ketika sudah terlambat.

Namun pada intinya, software testing dilakukan untuk memenuhi kepuasan kustomer. Dengan dilakukannya software testing, maka produk yang dihasilkan akan sesuai dengan requirement kustomer, aman, dan juga berkualitas. Pada beberapa development principal pun, seperti Agile, memang sangat penting untuk menomorsatukan kepuasan kustomer.

Test Driven Development

Salah satu metode melakukan software testing dalam proses development adalah Test Driven Development (TDD). TDD merupakan suatu pendekatan development dimana test case dibuat terlebih dahulu untuk menentukan dan memvalidasi apa yang kodenya harus jalankan. Intinya, test case dibuat sebelum implementasi kodenya dibuat.

Manfaat TDD

Banyak sekali manfaat yang didapat dengan menggunakan TDD dalam development produk. Yang pertama, dengan TDD, developer dipaksa untuk memikirkan terlebih dahulu kode yang ingin ia buat. Dengan begitu, pembuatan kode akan menjadi lebih jelas tujuannya.

Selain itu, TDD juga memudahkan kita dalam melanjutkan kode yang telah dibuat sebelumnya. Misal dalam projek development yang sedang saya kerjakan sekarang, tentu saya tidak hapal dan tidak benar-benar paham akan tiap fungsionalitas dari kode yang dibuat oleh anggota tim saya yang lainnya. Bahkan, terkadang kita sendiri pun lupa akan kode yang sebelumnya telah kita buat. Hal ini rawan menyebabkan kita ‘merusak’ kode-kode yang sebelumnya telah dibuat ketika kita menambahkan kode lain.

Dengan menggunakan TDD, kita akan mendapatkan peringatan apabila test case-test case yang sebelumnya telah dibuat menjadi fail kembali. Hal ini berarti terdapat fungsionalitas kode yang tidak berjalan akibat penambahan kode yang kita lakukan. Dengan mengetahui hal tersebut, kita dapat membenarkan kode kita agar tidak menghambat jalannya kode lain. Dengan begitu, kita akan tercegah dari ‘merusak’ kode yang sebelumnya telah berhasil berjalan dan juga terhindar dari debugging yang berkepanjangan karena letak test case yang gagal pun sudah spesifik.

TDD juga membuat penulisan kode menjadi lebih rapih, dikarenakan test case-test case yang spesifik. Pada intinya, TDD membuat pengembangan software menjadi lebih maintainable, karena seluruh penulisan kode divalidasi oleh test.

Red, Green, Refactor

Red, Green, Refactor

Dalam TDD, terdapat sebuah metodologi yang disebut dengan Red, Green, Refactor. Metode ini terdiri dari tiga tahap, yaitu Red, Green, dan Refactor.

Red

Pada tahap ini, dibuat test sesuai dengan tujuan kode yang ingin diimplementasikan. Ketika test dijalankan, test akan fail karena belum terdapat kode yang memenuhi ekspektasi pada test tersebut.

Contoh kode test terdapat teks logout
Test fail dan pipeline merah

Green

Selanjutnya pada tahap Green, dibuat implementasi kode yang akan membuat test menjadi pass, atau memenuhi ekspektasi pada test. Pada tahap ini kode yang dibuat tidak harus sudah rapih, yang penting kode sudah dapat membuat test menjadi pass.

Implementasi kode mengembalikan teks logout
Test pass dan pipeline hijau

Refactor

Pada tahap ini, kita dapat merapihkan kode yang sebelumnya telah dibuat. Dalam merapihkan kode tersebut, test kita dapat kembali fail karena perubahan yang kita lakukan. Namun, itulah gunanya test, kita jadi tahu apabila perubahan kode kita mempengaruhi suatu fungsionalitas. Dengan begitu, sambil me-refactor pun kita harus memerhatikan kode kita agar tetap pass test.

Contoh refactor, pipeline hijau

Dengan adanya metode Red, Green, Refactor tersebut, kita tidak diperbolehkan untuk mengimplementasikan kode tanpa membuat test-nya terlebih dahulu. Dengan begitu, kode yang kita hasilkan akan menjadi mudah untuk di-maintain.

Clean Code

Dengan menerapkan TDD, kita juga akan terlatih dalam mebuat kode yang rapih dan bersih. Hal ini karena test case yang dibuat pun spesifik dan memaksa kita untuk membuat kelas atau fungsi berbeda untuk fungsionalitas yang berbeda.

Selain itu, pada TDD, terdapat tahap Refactor dimana kita merapihkan kode agar menjadi clean dan consise. Jadi, dengan menggunakan TDD pun akan melatih kita untuk membuat clean code.

Test Coverage

Dengan menggunakan TDD, code coverage dari projek kita dapat dengan mudah mencapai 100%. Hal ini berarti tiap baris dari kode sudah di-test. Bukan suatu hal yang aneh untuk dicapai jika menggunakan TDD, karena dalam TDD memang tiap baris kode dibuat setelah mendefinisikan test-nya terlebih dahulu.

Code coverage yang tinggi ini merupakan hal yang baik. Karena dengan begitu, kode terjamin kualitasnya dan mudah untuk di-maintain. Hal ini juga merupakan suatu konsiderasi yang penting bagi kustomer, karena kustomer tentu akan menyukai apabila kualitas dari kode produk sudah terjamin.

TDD dalam Projek

Menggunakan TDD dalam suatu projek pengembangan produk merupakan hal yang sangat bermanfaat. Khususnya pada projek Agile yang sedang saya kerjakan. Dengan menggunakan TDD, pada tiap sprint, tentu kode yang dibuat telah di-test sehingga akan meminimalisir resiko adanya bug pada saat rilis produk.

Selain itu, ketika membuat kode bagian saya, saya dapat dengan mudah sadar jika kode saya mempengaruhi kode teman saya yang lain dengan melihat test yang fail. Dan yang paling bermanfaat menurut saya adalah test mempermudah saya dalam memahami kode teman saya. Dengan membaca testnya, saya jadi mengerti apa yang kodenya lakukan.

Cukup Sulit

Namun, di satu sisi, dalam kenyataannya, cukup sulit untuk dapat benar-benar membuat test yang menyeluruh tiap sebelum membuat kode. Terlebih dalam metode development seperti sprint yang memiliki batas waktu yang pendek. Hal ini karena terkadang kita bahkan belum familiar dengan framework yang kita gunakan, sehingga kode yang ingin dibuat pun belum dapat kita bayangkan.

Jujur saja, testing terasa lebih mudah untuk bagian back end, dibandingkan front end. Saya merasakannya dalam projek saya yang sekarang, terlebih karena framework yang saya gunakan baru saya pelajari. Dan dengan waktu yang pendek, rasanya waktu yang dibutuhkan sangat terpotong apabila mempelajari cara membuat test-nya terlebih dahulu.

Namun, karena bekerja dalam tim, mengerjakan testing menjadi sedikit lebih mudah. Karena saya dapat mengikuti cara teman saya melakukan test untuk suatu bagian kode yang memiliki fungsionalitas yang mirip, begitu pula sebaliknya. Sehingga walaupun sama-sama bingung, tetapi ketika sudah ada anggota tim yang bisa mengetest suatu fungsionalitas, maka yang lain juga jadi terbantu untuk membuat testnya.

Walaupun begitu, menurut saya melakukan test untuk front end itu tetaplah sulit apabila menggunakan metode sprint yang berjangka waktu dua minggu. Tetapi saya pun juga mengerti bahwa memang membuat test ibarat ‘bersusah-susah dahulu, bersenang-senang kemudian’. Karena memang TDD penting sekali untuk dilakukan agar kode yang dihasilkan terjamin dan berkualitas. Sehingga projek kita bisa terhindar dari bug dan memudahkan kita sendiri untuk nantinya melakukan maintainence.

Namun, untuk 100% melakukan test yang menyeluruh untuk baris per baris kode sebelum mengimplementasikannya memang jauh lebih sulit dari teori yang dipahami. Terkadang bahkan bisa menghambat jalannya projek apabila kita fokus mencari cara membuat test agar 100% ter-cover terlebih dahulu.

Terus Tingkatkan

Tidak mengapa apabila coverage tidak langsung mencapai 100% di awal. Code coverage dapat terus dicoba untuk ditingkatkan sambil dengan terus mempelajari cara membuat test yang baik dan menyeluruh. Dengan begitu, diharapkan kode yang dihasilkan tetap berkualitas dan tidak melebihi batas waktu yang ditentukan. Jangan putus asa dalam mengembangkan produk hanya karena membuat test ya, tetap semangat!😁

--

--

Dinda Inas
0 Followers

undergraduate computer science student