Saat mengoreksi bug, disarankan di mana saya bekerja untuk pertama kali menulis tes yang gagal dengan bug yang diberikan, dan kemudian memperbaiki kode sampai tes berlalu. Ini mengikuti praktik TDD, dan seharusnya menjadi praktik yang baik, tetapi saya perhatikan cenderung menghasilkan tes samar yang mendekati implementasi.
Misalnya, kami memiliki masalah ketika pekerjaan dikirim, mencapai kondisi tertentu, dibatalkan, dan dicoba lagi. Untuk mereproduksi bug ini, tes besar-besaran ditulis dengan sinkronisasi utas di dalamnya, banyak ejekan dan semacamnya ... Itu berhasil, tapi sekarang saya refactoring kode, saya merasa sangat tergoda untuk hanya menghapus mammoth ini, karena itu benar-benar membutuhkan banyak pekerjaan (lagi) agar sesuai dengan desain baru. Dan itu hanya menguji satu fitur kecil dalam satu kasus spesifik.
Karena itu pertanyaan saya: bagaimana Anda menguji bug yang sulit direproduksi? Bagaimana Anda menghindari membuat hal-hal yang menguji implementasi, dan merusak refactoring dan keterbacaan?