SlideShare a Scribd company logo
1 of 52
Облегчаем процесс разработки с
помощью статического анализа кода:
Наш опыт
Докладчик:
Георгий Грибков
Докладчик
Георгий Грибков
Программист C++, один из
разработчиков статического анализатора
кода PVS-Studio
Разрабатывает набор диагностических
правил, проверяющих код на
соответствие стандартам
MISRA C и MISRA C++
gribkov@viva64.com
2
1. Статический анализ: что это и зачем он нужен?
2. Реальный кейс: статический анализ в разработке UE 4
3. Советы по внедрению в ваш проект
Содержание
3
Статический анализ: что это и зачем он
нужен?
4
 Объем кодовой базы растёт
Проблематика
5
 Объем кодовой базы растёт
Проблематика
6
 Ядро Linux 1.0.0 : 176 250 строк кода
 Ядро Linux 4.11.7: 18 373 471 строк кода
 Photoshop 1.0 : 128 000 строк кода
 Photoshop CS 6 : 10 000 000 строк кода
 Объем кодовой базы растёт
 При этом плотность ошибок растет нелинейно
Проблематика
7
 Объем кодовой базы растёт
 При этом плотность ошибок растет нелинейно
Проблематика
8
 Объем кодовой базы растёт
 При этом плотность ошибок растет нелинейно
 Поддерживать качество кода становится все сложнее
Проблематика
9
 Объем кодовой базы растёт
 При этом плотность ошибок растет нелинейно
 Поддерживать качество кода становится все сложнее
 Некоторые ошибки превращаются в уязвимости
Проблематика
10
Цена исправления ошибки
11
Цена исправления уязвимости
12
 4 июня 1996 года европейская ракета-носитель Ariane 5
превратилась в конфетти на 37 секунде полета
Пример очень дорогой ошибки
13
 Расследование показало, что причиной аварии
послужила программная ошибка (целочисленное
переполнение)
 На борту ракеты были четыре спутника
 Убытки составили 370 000 000 $
Пример очень дорогой ошибки
14
 Делать сразу правильно (не работает)
 Code review
 Тестирование
 … а можно ли как-нибудь еще?
 Можно! Например – автоматические средства
анализа
Как улучшить качество кода
15
 Статические анализаторы: код проверяется без его
выполнения
 Динамические анализаторы: код проверяется во время
его выполнения
 Обе методологии отлично дополняют друг друга
Автоматические средства анализа кода
16
 Низкая стоимость
 Не устает и не теряет бдительности
 Помогает программистам обучаться
Достоинства статического анализа
17
 Значительно быстрее, чем динамический анализ
 Крайне полезен для больших проектов
 Полное покрытие кода
 Помогает проверить code style или соответствие
стандарту кодирования
Достоинства статического анализа
18
 Имеет ложные срабатывания
 Полностью не избавляет от code review
 Сложно с многопоточностью
Недостатки статического анализа
19
Современные статические анализаторы
20
• PVS-Studio
• ReSharper
• Coverity
• SonarQube
• Klocwork
• Clang Static Analyzer
• IntelliJ IDEA
• ...
• Большой список
статических анализаторов:
Реальный кейс: статический анализ в
разработке UE 4
21
Давным-давно, в далеком 2015 году...
22
 Мой коллега проверил код UE 4 и написал статью о
найденных ошибках
 «Спасибо за статью! Мы всё-всё исправили.»
 Для нас «спасибо» оказалось мало
 Мы решили помочь Epic Games внедрить PVS-Studio в их
процесс разработки
 Собственно, а что означает «внедрить»?
Давным-давно, в далеком 2015 году...
23
 Локально на компьютерах разработчиков (плагины для
IDE, системы мониторинга компиляции)
Как и где стоит проводить анализ
24
 В системах непрерывной интеграции (command-line
утилиты, плагины для CI-систем, системы мониторинга)
Как и где стоит проводить анализ
25
Как и где стоит проводить анализ
26
 С чего начать? С проверки проекта!
 Самый удобный способ: проверить проект через
