Coba jelasin Proses TDD dari Test-driven development dong

Proses TDD ditunjukkan oleh langkah-langkah berikut:

Praktisi mulai dengan mengidentifikasi penambahan fungsi yang diperlukan. Fungsi ini biasanya kecil dan dapat diterapkan dalam beberapa baris kode.

Praktisi menulis pengujian untuk fungsi ini dan mengimplementasikannya sebagai pengujian otomatis (automated testing). Ini berarti bahwa pengujian dapat dieksekusi dan akan melaporkan apakah telah lulus (pass) atau gagal (failed).

Praktisi kemudian menjalankan pengujian, bersama dengan semua pengujian lain yang telah dilaksanakan. Awalnya, praktisi belum mengimplementasikan fungsionalitasnya sehingga pengujian baru akan gagal. Hal ini disengaja karena menunjukkan bahwa pengujian menambahkan sesuatu ke test set.

Praktisi kemudian mengimplementasikan fungsionalitas dan menjalankan kembali pengujian. Ini mungkin melibatkan refactoring kode yang ada untuk memperbaikinya dan menambahkan kode baru ke apa yang sudah ada.

Setelah semua pengujian berhasil, praktisi beralih ke mengimplementasikan fungsionalitas berikutnya.

Lingkungan pengujian otomatis, seperti JUnit yang mendukung Java Program Testing, sangat penting untuk TDD. Karena kode dikembangkan dalam increment yang sangat kecil, praktisi harus dapat menjalankan setiap pengujian setiap kali praktisi menambahkan fungsionalitas atau memperbaiki program. Oleh karena itu, pengujian ditanam dalam program terpisah yang menjalankan pengujian dan memanggil sistem yang sedang diuji. Dengan menggunakan pendekatan ini, dimungkinkan untuk menjalankan ratusan pengujian terpisah dalam beberapa detik.

Argumen yang kuat untuk Test-driven Development adalah bahwa hal itu membantu programmer menjelaskan ide-ide mereka tentang apa yang seharusnya dilakukan oleh setiap segmen kode. Untuk menulis pengujian, praktisi perlu memahami apa yang dimaksudkan, karena pemahaman ini memudahkan untuk menulis kode yang diperlukan. Tentu saja, jika praktisi memiliki pengetahuan atau pemahaman yang tidak lengkap, maka Test-driven Development tidak akan membantu. Jika praktisi tidak cukup tahu untuk menulis pengujian, praktisi tidak akan mengembangkan kode yang diperlukan. Misalnya, jika perhitungan praktisi melibatkan pembagian, praktisi harus memeriksa bahwa praktisi tidak membagi angka dengan nol. Jika praktisi lupa menulis pengujian untuk ini, maka kode yang akan diperiksa tidak akan pernah dimasukkan dalam program.