to the top
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS-Studio для специалистов Microsoft MVP
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Мне интересно попробовать плагин на:
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте папку
Spam/Junk и нажмите на письме кнопку "Не спам".
Так Вы не пропустите ответы от нашей команды.

>
>
>
Стоило ли столько ждать, чтобы найти ба…

Стоило ли столько ждать, чтобы найти баг?

21 Дек 2020

Наверняка Вы задавались вопросом, чей код качественнее: у проекта с открытым кодом или закрытым? После прочтения нашего блога можно подумать, что все ошибки собрали проекты с открытым исходным кодом. Но это не совсем так. Ошибки есть во всех проектах, независимо от способа их хранения. А качество будет лучше там, где его повышают. Эта небольшая заметка о том, как в одном проекте исправляли баг 2 года, а могли бы сделать это за 5 минут.

0786_Minetest_ru/image1.png

Хронология событий

Minetest - это открытый кроссплатформенный игровой движок, содержащий около 200 тысяч строк кода на C, C++ и Lua. Он позволяет создавать разные игровые режимы в воксельном пространстве. Поддерживает мультиплеер, и множество модов от сообщества.

10 ноября 2018 года в багтрекере проекта отрыли Issue #7852 - item_image_button[]: button too small.

Описание следующее:

The button is too small resulting in the image exceeding its borders. Button should be the same size as inventory slots. See example below (using width and height of 1).

И скриншот:

0786_Minetest_ru/image2.png

На скриншоте можно заметить незначительный выход картинок за границу внутренней области кнопок. Баг был замечен в далёком 2018 году, а причину нашли только сейчас – в 2020.

Следующим событием в этой замечательной истории стала публикация технической статьи "PVS-Studio: Анализ pull request-ов в Azure DevOps при помощи self-hosted агентов" в июле 2020 года. Чтобы привести пример интеграции анализатора в Azure DevOps, был выбрана та самая игра – minetest. В статье приведено несколько найденных ошибок, но нам интересна одна конкретная из них:

V636 The 'rect.getHeight() / 16' expression was implicitly cast from 'int' type to 'float' type. Consider utilizing an explicit type cast to avoid the loss of a fractional part. An example: double A = (double)(X) / Y;. hud.cpp 771

void drawItemStack(....)
{
  float barheight = rect.getHeight() / 16;
  float barpad_x = rect.getWidth() / 16;
  float barpad_y = rect.getHeight() / 16;

  core::rect<s32> progressrect(
    rect.UpperLeftCorner.X + barpad_x,
    rect.LowerRightCorner.Y - barpad_y - barheight,
    rect.LowerRightCorner.X - barpad_x,
    rect.LowerRightCorner.Y - barpad_y);
}

При делении значений ширины и высоты на 16 дробная часть результата отбрасывается, т.к. деление целочисленное.

И вот, спустя полгода результаты анализа были замечены разработчиками игры, и создана Issue 10726 - Fix errors found by professional static code analyzer, где установили связь этого бага с Issue #7852. Это округление и искажало размеры кнопок.

Выводы

Использование статических анализаторов кода позволяет экономить очень много времени на выявлении ошибок в коде. Можно сколь угодно утверждать, что описанный баг незначительный, но наш опыт показывает, что это типичный жизненный цикл ошибки любой критичности.

Предположим, здесь был бы серьёзный баг. На его исправление бросили бы все силы и за час отладки нашли бы и исправили его. Но анализатор всё равно бы нашёл его за пару минут.

Таким образом, можно сделать вывод, что автоматические способы поиска ошибок приносят неоспоримую пользу разрабатываемому проекту. Такие инструменты, как PVS-Studio, необходимо рассматривать как дополнение к codereview с другими программистами, а не замену этого процесса.

Популярные статьи по теме
Под капотом SAST: как инструменты анализа кода ищут дефекты безопасности

Дата: 26 Янв 2023

Автор: Сергей Васильев

Сегодня речь о том, как SAST-решения ищут дефекты безопасности. Расскажу, как разные подходы к поиску потенциальных уязвимостей дополняют друг друга, зачем нужен каждый из них и как теория ложится на…
Межмодульный анализ C и C++ проектов в деталях. Часть 2

Дата: 14 Июл 2022

Автор: Олег Лысый

В первой части статьи мы рассматривали основы теории компиляции C и C++ проектов, в частности особое внимание уделили алгоритмам компоновки и оптимизациям. Во второй части мы погрузимся глубже и пока…
Межмодульный анализ C и C++ проектов в деталях. Часть 1

Дата: 08 Июл 2022

Автор: Олег Лысый

Начиная с PVS-Studio 7.14, для C и C++ анализатора появилась поддержка межмодульного анализа. В этой статье, которая будет состоять из двух частей, мы расскажем, как устроены похожие механизмы в комп…
Ускоряем сборку и анализ при помощи Incredibuild

Дата: 17 Май 2021

Автор: Максим Звягинцев

"Да сколько ты ещё будешь собирать?" – фраза, которую каждый разработчик произносил хотя бы раз посреди ночи. Да, сборка бывает долгой и от этого никуда не деться. Нельзя же просто так взять и распар…
GTK: как выглядит первый запуск анализатора в цифрах

Дата: 04 Янв 2021

Автор: Святослав Размыслов

Внедрение статического анализатора в проект для некоторых людей выглядит непреодолимой преградой. Почему-то очень распространено мнение, что объём выданных результатов анализа при первом запуске наст…


Комментарии (0)

Следующие комментарии next comments
close comment form
Unicorn with delicious cookie
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо