Di dalam dunia pemrograman, terdapat banyak pendekatan yang dilakukan untuk mengembangkan sebuah produk, salah satunya yaitu test driven development (TDD). Ternyata, metode tersebut cukup kontroversial di dunia pemrograman. Mengutip dari Devmountain , ada beberapa programmer yang beranggapan bahwa metode test driven development membutuhkan waktu yang begitu banyak. Oleh karena itu, prosesnya menjadi cukup lama dan melelahkan. Namun, sebenarnya, tidak sedikit juga manfaat dari gaya pemrograman ini. Sehingga kesiapan sebuah aplikasi maupun website menjadi tanggung jawab seorang developer untuk memastikannya. Sehingga munculah istilah Test Driven Development (TDD) yang berguna untuk memastikan bahwa aplikasi atau website kita bebas dari yang namanya error maupun Bug Free. Test Driven Development (TDD) merupakan pengembangan yang mengacu kepada testing sebelum melakukan proses coding. Test Driven Development menggabungkan keutamaan coding serta testing dalam implementasinya, proses tersebut juga dilakukan untuk memastikan aplikasi kita sudah berjalan sesuai dengan requirement serta mampu menangani berbagai kasus atau situasi atau belum. Memangnya, seperti apa cara melakukan metode tersebut? Lalu, apa saja kelebihan serta kekurangan dari test driven development? Mari simak penjelasan mengenai test driven development dibawah ini.
Sebelum kita masuk ke definisi Test Driven Development, ada baiknya kita bahas mengenai pengembangan software secara konvensional yang biasa dilakukan oleh orang kebanyakan. Pada mulanya kita akan diberi software requirements atau daftar yang berisi spesifikasi software yang akan kita buat. Kemudian kita akan mulai mengerjakan alias menulis kode sesuai dengan permintaan. Setelah itu kita akan tes aplikasi apakah berjalan dengan baik dan jika semuanya berjalan dengan baik dan benar, maka kita akan berikan aplikasi kita ke client untuk di tes lebih lanjut maupun digunakan untuk produksi. Jika dilihat sekilas tidak ada masalah bukan ? Skenario diatas akan berjalan lancar apabila requirements tidak akan pernah berubah akan tetapi sayangnya, hal tersebut jarang sekali atau bahkan tidak pernah terjadi Dalam proses pengembangan software yang sesungguhnya, requirements akan selalu berubah dengan mengikuti kebutuhan. Sehingga akan muncul masalah-masalah seperti dibawah ini: -Penambahan fitur akan membuat break kode yang sudah ada atau menambah bugs yang baru. -Kode yang break dan bugs seringkali tidak akan terdeteksi di awal sehingga terbawa sampai ke level production. -Membuat developer menjadi tidak percaya diri dalam menambah, merubah, serta mengembangkan fitur karena takut aplikasi akan break. -Proses menemukan bugs secara manual yang memakan waktu lama serta sangat membosankan. Karena itu, kita memerlukan automated test yang berfungsi untuk mengecek apakah baris kode yang kita tambahkan tidak merusak kode yang sudah ada atau menambah bugs yang baru sehingga aplikasi tetap akan berjalan sesuai dengan apa yang sudah direncanakan. Prosesnya akan lebih cepat dan konsisten karena testing yang dilakukan oleh komputer dengan menjalankan script test yang ada. Akan tetapi tradeoff-nya merupakan proses pengembangan yang lebih lama, karena selain menulis kode, developer juga perlu menulis test untuk kode tersebut. Akan tetapi hal tersebut sering dipandang sebagai investasi karena waktu yang diperlukan untuk menulis test jauh lebih sedikit apabila dibandingkan dengan waktu yang dibutuhkan untuk mengecek bugs secara manual karena ketiadaan dari automated test.
Sekarang kita sudah mengerti mengapa kita memerlukan automated test serta mencoba untuk mengaplikasikannya. Alurnya yaitu kita menulis kode terlebih dahulu, setelah semuanya selesai baru kita menuliskan automated test-nya. Akan tetapi terdapat beberapa kelemahan yang muncul dengan metode tersebut yakni : Over-engineering : setelah menuliskan test, kita baru sadar jika implementasi yang kita tulis menjadi lebih kompleks dari yang seharusnya. Kode yang kita tulis sulit untuk di tes, sehingga akan membuat kita harus menyesuaikan kode yang sudah kita buat supaya bisa di tes oleh automated test. No Test at All : Kita menjadi malas untuk menulis automated test karena implementasi production code sudah selesai dan sudah berjalan dengan baik. Sehingga, kita balik metodenya Test terlebih dahulu, Setelah itu Working Code. Dengan demikian metode tersebut kita kenal dengan istilah Test Driven Development.
Mengutip dari IBM Developer, test driven development adalah sebuah cara programming yang cukup unik. Karena, ia merupakan kebalikan dari metode development serta testing yang umum. Pada test driven development, kita menyusun unit untuk testing terlebih dahulu serta mengimplementasikan perubahannya setelah itu. Proses tersebut mengkombinasikan pemrograman, pembuatan testing unit, serta refactoring. Pada awalnya seorang developer akan membuat test case kecil yang kemudian akan diuji coba. Nah, Apabila tes tersebut gagal, maka kode baru harus dibuat. Tujuannya yakni untuk menghindari kode yang terulang. Test Driven Development dikembangkan dari prinsip Agile dan Extreme programming. Dengan metode tersebut, developer serta tester bisa mendapat kode yang sudah optimal. Harapannya, kode tersebut dapat bekerja dengan baik untuk waktu yang lama.
Pada dasarnya, terdapat 5 tahap untuk melakukan Test Driven Development, yaitu seperti di bawah ini: -Membuat tes -Melakukan uji coba serta lihat apakah terjadi kegagalan -Menulis kode sesuai dengan hasil pada tahap 2 -Memulai uji kembali serta lakukan refactor pada kode -Ulangi Mungkin jika dilihat secara teori, tahap-tahap Test Driven Development terlihat cukup sederhana untuk dipahami, bukan?
1. Bug cepat teridentifikasi Bug maupun masalah dalam kode pemrograman akan cepat diketahui apabila menggunakan metode test driven development. Karena, uji coba akan terus menerus dilakukan secara berulang dalam proses yang singkat. 2. Desain yang lebih bagus Test driven development merupakan metode yang membantu membuat kode lebih mudah untuk dipahami. Selain itu, interaksi dengan modul lain juga akan lebih jelas. Karena ditulis dalam kode-kode yang lebih singkat, Test Driven Development juga akan menjadi tidak begitu rumit. 3. Menghindari kerusakan akibat refactor Pada saat melakukan refactor kode, kita mungkin saja akan menghadapi masalah maupun kerusakan dalam kode. Akan tetapi, dengan adanya Test Driven Development yang telah terotomatisasi, kita bisa memperbaiki masalah tersebut sebelum rulus. Karena, akan ada peringatan yang memberi kita informasi mengenai kerusakan kode tersebut. Kode buatan kita dapat lebih cepat serta ekstensif dengan bug yang lebih mudah diatasi. 4. Mudah diambil alih Tentu saja dalam pengembangan sebuah software akan lebih mudah jika dilakukan secara bersama. Test driven development merupakan metode yang mudah dilanjutkan apabila salah satu anggota sedang tidak masuk kerja. Developer tidak perlu bingung harus melanjutkan dari mana, karena kode yang ada akan sangat mudah dibagikan serta dipahami. Dengan demikian, efektivitas kerja tim akan lebih optimal. 5. Mudah bagi developer Meskipun Test Driven Development cenderung membutuhkan waktu yang lebih lama untuk selesai, seorang developer tidak perlu melakukan debugging berulang-ulang. Karena, kesalahan dalam kode sudah bisa dikurangi dari awal. Dengan demikian, seorang developer akan menghasilkan kode yang lebih clean serta tidak begitu kompleks.
Pada saat kita menyelesaikan mengerjakan suatu fitur, pertanyaan yang sering muncul yaitu “apa tolak ukur fitur tersebut sudah selesai atau belum?” jawabannya apabila lulus testing dari dua kategori pengujian ini: -Apakah software telah memenuhi requirement yang ditentukan? -Apakah software tetap akan berjalan dalam berbagai kasus yang di luar dugaan? Dari kedua kategori pengujian di atas hanya melibatkan seluruh komponen saja, masih terdapat jenis testing yang lebih diperuntukan menguji komponen code dalam berbagai ruang lingkup. Secara umum jenis testing berdasarkan ruang lingkupnya terbagi menjadi tiga yakni: Unit testing Unit testing merupakan untuk menguji apakah fungsi maupun class dalam code berjalan dengan baik atau tidak. Integration testing Integration testing merupakan untuk menguji apakah suatu fitur berjalan dengan baik apabila jika digabungkan dengan bagian lain dari aplikasi atau website Acceptance testing Acceptance testing merupakan untuk menguji apakah aplikasi atau website bisa dipakai oleh seorang user tanpa mengalami bug maupun error. Idealnya suatu aplikasi atau website perlu diuji berdasarkan tiga ruang lingkup di atas, untuk setiap lingkupnya juga terdapat uji fungsional serta non-fungsional.
Tentu saja Test Driven Development mempunyai kelebihan jika dibandingkan dengan proses development biasa, diantaranya yaitu: -Target output yang lebih objektif -Membuat kerja seorang developer lebih efektif karena target developer hanya menulis kode yang lolos tes, daripada menulis kode yang memenuhi fitur A, B, C, dan seterusnya -Kinerja seorang developer lebih terpantau dan baik untuk mengukur kinerja tim -Ruang untuk pengembangan maupun refactor code lebih terlihat. Akan tetapi perlu diingat Test Driven Development tidak menjanjikan aplikasi atau website bisa lebih cepat terselesaikan, karena Test Driven Development hanya menjanjikan proses development lebih objektif serta transparan.
Di dalam dunia pemrograman, terdapat berbagai macam bahasa pemrograman. Oleh karena itu, tersedia juga banyak framework untuk test driven development. Framework-framework tersebut merupakan sebuah sarana untuk mempermudah proses pengerjaan suatu produk dengan pendekatan test driven development. Dibawah ini merupakan beberapa framework yang bisa menjadi pilihan: -csUnit serta NUnit: sebuah unit testing untuk .NET -PyUnit sera DocTest: sebuah unit testing untuk Python -Junit: sebuah unit testing untuk Java -TestNG: sebuah unit testing untuk Java yang lebih fleksibel dari Junit -Rspec:sebuah unit testing framework untuk Ruby.
Kesempatan lowongan magang terbaru di tahun 2024
Baca Selengkapnya..