- PVSM.RU - https://www.pvsm.ru -
Авторы анализатора PVS-Studio предлагают вам проверить свою внимательность и развлечься. Попробуйте быстро отыскать баг в фрагменте исходного кода и ткнуть в него мышкой.
Анализаторы кода работают без устали и умеют находить множество ошибок, которые сложно заметить. Мы отобрали несколько фрагментов кода, в которых выявили ошибки с помощью PVS-Studio. Все фрагменты взяты [1] из известных Open Source проектов.
Предлагаем вам посоревноваться с анализатором в прозорливости и попробовать самостоятельно найти ошибки. Вам будет предложено 10 случайно выбранных заданий. За верный ответ начисляется одно очко, если баг найден в течение 1 минуты.
Ограничение в 1 минуту сделано для интереса. Иначе вы, скорее всего, верно найдёте и укажете каждую ошибку, так как фрагменты кода короткие. В любом случае относитесь к этому просто как к игре, а не как к настоящему тестированию программистских навыков у вас или ваших коллег :)
Когда нашли ошибку, выделите её кликом мышки и нажмите кнопку "Ответ". Бывает, что в коде есть сразу несколько мест, куда вы можете "ткнуть" — и ответ зачтётся как правильный. Поясним это на примере.
case FuriHalSubGhzPreset2FSKDev476Async:
preset_name = "FuriHalSubGhzPreset2FSKDev476Async";
break;
FURI_LOG_E(SUBGHZ_PARSER_TAG, "Unknown preset");
default:
Этот код взят из проекта FlipperZero. Анализатор PVS-Studio сообщает, что часть кода никогда не выполняется: V779 [CWE-561, CERT-MSC12-C] Unreachable code detected. It is possible that an error is present. subghz_i.c 44
Кто-то поспешил и использовал макрос логирования после оператора break. Или это следствие неудачного рефакторинга. В любом случае ошибка очевидна, но вот куда именно ткнуть мышкой – вопрос сложнее.
С одной стороны, в качестве ответа можно выбрать оператор break. Он расположен до макроса FURI_LOG_E и прерывает выполнение оператора switch. Значит, проблема здесь.
С другой стороны, можно выбрать макрос логирования. Ведь это недостижимый код.
Так как же быть? Очень просто. В данном случае правильным ответом будет считаться как выделенный оператор break, так и макрос FURI_LOG_E.
Думаем, правила понятны. Желаем вам удачи: начать игру [2].
Не забудьте, показать этот Quiz вашим коллегам! Развлекайтесь, и безбажного вам кода!
Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Andrey Karpov. PVS-Studio's challenge: can you spot an error? [3].
Автор: Андрей Карпов
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/testirovanie/376487
Ссылки в тексте:
[1] взяты: https://pvs-studio.com/ru/blog/inspections/?utm_source=habr&utm_medium=firefly
[2] начать игру: https://quiz.pvs-studio.com/ru/cpp/?utm_source=habr&utm_medium=firefly
[3] PVS-Studio's challenge: can you spot an error?: https://pvs-studio.com/en/blog/posts/cpp/0960/?utm_source=habr&utm_medium=firefly
[4] Источник: https://habr.com/ru/post/673988/?utm_source=habrahabr&utm_medium=rss&utm_campaign=673988
Нажмите здесь для печати.