Специалисты PVS-Studio ищут ошибки в коде программ уже более 10 лет. Под их прицел попадают и игровые движки: Unreal Engine 4, Unity 3D, Cry Engine и даже Amazon Lumberyard. Много ли ошибок получилось в них найти? Спойлер – ещё как! В этом докладе Георгий Грибков, С++ разработчик из PVS-Studio, показывает реальные примеры найденных ошибок (на C# и C++), а также рассказывает, как их можно было избежать.
2. Докладчик
Георгий Грибков
Программист C++, разработчик
статического анализатора кода
PVS-Studio
Автор статей о поиске ошибок в играх
(Вангеры, VVVVVV) и других проектах
с открытым исходным кодом
gribkov@viva64.com
2
14. Предупреждение PVS-Studio: V501 There are identical sub-
expressions 'Position.Y >= Control.Center.Y — BoxSize.Y * 0.5f' to
the left and to the right of the '&&' operator.
Unreal Engine 4 (C++)
14
27. Предупреждение PVS-Studio: V502 Perhaps the '?:' operator works
in a different way than it was expected. The '?:' operator has a lower
priority than the '+' operator.
CryEngine (C++)
27
29. Предупреждение PVS-Studio: V502 Perhaps the '?:' operator
works in a different way than it was expected. The '?:' operator
has a lower priority than the '-' operator.
Amazon Lumberyard (C++)
29
61. Ошибки исправляются в момент их
появления
Множество ошибок не доходит даже до
тестов
Те, что прошли – отлавливаются ночью
Затраты на исправление почти равны нулю
Итого
61
62. Конечно стоит! Статический анализ – не панацея от всех ошибок
Статический анализ – это ответ на вопрос «а как ЕЩЕ можно
повысить качество кода?»
Пример классного сочетания: статический + динамический
анализ
Стоит ли использовать другие методологии?
62
64. Ошибаются все. Даже профессионалы.
Это нормально, и с этим можно бороться
Заключение
64
65. Типовые паттерны ошибок:
Копи-паст и эффект последней строки
Обращение по некорректному адресу
Ошибки в условных операторах
Путаница с приоритетом операций
Неуловимые глазом опечатки
Заключение
65
66. Можно сэкономить кучу ресурсов,
если настроить непрерывный статический
анализ кода
Заключение
66