Visual Studio
 Хорошо, что UE имеет набор скриптов для
генерации .vcxproj-файлов
Вернемся к Unreal Engine
27
1. Генерируем проектные файлы
2. Собираем проект
3. Запускаем анализ из Visual Studio
4. ???????
5.
Первая попытка анализа
28
1. Генерируем проектные файлы
2. Собираем проект
3. Запускаем анализ из Visual Studio
4. ???????
5. EPIC GAMES FAIL
Первая попытка анализа
29
 Сгенерированные проектные файлы – лишь обёртка
 Эти обёртки вызывают Unreal Build Tool
 Поэтому анализатор не может получить необходимые
данные
 Вывод: необходимо отлавливать непосредственно
вызовы компилятора
Как устроена сборка Unreal Engine
30
1. Перед сборкой запускаем утилиту
мониторинга компиляции
2. Утилита собирает все необходимые
данные
3. Сразу после окончания сборки
запускается анализ
4. ???????
5.
Вторая попытка анализа
31
1. Перед сборкой запускаем утилиту
мониторинга компиляции
2. Утилита собирает все необходимые
данные
3. Сразу после окончания сборки
запускается анализ
4. ???????
5. EPIC WIN!!!
Вторая попытка анализа
32
 1192 предупреждения наивысшего уровня (Level 1)
 629 предупреждения второго уровня (Level 2)
 Суммарно 1821 предупреждения (без Level 3)
Результаты анализа
33
 Интуитивный вариант: сесть и разгребать, пока
предупреждений не станет ноль
 Более правильный вариант: исправлять ошибки
постепенно
 Тем не менее, разработчики UE хотели, чтобы все ошибки
были исправлены, поэтому передали их исправление нам
Как поступать со срабатываниями?
34
 Ночью на сервере собиралась последняя ревизия UE 4
 При каждой сборке запускался мониторинг (спасибо
command-line утилите)
 С утра наши ребята получали свежий отчет об ошибках
 Дополнительный плюс: мы имели возможность сразу
проверить сборку (а не отвалилось ли чего?)
Как мы исправляли ошибки
35
График количества ошибок
36
0
5
10
15
20
25
1 2 3 4 5
Warnings
0
5
10
15
20
25
1 2 3 4 5
Warnings
 Ожидание  Реальность
Прогресс по исправлениям
37
37
 А теперь – регулярное использование анализатора
 Ведь все ошибки могли быть исправлены в момент их
появления
 Пример: после исправления ошибок мы обнаружили еще
два свежих предупреждения
Ошибки исправлены. Что теперь?
38
 Разработчики из Epic Games остались довольны
 Они поступили как мы: настроили анализ на
компьютерах разработчиков и на сборочном сервере
 Теперь они вовремя получают уведомления об ошибках
 Ну а мы… а мы написали про это еще одну статью :)
Что получилось в итоге?
39
Советы по интеграции в ваш проект
40
 Попробуйте! Вам понравится.
 Лучше один раз попробовать, чем сто раз услышать
Для начала – попробуйте
41
 Исправлять все ошибки сразу – сложно.
 Как же тогда замечать новые срабатывания?
 Мы предлагаем решение: suppress-базы
 Suppress-базы – это механизм массового подавления
сообщений анализатора
Стоит ли править все ошибки сразу?
42
 Прячем старые ошибки – работаем в привычном темпе
 С этого момента видим только новые предупреждения
 Получаем пользу от анализатора СРАЗУ
 Спрятанные ошибки не забываем! Возвращаемся и
потихоньку правим.
Как работать с suppress-базой
43
 Очень удобный вариант: метод храповика («ratcheting»)
 Количество ошибок в базе закладывается в систему контроля
версий
 Допускаются только те изменения, которые не увеличивают
общее количество предупреждений
Как работать с suppress-базой
44
Как работать с suppress-базой
45
 Иван Пономарёв — Непрерывный статический анализ кода
Полезный доклад по теме
46
 Максимальная польза от статического
анализа достигается только при регулярном
использовании!
Главное – регулярность
47
 Конечно стоит! Статический анализ – не панацея от всех ошибок
 Статический анализ – это ответ на вопрос «а как ЕЩЕ можно
