Найпопулярніший приклад Java-коду на StackOverflow виявився помилково

Найпопулярніший приклад Java-коду, опублікованого на StackOverflow, виявився з помилкою, що призводить до висновку за певних умов неправильного результату. Розглянутий код був розміщений у 2010 році і накопичив понад тисячу рекомендацій, а також був скопійовано багато проектів і зустрічається в репозиторіях на GitHub близько 7 тисяч разів. Примітно, що помилку знайшли не користувачі, які копіюють цей код у проекти, а початковий автор ради.

Розглянутий код здійснював перетворення байтового розміру в форму, що читається, наприклад 110592 перетворював в «110.6 kB» або «108.0 KiB». Код був запропонований як оптимізований за допомогою логарифмів варіант раніше запропонованої ради, в якому величина визначалася на основі послідовного поділу вихідного значення в циклі на 1018, 1015, 1012, 1019,
106, 103 і 100, поки дільник більше вихідного значення в байтах. Через неакуратні обчислення в оптимізованому варіанті (переповнення значення long) результат роботи при обробці дуже великих чисел (ексабайт) не відповідав дійсності.

Автор ради також спробував звернути увагу на проблему копіювання прикладів без посилання на джерело та без зазначення ліцензії. За даними раніше проведеного дослідження 46% розробників скопіювали код зі StackOverflow без вказівки автора, 75% не знали, що код поширюється під ліцензією CC BY-SA, а 67% не знали, що це означає необхідність вказівки авторства.

За даними іншого дослідження, копіювання прикладів коду пов'язане як з ризиком наявності у коді помилок, а й уразливостей. Наприклад, проаналізувавши StackOverflow 72483 прикладів коду на C++, дослідники виявили серйозні вразливості в 69 прикладах (що становить 0.09%), що входять до списку найбільш популярних рекомендацій. Проаналізувавши потім наявність цього коду на GitHub, було виявлено, що скопійований зі StackOverflow уразливий код є у 2859 проектах.

Джерело: opennet.ru

Додати коментар або відгук