Ноль, один, два, Фредди заберёт тебя
От: jul_nevermind  
Дата: 17.02.20 09:47
Оценка: 3 (1)
Перед вами продолжение серии статей, которую можно озаглавить «ужасы для программистов». В этот раз речь пойдёт о типовом паттерне опечаток, связанном с использованием чисел 0, 1, 2. Неважно, пишете вы на C, C++, C# или Java. Если вы используете константы 0, 1, 2, или если эти числа содержатся в именах переменных, то, скорее всего, Фредди заглянет к вам ночью в гости. Читайте и не говорите потом, что вас не предупреждали
cpp java csharp programming bugs codereview static analysis
Re: Ноль, один, два, Фредди заберёт тебя
От: Stanislav V. Zudin Россия  
Дата: 17.02.20 10:02
Оценка:
Здравствуйте, jul_nevermind, Вы писали:

_>Перед вами продолжение серии статей, которую можно озаглавить «ужасы для программистов».


У вас классный художник! Обожаю ваших единорогов.
Но ценник на продукт неподъемный, поэтому обходимся штатным анализатором из MSVS.
_____________________
С уважением,
Stanislav V. Zudin
Re[2]: Ноль, один, два, Фредди заберёт тебя
От: Analytic2007 Россия https://www.viva64.com/ru/pvs-studio/
Дата: 17.02.20 12:11
Оценка:
SVZ>У вас классный художник! Обожаю ваших единорогов.
Спасибо. У нас много интересного: https://www.viva64.com/ru/b/0709/ Хотите что-то задарим?

SVZ>Но ценник на продукт неподъемный, поэтому обходимся штатным анализатором из MSVS.


Ну это как посчитать: PVS-Studio ROI.

И не стоит забывать про: Бесплатные варианты лицензирования PVS-Studio.
Re[3]: Ноль, один, два, Фредди заберёт тебя
От: Stanislav V. Zudin Россия  
Дата: 17.02.20 12:57
Оценка:
Здравствуйте, Analytic2007, Вы писали:

SVZ>>У вас классный художник! Обожаю ваших единорогов.

A>Спасибо. У нас много интересного: https://www.viva64.com/ru/b/0709/ Хотите что-то задарим?

Хе-хе
Календарь и статусы у меня уже есть, хвала C++ Russia
Остальным надеюсь разжиться на каком-нибудь очередном мероприятии.

SVZ>>Но ценник на продукт неподъемный, поэтому обходимся штатным анализатором из MSVS.


A>Ну это как посчитать: PVS-Studio ROI.


Ох, Андрей, я слышал Ваши доводы. Для большой компании цена оправдана и эти расчеты, действительно, работают.
А вот для нашей маленькой команды получается слишком тяжеловесно.
Другими словами, чтобы оплатить одну годовую лицензию каждый из нас должен отдать почти месячную зарплату.

A>И не стоит забывать про: Бесплатные варианты лицензирования PVS-Studio.


Коммерческий продукт. Эти варианты не подойдут.

А так в целом, если судить по триальной версии, продукт неплохой.
Работает шустро, гораздо быстрее, чем микрософтовский, и не грузит процессор так люто.
Даже нашел у нас с дюжину дурацких очепяток.
_____________________
С уважением,
Stanislav V. Zudin
Re[4]: Ноль, один, два, Фредди заберёт тебя
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 24.02.20 09:49
Оценка: 6 (1)
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>А так в целом, если судить по триальной версии, продукт неплохой.

SVZ>Работает шустро, гораздо быстрее, чем микрософтовский, и не грузит процессор так люто.
SVZ>Даже нашел у нас с дюжину дурацких очепяток.

ClangTidy не пробовали? Отлично работает, нам кучу времени сберег и за совершенно бесплатно. Одной из самых лучших его особенностей я бы назвал отсутствие ложно-позитивных срабатываний, что позволяет его легко добавить в CI/CD и радоваться жизни.
Re[5]: Ноль, один, два, Фредди заберёт тебя
От: Stanislav V. Zudin Россия  
Дата: 24.02.20 10:05
Оценка:
Здравствуйте, kaa.python, Вы писали:

