Contoh kod Java yang paling popular pada StackOverflow mempunyai ralat

Yang paling popular Contoh kod Java, diterbitkan pada StackOverflow, ternyata dengan ralat yang membawa kepada output hasil yang salah dalam keadaan tertentu. Kod yang dipersoalkan telah disiarkan pada tahun 2010 dan telah mengumpulkan lebih daripada seribu cadangan, dan juga telah disalin dalam banyak projek dan muncul dalam repositori di GitHub kira-kira 7 ribu kali. Perlu diperhatikan bahawa ralat itu tidak ditemui oleh pengguna yang menyalin kod ini ke dalam projek mereka, tetapi oleh pengarang asal nasihat itu.

Kod yang dimaksudkan menukar saiz bait kepada bentuk yang boleh dibaca, contohnya menukar 110592 kepada "110.6 kB" atau "108.0 KiB". Kod ini dicadangkan sebagai versi logaritma yang dioptimumkan bagi nasihat yang dicadangkan sebelum ini, di mana nilai ditentukan berdasarkan pembahagian jujukan nilai asal dalam gelung menjelang 1018, 1015, 1012, 1019.
106, 103 dan 100, selagi pembahagi lebih besar daripada nilai bait asal. Disebabkan pengiraan ceroboh dalam versi yang dioptimumkan (limpahan nilai panjang), hasil apabila memproses nombor yang sangat besar (exabait) tidak sepadan dengan realiti.

Penulis nasihat itu juga cuba menarik perhatian kepada masalah penyalinan contoh tanpa memetik sumber dan tanpa menunjukkan lesen. Mengikut data awal menjalankan penyelidikan 46% pembangun menyalin kod daripada StackOverflow tanpa atribusi, 75% tidak menyedari bahawa kod itu dilesenkan di bawah CC BY-SA dan 67% tidak menyedari bahawa ini memerlukan atribusi.

Pada Menurut Menurut kajian lain, menyalin contoh kod bukan sahaja melibatkan risiko ralat dalam kod, tetapi juga kelemahan. Sebagai contoh, selepas menganalisis 72483 contoh kod C++ pada StackOverflow, penyelidik mengenal pasti kelemahan serius dalam 69 contoh (iaitu 0.09%) termasuk dalam senarai pengesyoran paling popular. Setelah menganalisis kehadiran kod ini pada GitHub, ia telah mendedahkan bahawa kod terdedah yang disalin daripada StackOverflow hadir dalam 2859 projek.

Sumber: opennet.ru

Tambah komen