Pull to refresh

Comments 19

Посмотрел, кто разработчик Svace - какой-то гос институт. По всей видимости ПО разрабатывается на гранты/госзакупки студентами, которые может и очень умные/сообразительные, но им может не хватать кругозора по фичам коммерческого ПО.

Svace давно используется компанией Samsung, поэтому ожидания от этого статического анализатора были, как от вполне коммерчески оправданного продукта.

Почитал вот это

https://www.ispras.ru/technologies/svace/
Впечатляет список возможностей - PVS Studio отечественно розлива не иначе... Только возникает один вопрос - пару лет назад вот об этом брэнде никто и не слышал - и тут вдруг такой функционал. Вместе с вопросом возникает подозрение - взяты открытые проекты по теме и собраны в свой продукт. Тенденция, по моему личному мнению сопровождает все наше импортозамещение. При том что для лицензии надо заполнить длинющую форму и цену заранее узнать нельзя. И всё для юрлица. А если я пацан, желающий освоить ваш статический анализатор, только потому что он отечественный? Всё как всегда - в одном ряду с AstraLinux и Etersoft....

И никто не спрашивает, есть ли факт нарушения свободных лицензий

Так то и PVS Studio отечественного розлива.

Можно ещё почитать текст по ссылке, которую вы приводите:

Svace – основной анализатор Samsung с 2015 года. Применяется для проверки собственного ПО компании на базе ОС Android и исходного кода ОС Tizen, которая используется в смартфонах, информационно-развлекательных системах и бытовой технике Samsung. С 2017 года Svace проверяет все изменения, присланные для рецензирования и включения в ОС Tizen. C 2020 года Svace применяется также в компании Huawei.

Этот функционал взялся не "вдруг", он довольно давно разрабатывается. Самая ранняя публикация, которую мне удалось найти, датируется вообще 2011 годом.

Добрый день, Анастасия. Меня зовут Дмитрий, я старший научный сотрудник ИСП РАН и один из разработчиков Svace. Я бы хотел дать свои комментарии на ваш пост, и если кратко резюмировать их содержание, то отметить, что всё, о чём вы пишете, уже было нами исправлено, либо не соответствует действительности. Если вам в будущем придётся снова работать с анализатором, то не стесняйтесь пользоваться ресурсами поддержки - сайтом https://gitlab.ispras.ru/svace/svace-support/-/wikis/home, телеграм-каналом https://t.me/sdl_static или почтой <название_анализатора>@ispras.ru.

Нет возможности глушить ложные срабатывания

Такая возможность есть в актуальном сервере истории Svacer, вы можете воспользоваться комментариями вида //svacer_review: -UNUSED_VALUE

https://svacer.ispras.ru/mediawiki/index.php?title=Help:ServerClient#Импорт_разметки_из_исходного_кода_на_сервер_истории

Не предоставляется никакой плагин для интеграции результатов в какую-то систему визуализации

Для интеграции в сторонние системы вы можете воспользоваться форматом SARIF, специально разработанным для единообразной обработки результатов статических анализаторов: https://svacer.ispras.ru/mediawiki/index.php?title=Help:Sarif. Этот формат достаточно популярен и поддерживается большой частью таких систем, в том числе SonarQube. Мы сознательно концентрировали свои ограниченные ресурсы на обеспечении качества анализа вместо того, чтобы пытаться поддерживать разнообразные плагины для систем визуализации, которых достаточно много. Единственное исключение наши инженеры сделали для VS Code: https://svacer.ispras.ru/mediawiki/index.php?title=Help:Vscode.

Web-интерфейс для просмотра отчётов содержит баги, что раздражает при работе

По снимку экрана видно, что вы использовали устаревший и неподдерживаемый интерфейс, который мы не рекомендуем уже несколько лет. Вместо него мы разработали намного более мощный и удобный интерфейс Svacer: https://svacer.ispras.ru/mediawiki/index.php?title=Svacer

Фича пошагового просмотра воспроизведения проблемы выглядит странно и бесполезно

