SlideShare a Scribd company logo
1 of 91
Как исправить сотни ошибок в
legacy-коде и не умереть
(на примере Unreal Engine 4)
Георгий Грибков
Докладчик
Георгий Грибков
Программист C++, разработчик
статического анализатора кода PVS-Studio
Помогаю нашим клиентам бороться с
ошибками
Автор статей о поиске ошибок
в проектах с открытым
исходным кодом
gribkov@viva64.com
2
 Как бороться с ошибками legacy-коде?
Проблематика
3
 Как бороться с ошибками legacy-коде?
 Стоит ли вообще это делать?
Проблематика
4
 Как бороться с ошибками legacy-коде?
 Стоит ли вообще это делать?
 Что делать, если ошибок сотни или даже тысячи?
Проблематика
5
 Как бороться с ошибками legacy-коде?
 Стоит ли вообще это делать?
 Что делать, если ошибок сотни или даже тысячи?
(обычно так и бывает)
Проблематика
6
 Как бороться с ошибками legacy-коде?
 Стоит ли вообще это делать?
 Что делать, если ошибок сотни или даже тысячи?
(обычно так и бывает)
 Как не затратить на это много-много человеко-часов?
Проблематика
7
 Как бороться с ошибками legacy-коде?
 Стоит ли вообще это делать?
 Что делать, если ошибок сотни или даже тысячи?
(обычно так и бывает)
 Как не затратить на это много-много человеко-часов?
 И всё-таки, как вы работали с Unreal Engine?
Проблематика
8
Борьба с ошибками в legacy
9
Стоит ли бороться с ошибками в legacy-коде?
10
11
ДА!
 Старые ошибки – всё еще ошибки
 Старые уязвимости – всё еще уязвимости
 Висящее ружье рано или поздно
выстреливает
Почему?
12
13
Ariane 4
14
14
Ariane 4 113 успешных запусков
15
15
Ariane 5
16
16
Ariane 5
370 000 000 $ на воздух!
 Модульное тестирование
 Интеграционное тестирование
 Системное тестирование
 …
Способы поиска ошибок
17
 Модульное тестирование
 Интеграционное тестирование
 Системное тестирование
 …
 Динамический анализ
 Статический анализ
Способы поиска ошибок
18
 Модульное тестирование
 Интеграционное тестирование
 Системное тестирование
 …
 Динамический анализ
 Статический анализ
Способы поиска ошибок
19
Статический анализ – это code review в
автоматическом режиме
Статический анализ: что это?
20
Как он может помочь команде?
21
Как он может помочь команде?
22
Статанализ
23
Погодите-ка…
О, ужас!
24
Legacy-то уже здесь!!!
1. Настроить непрерывный анализ
2.
3.
Как легко справиться со старыми ошибками
25
1. Настроить непрерывный анализ
2. Защититься от появления новых ошибок
3.
Как легко справиться со старыми ошибками
26
1. Настроить непрерывный анализ
2. Защититься от появления новых ошибок
3. Обработать отчёт анализатора постепенно и
малыми затратами
Как легко справиться со старыми ошибками
27
Как 2 наших программиста
исправили 2000 срабатываний в Unreal Engine 4
за 17 рабочих дней
28
29
С чего всё началось
С чего всё началось
30
 Мой босс нашел ошибки в
UE 4 и написал статью
 Разработчикам из Epic
Games понравилось
 Они захотели исправить
больше ошибок и передали
это дело нам
С чего всё началось
31
32
Первая проверка
(или как мы огребли)
 Самый удобный способ: проверить проект
через Visual Studio
 Хорошо, что UE имеет набор скриптов для
генерации .vcxproj-файлов
Первая проверка
33
1.Генерируем проектные
файлы
2.Собираем проект
3.Запускаем анализ из Visual
Studio
4.???????
5.
Первая попытка анализа
34
1.Генерируем проектные
файлы
2.Собираем проект
3.Запускаем анализ из Visual
Studio
4.???????
5.EPIC GAMES FAIL
Первая попытка анализа
35
 Сгенерированные проектные файлы – лишь
обёртка
 Эти обёртки вызывают Unreal Build Tool
 Unreal Build Tool вызывает cl.exe (или clang
при сборке под Linux)
Как устроена сборка Unreal Engine
36
 Сгенерированные проектные файлы – лишь
обёртка
 Эти обёртки вызывают Unreal Build Tool
 Unreal Build Tool вызывает cl.exe (или clang
при сборке под Linux)
 Из-за этих прослоек анализатор не может
