Saya bekerja untuk perusahaan produk perangkat lunak. Kami memiliki pelanggan perusahaan besar yang menerapkan produk kami dan kami memberikan dukungan kepada mereka. Misalnya, jika ada cacat, kami menyediakan tambalan, dll. Dengan kata lain, ini adalah pengaturan yang cukup umum.
Baru-baru ini, sebuah tiket dikeluarkan dan ditugaskan kepada saya mengenai pengecualian yang ditemukan oleh seorang pelanggan dalam file log yang ada hubungannya dengan akses database bersamaan dalam implementasi produk kami secara berkelompok. Jadi konfigurasi khusus pelanggan ini mungkin sangat penting dalam terjadinya bug ini. Yang kami dapatkan dari pelanggan hanyalah file log mereka.
Pendekatan yang saya usulkan untuk tim saya adalah mencoba mereproduksi bug dalam pengaturan konfigurasi yang mirip dengan pelanggan dan mendapatkan log yang sebanding. Namun, mereka tidak setuju dengan pendekatan saya yang mengatakan bahwa saya tidak perlu mereproduksi bug karena terlalu memakan waktu dan akan mensimulasikan server cluster pada VM. Tim saya menyarankan agar saya "mengikuti kode" untuk melihat di mana kode thread dan / atau transaksi-tidak aman berada dan melakukan perubahan dari pengembangan lokal yang sederhana, yang bukan implementasi cluster seperti lingkungan dari mana terjadinya bug berasal.
Bagi saya, mengerjakan cetak biru abstrak (kode program) daripada manifestasi nyata yang terlihat (reproduksi runtime) tampaknya sulit, jadi saya ingin mengajukan pertanyaan umum:
Apakah masuk akal untuk bersikeras mereproduksi setiap cacat dan men-debug sebelum mendiagnosis dan memperbaikinya?
Atau:
Jika saya seorang pengembang senior, haruskah saya dapat membaca kode multithread dan membuat gambaran mental tentang apa yang dilakukannya dalam semua skenario use case daripada harus menjalankan aplikasi, menguji skenario use case yang berbeda secara langsung, dan melangkah melalui kode baris demi baris? Atau apakah saya pengembang yang buruk karena menuntut lingkungan kerja seperti itu?
Apakah debugging untuk banci?
Menurut pendapat saya, setiap perbaikan yang diajukan sebagai tanggapan terhadap tiket insiden harus diuji dalam lingkungan yang disimulasikan sedekat mungkin dengan lingkungan asli. Bagaimana lagi Anda bisa tahu bahwa itu benar-benar akan menyelesaikan masalah? Ini seperti melepaskan model kendaraan baru tanpa tabrakan mengujinya dengan boneka untuk menunjukkan bahwa kantung udara benar-benar berfungsi.
Terakhir tetapi tidak kalah pentingnya, jika Anda setuju dengan saya:
Bagaimana saya harus berbicara dengan tim saya untuk meyakinkan mereka bahwa pendekatan saya masuk akal, konservatif dan lebih tahan peluru?
new
. Dan bug ini tidak dijamin dapat diproduksi dengan andal, sesuai dengan spesifikasi Java Memory Model