Это очень сомнительное утверждение. С одной стороны да, для простых дефектов, которые можно понять, посмотрев на одну строку кода, такая функциональность действительно не нужна. Но дефекты, которые может находить Svace, могут быть намного более сложные, включающие пути по нескольким условиям внутри разных вызываемых функций из разных модулей. Для того, чтобы человек имел шанс понять, что вообще происходит, такие трассы необходимы. При этом мы стараемся не добавлять в трассы лишних точек, которые не актуальны для понимания дефектов (привет, Clang Static Analyzer https://clang-analyzer.llvm.org/, который показывает все условия от начала функции до места проявления дефекта даже тогда, когда то, по какому пути идёт управление до этого места - не важно).

После обновления до более новой версии Svace, время проверки кода выросло в более чем полтора раза

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

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

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

Добрый. Спасибо, что ответили.

Такая возможность есть в актуальном сервере истории Svacer, вы можете воспользоваться комментариями вида //svacer_review: -UNUSED_VALUE

https://svacer.ispras.ru/mediawiki/index.php?title=Help:ServerClient#Импорт_разметки_из_исходного_кода_на_сервер_истории

Хорошо, что возможность глушить ложные срабатывания была добавлена. Не знаю, в какой версии это было сделано, но осенью 2022 года этого не было. Help-страница, ссылка которой предоставлена, добавлена в декабре 2022 года.

❗❗❗ Важно уточнить, что "Svace" и "Svacer" - не опечатки в названии, а два разных продукта.

Добрый день, Анастасия! Меня зовут Михаил, я младший научный сотрудник ИСП РАН и один из разработчиков Svace. Я хотел бы дополнить комментарий Дмитрия.

Вместо подавления ложных срабатываний можно воспользоваться разметкой – пометить предупреждение как истинное (true positive) или ложное (false positive) в веб-интерфейсе сервера истории (как встроенного, так и Svacer), а затем выбрать фильтр, чтобы не показывать предупреждения, размеченные как ложные. Это решает Вашу задачу и при этом не загромождает исходный код комментариями для подавления предупреждений.

Проблема с галочками проявлялась в редкой ситуации, когда в разных каталогах присутствуют файлы с полностью совпадающим содержимым. Эта проблема уже исправлена 27 июля, исправление войдёт в следующий релиз.

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

Вместо подавления ложных срабатываний можно воспользоваться разметкой – пометить предупреждение как истинное (true positive) или ложное (false positive) в веб-интерфейсе сервера истории (как встроенного, так и Svacer), а затем выбрать фильтр, чтобы не показывать предупреждения, размеченные как ложные.

Необходима именно возможность разметки в коде. Кодовая база растёт, и ложные срабатывания просто не должны появляться в последующих отчётах. Разметка через Web-интерфейс не подходит, так как придётся это повторять постоянно.

Разумеется, это не нужно повторять постоянно – для этого и предназначен сервер истории. Возможно, Вы каждый раз создаёте новый сервер вместо того, чтобы один раз создать его и загружать результаты последующих анализов на него. Svace сопоставляет предупреждения с ранее выданными даже при изменениях в анализируемом коде, и ранее размеченные предупреждения останутся размеченными.

Если рефакторить код или переименовать файл, подозреваю, подобная история разметки не сохранится.

Конечно, всегда есть возможность внести столько изменений, что предупреждения перестанут считаться эквивалентными. Сейчас для сравнения используются такие свойства предупреждения:

  • тип предупреждения,

  • полное имя функции,

  • путь к файлу,

  • специфичная для конкретного типа предупреждения строка (т. н. "details"), идентифицирующая это предупреждение. В неё могут входить, например, имена переменных или выражения, упоминаемые в тексте предупреждения.

Можно подумать о том, чтобы не использовать путь к файлу, так как полного имени функции достаточно для языков, в которых функции находятся в классах и пространствах имён, а для функций на C включать путь к файлу в полное имя функции.

Подход с комментариями в коде тоже имеет свои недостатки. Например, при изменениях в коде или обновлении версии анализатора ложное срабатывание может исчезнуть, а на той же строке появится истинное предупреждение того же типа. В случае с разметкой на сервере details изменится (например, если в сообщении о разыменовании null теперь говорится о другой переменной), и новое предупреждение не будет размеченным, а при использовании комментария в коде оно останется подавленным.

Это решает Вашу задачу и при этом не загромождает исходный код комментариями для подавления предупреждений.

Зато не решает другую задачу - интеграцию с CI. Мы пользуемся Svace уже пару лет на работе и самая главная претензия - отсутствие комментариев для подавления предупреждений анализатора. Это прям ОГРОМНАЯ боль. Настолько, что пришлось нагородить скрипты для фильтрации результатов отчётов. Добавьте пожалуйста этот функционал штатно. Я страдаю.

Расскажите про сертификацию: есть какое-то указание пользоваться именно Svacer'ом? Или принципиальные требования к проверке кода? Какую именно сертификацию проходите?

Формат шагов для воспроизведения проблемы напоминает немного Coverity...

Sign up to leave a comment.

Articles