SVZ>>А так в целом, если судить по триальной версии, продукт неплохой.

SVZ>>Работает шустро, гораздо быстрее, чем микрософтовский, и не грузит процессор так люто.
SVZ>>Даже нашел у нас с дюжину дурацких очепяток.

KP>ClangTidy не пробовали? Отлично работает, нам кучу времени сберег и за совершенно бесплатно. Одной из самых лучших его особенностей я бы назвал отсутствие ложно-позитивных срабатываний, что позволяет его легко добавить в CI/CD и радоваться жизни.


Нет еще. Спасибо за наводку!
_____________________
С уважением,
Stanislav V. Zudin
Re[3]: Ноль, один, два, Фредди заберёт тебя
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 25.02.20 00:33
Оценка:
Здравствуйте, Analytic2007, Вы писали:

A>Ну это как посчитать: PVS-Studio ROI.


A>И не стоит забывать про: Бесплатные варианты лицензирования PVS-Studio.


Скажите, а у вас есть режим гарантирущий отсутствие ложно-позитивных срабатываний? Пусть в таком режиме будет меньше тестов, но наверняка. Дело в том, что когда я искал анализатор в проекты и планировал сделать анализ частью CI/CD (в то время бюджет был резиновый и цена не парила вообще) все опробованные коммерческие анализаторы были отвергнуты именно по причине наличия таких срабатываний. Команда была слабая в C++, а тратить своё время на изучение каждого из предупреждений я не мог, да и не хотел.
Отредактировано 25.02.2020 5:22 kaa.python . Предыдущая версия . Еще …
Отредактировано 25.02.2020 0:33 kaa.python . Предыдущая версия .
Re[4]: Ноль, один, два, Фредди заберёт тебя
От: Analytic2007 Россия https://www.viva64.com/ru/pvs-studio/
Дата: 25.02.20 14:03
Оценка: 17 (2)
KP>Скажите, а у вас есть режим гарантирущий отсутствие ложно-позитивных срабатываний? Пусть в таком режиме будет меньше тестов, но наверняка. Дело в том, что когда я искал анализатор в проекты и планировал сделать анализ частью CI/CD (в то время бюджет был резиновый и цена не парила вообще) все опробованные коммерческие анализаторы были отвергнуты именно по причине наличия таких срабатываний. Команда была слабая в C++, а тратить своё время на изучение каждого из предупреждений я не мог, да и не хотел.

На этот вопрос одновременно можно ответить и да, и нет. Давайте попробуем разобраться.

Если кто-то из создателей статического анализатора утверждает, что разработанный ими инструмент не выдаёт ложные срабатывания, это означает одно из двух:

1. Это враньё;
2. Реализован узкий набор предупреждений, которые действительно не дают ложных срабатываний, но, к сожалению, почти все они носят характер рекомендаций по формату написания кода.

Любой статический анализатор кода, выполняющий глубокий анализ, в силу самой своей сути подвержен ложно-позитивным срабатываниям. С этим ничего нельзя сделать. Здесь стоит упомянуть "Теорема Райса", которая как раз говорит, что в общем случае с помощью одной программы нельзя понять, корректно ли написана другая программа.

Однако, действительно ряд диагностик работают без ложных срабатываний. Множество таких диагностик описывается, например, в стандарте MISRA. И действительно, если в PVS-Studio вы включите предупреждения MISRA и отключите остальные, то все предупреждения будут по делу. Ну если не абсолютно все, то 99% наверняка. Вот только что это за предупреждения?

Это сообщения, что, например, используются восьмеричные числа (V2501). Или, например, предупреждения о том, что нельзя использовать оператор goto (V2502). Всё чётко и честно. Есть восьмеричное число/goto — увидите предупреждение. Ни одного ложного срабатывания!