собрать параметры компиляции
Как устроена сборка Unreal Engine
37
38
Вторая проверка
(или как мы всё сделали правильно)
 Что, если отлавливать непосредственно
вызовы компилятора?
Вторая проверка
39
 Что, если отлавливать непосредственно
вызовы компилятора?
 Хорошо, что у нас есть специальная утилита
для мониторинга компиляции
Вторая проверка
40
Вторая попытка анализа
41
1. Перед сборкой запускаем утилиту
мониторинга компиляции
2. Утилита собирает все
необходимые данные
3. Сразу после окончания сборки
запускается анализ
4. ???????
5.
1. Перед сборкой запускаем утилиту
мониторинга компиляции
2. Утилита собирает все
необходимые данные
3. Сразу после окончания сборки
запускается анализ
4. ???????
5. EPIC WIN!!!
Вторая попытка анализа
42
43
Результаты анализа
Результаты анализа
44
 1192 предупреждения наивысшего уровня
(Level 1)
 629 предупреждений второго уровня
(Level 2)
 Суммарно 1821 предупреждения
(без Level 3)
45
45
Почему тысячи срабатываний – это классика?
46
 Notepad++ – 5 241 срабатывание
Почему тысячи срабатываний – это классика?
47
 WinMerge – 8 786 срабатываний
Почему тысячи срабатываний – это классика?
48
 Media Player Classic Home Cinema – 33 370 срабатываний
49
Что делать дальше?
Как справиться со старыми ошибками
50
1. Настроить непрерывный анализ
51
1. Настроить непрерывный анализ
52
1. Настроить непрерывный анализ
53
1. Настроить непрерывный анализ
54
1. Настроить непрерывный анализ
55
1. Настроить непрерывный анализ
56
1. Настроить непрерывный анализ
57
1. Настроить непрерывный анализ
58
Как справиться со старыми ошибками
59
2. Защититься от появления новых ошибок
60
Статанализ
2. Защититься от появления новых ошибок
61
 Как разглядеть новые срабатывания среди
старых?
 Способ 1: инкрементальный анализ
 Способ 2: массовое подавление
предупреждений (suppress-базы)
Как работать с suppress-базой
62
 Прячем все старые срабатывания
 При следующем прогоне получаем 0
предупреждений
 С этого момента свежие ошибки будут
обнаруживаться сразу
Как работать с suppress-базой
63
Как работать с suppress-базой
64
Как работать с suppress-базой
65
Старые предупреждения никуда не деваются!
Мы лишь работаем с ними отдельно от
новых
Инкрементальный анализ или suppress-базы?
66
 Работая с Unreal Engine 4, мы использовали
только инкрементальный анализ
 Suppress-базы удобнее, если проект
развивается непосредственно вами
 Можно использовать оба способа
одновременно
Как справиться со старыми ошибками
67
3. Как работать с огромным отчётом
68
Два принципа:
 Принцип Парето (80/20)
 Метод храповика
Принцип Парето
69
Принцип Парето
70
 Чтобы исправить 80% ошибок, достаточно
рассмотреть 20% предупреждений
 Эти доли уже заранее разделены и готовы к
использованию
Принцип Парето
71
 Media Player Classic Home Cinema – 33 370 срабатываний
Принцип Парето
72
 33 370 срабатываний –> 1 935 срабатываний
20% предупреждений в Unreal Engine
73
 1192 предупреждения наивысшего уровня
(Level 1)
 629 предупреждений второго уровня
(Level 2)
 Суммарно 1821 предупреждение
(без Level 3)
Метод храповика
74
 Суммарное количество предупреждений
закладывается в систему контроля версий
 Допускаются только те изменения, которые не
увеличивают это количество
Метод храповика
75
Как работает метод храповика
76
Как работает метод храповика
77
 Иван Пономарёв — Непрерывный статический
анализ кода
Полезный доклад по теме
78
79
Графики количества
предупреждений
 Ожидание
График количества предупреждений
0
5
10
15
20
25
1 2 3 4 5
Warnings
80
 Ожидание
График количества предупреждений
81
0
5
10
15
20
25
1 2 3 4 5
Warnings
0
5
10
15
20
25
1 2 3 4 5
Warnings
 Реальность
Прогресс для Unreal Engine 4
82
Небольшой десерт
83
 После исправления всех ошибок мы
