Populiariausiame „Java“ kodo pavyzdyje „StackOverflow“ yra klaida

Populiariausi Java kodo pavyzdys, paskelbta StackOverflow, pasirodė su klaida, dėl kurios tam tikromis sąlygomis gaunamas neteisingas rezultatas. Aptariamas kodas buvo paskelbtas 2010 m. ir jame yra sukaupta daugiau nei tūkstantis rekomendacijų, taip pat buvo nukopijuota daugelyje projektų ir pasirodo GitHub saugyklose apie 7 tūkstančius kartų. Pastebėtina, kad klaidą rado ne vartotojai, nukopijavę šį kodą į savo projektus, o pirminis patarimo autorius.

Aptariamas kodas konvertavo baito dydį į skaitomą formą, pvz., konvertavo 110592 į „110.6 kB“ arba „108.0 KiB“. Kodas buvo pasiūlytas kaip pagal logaritmą optimizuota anksčiau pasiūlyto patarimo versija, kurioje vertė buvo nustatyta remiantis nuosekliu pradinės vertės padalijimu kilpoje iš 1018, 1015, 1012, 1019.
106, 103 ir 100, kol daliklis yra didesnis nei pradinė baito reikšmė. Dėl aplaidžių skaičiavimų optimizuotoje versijoje (ilgas vertės perpildymas) rezultatas apdorojant labai didelius skaičius (eksabaitus) neatitiko tikrovės.

Patarimo autorė taip pat bandė atkreipti dėmesį į pavyzdžių kopijavimo problemą, nenurodant šaltinio ir nenurodant licencijos. Ankstesniais duomenimis atliko tyrimus 46% kūrėjų nukopijavo kodą iš StackOverflow be priskyrimo, 75% nežinojo, kad kodas yra licencijuotas pagal CC BY-SA, o 67% nežinojo, kad tam reikia priskirti.

Apie Pagal Kito tyrimo duomenimis, kodo pavyzdžių kopijavimas apima ne tik kodo klaidų riziką, bet ir pažeidžiamumą. Pavyzdžiui, išanalizavę 72483 69 C++ kodo pavyzdžius „StackOverflow“, mokslininkai nustatė rimtus pažeidžiamumus 0.09 pavyzdžiuose (tai yra 2859 proc.), įtrauktuose į populiariausių rekomendacijų sąrašą. Tada išanalizavus šio kodo buvimą „GitHub“, paaiškėjo, kad pažeidžiamas kodas, nukopijuotas iš „StackOverflow“, buvo XNUMX projektuose.

Šaltinis: opennet.ru

Добавить комментарий