Comments 41
Все что вы перечисляете — это вторичные показатели, первичные же — это число найденных анализатором проблемНе согласен, это вовсе не вторичные показатели, а часто как раз первичные. Если анализ неудобно использовать и трудоёмко внедрить в большой проект, то нет смысла обсуждать диагностики. Это не означает, что диагностики не важны. Однако, подходить вот так в лоб к сравнению, это плохая идея. К сожалению, более подробный ответ тянет на отдельную статью и думаю я со временем ей займусь. Спасибо, что подняли эту тему.
P.S.: Почему мы не пишем о сравнении PVS-Studio с другими статическими анализаторами кода.
С другой стороны, вот я пользуюсь idea. Их встроенный анализ находит мои ошибки в процессе написания кода. Что именно мне может дать pvs?
Мне кажется в такой формулировке этот вопрос имеет смысл.
int[] arr = new int[4];
for (int i = 0; i < 5; i++) {
arr[i] = i;
}
такие вещи пока не видит ни один анализаторНе совсем понял смысл фразы — как раз PVS это видит v557 Array overrun is possible. (Примера для Java сходу не нашёл).
val arr = IntArray(4)
for(i in arr.indices) {
arr[i] = i
}
Что именно мне может дать pvs?Запустите и как раз увидите, что найдёт PVS-Studio, что ещё не находит IDEA.
Для этого стоило бы дать начальству понять зачем я пытаюсь протащить новый софт во внутреннюю сеть))
На самом же деле пользователем идеи не нужно именно сравнение анализаторов, никто же не собирается менять ide. Им (нам) только нужно дать понять, что во всех этих телодвижениях есть профит. То есть, что ваше кунг-фу сможет подсветить какие-нибудь баги которые у нас ещё не подсвечены.
Ну, по этому показателю любой отдельный анализатор сливает встроенному в IDEA по определению. А если учесть автоисправлялку — то и подавно.
Я вполне могу понять ваши мотивы не сравнивать, но мои мотивы как разработчика очень простые — если IDEA находит большую часть проблем, то зачастую мне невыгодно внедрять что-то еще, потому что это тоже работа, и она стоит денег и требует времени (возможно, при внедрении в CI — времени других людей). И если встроенный в IDE анализатор достаточно хорош — сразу возникает вопрос, а стоит ли внедрение чего-то еще усилий?
Если да, то это хорошо, и вы молодцы. Но не было ли, что кто-то по невнимательности/лени/незнанию, всё равно закладывал баг в систему контроля версий, который вы вдруг потом обнаруживали уже на своей машине благодаря подсветке в IDEA? Если такое было, то это повод всё равно думать про CI.
Если нет, то вообще нельзя говорить, что в проекте используется статический анализ кода.
Что до аргументов за анализ в рамках CI, одинаковый для всех и обязательный — то я с ними заранее согласен. Как раз идеевский анализатор прикрутить к CI или очень сложно, или вообще нельзя. Да и у сонара в его текущем виде, как он у нас используется, на мой взгляд слишком много ложных, сложно отключаемых срабатываний. Условно — у нас в проекте есть параметры, которые называются passwordAlias, и это не пароль ни разу. И попробуйте объяснить сонару, что не надо ругаться на эти названия — проще отключить сонар ;)
Вот только статей про ошибки в программах меньше не становится почему-то.
Ну и потом, у нас вообще основной инструмент спарк, и покрыть приложение юнит тестами вообще почти не реально. А интеграционными очень сложно.
Статический анализ есть, но сонар пока не нашел у нас ничего серьезного — но это не значит, что этого серьезного не было.
Что же до реальных источников ошибок, то я могу сходу назвать один — это неопределенности во внешних условиях, в постановке задачи, и т.п. И во внешних по отношению к программе данных. Статический анализ это далеко не всегда может увидеть.
Как раз идеевский анализатор прикрутить к CI или очень сложно, или вообще нельзя.
Первый комментарий к статье «Запускаем инспекции IntelliJ IDEA на Jenkins» именно от вас, а говорите «нельзя».
Ожидается ли сравнение функциональности с ближайшим собратом ru.wikipedia.org/wiki/FindBugs?
Многие даже не слышали про анализатор, а кто слышал, тот мало знаком со всеми его возможностями.
В статье НЕ рассказано про возможнлсти анализатора. Предположим я не знаю нужен мне авто-анализатор, или проще и дальше ручками статанализ делать, как эта статья поможет ответить на этот вопрос?
P.S. Насколько я понимаю, из ответа на другой вопрос следует, что скорее всего нет, так как работа происходит с исходным кодом, а он тут сильно другой.
Знакомство со статическим анализатором PVS-Studio для Java