обнаружили еще две:
Пример графика для метода храповика
84
 Разработчики из Epic Games остались довольны
 Теперь они регулярно пользуются статическим
анализом
 Ну а мы… а мы написали про это еще одну статью :)
Итого
85
Подведение итогов
86
87
Хотите почистить legacy-код?
Используйте статический анализ!
Если предупреждений тысячи:
88
1. Настройте непрерывный анализ
2. Защититесь от новых ошибок
3. Обработайте отчёт анализатора постепенно
(принцип Парето и метод храповика)
Попробуйте статический анализ!
Попробуйте статический анализ!
e-mail:
gribkov@viva64.com
Попробуйте статический анализ!
e-mail:
gribkov@viva64.com
Вопросы и ответы

More Related Content

Similar to Как исправить сотни ошибок в legacy-коде и не умереть (на примере Unreal Engine 4)

Опыт тестирования API САПР платформы
Опыт тестирования API САПР платформыОпыт тестирования API САПР платформы
Опыт тестирования API САПР платформыSQALab
 
Agile: разработка + тестирование
Agile: разработка + тестированиеAgile: разработка + тестирование
Agile: разработка + тестированиеAlexander Byndyu
 
Автоматическое тестирование. Моя система
Автоматическое тестирование. Моя системаАвтоматическое тестирование. Моя система
Автоматическое тестирование. Моя системаIgor Lyubin
 
Статический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMergeСтатический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMergeTatyanazaxarova
 
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестированияCodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестированияCodeFest
 
Регулярное использование статического анализа кода в командной разработке
Регулярное использование статического анализа кода в командной разработкеРегулярное использование статического анализа кода в командной разработке
Регулярное использование статического анализа кода в командной разработкеTatyanazaxarova
 
Отладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программОтладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программTatyanazaxarova
 
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...Platonov Sergey
 
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...Tatyanazaxarova
 
64 бита для Си++ программистов: от /Wp64 к Viva64
64 бита для Си++ программистов: от /Wp64 к Viva6464 бита для Си++ программистов: от /Wp64 к Viva64
64 бита для Си++ программистов: от /Wp64 к Viva64Tatyanazaxarova
 
Алексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кодаАлексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кодаYandex
 
Применение статического анализа кода в преподавании и в разработке свободного ПО
Применение статического анализа кода в преподавании и в разработке свободного ПОПрименение статического анализа кода в преподавании и в разработке свободного ПО
Применение статического анализа кода в преподавании и в разработке свободного ПОAndrey Karpov
 
Mva stf module 5 - rus
Mva stf module 5 - rusMva stf module 5 - rus
Mva stf module 5 - rusMaxim Shaptala
 
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠  CoreHard Autumn 2019Как не подавиться большим старым проектом. Юрий Минаев ➠  CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019corehard_by
 
Как не подавиться большим старым проектом
Как не подавиться большим старым проектомКак не подавиться большим старым проектом
Как не подавиться большим старым проектомAndrey Karpov
 
Илья Фомин - Проблемы автоматизируемости тестирования и их решения
Илья Фомин - Проблемы автоматизируемости тестирования и их решенияИлья Фомин - Проблемы автоматизируемости тестирования и их решения
Илья Фомин - Проблемы автоматизируемости тестирования и их решенияSQALab
 
Статический анализ кода для верификации 64-битных приложений
Статический анализ кода для верификации 64-битных приложенийСтатический анализ кода для верификации 64-битных приложений
Статический анализ кода для верификации 64-битных приложенийTatyanazaxarova
 
Нужно ли статическому анализу машинное обучение?
Нужно ли статическому анализу машинное обучение?Нужно ли статическому анализу машинное обучение?
Нужно ли статическому анализу машинное обучение?Andrey Karpov
 
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...Badoo Development
 
Алексей Лянгузов
Алексей ЛянгузовАлексей Лянгузов
Алексей ЛянгузовSQALab
 

Similar to Как исправить сотни ошибок в legacy-коде и не умереть (на примере Unreal Engine 4) (20)

Опыт тестирования API САПР платформы
Опыт тестирования API САПР платформыОпыт тестирования API САПР платформы
Опыт тестирования API САПР платформы
 
Agile: разработка + тестирование
Agile: разработка + тестированиеAgile: разработка + тестирование
Agile: разработка + тестирование
 
Автоматическое тестирование. Моя система
Автоматическое тестирование. Моя системаАвтоматическое тестирование. Моя система
Автоматическое тестирование. Моя система
 