повысить качество кода?»
 Пример классного сочетания: статический + динамический
анализ
Стоит ли использовать другие методологии?
48
Заключение
49
 Польза статического анализа
 Практический кейс: UE 4
 Как выжать максимум
Подведем итоги
50
Полезные ссылки
51
 Наш сайт: viva64.com
 Попробовать
PVS-Studio:
 Наш блог на Хабре:
Полезные ссылки
52
 Наш сайт: viva64.com
 Попробовать
PVS-Studio:
 Наш блог на Хабре:
Ответы на вопросы

More Related Content

What's hot

Badger — инструмент для мониторинга качества продуктов
Badger — инструмент для мониторинга качества продуктовBadger — инструмент для мониторинга качества продуктов
Badger — инструмент для мониторинга качества продуктовSQALab
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...HappyDev
 
Технологии разработки ПО
Технологии разработки ПОТехнологии разработки ПО
Технологии разработки ПОAnton Konushin
 
Тестирование ПО, основанного на сторонних компонентах, на примере дистрибут...
Тестирование ПО, основанного на  сторонних компонентах, на примере  дистрибут...Тестирование ПО, основанного на  сторонних компонентах, на примере  дистрибут...
Тестирование ПО, основанного на сторонних компонентах, на примере дистрибут...ru_Parallels
 
Автоматизация тестирования как сервис
Автоматизация тестирования как сервисАвтоматизация тестирования как сервис
Автоматизация тестирования как сервисautomated-testing.info
 
Highway to Сontinuous Integration, Денис Трифонов (2GIS)
Highway to Сontinuous Integration, Денис Трифонов (2GIS)Highway to Сontinuous Integration, Денис Трифонов (2GIS)
Highway to Сontinuous Integration, Денис Трифонов (2GIS)Ontico
 
Анти шаблоны непрерывной интеграции
Анти шаблоны непрерывной интеграцииАнти шаблоны непрерывной интеграции
Анти шаблоны непрерывной интеграцииSQALab
 
Роман Василенко. Continuous delivery или как упростить себе жизнь
Роман Василенко. Continuous delivery или как упростить себе жизньРоман Василенко. Continuous delivery или как упростить себе жизнь
Роман Василенко. Continuous delivery или как упростить себе жизнь_itcampus
 
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...Badoo Development
 
Стратегия тестирования крупного проекта в условиях Agile разработки v2
Стратегия тестирования крупного проекта в условиях Agile разработки v2Стратегия тестирования крупного проекта в условиях Agile разработки v2
Стратегия тестирования крупного проекта в условиях Agile разработки v2Magneta AI
 
Обзор Continuous integration инструментов
Обзор Continuous integration инструментовОбзор Continuous integration инструментов
Обзор Continuous integration инструментовVitalii Morvaniuk
 
Дефицит ресурсов тестирования... или нет?
Дефицит ресурсов тестирования... или нет?Дефицит ресурсов тестирования... или нет?
Дефицит ресурсов тестирования... или нет?SQALab
 
Как тестируют в гугле - обзор книги
Как тестируют в гугле - обзор книгиКак тестируют в гугле - обзор книги
Как тестируют в гугле - обзор книгиkosyakov
 
Тестирование REST-сервисов с применением инженерных практик
Тестирование REST-сервисов с применением инженерных практикТестирование REST-сервисов с применением инженерных практик
Тестирование REST-сервисов с применением инженерных практикSQALab
 
Марина Широчкина - Тестирование
Марина Широчкина - ТестированиеМарина Широчкина - Тестирование
Марина Широчкина - ТестированиеYandex
 
Использование анализатора кода SonarQube
Использование анализатора кода SonarQubeИспользование анализатора кода SonarQube
Использование анализатора кода SonarQubePositive Hack Days
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практикеDenis Tuchin
 
Test Automation as a way of Natural Evolution of a Project
Test Automation as a way of Natural Evolution of a ProjectTest Automation as a way of Natural Evolution of a Project
Test Automation as a way of Natural Evolution of a ProjectKateryna Nesmyelova
 
