StackOverflow-dagi Java kodining eng mashhur misolida xatolik bor

Eng ommabop Java kod misol, StackOverflow-da nashr etilgan, chiqdi muayyan sharoitlarda noto'g'ri natijani chiqarishga olib keladigan xato bilan. Ko'rib chiqilayotgan kod 2010 yilda e'lon qilingan va mingdan ortiq tavsiyalarni to'plagan, shuningdek, nusxalangan ko'plab loyihalarda va GitHub-dagi omborlarda taxminan 7 ming marta paydo bo'ladi. Shunisi e'tiborga loyiqki, xato ushbu kodni o'z loyihalariga ko'chirgan foydalanuvchilar tomonidan emas, balki maslahatning asl muallifi tomonidan topilgan.

Ko'rib chiqilayotgan kod bayt hajmini o'qilishi mumkin bo'lgan shaklga aylantirdi, masalan, 110592 ni "110.6 kB" yoki "108.0 KiB" ga o'zgartirdi. Kod ilgari taklif qilingan maslahatning logarifm-optimallashtirilgan versiyasi sifatida taklif qilindi, unda qiymat tsikldagi asl qiymatni 1018, 1015, 1012, 1019 ga ketma-ket bo'lish asosida aniqlandi.
106, 103 va 100, agar bo'luvchi asl bayt qiymatidan katta bo'lsa. Optimallashtirilgan versiyada noto'g'ri hisob-kitoblar tufayli (uzoq qiymatdan oshib ketish) juda katta raqamlarni (ekzabaytlarni) qayta ishlash natijasi haqiqatga mos kelmadi.

Maslahat muallifi, shuningdek, misollarni manbani ko‘rsatmasdan va litsenziyani ko‘rsatmasdan nusxa ko‘chirish muammosiga e’tibor qaratishga harakat qilgan. Oldingi ma'lumotlarga ko'ra tadqiqot olib bordi Ishlab chiquvchilarning 46 foizi StackOverflowʼdan kodni atributsiz nusxa koʻchirishgan, 75 foizi kod CC BY-SA boʻyicha litsenziyalanganligini bilishmagan va 67 foizi bu atributni talab qilishini bilishmagan.

haqida ma'lumotlar Boshqa bir tadqiqotga ko'ra, kod misollarini nusxalash nafaqat koddagi xatolar xavfini, balki zaifliklarni ham o'z ichiga oladi. Masalan, StackOverflow’da 72483 69 ta C++ kod misollarini tahlil qilgandan so‘ng, tadqiqotchilar eng ommabop tavsiyalar ro‘yxatiga kiritilgan 0.09 ta misolda (bu 2859%) jiddiy zaifliklarni aniqladilar. Keyinchalik GitHub-da ushbu kod mavjudligini tahlil qilib, StackOverflow-dan ko'chirilgan zaif kod XNUMX ta loyihada mavjudligi aniqlandi.

Manba: opennet.ru

a Izoh qo'shish