testcon moscow 2019...2019/04/01  · •Рассматривай их как...

30
1/30 Статический анализ как дополнительный барьер на пути ошибок Сергей Хренов PVS-Studio TestCon Moscow 2019

Upload: others

Post on 14-Jul-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

1/30

Статический анализ как дополнительный барьер на пути ошибок

Сергей Хренов

PVS-Studio

TestCon Moscow 2019

Page 2: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

2/30

“У нас были включены все уровни предупреждений компилятора,98% кода покрыто тестами, три тим-лида проводили Code-Review, мы даже использовали парную разработку и Agile. Не то, чтобы всё это было нужно в работе, но раз взялся делать код надёжным,то иди в этом до конца.”

Page 3: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

3/30

Проблематика

• Объём кодовой базы растёт

• При этом плотность ошибок растёт нелинейно

• Требования к коду всё выше

• Старых методов контроля качества уже недостаточно

Page 4: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

4/30

Методы улучшения качества кода

• Делать сразу правильно (не работает)• Следование корпоративным правилам• Использование “лучших практик”• Парная разработка• Разработка через тестирование (TDD)• Гибкая разработка Agile• Совместные обзоры кода• Инструментальные средства

Page 5: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

5/30

Обзоры кода

Page 6: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

6/30

Используй инструментальные средства

• Нагрузочные тесты• Unit-тесты• Динамические анализаторы• Статические анализаторы• ???• PROFIT!!!

Page 7: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

7/30

Статический анализ кода

•Не заменяет, но дополняет обзоры кода

•Позволяет контролировать качество кода в больших проектах

•Рассмотрим, что такое статический анализ кода

•Для чего ещё он может использоваться

Page 8: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

8/30

Статический анализ – это…

Page 9: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

9/30

Статический анализ кода

Преимущества:

• Раннее обнаружение проблем

• Максимальное покрытие кода

• Поиск разнообразных паттернов ошибок

Недостатки:

• Ложные срабатывания

• Неизвестна точная критичность ошибки

Page 10: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

10/30

Зачем нужен статический анализ кода

Page 11: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

11/30

Зачем нужен статический анализ кода

Page 12: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

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  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

13/30

Место статического анализа в процессе разработки

Только одно правило:

Чем ближе к коду – тем лучше

Page 14: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

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  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

15/30

Какие инструменты использовать

• PVS-Studio• Coverity• ReSharper• SonarQube• Klocwork• Visual Studio• Clang• GCC• ...

Page 16: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

16/30

Распространённые типы ошибок

• Copy-Paste• Доступ по нулевому указателю• Ошибочные проверки• Выход за границу массива• Неиспользуемый результат• Деление на ноль• Некомпетентность• …

Page 17: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

17/30

Roslyn

Page 18: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

18/30

Roslyn

Page 19: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

19/30

Amazon Web Services SDK для .NET

Page 20: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

20/30

Amazon Web Services SDK для .NET

Page 21: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

21/30

Unity

Page 22: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

22/30

Unity

Page 23: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

23/30

• Не только надёжный, но и безопасный код!

• Статический анализ, нацеленный на поиск и предотвращение уязвимостей

• Уязвимости - те же самые обыкновенные ошибки

SAST - Static Application Security Testing

Page 24: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

24/30

CWE - Common Weakness Enumeration

CVE - Common Vulnerabilities

and Exposures

Что за уязвимости?

Разные ошибки

CWE

CVE

Page 25: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

25/30

Попробуй статический анализ

• Подходящий инструментарий• Тонкая настройка• Инкрементальный режим• Регулярное использование

• Синтетические тесты• Небольшая кодовая база

Page 26: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

26/30

Внедрение

• Первый запуск гарантированно выдаст 100500 ошибок

• Рассматривай их как “технический долг”

• В дальнейшем эти ошибки можно и нужно спокойно исправить

Page 27: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

27/30

• Настрой анализ на сборочном сервере во время ночных сборок

• Используй анализатор в инкрементальном режиме на машинах разработчиков

• Используй все другие доступные методики для улучшения качества кода

Регулярное использование

Page 28: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

28/30

Выводы

• Статический анализ – не панацея от всех бед

• Статический анализ – это ответ на вопрос: "Что ещё я могу сделать для улучшения качества моего кода?"

• Что значит лучше? Легче поддерживать, проще развивать, быстрее устранять проблемы

• Если ваша компания зарабатывает деньги, используя программный код, вы просто не можете не использовать статический анализ кода

Page 29: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

29/30

Ответы на вопросы

Page 30: TestCon Moscow 2019...2019/04/01  · •Рассматривай их как ^технический долг _ •В дальнейшем эти ошибки можно и нужно

30/30

Сергей Хренов

C# разработчик, PVS-Studio

[email protected]

www.viva64.com

Контакты