Статический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMergeСтатический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMerge
 
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестированияCodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
 
Регулярное использование статического анализа кода в командной разработке
Регулярное использование статического анализа кода в командной разработкеРегулярное использование статического анализа кода в командной разработке
Регулярное использование статического анализа кода в командной разработке
 
Отладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программОтладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программ
 
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
 
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
 
64 бита для Си++ программистов: от /Wp64 к Viva64
64 бита для Си++ программистов: от /Wp64 к Viva6464 бита для Си++ программистов: от /Wp64 к Viva64
64 бита для Си++ программистов: от /Wp64 к Viva64
 
Алексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кодаАлексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кода
 
Применение статического анализа кода в преподавании и в разработке свободного ПО
Применение статического анализа кода в преподавании и в разработке свободного ПОПрименение статического анализа кода в преподавании и в разработке свободного ПО
Применение статического анализа кода в преподавании и в разработке свободного ПО
 
Mva stf module 5 - rus
Mva stf module 5 - rusMva stf module 5 - rus
Mva stf module 5 - rus
 
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠  CoreHard Autumn 2019Как не подавиться большим старым проектом. Юрий Минаев ➠  CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019
 
Как не подавиться большим старым проектом
Как не подавиться большим старым проектомКак не подавиться большим старым проектом
Как не подавиться большим старым проектом
 
Илья Фомин - Проблемы автоматизируемости тестирования и их решения
Илья Фомин - Проблемы автоматизируемости тестирования и их решенияИлья Фомин - Проблемы автоматизируемости тестирования и их решения
Илья Фомин - Проблемы автоматизируемости тестирования и их решения
 
Статический анализ кода для верификации 64-битных приложений
Статический анализ кода для верификации 64-битных приложенийСтатический анализ кода для верификации 64-битных приложений
Статический анализ кода для верификации 64-битных приложений
 
Нужно ли статическому анализу машинное обучение?
Нужно ли статическому анализу машинное обучение?Нужно ли статическому анализу машинное обучение?
Нужно ли статическому анализу машинное обучение?
 
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
 
Алексей Лянгузов
Алексей ЛянгузовАлексей Лянгузов
Алексей Лянгузов
 

More from Andrey Karpov

60 антипаттернов для С++ программиста
60 антипаттернов для С++ программиста60 антипаттернов для С++ программиста
60 антипаттернов для С++ программистаAndrey Karpov
 
60 terrible tips for a C++ developer
60 terrible tips for a C++ developer60 terrible tips for a C++ developer
60 terrible tips for a C++ developerAndrey Karpov
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Andrey Karpov
 
PVS-Studio in 2021 - Error Examples
PVS-Studio in 2021 - Error ExamplesPVS-Studio in 2021 - Error Examples
PVS-Studio in 2021 - Error ExamplesAndrey Karpov
 
PVS-Studio in 2021 - Feature Overview
PVS-Studio in 2021 - Feature OverviewPVS-Studio in 2021 - Feature Overview
PVS-Studio in 2021 - Feature OverviewAndrey Karpov
 
PVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокPVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокAndrey Karpov
 
Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...
Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...
Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...Andrey Karpov
 
Best Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' MistakesBest Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' MistakesAndrey Karpov
 
Does static analysis need machine learning?
Does static analysis need machine learning?Does static analysis need machine learning?
Does static analysis need machine learning?Andrey Karpov
 
Typical errors in code on the example of C++, C#, and Java
Typical errors in code on the example of C++, C#, and JavaTypical errors in code on the example of C++, C#, and Java
Typical errors in code on the example of C++, C#, and JavaAndrey Karpov
 
How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)
How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)
How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)Andrey Karpov
 
Game Engine Code Quality: Is Everything Really That Bad?
Game Engine Code Quality: Is Everything Really That Bad?Game Engine Code Quality: Is Everything Really That Bad?
Game Engine Code Quality: Is Everything Really That Bad?Andrey Karpov
 
C++ Code as Seen by a Hypercritical Reviewer
C++ Code as Seen by a Hypercritical ReviewerC++ Code as Seen by a Hypercritical Reviewer
C++ Code as Seen by a Hypercritical ReviewerAndrey Karpov
 
The Use of Static Code Analysis When Teaching or Developing Open-Source Software
The Use of Static Code Analysis When Teaching or Developing Open-Source SoftwareThe Use of Static Code Analysis When Teaching or Developing Open-Source Software
The Use of Static Code Analysis When Teaching or Developing Open-Source SoftwareAndrey Karpov
 
