Orang mengatakan bahwa "berbicara tentang TDD tidak berhasil, jika Anda ingin meyakinkan seseorang untuk TDD, tunjukkan hasil". Namun, saya sudah mendapatkan hasil yang bagus tanpa TDD. Menunjukkan kepada saya bahwa orang yang menggunakan TDD mendapatkan hasil yang baik tidak akan meyakinkan, saya ingin melihat bahwa orang yang menulis TDD dan bukan-TDD mendapatkan hasil yang lebih baik dengan TDD.
Terlepas dari semua ini, saya tertarik untuk mencoba TDD. Namun saya tidak yakin saya akan mendapatkan apa pun dari ini. Jika terbukti bermanfaat, saya akan mencoba mendorongnya ke seluruh tim saya.
Pertanyaan utama saya adalah ini: Apakah TDD melayani tujuan apa pun untuk kode, jika saya sudah dapat membuktikan kebenaran kode?
Jelas, tidak ada yang peluru. Bukti Anda mungkin salah karena Anda melewatkan detail, dan pengujian Anda mungkin gagal menemukan bug yang gagal Anda uji. Pada akhirnya, kita manusia, tidak ada yang bisa membuat kode bebas bug 100% selamanya. Kami hanya bisa berusaha sedekat mungkin.
Namun, apakah TDD benar-benar menghemat waktu pada kode yang kebenarannya telah terbukti? yaitu kode yang, di mesin negara di mana kode beroperasi, semua status yang mungkin valid dan rentangnya diakui oleh pengembang, semua diperhitungkan, dan kode tersebut dirancang dalam pemeriksaan kesalahan gaya daftar putih yang melewati setiap pengecualian untuk penangan atas untuk memastikan tidak ada kebocoran yang tidak terduga -> tanpa keduanya menampilkan pesan (sesuai alasan-) kepada klien dan mengirim pemberitahuan log ke admin.
Jawaban dengan contoh nyata akan lebih baik.
Beberapa klarifikasi:
Pertanyaan ini bukan tentang apakah Anda dapat membuktikan kebenaran kode atau tidak. Mari kita asumsikan secara default bahwa tidak semua kode dapat dibuktikan benar dalam jangka waktu yang masuk akal, tetapi beberapa kode dapat. Misalnya, sangat mudah untuk membuktikan kebenaran modul FizzBuzz. Tidak mudah untuk layanan sinkronisasi data berbasis cloud.
Dalam batasan ini, pertanyaan diajukan sebagai berikut: Mulai dengan asumsi bahwa basis kode dibagi menjadi 2 bagian: [I] bagian yang telah terbukti benar [II] bagian yang belum terbukti benar, tetapi diuji secara manual untuk bekerja.
Saya ingin menerapkan praktik TDD ke basis kode ini yang tidak memilikinya hingga sekarang. Pertanyaannya adalah sebagai berikut: haruskah TDD diterapkan ke setiap modul tunggal, atau apakah cukup untuk menerapkannya hanya pada modul yang tidak terbukti benar?
"Terbukti benar" berarti Anda dapat mempertimbangkan modul ini sepenuhnya fungsional-gaya, yaitu, ia tidak bergantung pada keadaan global atau luar di luar itu sendiri, dan sepenuhnya memiliki API sendiri untuk I / O yang harus diikuti oleh modul lain yang berinteraksi dengannya. . Tidak mungkin untuk "memecah modul ini" dengan mengubah kode di luar modul, paling buruk Anda dapat menyalahgunakannya dan mendapatkan pesan kesalahan yang diformat dikembalikan kepada Anda.
Jelas, setiap aturan memiliki pengecualian, bug penyusun dalam versi penyusun baru dapat memperkenalkan bug pada modul ini, tetapi bug yang sama dapat diperkenalkan ke pengujian yang mengujinya dan menghasilkan rasa aman yang salah dari pengujian yang tidak lagi berfungsi sebagaimana dimaksud. Intinya adalah bahwa tes bukan solusi ajaib, mereka adalah lapisan perlindungan lain, dan pertanyaan ini membahas masalah apakah lapisan perlindungan ini sepadan dengan usaha dalam kasus spesifik modul yang terbukti benar (asumsikan bahwa memang).