Марина Широчкина: Тестирование
Марина Широчкина: ТестированиеМарина Широчкина: Тестирование
Марина Широчкина: ТестированиеYandex
 

What's hot (20)

Badger — инструмент для мониторинга качества продуктов
Badger — инструмент для мониторинга качества продуктовBadger — инструмент для мониторинга качества продуктов
Badger — инструмент для мониторинга качества продуктов
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
 
QAFest. Роль тестирования в Devops
QAFest. Роль тестирования в DevopsQAFest. Роль тестирования в Devops
QAFest. Роль тестирования в Devops
 
Технологии разработки ПО
Технологии разработки ПОТехнологии разработки ПО
Технологии разработки ПО
 
Тестирование ПО, основанного на сторонних компонентах, на примере дистрибут...
Тестирование ПО, основанного на  сторонних компонентах, на примере  дистрибут...Тестирование ПО, основанного на  сторонних компонентах, на примере  дистрибут...
Тестирование ПО, основанного на сторонних компонентах, на примере дистрибут...
 
Автоматизация тестирования как сервис
Автоматизация тестирования как сервисАвтоматизация тестирования как сервис
Автоматизация тестирования как сервис
 
Highway to Сontinuous Integration, Денис Трифонов (2GIS)
Highway to Сontinuous Integration, Денис Трифонов (2GIS)Highway to Сontinuous Integration, Денис Трифонов (2GIS)
Highway to Сontinuous Integration, Денис Трифонов (2GIS)
 
Анти шаблоны непрерывной интеграции
Анти шаблоны непрерывной интеграцииАнти шаблоны непрерывной интеграции
Анти шаблоны непрерывной интеграции
 
Роман Василенко. Continuous delivery или как упростить себе жизнь
Роман Василенко. Continuous delivery или как упростить себе жизньРоман Василенко. Continuous delivery или как упростить себе жизнь
Роман Василенко. Continuous delivery или как упростить себе жизнь
 
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
 
Стратегия тестирования крупного проекта в условиях Agile разработки v2
Стратегия тестирования крупного проекта в условиях Agile разработки v2Стратегия тестирования крупного проекта в условиях Agile разработки v2
Стратегия тестирования крупного проекта в условиях Agile разработки v2
 
Обзор Continuous integration инструментов
Обзор Continuous integration инструментовОбзор Continuous integration инструментов
Обзор Continuous integration инструментов
 
Дефицит ресурсов тестирования... или нет?
Дефицит ресурсов тестирования... или нет?Дефицит ресурсов тестирования... или нет?
Дефицит ресурсов тестирования... или нет?
 
Как тестируют в гугле - обзор книги
Как тестируют в гугле - обзор книгиКак тестируют в гугле - обзор книги
Как тестируют в гугле - обзор книги
 
Тестирование REST-сервисов с применением инженерных практик
Тестирование REST-сервисов с применением инженерных практикТестирование REST-сервисов с применением инженерных практик
Тестирование REST-сервисов с применением инженерных практик
 
Марина Широчкина - Тестирование
Марина Широчкина - ТестированиеМарина Широчкина - Тестирование
Марина Широчкина - Тестирование
 
Использование анализатора кода SonarQube
Использование анализатора кода SonarQubeИспользование анализатора кода SonarQube
Использование анализатора кода SonarQube
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
 
Test Automation as a way of Natural Evolution of a Project
Test Automation as a way of Natural Evolution of a ProjectTest Automation as a way of Natural Evolution of a Project
Test Automation as a way of Natural Evolution of a Project
 
Марина Широчкина: Тестирование
Марина Широчкина: ТестированиеМарина Широчкина: Тестирование
Марина Широчкина: Тестирование
 

Similar to Облегчаем процесс разработки с помощью статического анализа кода: Наш опыт

Регулярное использование статического анализа кода в командной разработке
Регулярное использование статического анализа кода в командной разработкеРегулярное использование статического анализа кода в командной разработке
Регулярное использование статического анализа кода в командной разработкеTatyanazaxarova
 
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...Tatyanazaxarova
 
