Ini bukan bug
Setidaknya tidak pada kode Anda. Ini adalah bug dalam proses Anda . Manajer proyek Anda harus lebih khawatir tentang proses Anda daripada kode Anda.
Bagaimana Anda menangani ini?
Sederhananya, dengan tidak membiarkan para insinyur mengubah produksi atau pengembangan bersama database .
Dengan asumsi ini adalah database pengembangan bersama:
Idealnya, jika memungkinkan, hindari memiliki database bersama di tempat pertama . Sebaliknya, miliki basis data per-pengembang yang berumur pendek. Ini harus diotomatisasi dengan skrip, jika tidak biaya untuk pengujian menjadi terlalu besar, dan ada insentif untuk tidak menguji sesuatu. Anda dapat memiliki database ini di workstation pengembang, atau di server pusat.
Jika, karena suatu alasan, Anda benar-benar HARUS memiliki database bersama, Anda harus menggunakan fixture - pada dasarnya, sesuatu yang mengatur database ke kondisi yang dikenal baik setiap kali Anda perlu menggunakannya. Ini menghindari pengembang digigit oleh perubahan orang lain.
Jika Anda perlu menerapkan perubahan permanen ke database, Anda harus mengkomitnya ke kontrol sumber Anda . Setup database Anda sedemikian sehingga devs tidak memiliki izin untuk menulisnya secara langsung, dan memiliki program yang menarik perubahan dari kontrol sumber dan menerapkannya.
Akhirnya, dari deskripsi Anda tentang cara Anda men-debug sesuatu, sepertinya Anda tidak menggunakan CI . Gunakan CI . Agak sulit untuk setup, tetapi akan menghemat banyak waktu dalam jangka panjang, belum lagi menghentikan Anda dari khawatir tentang bug basis data yang tidak dapat diproduksi kembali. Anda hanya perlu khawatir tentang Heisenbugs sekarang!
Dengan asumsi ini adalah basis data produksi:
Jika pengembang Anda mengubah basis data produksi, banyak hal yang salah, bahkan jika perubahannya benar.
Pengembang tidak boleh mengakses basis data produksi . Sama sekali tidak ada alasan untuk itu, dan begitu banyak hal yang bisa menjadi sangat salah.
Jika Anda perlu memperbaiki sesuatu dalam database produksi, pertama-tama Anda membuat cadangan, mengembalikan cadangan itu pada contoh (pengembangan) yang berbeda , dan kemudian bermain-main dengan database pengembangan itu. Setelah Anda berpikir Anda memiliki perbaikan siap (pada kontrol sumber!), Anda melakukan kembali pemulihan, menerapkan perbaikan, dan melihat hasilnya. Kemudian, setelah mencadangkan semuanya lagi (dan idealnya mencegah pembaruan bersamaan), Anda memperbaiki instance produksi, idealnya melalui tambalan perangkat lunak.
Jika Anda perlu menguji sesuatu di basis data produksi ... tidak, Anda tidak perlu. Apa pun tes yang perlu Anda lakukan, Anda harus lakukan dalam contoh pengembangan. Jika Anda memerlukan beberapa data untuk melakukan tes, Anda mendapatkan data itu di sana.