А не боитесь пропустить обработку каких-нибудь проверок (test_connection / test_valid_*)?
Подобные вопросы и дискуссии появляются из неверной предпосылки, что цель статического анализатора кода — найти как можно больше ошибок. Нет, правильная цель ¬– найти как можно больше ошибок при рациональном количестве ложных срабатываний. В противном случае полезные предупреждения анализаторов потонут в шуме, и пользоваться ими будет невозможно. Нужен баланс.
Можно начать предупреждать обо всех разыменованиях указателей, когда нет уверенности, что указатель точно не нулевой. Можно предупреждать обо всех арифметических операциях, когда нет точной информации о диапазоне значений операндов и нет уверенности, что не произойдёт переполнение. Можно предупреждать о каждом обращении к элементу массива
A[b], если не удалось точно понять, каков размер массива или каков диапазон индекса. Это на самом деле очень легко делать. Абстрактно такой анализатор позволит найти все ошибки этих типов. На практике же такой анализатор никому не нужен, так как он будет выдавать предупреждение, наверное, на каждую пятую строчку кода.Поэтому анализаторы стараются выдавать сообщения, когда высока вероятность, что конструкция кода содержит ошибку, балансируя на краю. Для каких-то детекторов это проще, для каких-то сложнее.
Например, пожалуй, все анализаторы будут ругаться на доступ к элементу
A[b], когда вычислено, что индекс выходит за границу, а не когда он не смог вообще вычислить значение индекса. Однако не всегда получается вычислить диапазон индекса, и анализаторы пропускают ошибку. И многие другие ошибки.Сейчас вы узнали, что анализатор промолчит на
srand в test_x.cpp, и это кажется проблемой. Это просто потому, что вы не знаете про сотни и тысячи различных ограничений в детекторах анализаторов, когда они не могут что-то вычислить или сознательно отбрасывают неубедительные случаи :)Есть тысяча способов улучшить соотношение польза/шум, дорабатывая разные места. Мы и другие разработчики анализаторов регулярно этим заняты. Но "ругаться как можно больше на всё подозрительное" к этим способам не относится :)
Более подробные рассуждения на эту тему можно найти в публикации "Как и почему статические анализаторы борются с ложными срабатываниями".