64 бита для Си++ программистов: от /Wp64 к Viva64
64 бита для Си++ программистов: от /Wp64 к Viva6464 бита для Си++ программистов: от /Wp64 к Viva64
64 бита для Си++ программистов: от /Wp64 к Viva64Tatyanazaxarova
 
Урок 8. Статический анализ для выявления 64-битных ошибок
Урок 8. Статический анализ для выявления 64-битных ошибокУрок 8. Статический анализ для выявления 64-битных ошибок
Урок 8. Статический анализ для выявления 64-битных ошибокTatyanazaxarova
 
Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Technopark
 
Опыт тестирования API САПР платформы
Опыт тестирования API САПР платформыОпыт тестирования API САПР платформы
Опыт тестирования API САПР платформыSQALab
 
Статический анализ кода для верификации 64-битных приложений
Статический анализ кода для верификации 64-битных приложенийСтатический анализ кода для верификации 64-битных приложений
Статический анализ кода для верификации 64-битных приложенийTatyanazaxarova
 
Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Реклама PVS-Studio - статический анализ кода на языке Си и Си++Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Реклама PVS-Studio - статический анализ кода на языке Си и Си++Andrey Karpov
 
Применение статического анализа кода в преподавании и в разработке свободного ПО
Применение статического анализа кода в преподавании и в разработке свободного ПОПрименение статического анализа кода в преподавании и в разработке свободного ПО
Применение статического анализа кода в преподавании и в разработке свободного ПОAndrey Karpov
 
Нужно ли статическому анализу машинное обучение?
Нужно ли статическому анализу машинное обучение?Нужно ли статическому анализу машинное обучение?
Нужно ли статическому анализу машинное обучение?Andrey Karpov
 
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠  CoreHard Autumn 2019Как не подавиться большим старым проектом. Юрий Минаев ➠  CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019corehard_by
 
Как не подавиться большим старым проектом
Как не подавиться большим старым проектомКак не подавиться большим старым проектом
Как не подавиться большим старым проектомAndrey Karpov
 
Трудности сравнения анализаторов кода или не забывайте об удобстве использования
Трудности сравнения анализаторов кода или не забывайте об удобстве использованияТрудности сравнения анализаторов кода или не забывайте об удобстве использования
Трудности сравнения анализаторов кода или не забывайте об удобстве использованияTatyanazaxarova
 
Статический анализатор кода PVS-Studio
Статический анализатор кода PVS-StudioСтатический анализатор кода PVS-Studio
Статический анализатор кода PVS-Studiocppclimber
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Yandex
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Yandex
 
Автоматическая сборка и развертывание на платформе 1C
Автоматическая сборка и развертывание на платформе 1CАвтоматическая сборка и развертывание на платформе 1C
Автоматическая сборка и развертывание на платформе 1CAlexey Lustin
 
Автоматическое тестирование. Моя система
Автоматическое тестирование. Моя системаАвтоматическое тестирование. Моя система
Автоматическое тестирование. Моя системаIgor Lyubin
 
