testcon moscow 2019...2019/04/01 · •Рассматривай их как...
TRANSCRIPT
![Page 1: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/1.jpg)
1/30
Статический анализ как дополнительный барьер на пути ошибок
Сергей Хренов
PVS-Studio
TestCon Moscow 2019
![Page 2: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/2.jpg)
2/30
“У нас были включены все уровни предупреждений компилятора,98% кода покрыто тестами, три тим-лида проводили Code-Review, мы даже использовали парную разработку и Agile. Не то, чтобы всё это было нужно в работе, но раз взялся делать код надёжным,то иди в этом до конца.”
![Page 3: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/3.jpg)
3/30
Проблематика
• Объём кодовой базы растёт
• При этом плотность ошибок растёт нелинейно
• Требования к коду всё выше
• Старых методов контроля качества уже недостаточно
![Page 4: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/4.jpg)
4/30
Методы улучшения качества кода
• Делать сразу правильно (не работает)• Следование корпоративным правилам• Использование “лучших практик”• Парная разработка• Разработка через тестирование (TDD)• Гибкая разработка Agile• Совместные обзоры кода• Инструментальные средства
![Page 5: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/5.jpg)
5/30
Обзоры кода
![Page 6: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/6.jpg)
6/30
Используй инструментальные средства
• Нагрузочные тесты• Unit-тесты• Динамические анализаторы• Статические анализаторы• ???• PROFIT!!!
![Page 7: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/7.jpg)
7/30
Статический анализ кода
•Не заменяет, но дополняет обзоры кода
•Позволяет контролировать качество кода в больших проектах
•Рассмотрим, что такое статический анализ кода
•Для чего ещё он может использоваться
![Page 8: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/8.jpg)
8/30
Статический анализ – это…
![Page 9: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/9.jpg)
9/30
Статический анализ кода
Преимущества:
• Раннее обнаружение проблем
• Максимальное покрытие кода
• Поиск разнообразных паттернов ошибок
Недостатки:
• Ложные срабатывания
• Неизвестна точная критичность ошибки
![Page 10: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/10.jpg)
10/30
Зачем нужен статический анализ кода
![Page 11: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/11.jpg)
11/30
Зачем нужен статический анализ кода
![Page 12: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/12.jpg)
12/30
Зачем нужен статический анализ кода
MonoV3012 The '?:' operator, regardless of its conditional expression, always returns one and the same value: Color.FromArgb (150, 179, 225). ProfessionalColorTable.cs 258
![Page 13: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/13.jpg)
13/30
Место статического анализа в процессе разработки
Только одно правило:
Чем ближе к коду – тем лучше
![Page 14: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/14.jpg)
14/30
Стоимость исправления ошибки
0
1000
2000
3000
4000
5000
6000
7000
8000
Development Build QA Release Phase
$ NIST: National Institute of Standards and Technology
![Page 15: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/15.jpg)
15/30
Какие инструменты использовать
• PVS-Studio• Coverity• ReSharper• SonarQube• Klocwork• Visual Studio• Clang• GCC• ...
![Page 16: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/16.jpg)
16/30
Распространённые типы ошибок
• Copy-Paste• Доступ по нулевому указателю• Ошибочные проверки• Выход за границу массива• Неиспользуемый результат• Деление на ноль• Некомпетентность• …
![Page 17: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/17.jpg)
17/30
Roslyn
![Page 18: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/18.jpg)
18/30
Roslyn
![Page 19: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/19.jpg)
19/30
Amazon Web Services SDK для .NET
![Page 20: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/20.jpg)
20/30
Amazon Web Services SDK для .NET
![Page 21: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/21.jpg)
21/30
Unity
![Page 22: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/22.jpg)
22/30
Unity
![Page 23: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/23.jpg)
23/30
• Не только надёжный, но и безопасный код!
• Статический анализ, нацеленный на поиск и предотвращение уязвимостей
• Уязвимости - те же самые обыкновенные ошибки
SAST - Static Application Security Testing
![Page 24: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/24.jpg)
24/30
CWE - Common Weakness Enumeration
CVE - Common Vulnerabilities
and Exposures
Что за уязвимости?
Разные ошибки
CWE
CVE
![Page 25: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/25.jpg)
25/30
Попробуй статический анализ
• Подходящий инструментарий• Тонкая настройка• Инкрементальный режим• Регулярное использование
• Синтетические тесты• Небольшая кодовая база
![Page 26: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/26.jpg)
26/30
Внедрение
• Первый запуск гарантированно выдаст 100500 ошибок
• Рассматривай их как “технический долг”
• В дальнейшем эти ошибки можно и нужно спокойно исправить
![Page 27: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/27.jpg)
27/30
• Настрой анализ на сборочном сервере во время ночных сборок
• Используй анализатор в инкрементальном режиме на машинах разработчиков
• Используй все другие доступные методики для улучшения качества кода
Регулярное использование
![Page 28: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/28.jpg)
28/30
Выводы
• Статический анализ – не панацея от всех бед
• Статический анализ – это ответ на вопрос: "Что ещё я могу сделать для улучшения качества моего кода?"
• Что значит лучше? Легче поддерживать, проще развивать, быстрее устранять проблемы
• Если ваша компания зарабатывает деньги, используя программный код, вы просто не можете не использовать статический анализ кода
![Page 29: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/29.jpg)
29/30
Ответы на вопросы
![Page 30: TestCon Moscow 2019...2019/04/01 · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно](https://reader033.vdocuments.net/reader033/viewer/2022050110/5f47ab6e44fedb154d7c3ab1/html5/thumbnails/30.jpg)
30/30
Сергей Хренов
C# разработчик, PVS-Studio
www.viva64.com
Контакты