Sedikit lebih dari setahun yang lalu saya cukup beruntung untuk dapat istirahat 9 bulan dari pekerjaan. Saya memutuskan bahwa pada waktu itu saya akan mengasah keterampilan C # saya. Saya mulai mengerjakan banyak proyek dan memaksa diri saya untuk mengikuti TDD.
Itu adalah proses yang cukup mencerahkan.
Itu sulit pada awalnya, tetapi seiring waktu saya belajar bagaimana menulis kode yang lebih dapat diuji (yang, ternyata, cenderung menjadi kode SOLID) dan dalam proses itu saya juga mempertajam keterampilan desain OO saya.
Sekarang saya kembali ke dunia kerja dan saya melihat sesuatu yang aneh.
Saya lebih suka tidak mengikuti TDD.
Saya menemukan TDD memperlambat saya dan sebenarnya membuat lebih sulit untuk merancang aplikasi yang bersih.
Sebagai gantinya, saya telah mengadopsi pendekatan yang sedikit berbeda (secara besar-besaran):
- Pilih sepotong pekerjaan vertikal
- Kembangkan prototipe yang berfungsi
- Refactor sampai semuanya bagus dan rapi
- Duduk menghargai kode SOLID dan diuji indah yang saya tulis.
Anda mungkin telah memperhatikan bahwa langkah 1 bukan "mendefinisikan permukaan publik dari target pengujian saya" dan langkah 2 tidak "menguji bejesus keluar dari permukaan publik tersebut." Anda mungkin juga memperhatikan bahwa tidak ada langkah yang melibatkan pengujian. Saya sedang menulis kode yang dapat diuji, tapi saya belum mengujinya ... dulu.
Sekarang, saya ingin memperjelas bahwa saya sebenarnya tidak meninggalkan pengujian apa pun. Kode yang saya tulis berfungsi . Ini bekerja karena saya mengujinya secara manual.
Saya juga ingin menjelaskan bahwa saya tidak meninggalkan semua pengujian otomatis juga. Di sinilah proses saya berbeda. Dan inilah mengapa saya mengajukan pertanyaan ini.
Secara teori TDD. Tidak dalam praktek.
Proses saya telah berkembang sedikit dan saya telah mencapai keseimbangan antara TDD dan tidak ada tes yang saya temukan sangat produktif dan juga cukup aman. Bunyinya sebagai berikut:
- Terapkan irisan vertikal kerja dengan pengujian dalam pikiran, tetapi jangan menulis tes apa pun.
- Jika jalan (misalnya, sebulan kemudian) irisan itu perlu modifikasi
- Tulis Tes Unit, Tes Integrasi, Tes Perilaku, dll yang menjamin potongan pekerjaan sudah benar
- Ubah kodenya
- Jika irisan itu tidak perlu modifikasi,
- Tidak melakukan apapun
Dengan hanya menggeser beban menulis tes dari sebelum menulis kode ke sebelum mengubah kode saya sudah bisa menghasilkan kode kerja yang lebih banyak. Dan, ketika saya melakukan tes menulis saya menulis lebih sedikit dari mereka tetapi mencakup hampir sama banyak (ROI lebih tinggi).
Saya suka proses ini, tapi saya khawatir ini mungkin tidak skala dengan baik. Keberhasilannya bergantung pada pengembang yang rajin menulis tes sebelum mereka mengubah hal-hal. Dan itu sepertinya risiko yang cukup besar. Tapi, TDD memiliki risiko yang sama.
Jadi, apakah saya akan ke [BT] DD sih, atau apakah ini bentuk umum dari pengkodean dan pengujian pragmatis?
Saya ingin tetap bekerja dengan cara ini. Apa yang bisa saya lakukan untuk membuat proses ini bekerja dalam jangka panjang?
catatan:Saya adalah satu-satunya pengembang di proyek saya dan saya bertanggung jawab untuk semuanya: Pengumpulan persyaratan, desain, arsitektur, pengujian, penyebaran, dll. Saya menduga inilah sebabnya proses saya bekerja.
If that slice doesn't need modification
. lizkeogh.com/2012/06/24/beyond-test-driven-development