Компонентный веб. Проникновение в дизайн / Антон Виноградов (АО "Альфа-Банк",...
Компонентный веб. Проникновение в дизайн / Антон Виноградов (АО "Альфа-Банк",...Компонентный веб. Проникновение в дизайн / Антон Виноградов (АО "Альфа-Банк",...
Компонентный веб. Проникновение в дизайн / Антон Виноградов (АО "Альфа-Банк",...Ontico
 
Что такое "Parallel Lint"?
Что такое "Parallel Lint"?Что такое "Parallel Lint"?
Что такое "Parallel Lint"?Tatyanazaxarova
 

Similar to Облегчаем процесс разработки с помощью статического анализа кода: Наш опыт (20)

Регулярное использование статического анализа кода в командной разработке
Регулярное использование статического анализа кода в командной разработкеРегулярное использование статического анализа кода в командной разработке
Регулярное использование статического анализа кода в командной разработке
 
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
Поиск ловушек в Си/Си++ коде при переносе приложений под 64-битную версию Win...
 
64 бита для Си++ программистов: от /Wp64 к Viva64
64 бита для Си++ программистов: от /Wp64 к Viva6464 бита для Си++ программистов: от /Wp64 к Viva64
64 бита для Си++ программистов: от /Wp64 к Viva64
 
Урок 8. Статический анализ для выявления 64-битных ошибок
Урок 8. Статический анализ для выявления 64-битных ошибокУрок 8. Статический анализ для выявления 64-битных ошибок
Урок 8. Статический анализ для выявления 64-битных ошибок
 
Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5
 
Опыт тестирования API САПР платформы
Опыт тестирования API САПР платформыОпыт тестирования API САПР платформы
Опыт тестирования API САПР платформы
 
Статический анализ кода для верификации 64-битных приложений
Статический анализ кода для верификации 64-битных приложенийСтатический анализ кода для верификации 64-битных приложений
Статический анализ кода для верификации 64-битных приложений
 
Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Реклама PVS-Studio - статический анализ кода на языке Си и Си++Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Реклама PVS-Studio - статический анализ кода на языке Си и Си++
 
Применение статического анализа кода в преподавании и в разработке свободного ПО
Применение статического анализа кода в преподавании и в разработке свободного ПОПрименение статического анализа кода в преподавании и в разработке свободного ПО
Применение статического анализа кода в преподавании и в разработке свободного ПО
 
Нужно ли статическому анализу машинное обучение?
Нужно ли статическому анализу машинное обучение?Нужно ли статическому анализу машинное обучение?
Нужно ли статическому анализу машинное обучение?
 
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠  CoreHard Autumn 2019Как не подавиться большим старым проектом. Юрий Минаев ➠  CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019
 
Как не подавиться большим старым проектом
Как не подавиться большим старым проектомКак не подавиться большим старым проектом
Как не подавиться большим старым проектом
 
Трудности сравнения анализаторов кода или не забывайте об удобстве использования
Трудности сравнения анализаторов кода или не забывайте об удобстве использованияТрудности сравнения анализаторов кода или не забывайте об удобстве использования
Трудности сравнения анализаторов кода или не забывайте об удобстве использования
 
Статический анализатор кода PVS-Studio
Статический анализатор кода PVS-StudioСтатический анализатор кода PVS-Studio
Статический анализатор кода PVS-Studio
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Автоматическая сборка и развертывание на платформе 1C
Автоматическая сборка и развертывание на платформе 1CАвтоматическая сборка и развертывание на платформе 1C
Автоматическая сборка и развертывание на платформе 1C
 
Автоматическое тестирование. Моя система
Автоматическое тестирование. Моя системаАвтоматическое тестирование. Моя система
Автоматическое тестирование. Моя система
 
Компонентный веб. Проникновение в дизайн / Антон Виноградов (АО "Альфа-Банк",...
Компонентный веб. Проникновение в дизайн / Антон Виноградов (АО "Альфа-Банк",...Компонентный веб. Проникновение в дизайн / Антон Виноградов (АО "Альфа-Банк",...
Компонентный веб. Проникновение в дизайн / Антон Виноградов (АО "Альфа-Банк",...
 
Что такое "Parallel Lint"?
Что такое "Parallel Lint"?Что такое "Parallel Lint"?
Что такое "Parallel Lint"?
 

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
 

Облегчаем процесс разработки с помощью статического анализа кода: Наш опыт

  • 1. Облегчаем процесс разработки с помощью статического анализа кода: Наш опыт Докладчик: Георгий Грибков
  • 2. Докладчик Георгий Грибков Программист C++, один из разработчиков статического анализатора кода PVS-Studio Разрабатывает набор диагностических правил, проверяющих код на соответствие стандартам MISRA C и MISRA C++ gribkov@viva64.com 2
  • 3. 1. Статический анализ: что это и зачем он нужен? 2. Реальный кейс: статический анализ в разработке UE 4 3. Советы по внедрению в ваш проект Содержание 3
  • 4. Статический анализ: что это и зачем он нужен? 4
  • 5.  Объем кодовой базы растёт Проблематика 5
  • 6.  Объем кодовой базы растёт Проблематика 6  Ядро Linux 1.0.0 : 176 250 строк кода  Ядро Linux 4.11.7: 18 373 471 строк кода  Photoshop 1.0 : 128 000 строк кода  Photoshop CS 6 : 10 000 000 строк кода
  • 7.  Объем кодовой базы растёт  При этом плотность ошибок растет нелинейно Проблематика 7
  • 8.  Объем кодовой базы растёт  При этом плотность ошибок растет нелинейно Проблематика 8
  • 9.  Объем кодовой базы растёт  При этом плотность ошибок растет нелинейно  Поддерживать качество кода становится все сложнее Проблематика 9
  • 10.  Объем кодовой базы растёт  При этом плотность ошибок растет нелинейно  Поддерживать качество кода становится все сложнее  Некоторые ошибки превращаются в уязвимости Проблематика 10
  • 13.  4 июня 1996 года европейская ракета-носитель Ariane 5 превратилась в конфетти на 37 секунде полета Пример очень дорогой ошибки 13
  • 14.  Расследование показало, что причиной аварии послужила программная ошибка (целочисленное переполнение)  На борту ракеты были четыре спутника  Убытки составили 370 000 000 $ Пример очень дорогой ошибки 14
  • 15.  Делать сразу правильно (не работает)  Code review  Тестирование  … а можно ли как-нибудь еще?  Можно! Например – автоматические средства анализа Как улучшить качество кода 15
  • 16.  Статические анализаторы: код проверяется без его выполнения  Динамические анализаторы: код проверяется во время его выполнения  Обе методологии отлично дополняют друг друга Автоматические средства анализа кода 16
  • 17.  Низкая стоимость  Не устает и не теряет бдительности  Помогает программистам обучаться Достоинства статического анализа 17
  • 18.  Значительно быстрее, чем динамический анализ  Крайне полезен для больших проектов  Полное покрытие кода  Помогает проверить code style или соответствие стандарту кодирования Достоинства статического анализа 18
  • 19.  Имеет ложные срабатывания  Полностью не избавляет от code review  Сложно с многопоточностью Недостатки статического анализа 19
  • 20. Современные статические анализаторы 20 • PVS-Studio • ReSharper • Coverity • SonarQube • Klocwork • Clang Static Analyzer • IntelliJ IDEA • ... • Большой список статических анализаторов:
  • 21. Реальный кейс: статический анализ в разработке UE 4 21
  • 23.  Мой коллега проверил код UE 4 и написал статью о найденных ошибках  «Спасибо за статью! Мы всё-всё исправили.»  Для нас «спасибо» оказалось мало  Мы решили помочь Epic Games внедрить PVS-Studio в их процесс разработки  Собственно, а что означает «внедрить»? Давным-давно, в далеком 2015 году... 23
  • 24.  Локально на компьютерах разработчиков (плагины для IDE, системы мониторинга компиляции) Как и где стоит проводить анализ 24
  • 25.  В системах непрерывной интеграции (command-line утилиты, плагины для CI-систем, системы мониторинга) Как и где стоит проводить анализ 25
  • 26. Как и где стоит проводить анализ 26
  • 27.  С чего начать? С проверки проекта!  Самый удобный способ: проверить проект через Visual Studio  Хорошо, что UE имеет набор скриптов для генерации .vcxproj-файлов Вернемся к Unreal Engine 27
  • 28. 1. Генерируем проектные файлы 2. Собираем проект 3. Запускаем анализ из Visual Studio 4. ??????? 5. Первая попытка анализа 28
  • 29. 1. Генерируем проектные файлы 2. Собираем проект 3. Запускаем анализ из Visual Studio 4. ??????? 5. EPIC GAMES FAIL Первая попытка анализа 29
  • 30.  Сгенерированные проектные файлы – лишь обёртка  Эти обёртки вызывают Unreal Build Tool  Поэтому анализатор не может получить необходимые данные  Вывод: необходимо отлавливать непосредственно вызовы компилятора Как устроена сборка Unreal Engine 30
  • 31. 1. Перед сборкой запускаем утилиту мониторинга компиляции 2. Утилита собирает все необходимые данные 3. Сразу после окончания сборки запускается анализ 4. ??????? 5. Вторая попытка анализа 31
  • 32. 1. Перед сборкой запускаем утилиту мониторинга компиляции 2. Утилита собирает все необходимые данные 3. Сразу после окончания сборки запускается анализ 4. ??????? 5. EPIC WIN!!! Вторая попытка анализа 32
  • 33.  1192 предупреждения наивысшего уровня (Level 1)  629 предупреждения второго уровня (Level 2)  Суммарно 1821 предупреждения (без Level 3) Результаты анализа 33
  • 34.  Интуитивный вариант: сесть и разгребать, пока предупреждений не станет ноль  Более правильный вариант: исправлять ошибки постепенно  Тем не менее, разработчики UE хотели, чтобы все ошибки были исправлены, поэтому передали их исправление нам Как поступать со срабатываниями? 34
  • 35.  Ночью на сервере собиралась последняя ревизия UE 4  При каждой сборке запускался мониторинг (спасибо command-line утилите)  С утра наши ребята получали свежий отчет об ошибках  Дополнительный плюс: мы имели возможность сразу проверить сборку (а не отвалилось ли чего?) Как мы исправляли ошибки 35
  • 36. График количества ошибок 36 0 5 10 15 20 25 1 2 3 4 5 Warnings 0 5 10 15 20 25 1 2 3 4 5 Warnings  Ожидание  Реальность
  • 38.  А теперь – регулярное использование анализатора  Ведь все ошибки могли быть исправлены в момент их появления  Пример: после исправления ошибок мы обнаружили еще два свежих предупреждения Ошибки исправлены. Что теперь? 38
  • 39.  Разработчики из Epic Games остались довольны  Они поступили как мы: настроили анализ на компьютерах разработчиков и на сборочном сервере  Теперь они вовремя получают уведомления об ошибках  Ну а мы… а мы написали про это еще одну статью :) Что получилось в итоге? 39
  • 40. Советы по интеграции в ваш проект 40
  • 41.  Попробуйте! Вам понравится.  Лучше один раз попробовать, чем сто раз услышать Для начала – попробуйте 41
  • 42.  Исправлять все ошибки сразу – сложно.  Как же тогда замечать новые срабатывания?  Мы предлагаем решение: suppress-базы  Suppress-базы – это механизм массового подавления сообщений анализатора Стоит ли править все ошибки сразу? 42
  • 43.  Прячем старые ошибки – работаем в привычном темпе  С этого момента видим только новые предупреждения  Получаем пользу от анализатора СРАЗУ  Спрятанные ошибки не забываем! Возвращаемся и потихоньку правим. Как работать с suppress-базой 43
  • 44.  Очень удобный вариант: метод храповика («ratcheting»)  Количество ошибок в базе закладывается в систему контроля версий  Допускаются только те изменения, которые не увеличивают общее количество предупреждений Как работать с suppress-базой 44
  • 45. Как работать с suppress-базой 45
  • 46.  Иван Пономарёв — Непрерывный статический анализ кода Полезный доклад по теме 46
  • 47.  Максимальная польза от статического анализа достигается только при регулярном использовании! Главное – регулярность 47
  • 48.  Конечно стоит! Статический анализ – не панацея от всех ошибок  Статический анализ – это ответ на вопрос «а как ЕЩЕ можно повысить качество кода?»  Пример классного сочетания: статический + динамический анализ Стоит ли использовать другие методологии? 48
  • 50.  Польза статического анализа  Практический кейс: UE 4  Как выжать максимум Подведем итоги 50
  • 51. Полезные ссылки 51  Наш сайт: viva64.com  Попробовать PVS-Studio:  Наш блог на Хабре:
  • 52. Полезные ссылки 52  Наш сайт: viva64.com  Попробовать PVS-Studio:  Наш блог на Хабре: Ответы на вопросы