Однако то ли это, что хочется видеть от продвинутого статического анализатора кода? Думаю, что нет.

Я не критикую стандарт кодирования MISRA. У него есть своя область применения, где он важен и полезен. Однако, говоря о разработке прикладных программ, не интересно видеть предупреждения в духе "не используйте оператор new" (V2511), а хочется, например, опечатки. Но вот как только речь заходит об опечатках, то уже никогда нет гарантии, найдена ли именно ошибка. Возможно, автор сознательно так и хотел написать. Ложные срабатывания здесь уже неизбежны.

Надеюсь, я смог прояснить ситуацию. Но теперь возникает вопрос, что делать дальше? Как внедрить статический анализатор в CI/CD и не страдать от ложных срабатываний? И на это тоже есть ответы.

Процитирую фрагмент статьи "Причины внедрить в процесс разработки статический анализатор кода PVS-Studio".

Всё не так страшно. Есть как минимум три подхода, которые позволяют безболезненно внедрить статический анализ даже в большие старые проекты.

Первый подход. "Метод храповика", о котором хорошо рассказывает Иван Пономарёв в своём докладе "Непрерывный статический анализ кода".

Второй подход. Чтобы быстро начать использовать статический анализ, мы предлагаем клиентам PVS-Studio воспользоваться "базой разметки". Общая идея в следующем. Пользователь запустил анализатор и получил множество предупреждений. Раз проект, разрабатываемый много лет, жив, развивается и приносит деньги, то, скорее всего, в отчёте не будет много предупреждений, указывающих на критические дефекты. Другими словами, критические баги так или иначе уже поправлены более дорогими способами или благодаря фидбеку от клиентов. Соответственно, всё, что сейчас находит анализатор, можно считать техническим долгом, который непрактично стараться устранить сразу.
Можно указать PVS-Studio считать эти предупреждения пока неактуальными (отложить технический долг на потом), и больше их не показывать. Анализатор создаёт специальный файл, где сохраняет информацию о пока неинтересных ошибках. И теперь PVS-Studio будет выдавать предупреждения только на новый или измененный код. Причем, всё это реализовано умно. Если, например, в начало некоего .cpp файла будет добавлена пустая строка, то анализатор понимает, что, по сути, ничего не изменилось, и по-прежнему будет молчать. Этот файл разметки можно заложить в систему контроля версий. Файл большой, но это не страшно, так как часто его закладывать смысла нет.
Теперь все программисты будут видеть предупреждения, относящиеся только к новому или изменённому коду. Таким образом, анализатор можно начать использовать, что называется, со следующего дня. А к техническому долгу можно будет вернуться позднее, и постепенно исправлять ошибки и настраивать анализатор.

Третий подход. Можно заключить с нами контракт и перепоручить нашей команде работу по настройке и интеграции статического анализа. Пример подобной практики: "Как команда PVS-Studio улучшила код Unreal Engine".
Re[5]: Ноль, один, два, Фредди заберёт тебя
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 26.02.20 01:10
Оценка:
Здравствуйте, Analytic2007, Вы писали:

A>Если кто-то из создателей статического анализатора утверждает, что разработанный ими инструмент не выдаёт ложные срабатывания, это означает одно из двух:


Это я написал глупость, так как спутал ClangTidy с санитайзерами ибо года 3-4 назад дело было В ClangTidy ложно-позитивные срабатывания есть, но их было крайне мало по сравнению с другими инструментами, как бесплатными, так и коммерческими. PVS-Studio мы не пробовали по каким-то причинам, мне кажется, у вас тогда не было поддержки macOS, а для нас это была основная платформа у разработчиков.
Отредактировано 26.02.2020 1:11 kaa.python . Предыдущая версия . Еще …
Отредактировано 26.02.2020 1:11 kaa.python . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.