Static Code Analysis for Projects, Built on Unreal Engine
Static Code Analysis for Projects, Built on Unreal EngineStatic Code Analysis for Projects, Built on Unreal Engine
Static Code Analysis for Projects, Built on Unreal EngineAndrey Karpov
 
Safety on the Max: How to Write Reliable C/C++ Code for Embedded Systems
Safety on the Max: How to Write Reliable C/C++ Code for Embedded SystemsSafety on the Max: How to Write Reliable C/C++ Code for Embedded Systems
Safety on the Max: How to Write Reliable C/C++ Code for Embedded SystemsAndrey Karpov
 
The Great and Mighty C++
The Great and Mighty C++The Great and Mighty C++
The Great and Mighty C++Andrey Karpov
 
Static code analysis: what? how? why?
Static code analysis: what? how? why?Static code analysis: what? how? why?
Static code analysis: what? how? why?Andrey Karpov
 
Zero, one, two, Freddy's coming for you
Zero, one, two, Freddy's coming for youZero, one, two, Freddy's coming for you
Zero, one, two, Freddy's coming for youAndrey Karpov
 

More from Andrey Karpov (20)

60 антипаттернов для С++ программиста
60 антипаттернов для С++ программиста60 антипаттернов для С++ программиста
60 антипаттернов для С++ программиста
 
60 terrible tips for a C++ developer
60 terrible tips for a C++ developer60 terrible tips for a C++ developer
60 terrible tips for a C++ developer
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
 
PVS-Studio in 2021 - Error Examples
PVS-Studio in 2021 - Error ExamplesPVS-Studio in 2021 - Error Examples
PVS-Studio in 2021 - Error Examples
 
PVS-Studio in 2021 - Feature Overview
PVS-Studio in 2021 - Feature OverviewPVS-Studio in 2021 - Feature Overview
PVS-Studio in 2021 - Feature Overview
 
PVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокPVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибок
 
PVS-Studio в 2021
PVS-Studio в 2021PVS-Studio в 2021
PVS-Studio в 2021
 
Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...
Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...
Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...
 
Best Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' MistakesBest Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' Mistakes
 
Does static analysis need machine learning?
Does static analysis need machine learning?Does static analysis need machine learning?
Does static analysis need machine learning?
 
Typical errors in code on the example of C++, C#, and Java
Typical errors in code on the example of C++, C#, and JavaTypical errors in code on the example of C++, C#, and Java
Typical errors in code on the example of C++, C#, and Java
 
How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)
How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)
How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)
 
Game Engine Code Quality: Is Everything Really That Bad?
Game Engine Code Quality: Is Everything Really That Bad?Game Engine Code Quality: Is Everything Really That Bad?
Game Engine Code Quality: Is Everything Really That Bad?
 
C++ Code as Seen by a Hypercritical Reviewer
C++ Code as Seen by a Hypercritical ReviewerC++ Code as Seen by a Hypercritical Reviewer
C++ Code as Seen by a Hypercritical Reviewer
 
The Use of Static Code Analysis When Teaching or Developing Open-Source Software
The Use of Static Code Analysis When Teaching or Developing Open-Source SoftwareThe Use of Static Code Analysis When Teaching or Developing Open-Source Software
The Use of Static Code Analysis When Teaching or Developing Open-Source Software
 
Static Code Analysis for Projects, Built on Unreal Engine
Static Code Analysis for Projects, Built on Unreal EngineStatic Code Analysis for Projects, Built on Unreal Engine
Static Code Analysis for Projects, Built on Unreal Engine
 
Safety on the Max: How to Write Reliable C/C++ Code for Embedded Systems
Safety on the Max: How to Write Reliable C/C++ Code for Embedded SystemsSafety on the Max: How to Write Reliable C/C++ Code for Embedded Systems
Safety on the Max: How to Write Reliable C/C++ Code for Embedded Systems
 
The Great and Mighty C++
The Great and Mighty C++The Great and Mighty C++
The Great and Mighty C++
 
Static code analysis: what? how? why?
Static code analysis: what? how? why?Static code analysis: what? how? why?
Static code analysis: what? how? why?
 
Zero, one, two, Freddy's coming for you
Zero, one, two, Freddy's coming for youZero, one, two, Freddy's coming for you
Zero, one, two, Freddy's coming for you
 

Как исправить сотни ошибок в legacy-коде и не умереть (на примере Unreal Engine 4)