Tentunya Anda bertanya-tanya kode siapa yang lebih baik: proyek open source atau tertutup? Setelah membaca blog kami, Anda mungkin mengira bahwa semua bug dikumpulkan oleh proyek sumber terbuka. Tapi ternyata tidak demikian. Kesalahan ada di semua proyek, terlepas dari cara penyimpanannya. Dan kualitas akan lebih baik jika ditingkatkan. Ini adalah catatan kecil tentang bagaimana bug diperbaiki dalam satu proyek selama 2 tahun, tetapi bisa selesai dalam 5 menit.
Kronologi peristiwa
Minetest adalah mesin game lintas platform open source dengan sekitar 200.000 baris kode C, C ++ dan Lua. Ini memungkinkan Anda membuat mode permainan yang berbeda di ruang voxel. Mendukung multipemain, dan banyak mod komunitas.
Pada 10 November 2018, Masalah # 7852 dibuka di pelacak bug proyek - item_image_button []: tombol terlalu kecil .
Uraiannya sebagai berikut:
Tombol terlalu kecil mengakibatkan gambar melebihi batasnya. Ukuran tombol harus sama dengan slot inventaris. Lihat contoh di bawah ini (menggunakan lebar dan tinggi 1).Dan tangkapan layar:
Di tangkapan layar, Anda dapat melihat sedikit gambar keluar di luar batas area dalam tombol. Bug ditemukan kembali pada tahun 2018, dan alasannya baru ditemukan sekarang - pada tahun 2020.
Acara berikutnya dalam cerita yang luar biasa ini adalah publikasi artikel teknis " PVS-Studio: Analisis permintaan penarikan di Azure DevOps menggunakan agen yang dihosting sendiri " pada Juli 2020 di tahun ini. Untuk memberikan contoh mengintegrasikan penganalisis ke Azure DevOps, game yang sama dipilih - minetest. Artikel ini mengandung beberapa kesalahan yang ditemukan, tetapi kami tertarik pada satu kesalahan tertentu:
V636Ekspresi 'rect.getHeight () / 16' secara implisit dilemparkan dari tipe 'int' ke tipe 'float'. Pertimbangkan untuk menggunakan cor tipe eksplisit untuk menghindari hilangnya bagian pecahan. Contoh: double A = (double) (X) / Y;. hud.cpp 771
void drawItemStack(....)
{
float barheight = rect.getHeight() / 16;
float barpad_x = rect.getWidth() / 16;
float barpad_y = rect.getHeight() / 16;
core::rect<s32> progressrect(
rect.UpperLeftCorner.X + barpad_x,
rect.LowerRightCorner.Y - barpad_y - barheight,
rect.LowerRightCorner.X - barpad_x,
rect.LowerRightCorner.Y - barpad_y);
}
Saat membagi nilai lebar dan tinggi dengan 16, bagian pecahan dari hasil akan dibuang, karena divisi integer.
Dan sekarang, enam bulan kemudian, hasil analisis diketahui oleh pengembang game, dan Masalah 10726 - Memperbaiki kesalahan yang ditemukan oleh penganalisis kode statis profesional dibuat , di mana mereka membuat tautan antara bug ini dan Masalah # 7852 . Ukuran tombol ini membulat dan terdistorsi.
kesimpulan
Menggunakan penganalisis kode statis memungkinkan Anda menghemat banyak waktu untuk mengidentifikasi kesalahan dalam kode Anda. Dapat dikatakan bahwa bug yang dideskripsikan tidak signifikan, tetapi pengalaman kami menunjukkan bahwa ini adalah siklus hidup tipikal dari kesalahan kritis apa pun.
Katakanlah ada bug yang serius di sini. Mereka akan mengerahkan semua upaya mereka untuk memperbaikinya, dan dalam satu jam debugging mereka akan menemukan dan memperbaikinya. Tetapi penganalisis masih akan menemukannya dalam beberapa menit.
Dengan demikian, kami dapat menyimpulkan bahwa metode otomatis untuk menemukan kesalahan membawa manfaat yang tak terbantahkan untuk proyek yang dikembangkan. Alat seperti PVS-Studio harus dilihat sebagai tambahan codereview dengan programmer lain, bukan pengganti untuk proses ini.
Jika Anda ingin berbagi artikel ini dengan audiens berbahasa Inggris, silakan gunakan tautan terjemahan: Svyatoslav Razmyslov. Apakah Butuh Waktu Sangat Lama untuk Menemukan Bug? ...