Saya memiliki tester yang saat pengujian akan memiliki kesalahan terjadi (ok sejauh ini), tetapi kemudian dia sering melaporkannya segera. Kami (pengembang) kemudian menemukan bahwa tester belum mencoba mereproduksi masalah dan (ketika ditanya) tidak dapat menemukan cara untuk mewujudkannya lagi.
Sekarang ini masih bug, saya tidak ingin mengabaikannya. Tapi tanpa langkah repro saya agak macet. Terkadang ada jejak tumpukan (meskipun sering tidak berguna karena ini adalah kerangka kerja yang kompak dan tidak ada nomor baris). Tetapi ketika ada satu saya bisa mengambil jejak stack dan membuka kode dan mulai menebak, tetapi itu tidak mengarah pada "perbaikan" yang dapat diuji.
Apa yang Anda lakukan dalam skenario seperti ini?
Jawaban:
Bug tanpa konteks bukanlah bug, ini hanya kebetulan. Masalahnya bisa berupa kode Anda, bisa berupa perpustakaan pihak ketiga, bisa jadi perangkat keras, atau bisa juga radiasi matahari yang menyebabkan bit tunggal untuk membalik sendiri. Jika Anda tidak dapat mereproduksinya dengan setidaknya beberapa keteraturan (bahkan jika hanya "itu terjadi setiap 10 atau 20 kali saya lakukan X"), itu tidak jauh lebih baik daripada tester Anda mengatakan kepada Anda "Ada sesuatu yang salah entah bagaimana - perbaiki" .
Anda mungkin harus menjelaskan kepada tester Anda bahwa pekerjaannya bukan hanya menghasilkan input sampai sesuatu rusak. Jika ya, Anda bisa menggantinya dengan generator nomor acak. Bagian dari pekerjaannya adalah mengidentifikasi bug, yang mensyaratkan mengidentifikasi cara memproduksinya.
sumber
Pada akhirnya jika pengembang maupun penguji tidak dapat mereproduksi bug, maka bug tersebut harus ditutup tetapi ditandai demikian.
Namun, berapa lama Anda untuk sampai pada titik itu masih bisa diperdebatkan.
Beberapa orang akan berpendapat bahwa jika tidak segera direproduksi maka harus ditutup segera.
Saya biasanya berusaha untuk mendapatkan lebih banyak informasi dari pencetus masalah. Mungkin ada sesuatu yang mereka lupa di laporan asli. Melakukan percakapan tentang langkah-langkah yang diperlukan seringkali dapat mengungkapkan informasi yang hilang.
Satu pemikiran terakhir - ditutup sebagai "tanpa repro" tidak berarti diperbaiki. Jika ada masalah nyata, ia akan muncul dengan cepat atau lambat dan memiliki semua informasi yang dapat Anda bantu ketika Anda akhirnya dapat mereproduksi masalah.
sumber
Beberapa saran lagi:
Tambahkan logging (dan bukan hanya keylogger:}) ke kode produk Anda. Bug "tanpa repro" mungkin cacat, tetapi mereka mungkin memori atau korupsi negara yang hanya terjadi pada sistem kotor yang digunakan dengan cara yang tidak diantisipasi (yaitu seperti komputer pelanggan). Informasi pencatatan atau penelusuran dapat membantu Anda mengetahui apa yang mungkin salah ketika tester menemukan kebetulan itu.
Pindai bug "tanpa repro" lainnya di dalam basis data (atau apa pun yang Anda gunakan untuk pelacakan bug). Seringkali, cacing mengumpul di satu area produk. Jika sepertinya salah satu komponen salah, tinjau kode komponen untuk kemungkinan kerontokan, tambahkan pencatatan tambahan ke komponen itu - atau keduanya.
Ambil setengah jam atau lebih dan perhatikan tes penguji Anda. Pendekatan mereka mungkin memberi Anda gambaran tentang apa yang salah (mis. "Menarik - saya tidak tahu Anda bisa membuka dialog seperti itu"). Anda juga mungkin menemukan bahwa mereka melewatkan langkah dialog atau konfigurasi tanpa disengaja. Ini sepadan dengan investasi waktu untuk mendapatkan sedikit di kepala mereka.
sumber
Saya melakukan QA pada kode komersial besar, skenario menjengkelkan ini muncul terlalu sering. Biasanya ini mengindikasikan tidak memiliki proses ketat untuk membangun biner pada semua platform yang kami dukung. Jadi jika pengembang membuat kode sendiri (yang harus dia lakukan untuk debug dan memperbaikinya), dan tidak mengikuti proses pembuatan yang sama dengan surat itu, ada kemungkinan bug yang bergantung pada sistem akan tampak menghilang secara ajaib (atau muncul) . Tentu saja hal-hal ini biasanya ditutup dengan "berfungsi untuk saya" di database bug, dan jika mereka gagal saat masalah dijalankan, bug dapat dibuka kembali. Setiap kali saya menduga bug mungkin tergantung pada sistem, saya mencoba mengujinya di berbagai platform dan melaporkan dalam kondisi apa itu terjadi. Seringkali masalah kerusakan memori hanya muncul jika data yang rusak besarnya cukup besar untuk menyebabkan kerusakan. Beberapa platform (kombinasi HW dan OS) mungkin crash lebih dekat ke sumber korupsi yang sebenarnya, dan ini bisa sangat berharga bagi orang miskin yang harus men-debug itu.
Penguji perlu melakukan beberapa nilai tambah, tidak hanya melaporkan bahwa sistemnya menunjukkan kegagalan. Saya menghabiskan banyak waktu menyaring positif palsu - mungkin platform yang dimaksud kelebihan beban, atau jaringan memiliki kesalahan. Dan ya kadang-kadang Anda bisa mendapatkan sesuatu yang benar-benar dipengaruhi oleh peristiwa penetapan waktu acak, bug perangkat keras dapat sering seperti contoh proto: Jika dua permintaan data kembali pada periode jam yang sama persis, dan logika perangkat keras untuk menangani potensi konflik salah, maka bug hanya akan muncul sebentar-sebentar. Demikian juga dengan pemrosesan paralel, kecuali jika dengan desain yang hati-hati Anda membatasi solusi agar tidak tergantung pada prosesor mana yang lebih cepat, Anda bisa mendapatkan bug yang hanya terjadi sekali di bulan biru, dan ketidakstabilan statistiknya membuat debugging menjadi mimpi buruk.
Juga kode kami sedang diperbarui, biasanya berkali-kali setiap hari, melacak nomor revisi kode sumber yang tepat ketika pergi ke selatan bisa menjadi informasi yang sangat berguna untuk upaya debugging. Penguji tidak boleh berada dalam hubungan yang bermusuhan dengan para penentang dan pengembang, ia ada di sana sebagai bagian dari tim untuk meningkatkan kualitas produk.
sumber
Ada dua jenis bug yang tidak dapat direproduksi:
1) Mereka yang dilihat oleh penguji (atau pengguna) satu kali tetapi tidak mampu atau tidak berusaha mereproduksi.
Dalam situasi ini Anda harus:
Sangat singkat memeriksa tindakan dasar yang menunjukkan cacat untuk memastikan bahwa itu tidak dapat direproduksi.
Bicaralah dengan penguji / pengguna untuk melihat apakah ada informasi lain yang dapat membantu.
Referensi silang mereka dengan cacat lain yang mungkin terkait untuk melihat apakah Anda memiliki cukup informasi untuk melihatnya berdasarkan beberapa contoh. Anda mungkin menemukan bahwa masalah yang satu ini tidak memberi Anda informasi yang cukup untuk melanjutkan, tetapi ketika digabungkan dengan sejumlah masalah lain, mungkin ini menyarankan kepada Anda sesuatu yang tidak benar yang perlu diselidiki.
Jika Anda masih belum memiliki cukup untuk melanjutkan maka Anda perlu menjelaskan kepada pengguna / tester bahwa Anda tidak memiliki informasi yang cukup. Buat garis besar kepada mereka dengan sopan seperti apa informasi yang akan terlihat dan mengapa itu diperlukan.
2) Mereka yang tidak dapat diperbanyak secara andal, namun ada cukup bukti (dalam hal kejadian berulang) untuk menunjukkan bahwa cacat memang ada, maka saya cenderung melihat bahwa ini adalah masalah pengembang dan pengembang - didukung oleh penguji / pengguna - perlu diselidiki.
Ini cenderung lambat dan menyakitkan, Anda mungkin harus berjalan kode, menambahkan lebih banyak logging, melihat data dan berbicara dengan penguji / pengguna secara mendalam, tetapi jika ada cukup bukti untuk menunjukkan bahwa kemungkinan ada adalah masalah yang harus Anda ambil kepemilikannya dan lakukan apa pun yang perlu dilakukan untuk memperbaikinya.
sumber
Kedengarannya seperti ini terjadi relatif sering - yang membuat saya bertanya-tanya, apakah itu karena sebagian besar bug benar-benar sulit untuk ditiru, atau apakah karena alasan lain dia tidak mencoba? Apakah Anda tahu mengapa dia tidak mencoba mereproduksi masalah ini? Apakah karena dia tidak menyadari betapa pentingnya bagi Anda? Atau mungkinkah dia memiliki tekanan lain - seorang manajer tes yang hanya ingin dia melewati tes yang diberikan dengan cepat dan melemparkan bug ke dinding, misalnya? Atau mungkin dia tidak yakin bagaimana caranya?
Saya setuju dengan yang lain bahwa mengerjakan pembalakan yang lebih baik adalah prioritas. Sementara itu, jika Anda curiga bahwa kurangnya keterampilan penguji / kepercayaan diri mungkin menjadi masalah, maka saya sangat suka artikel ini dari Danny Faught tentang isolasi bug - Anda bisa mengarahkannya pada permulaan.
Jika masalahnya ternyata karena tekanan manajemen - Anda punya simpati, karena itu sulit untuk dipecahkan, terutama jika penguji & programmer melapor kepada manajer yang berbeda dan manajer tidak cenderung untuk "membantu" tim lain.
sumber
Biasanya saya perhatikan bahwa itu tidak dapat direproduksi, tetapi biarkan terbuka sampai kumpulan pengujian atau iterasi selesai.
Jika belum direproduksi pada titik itu ditutup, tetapi dapat dibuka kembali jika ditemui lagi.
sumber
menempelkan keylogger di stasiun kerja penguji ini!
sumber
printf
ke dalam kode menyebabkan bug menghilang? :)Nah, tugas pertama adalah memiliki sistem pengujian yang dapat direproduksi. Penguji Anda harus memiliki proses yang jelas - otomatis jika memungkinkan.
Miliki tiga kondisi ini:
Jika bug muncul secara sporadis dengan 3 kondisi di atas, mulailah mengisolasi lebih lanjut. Pertimbangkan setiap tingkat tumpukan sistem dan konfigurasinya.
Salah satu cara untuk mendeteksi kesalahan manajemen memori adalah dengan menjalankan program pada banyak OS dengan banyak kompiler. Valgrind juga dapat membantu.
Namun, biasanya sistem paralel dapat menyebabkan bug non-repro. Hal-hal seperti ukuran buffer dan kecepatan pemrosesan, asynch io, kunci basis data, interleaving tulis memori variabel; semua itu dapat menghasilkan masalah. Dan sebagainya dan seterusnya.
sumber
Pertama-tama, Anda harus memiliki prosedur pengujian yang ketat (tapi saya mengerti Anda, di perusahaan saya apa yang Anda jelaskan sering terjadi).
Bergantung pada tingkat keparahan bug, Anda dapat menginvestasikan waktu untuk itu atau (lebih baik) mengabaikannya sampai langkah repro disediakan.
sumber