Статический анализ кода: Что? Как? Зачем? / Максим Стефанов

Презентация: https://yadi.sk/i/6ZpJDouE3jL2uw

Расшифровка видео
0:07
а затем сим и я 1
0:13
чек уже более трех лет в компании pvs-studio который занимается разработка одноименного статического анализатора
0:20
анализируется уже языки и си си плюс плюс сишарп вас недавнего времени java и
0:26
сегодня мы ничего не будем придумывать такого и поговорим про статический
0:31
анализ итак план сегодняшнего доклада будет примерно таким мы затронем
0:38
теоретические сведения поговорим о важности качество кода о своевременном его обнаружение а
0:45
методология защиты и перейдём плавно к кадре view к статическому анализу их
0:51
сравнение рассмотрим технологии которые используются в статическим статических
0:58
анализаторах и отвлечемся немного рассмотрим примеры с
1:04
дефектами которые найдены были при помощи анализаторов и ей продолжим опять статическим анализом и этим закончен так
1:12
ладно наверное прекрасно все понимаете что выпустить продукт с тобой был
1:19
конкурентноспособной долго время чтобы он был успешен над ним надо кропотливо
1:24
работать уделять многим аспектам таким как дизайну архитектуре качество кода
1:31
успеваемости за современными тенденциями и сегодня как раз таки мы остановимся
1:39
докладе это качество кода вот качественный код точно определения
1:46
здесь нету но можно считать что качественный код это код который соответствует какому-то ряду критериев
1:53
таким критериями могут быть разные они могут быть у каждой компании свои
1:58
вот например пример таких критериев это как восприятие это кот правильно
2:06
оформлен он не перед сложнее на различными конструкциями усложненными
2:11
вот это расширение сопровождения то есть если вам надо модифицировать какую-то
2:18
часть краям кода то вы будете уверены в том что это изменение никак не повлияет на
2:23
другой на другую часть программы если вам надо добавить какую-то фичу вы
2:29
плавненько интегрируете это в существующую же архитектуру и вам не
2:34
надо так стрелять это баги как часто они стреляют выстреливают в продакшене как
2:40
часто портят жизнь проекту и много других критериев и как раз таки мы будем
2:47
сегодня открывать качественный код то с отсутствием баков и так какой бы у вас
2:54
проект не был маленький молодой с историей неважно нужно кропотливо
3:00
работать над качеством кодом потому что если халатно к этому относиться то баги
3:08
будут как снежный ком набираться то есть один бак зацепился за друг за другой
3:13
3 2 и так далее и может быть такой клубок собраться что просто со времени вопрос
3:19
не распутать эти все супер критические к просто критические баги они конечно же дадут о
3:26
себе знать сразу же это все исправить и но основная масса она будет копиться
3:33
среди строк кода все это будет перерастать технический долг и как бы
3:38
вам не хотелось для успеха этот долг нужно сводить но не канули ног минимум уж точно а если ваш продукт уже
3:46
зарекомендовал себя уже войти ниши то также не надо расслабляться потому
3:51
что потому что если начнут продакшене
3:57
стрелять баги это будет выражаться не только в денежном эквиваленте но и также будет
4:02
в огорченных пользователях это если будет происходить на постоянной основе то
4:08
отток клиентов может быть чуть был конкурентом поэтому если подытожить то
4:13
качество код это важное характеристикам вот но не только надо судить за богами
4:21
но надо еще и своевременно это делать потому что на разных этапах разработки
4:27
бах исправление бага будет по-разному строить и здесь чем раньше найдено
4:34
дефект тем дешевле вам обойдется и исправление его исправления и и принципе
4:39
это логично если давайте рассмотрим две крайности первая крайность это когда но
4:46
разработчики и задача он начинает колотить код и со временем сделал ошибку и сразу же или в течение рабочего дня
4:54
этот баг как-то себя проявил или сам ничейном случайно заметил он и его
4:59
справил сброшена на таком исправлению вторая крайность это когда он уже
5:05
допустил ошибку она попал систем контроля версий она прошла все этапы тестирования
5:10
продакшен все бах уже находится в релизе и через какое-то время он выстреливает
5:17
опять же огорченным вы огорченные пользователей как итог надо это исправлять опять возвращаемся на это об кодирование
5:24
разбираемся что вообще здесь происходит моделируем ситуацию чтобы эти баги и мбах как то опять проявил себя все это
5:31
исправляем много ресурса выходит и если привести эту невидимую линию между этими
5:36
крайностями то эта линия будет хорошо по возрастающей по возрастающей эти вот и чтобы
5:45
дефекты не выстрелит богини выстреливали в продакшене
5:51
а пример с различными за залоге эти этих
5:56
достаточно большое количество они имеют разную эффективность они направлен на
6:01
поиск разного рода ошибок и здесь не одна методология стопроцентно не защите
6:08
не защитит ваш код от дефектов здесь она главное то что эти методологии должны комбинироваться и защищать ваш
6:16
код в тандеме вот и сегодня как раз таки
6:22
мы остановимся на таких каталоге как удар view и статического
6:28
статический анализ кода которые могут вам позволить найти часть дефектов
6:34
еще на самых ранних этапах то есть на топи кодирования где цена исправление
6:39
дефекта вообще рыжему сказать что минимально вот между ними есть кое-то
6:45
черта и мы сейчас как раз таки сейчас ее и рассмотрим так кадры view
6:51
старый добрый друг в разработке наверное нет такого проекта и не применяется это
6:56
методология вот вы скорее всего все
7:01
знакомы с этой методологии но для полноты доклада и сейчас по основным аспектом пробегусь так куда review
7:10
это когда разработчики написал код подает этот код коллеге или нескольким
7:18
коллегам эти коллеги просматривают код и делать замечания комментарии правки даже
7:24
возможно чтобы они делают вот после этого вы можете код уже согласно с тем
7:32
исправлением подкорректировать и уже можете закончится
7:39
педологии достаточно большое количество положительных сторон и давайте рассмотрим несколько из них скины были
7:47
весомых то что река драги находится высоко уровня ошибки и то есть ошибки в
7:53
алгоритмах ошибки размазанные по коду которые сразу вы не бросаются в глаза
7:59
это конструкции подозрительные которые могут зависимости от той или иной новые
8:06
условия выстрелить вот кадры view это эффект обучения то
8:14
есть это когда разработчики приходится вам в компанию при кадра view вы обменивайтесь знаниями новые молодые
8:22
разработчики наматывают на вас какие-то приемы и что-то делают учиться на ошибках так далее вот и еще немаловажно что приклада
8:31
review познаются познаются тонкости тайности о проекте что позволяет вам избежать такой
8:39
ситуации что всего лишь один разработчик знает как работает быть какая-то фич или
8:45
часть проекта и теперь представьте что он заболел а то еще хуже у например уволился всех
8:53
недоразумения как это сделать как это исправлять вот и так этого можно
8:59
избежать но несмотря на то что много положительных сторон также есть и минусы
9:06
и тоже достаточно весомый значит во первых кудри вьёт достаточно дорогой процесс
9:12
потому что это занимает рабочее время ваше ваших коллег может не только одного
9:20
нескольких вы можете еду до большинство куда view проходе там 10 15 минут
9:28
зависимости от тоска например но бывают такие случаи когда квадро view растягивается час два и так
9:37
далее вот так как говорится время деньги из этого недостатка в вылезает еще один
9:45
недостаток то что откуда review by ссср устаешь то есть вы работаете над своей
9:50
задачей уже устали и когда вы начинайте уже изучать чужой код там всякие
9:55
головоломки и так далее у вас теряется производительность у вас теряется концентрация и когда вы после подруги
10:03
приходите на свою задачу вы можете спокойно там что же шопиться поэтому на
10:10
куда review приходит инструменты и статического анализа вот
10:18
это позволяет находить часть различных дефектов в такие как опечатки или
10:25
копипаста или неправильное использование методов и так далее вот и этот
10:30
это позволяет разгрузить квадре view и другие методологии и уже например на подрыве уже акцентировать внимание уже
10:38
на какие-то конкретные вещи и работать уже по существу что такое статический
10:43
анализ статический анализ это когда это когда это процесс
10:49
выявления дефектов уязвимостей постав различных ошибок
10:54
а в исходном коде программ без реального их выполнения и статический анализ можно
11:00
рассматривать как автоматизированный процесс обзора кода и то есть общая
11:06
черта то есть в первом случае эксперт
11:12
это человек во второй случае эта программа который научил тоже человек вот ну и инструмента статического
11:20
анализа они называются еще из логические анализаторы вот и часто этими долги сравнивать между
11:29
собой так давайте мы тоже пробежимся по ним значит по сравнению
11:35
сравнение статического анализа и кадр view значит как ранее говорил статический анализ позволяет находить
11:42
часть дефектов еще до того как начнется кадры view это дает главное преимущество
11:47
статического анализа именно существенно снижение а стоимость исправления дефекта анализаторы это за программа
11:55
они не остаются готовы работать любое время в любое время без устали вот можно
12:04
тактический analyzer позволяет находить ошибки которые достаточно тяжело
12:10
обнаруживаются при кадре view это крипипаста или однородной конструкции
12:15
который отличается там пород составляющих статический анализатора
12:21
также находит ошибки о которых вы допустим а паттерне которые вы не знали то же такое эффект обучения и так же как
12:31
любой медиалогии есть плюсы есть и минусы минусы в том что высокоуровневые
12:38
ошибки очень тяжело находить не сказать что невозможно очень тяжело и это ложные
12:46
срабатывания ложное срабатывание это когда анализаторов дает вам
12:51
предупреждение вы садитесь за год там какое-то время разбираете и понимаете что с кодом все в порядке да бывает
12:59
такой анализаторы ошибаются вот это может происходить из-за того что
13:06
анализатор есть явная недоработка и также это может быть происходить из того
13:12
что код слишком запутанный очень плохо
13:17
написана что анализатор тоже запутался и
13:22
тоже выгнулся вот но из-за недостатка не
13:27
стоит сильно расстраиваться потому что is- потому что разработчики анализаторов достаточно активно борется
13:34
с этими ложным срабатываниям разрабатываются различные механизмы
13:39
усовершенствуются диагностические правило вот да можно понять статический
13:47
анализатор потому что непонятно для себя ситуация лучше ругнется чем промолчит
13:53
потенциально пропустит ошибку вот и до
13:58
статический анализ пол не заменят полноценного обзора кодом но соотношение
14:04
цена польза делает весьма полезной практикой используемый многими
14:09
компаниями значит как
14:14
анализаторы находит эти ошибки в исходных кодах давайте рассмотрим эти
14:21
технологии которые используются так сопоставление сопоставления свобода на
14:28
основе абстрактно синтаксического дерева синтаксическое дерево является базовым
14:33
элементом вокруг которого строится analyzer и все свои ти к тому что строится это дерево и через visitor
14:42
анализатор бегает по узлам этого дерева и извлекает в необходимой информации и
14:47
без такого дерева производить часть серьезно статический анализ
14:52
просто невозможно и несерьезно вот и получается что эта технология нам
14:59
позволяет находить паттерны и паттерн и частый паттерн и ошибок
15:04
которых чаще всего допускают разработчики и давайте рассмотрим простенький пример так у нас есть метод
15:13
переопределяют the eagles итог здесь есть одно огромное
15:18
условие состоящий из под условий анализатор есть дерево этого метода и
15:24
когда анализ начинает анализ начинается мы доходим до нашего условия это наши
15:31
условия дробится на под условия но под узлы и когда мы доходим до нашего интересующего под узла мы видим что
15:38
здесь берем левую часть берем правую часть они равны здесь явная ошибка ругаемся
15:46
очень просто следующей технологии этого вы типов на основе семантической
15:53
информации вот стоит отметить что лишь одного синтаксического дерева недостаточно вот
16:01
анализатор необходимо и какая-то дополнительная информация о встреченной
16:07
переменная встречи на выражение если это объект также если
16:12
встречается типа анализатору также надо знать какой тип или как край архива
16:18
этого типа и так далее то есть позволяет иметь какую-то дополнительную
16:23
формацию вот и дайте рассмотрим пример
16:29
здесь у нас 0 то ругаясь на то что мы используем метод removu коллекции он
16:36
бессмыслен итак здесь получается значит анализатор знает что коллекция у нас имеет элементы
16:43
типа child также знает какой объект мы хотим удалить там animal классным положением вот
16:53
анализатор есть полную информацию за серафию типа child иерархию типа animal
17:00
все он x анализирует и понимаю что
17:06
пересечение между ними вообще никакого и вызов это умеет просто смысле
17:14
следующей технологии это аннотирование методов считается что
17:21
анализаторов есть свои такие механизмы для аннотации методов классов и
17:28
аннотациями под нотациями мы будем понимать как раз таки такую специальную разметку который будет предоставлять нам
17:35
а тоже дополнительную информацию о методе а его аргументах о том как его правильно использовать такая разметка может быть
17:43
получено путем анализа встроенный язык программирования нотации как java или
17:50
атрибутов как си плюс плюс но такой подход не даст полноценной картины о было методе поэтому такая
17:58
технология может еще дополняться и ручным аннотирование то есть уже а
18:04
натирается тонкости больше добавлять информация об используемых аргументах и так далее
18:12
вот здесь на слайде у нас представлен dice ель для аннотирования в наших siplus и java
18:19
анализаторе и давайте его тоже поподробнее рассмотрим итак у нас что натирается
18:26
классы java and move и метод макс который принимает два целых числа ok
18:33
помечаем дальше что эта функция чистая что сколько бы мы ни называли этот метод
18:38
в какой последовательности не не вызывали состояние программы никоим образом не изменится наш выставляем
18:47
флажок что этот метод результат этого метода нужно необходимый нужно
18:52
использовать потому что бессмысленные на вызов получается определяем контракта на
18:59
аргументы то есть чтобы они не были равны явно друг другу и определяем
19:07
функцию возвращения то есть если анализатор будет знать какие значения зашли в пришли в нет или диапазона
19:15
значений анализатор будет также знать что нам вернет этот метод и давайте
19:23
рассмотрим мало примеры ошибок при помощи у этого аннотирования которые мы рассмотрели ранее можно ходить ошибки и
19:31
так простенький пример вызываем наш метод но мы не к результат
19:37
никуда не сохраняем не используем смысла нет ошибка следующий простенький пример
19:45
мы в наш метод передаем одна и та же переменную тоже нам этот метод вернет
19:53
переменную а поэтому тоже зачем мы это вызывать тоже не понятно следующий
19:59
пример были интересный здесь у нас есть здесь analyze ругаясь на то что наш
20:05
результат нашего метода всегда больше 0 и как здесь получается значит у нас есть
20:12
функция он принимает два аргумента мы про них ничего не знаем кроме их диапазонов максимальных минимальный
20:19
окей на когда начинаем доходим до условного оператора мы накладываем ограничение на эти
20:25
значения обрабатываются и в итоге анализатор выезжай что внутри нашего условного оператора значение у будет от
20:33
6 до максимального into a бывают от минимального до единицы итог знаю какие
20:39
диапазоны они поступают в наш метод и при помощи этой функции которые возвращение от она ли знает что наш
20:48
метод вернет перемен значением диапазоне от 6 до максимального это всегда будет больше нуля
20:55
следующая технология это анализ потока данных или еще называется data flow
21:01
механизм эта технология позволяет находить разнообразные интересные
21:07
ошибки такие как разыменования нулевого объекта или разминание потенциально 0
21:14
объекты это всегда истинность или ложность условий это выход за границы массива там проверка различных краевые
21:20
граничных условий много другое вот и эта технология позволяет вычислить значение
21:29
в тотальный момент времени выполнение программы это также позволяет вычислять диапазоны
21:37
значений и накладывать ограничения значение как мы смотрели ранее для
21:43
предыдущем звании и и получается что эта технология
21:48
позволяет нам смоделировать состояние программа в тот или иной момент времени и просит пример функция у нас есть x
21:58
опять же мы и газ ничего не знаем кроме его максимального и минимального значения в этом и диапазоне этого х5 мы
22:05
начинаем обрабатывать условный оператор x больше трех и знаем что внутри этого
22:11
словно пиратов назначить их сбыта 4 долго максимально ну и соответственно в лс ветки от минимального до трех и делая
22:18
такие же подобные вычисления анализатор прекрасному и знать что следующему слон императоры по цифры
22:24
которые значение нашего икса будет диапазоне 4 до 9 и знаю вот этого диапазона возможно
22:32
значений и зависимости от контекста анализировал года он уже там предпримет
22:38
решение там ругаться не ругаться если да это flow механизм не смог ничего
22:45
найти на помощь может прийти технологии символьного выполнения потому что чтобы
22:54
найти некоторые ошибки не обязательно знать точных значений и символе
23:01
выполнения подразумевает составление систем уравнений то есть и берутся переменные томи
23:09
выражения все это подставляется символьном виде решается there’s a lover и всякие и если
23:16
эта система решается то мы можем уже предпринимать решения и ругаться не ругаться
23:22
петух опять простенький пример приходит два числа b мы про них тоже ничего не
23:29
знаем обрабатываем условный оператор узнаем что аренду также не знаем какие
23:34
то значения принимает это в принципе нам не важна и когда мы доходим до анализа
23:40
нашего знаменателя то вместо b мы поставляем а
23:45
анонсом здесь мы тут ругаемся молодой и
23:50
рассмотрим примеры ошибок в реальных проектах которые могут находиться при
23:56
помощи статических анализаторов так так примеры си плюс плюс так что здесь у нас
24:04
происходит у нас есть буфер и 128 символов мы его отправляемого функцию
24:10
судебную с printf заполняем его согласного форматной строки процент d и дальше
24:20
буфер отправляем дальше обрабатываться все вроде нормально все хорошо мы здесь
24:25
все используем применяем эту функцию так как написано в документации но анализатор здесь ругаясь на то что
24:32
бум мы используем переменную buff инициализирован ой как так непонятно
24:39
потому что все вроде правильно сделали и есть первое ощущение то что это здесь
24:45
ложное срабатывание окей немного разобравшись в этом методе есть
24:51
макроопределение и кто-то догадался с printf переопределить чем акцию переопределить
24:59
сердешный принт эф функции и тогда все стоит на своей все становится ввергнуть
25:06
переворачивается и здесь как раз таки наш буфер это не буфер на 40 которую мы должны заполнить
25:11
она уже теперь является форматом строкой согласно которой мы должны выводить информацию создавал например а у нас она
25:20
на самом деле является не интерьера ванной и поэтому у нас не определенное
25:26
поведение и ошибочно возможно даже возникло когда пришел новый разработчик
25:32
посмотрел код не обратил внимание на макросы вот так вот написал забавный
25:41
copy-paste здесь у нас переменная переменная и строковый трал совпадает то
25:48
есть одно и то же значение имеет мы значит из какого-то база допустим
25:53
вытаскиваем этот ключ потом этот ключ проверяем корректно он достался или нет
25:59
но в итоге за место ключа переменные которые мы должны проверить мы отправляем нашу функцию is not mt
26:05
nostroke вальтера а эта функция у нас проверяет переменная
26:11
пустая или или 0 так как у нас строк вальтера это функция нам будет всегда возвращать
26:18
true то есть это его действие механизм аннотация работает
26:24
еще один copy-paste дам первое ощущение здесь непонятно вообще сложно
26:31
воспринимается код словно здесь одну строчку взяли и продублировали но если немного пошаманить над этим
26:38
кодом то можно разглядеть что здесь имеется два логических блоков в первом
26:44
логическом блоке здесь что-то делается с переменными которые заканчиваются на x
26:49
во втором с переменными которые заканчиваются на и клик и видимо здесь
26:55
они взяли первый блок написали его ручками скопировали и начали исправлять
27:01
и в итог у нас не до исправили один одна переменная
27:08
следующая ошибка здесь не обязательно
27:13
рассматриваться от таблицы достаточно знать что в алфавите один у нас буква я имею значение 255 кей давай
27:22
перейдем к ошибке итог что здесь происходит мы переменные
27:28
типа чар присваиваем результат считывания из буфера то есть функции в
27:33
гец дальше мы присваиваем это переменный чар и сранью с концом файла то есть или
27:40
с концом буфера ошибка здесь кроется в том что здесь мы
27:45
используем переменную тип чем потому что евген нам возвращает
27:52
винтовые винтовые значение вот и когда мы просчитываем и из нашего
27:57
буфера значение 255 то это 255 неявно приводится к типу черт который принимает
28:04
значения от минус 128 до 127 итог у нас сам в переменный типы чар
28:10
значение минус единица это именно si denisa страница с минус единицей итог мы
28:17
выходим из цикла так ли была запланирована и получается что мы выходим из цикла когда мы считали
28:25
буфер до конца нормально ситуация это когда произошла какая-то ошибка бывает
28:32
такое но тоже нормально ожидаемая эпитет когда мы прочитали нашу
28:37
букву я даже где-то в одном из ресурсов
28:42
для справочник что ли была именно такая ошибка помощью студентов так следующая
28:53
ошибка у нас просто шибко можно почитать в стандарте целые команды с нами решено
28:59
то есть известный список уязвимых мест программного обеспечения и здесь суть
29:06
проблемы заключается в том что наша команда мэм сет который занимается
29:12
обнулением наших данных будет не выполняться в релиз версии компилятора
29:18
это это происходит из-за того что у компилятора во время релиза есть
29:24
оптимизацией и он считает что зачем нам надо делать лишние телодвижения если наш
29:32
блог если наш метод находится в конце блока зачем мы это делаем если мы так выходим
29:38
из бука и все это по ничего нам не нужно потом со временем самоочистится ну это
29:44
может принести проблему хорошо если это это область памяти где
29:50
был секрета информация за чистится или перетрется какой-то другой информацией в
29:55
худшем случае можно как вытянуть эту информацию
30:01
ладно давайте вернемся опять статическому анализу как же его
30:07
интегрировать процесс разработки существует глотки способа 1 1 самый
30:14
правильный это когда у каждого разработчика на рабочей машине имеется анализатор вот и когда он начинается
30:21
когда он начинает работать то в режиме редактирования кода или во время или
30:28
после компиляции запускается или сам принудительно запускает анализ вылетает
30:35
предупреждение он сразу же в контекст в задаче так как он не переключался между
30:40
задачами он смотрит эти предупреждения быстренько правят их хорошо элегантной или что-то
30:46
или исправляет и продолжаю дальше работать этот способ хоть и сам брайн он достаточно тяжело реализуем потому что
30:53
если в компании имеется большое количество разработчиков то не у всех
31:00
дисциплина позволяет это делать потому что какие-то просто выключает логический анализатор какие-то принял забывают
31:07
третье еще что-то делают поэтому есть еще второй способ это анализ и кодовая
31:13
база и ночного время на набил серверах и анализатор уже берет все изменения всех
31:20
разработчиков которые накопились за предыдущий день и и анализируется и если
31:27
находится предупреждение то анализатор формируется письмо кто сделал это
31:33
где сделал какое сообщение вылечил так далее и все это отправляется
31:39
разработчику и когда разработчик придет на работу с утра тони начнется
31:46
рабочем времени это мне нас чашечка кофе с исправления тонизация детектор а если
31:53
он будет игнорировать это предупреждение это это предупреждение все время из дня в день будет маячить то заинтересованные
32:00
лица которым также это сообщение о письмо может приходить уже может мягко намекнуть ему что давай-ка
32:08
обработай это предупреждение или исправь его или что то еще вот теперь давайте
32:18
узнаем как правильно использовать как начать его правильно использовать на
32:24
больших там средних проектах потому что допустим вы выбрали вы долго выбирали
32:30
анализатор выбрали запустили анализ и вам влетает тысячи
32:36
предупреждений вас глаза на лоб что с этими предупреждениями делать первое
32:42
можно сразу броситься с головой в эти предупреждения и начать их исправлять
32:47
это не дело потому что через час-два вам это жутко надоест а если зайти час-два
32:52
вы что-то не нашли сверх такого интересного для себя то вы просто возьмете эти все предубеждения и сам
33:01
анализаторы и отправить в долгий ящик 2 под другой подход то что пусть эти
33:07
предупреждения болтаются фоне и я потом буду постепенно эти предупреждения этом
33:14
выправлять это уже подход намного лучше 1 но также есть недостаток в том что те
33:23
новые предупреждениях которые будут появляться они будут теряться в этой массе предупреждений и
33:30
то есть получается это дефект который появился сегодня он не справится например сегодня или завтра он
33:36
исправится и нибудь там через месяц когда там до него очередь дойдет тоже очень нехорошо вот и анализаторы
33:45
предоставляет свои способы для того чтобы правильно элегантно начать
33:52
использовать анализ то есть разделить четко до и после от анализатора то есть
33:59
они представляют различные механизмы например это специальный файл файл
34:05
разметки и сценарий будет примерно до следующем вы выбрали анализатор запустили получили
34:12
этом тысячи предупреждений вы не всматривайтесь в эти предупреждение одним кликом отправляете все это в этот
34:19
файл разметки и вуаля у вас ноль предупреждений и вы когда будете запускать анализ то у вас будет время
34:26
ноль предупреждений вот и в этот файл комитете
34:31
систем и систем контроля версий чтобы все разработчики имели доступ к этому файлу чтобы они тоже запускали себя на
34:40
рабочем компьютере анализ у них тоже был ноль предупреждений ну и со временем
34:45
когда вы будете запускать раз за разом анализ то есть появится
34:51
будут появляться предупреждение анализатора то они будут появляться на новый или измененный код это будет
34:59
свежее вообще предупреждение а все те старые которые вы тысячи была она не будет вам
35:05
появлению постепенного вы начали и так далее и вы к этому списку к этому файлу
35:14
со всеми подавленным предупреждение можете вернуться когда вам угодно будет то есть допустим после испытательного
35:20
срока анализатора то есть вы дали ему шанс в шесть месяцев на просим полгода
35:25
вам понравился его работа ok вы вернулись к этому файл и потихоньку постепенного вы начали выдергиваете
35:33
оттуда сообщение и постепенно от них избавляться как правило анализаторы
35:41
предоставляет выдает предупреждение разного уровня достоверности ошибки
35:48
банальная это 1 2 3 уровень не знаю как 3 0 1 2 я уровне надо
35:55
обязательно посмотреть потому что в предупреждении копира второго уровня
36:00
наиболее высока вероятность что она реально дефект вот в принципе все
36:09
дать немного сейчас подытожим статический анализ это достаточно
36:17
хорошая методология которая помогает находить часть ошибок насчет на самых
36:23
ранних этапах разработки как любая другая на 100 процентного вас не защитит
36:28
от попадание дефектов код здесь самое главное то чтобы эти всеми то логе игры
36:34
в тандеме были они друг друг подстраховывать анализаторы развиваются
36:44
они предоставляют различные фичи там плюшки для того чтобы правильно
36:50
использовать их чтобы облегчить использование их вот и самое важное
36:58
наверное то что статический анализ это он должен использоваться регулярно потому что если вы запустили анализ
37:04
сегодня потом его решили запустить его через месяц или перед релизом
37:09
этаже нашли дефекты это конечно хорошо но это будет не тот эффект который мог
37:16
бы быть на самом деле если вы использовали его ежедневно спасибо за
37:23
внимание если кого заинтересовало
37:29
заинтересовала тема есть все полезные ссылки про статический анализ вообще список всех анализаторов вы можете здесь
37:37
почитать и уже дальше углубляться в главное что главное не путать статистический анализ статистически
37:44
совершенно разные штуки хорошом мысли в большой за доклад интересно было сама
37:51
теория и скажите у вас есть реальные кейсы ко дну как бы реальное применение в вашей как бы среде
37:58
что вы конкретно чем пользуйтесь каким как в свою build систему может вся
38:07
систему себя и сиди и то есть когда вы интегрируете ее какой именно статический анализатор вы используете но у нас
38:16
конечно спускается наш статический анализатор которая если штатам присылает
38:21
предупреждением это раз используется
38:28
откл например в си плюс плюс об этом от clank анализатор этому свои
38:34
предоставляют тоже есть предупреждение рассматривают и java анализатор допустим у нас нету
38:43
вся эта есть если пром при разработке допустим используется jetbrains
38:49
вот анализатор тоже он там предупреждение тоже мы обращаем на это внимание тоже отправляем года помимо
38:56
конечно такие числа анализа нас еще есть также кого другие динамический анализ там и так далее с анархию просматривали
39:05
сын арку по не запускаем но настолько мы
39:11
пытаемся дружить с ним так как sonar куб это же огромная платформа за химии анализаторами
39:16
у нас мы также например предоставляем возможности там запускаться и в это все использовать вот у нас например в сан
39:26
архив используется но я не весь его цикл настраивал от начала до конца только
39:32
часть определенные у нас запустим дженкинс и делятся на два вида билда
39:38
есть для каждого проекта это с переменная установленной sonar куб ну и на и болт и типа и обычная для обычных
39:46
комментов от разработчиков это без суда рк ибо когда выполняете sonar куб это
39:52
либо вручную при билде мы устанавливаем colleagues детали я предлагаю обсудить
39:59
за кофе вот учитывая сколько хорошо вопрос что сегодня задал я просто обязан
40:05
подарить и вот эту вот сувенир куса настоящим enterprise языком программирования люди сами за это не
40:12
logo выше так следующий вопрос следующий вопрос
40:18
следующий вопрос где видел следующий вопрос так вот я видел следующий вопрос
40:28
хорошо настоящий сильной программист спрашивай добрый день у меня такой
40:36
вопрос существует ли какая-то система учета вот этих багов анализаторов можно ли
40:43
как-то это синхронизировать системой контроля версий ну то есть какой-то случай случился где
40:53
мы обнаружили баг в этой в этой
41:01
анализаторе кода он постоянно
41:06
высвечивается он мешает и чтобы он всех не высвечивался как-то вот как гит гит
41:12
игнор добавить его есть такая возможность и на уровне система контроля
41:19
на уровне система версиям и дальше применяем стандарт мы практику как стандарт кодирование
41:26
с генераторами которые для каждого нового проекта кладет соответственно настройки ли интер настройки pvs-studio
41:33
настройки гетто и так далее так коллеги
41:38
еще вопросы там пиво скоро будет поэтому
41:44
я готовлюсь выпить за эти vob спас гриву
41:52
pvs-studio и филипп ли вы пить до + e 15 лет писал на плюсах делал radmin от моё
42:00
родное creed винду x w а ну что ж коллеги как сразу все
42:07
вспомнили вина фишечку то юникодную я прогресс еще когда только на си плюс был
42:18
так вот меня вопрос по сравнению с остальными анализаторами певец
42:23
предоставляет какие-то преимущества меньше ложных срабатываний или еще что-то
42:30
ну конечно тактической анализаторы все делают одну одну полезную задачу
42:36
вот выявляют ошибки при vistudio
42:42
тоже дал борются сложно срабатывания my очень активно один бегом работают только
42:48
фидбэк и то есть прогресс борьба с этими ложных срабатываний потому что люди у
42:53
себя пользуются они что-то выявляются мы все это исправить потому что сами мы может уже
43:00
все испробовали у нас например не то все нормально все хорошо но всегда найдется
43:05
пользователь допустим которого всегда что-то не так сработает вот до стараемся
43:12
различные механизмы там предоставили того чтобы если это ложное срабатывание чтобы они вам не маячили глаза
43:20
предоставлять и слепки вопрос да спасибо
43:28
за доклад насколько я помню pvs-studio на самом деле позиционировать себя не как замена
43:34
каким-то анализатором а как дополнение что это все могут работать в тандеме
43:41
соответственно такой вопрос то есть эти же анализатор являются вашими конкурентами а вы стараетесь перекрыть
43:46
собственно все эти ошибки которые доставляются допустим ришар пиром тем же sonar кубом в это когда анализируете до
43:54
постепенно анализируем да там есть пересечение со всеми этими предупреждениями но мы еще стараемся
44:04
что-то найти что-то новое и не ты там и там чтобы хоть как-то отличаться потому
44:09
что многие могут сказать о чем вы нам нет вы нам нужны если например сын арку или этот сон а можно хоть и те же самые
44:17
ошибки зачем мы должны пользоваться вами и так далее потому что предупреждение
44:22
там диагностические правила могут совпадать качество выдох выдаваемых пробуждений
44:29
может там отличаться это еще вопрос спасибо за доклад вопрос такой вновь
44:37
озвучить какие языки на текущий момент поддерживает привели studio и если ритма
44:43
по языкам которые планируются который планируется нет поддерживаем и это си си
44:51
плюс плюс и шарфы сначала этого года отжала содержится
44:56
java ide перспективнее к так движок
45:04
паузу уже почти прошу я никогда
45:23
охайо мне обычно чекает языки сверхвысокого уровня там пайтона
45:29
rubicode ли нотариально застрелиться у них грамматика на такая сверхвысокого уровня каждый
45:38
следующий мешок синтаксического сахара добавляет шкаф грамматику и какой-нибудь там
45:45
пластилиновый python чекать новым разработчик сам иногда не может понять
45:50
чем там написала это химический анализатор тем более так и завершаем моим любимым
46:00
фокусом да итак три-два-один
46:07
аплодисменты

Поделиться: