TGViewer
Бестиарий программирования Бестиарий программирования @programming_tales · 1.14K subscribers
Post #257 329
Решил написать ответ на вопрос в формате отдельного поста.
А не боитесь пропустить обработку каких-нибудь проверок (test_connection / test_valid_*)?

Подобные вопросы и дискуссии появляются из неверной предпосылки, что цель статического анализатора кода — найти как можно больше ошибок. Нет, правильная цель ¬– найти как можно больше ошибок при рациональном количестве ложных срабатываний. В противном случае полезные предупреждения анализаторов потонут в шуме, и пользоваться ими будет невозможно. Нужен баланс.

Можно начать предупреждать обо всех разыменованиях указателей, когда нет уверенности, что указатель точно не нулевой. Можно предупреждать обо всех арифметических операциях, когда нет точной информации о диапазоне значений операндов и нет уверенности, что не произойдёт переполнение. Можно предупреждать о каждом обращении к элементу массива A[b], если не удалось точно понять, каков размер массива или каков диапазон индекса. Это на самом деле очень легко делать. Абстрактно такой анализатор позволит найти все ошибки этих типов. На практике же такой анализатор никому не нужен, так как он будет выдавать предупреждение, наверное, на каждую пятую строчку кода.

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

Например, пожалуй, все анализаторы будут ругаться на доступ к элементу A[b], когда вычислено, что индекс выходит за границу, а не когда он не смог вообще вычислить значение индекса. Однако не всегда получается вычислить диапазон индекса, и анализаторы пропускают ошибку. И многие другие ошибки.

Сейчас вы узнали, что анализатор промолчит на srand в test_x.cpp, и это кажется проблемой. Это просто потому, что вы не знаете про сотни и тысячи различных ограничений в детекторах анализаторов, когда они не могут что-то вычислить или сознательно отбрасывают неубедительные случаи :)

Есть тысяча способов улучшить соотношение польза/шум, дорабатывая разные места. Мы и другие разработчики анализаторов регулярно этим заняты. Но "ругаться как можно больше на всё подозрительное" к этим способам не относится :)

Более подробные рассуждения на эту тему можно найти в публикации "Как и почему статические анализаторы борются с ложными срабатываниями".
  • 👍 4
  • 🤔 1
More from @programming_tales
  1. Oct 7, 2026Напоминаю, что мы подготовили подборку материалов и вебинаров по теме процессов разработки…
  2. Oct 2, 2026Запись вебинара: Go vet не поможет... Как сделать свой анализатор кода для Go?
  3. Oct 2, 2026В целях нетворкинга и просто так приглашаю коннектиться в TenChat — что-то типа LinkedIn.…
  4. Sep 29, 2026Сегодня коллега демонстрирует, как визуально проявляют себя баги в Java коде: Нашёл ошибки…
  5. Sep 29, 2026photo post
  6. Sep 28, 2026На днях выступал с докладом на форуме "Безопасность транспортных средств", организованном…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →