В прошлом году многие российские компании стали оперативно сертифицировать разрабатываемое ПО. Так я познакомилась со статическим анализатором Svace.

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

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

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

UPD, комментарий официального представителя:

"эта возможность была добавлена в Svacer 4.0.0."

Но дело в том, что Svace и Svacer - разные продукты.

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

Все статические анализаторы, с которыми приходилось работать, поставлялись хотя бы с одним плагином для импорта результатов. Большинство компаний начинают использовать Svace из-за сертификации, визуализация прогресса исправления найденных ошибок здесь не подразумевается.  Но это ведь удобно и для разработчика, и для руководителей. Может, мы хотим использовать статический анализатор на постоянной основе, отслеживать и поддерживать качество кода на определенном уровне, а не срочно править ошибки и замечания от анализатора, когда потребуется очередная сертификация.

Например, есть такие инструменты как SonarQube и TICS для визуализации результатов.

UPD, комментарий официального представителя:

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

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

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

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

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

UPD, комментарий официального представителя:

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

По снимку экрана видно, что вы использовали устаревший и неподдерживаемый интерфейс, который мы не рекомендуем уже несколько лет. Вместо него мы разработали намного более мощный и удобный интерфейс Svacer."

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

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

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

Это меня поразило. Сначала думала, что билд машины простаивают. Потом глянули, а это действительно сам анализ стал выполняться дольше. Допустим, вы добавили новые проверки, но серьёзно их стало почти в два раз больше? Как-то мало верится.

До начала работы со Svace, я ознакомилась с описанием на официальной станице производителя. Узнав, что "Svace – основной анализатор Samsung с 2015 года", мои ожидания и требования были, как к уже состоявшемуся продукту.

Возможно, Svace - действительно неплохая разработка, но упомянутые недостатки портят все первое впечатление. Продукт должен быть удобным и презентабельным, выгодным для компаний, использующих его. Если для его использования приходится тратить много дополнительного времени и денег, привлекательности в таком продукте становится меньше. По технической части статический анализатор тоже не показал выдающихся результатов. Как по мне, интересных ошибок в коде анализатор нашёл только две-три штуки. Результаты не очень. К тому же есть более достойные российские аналоги. Хотя для процесса сертификации аналогов нет – только Svace :)

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

А вы уже сертифицировали свое ПО?

Комментарии (19)


  1. little-brother
    23.09.2023 19:47
    +2

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


    1. AnROm Автор
      23.09.2023 19:47

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


  1. maisvendoo
    23.09.2023 19:47
    -2

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

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

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


    1. mimicria
      23.09.2023 19:47
      +7

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


    1. Disasm
      23.09.2023 19:47
      +3

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

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

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


  1. zhurikhin
    23.09.2023 19:47
    +5

    Добрый день, Анастасия. Меня зовут Дмитрий, я старший научный сотрудник ИСП РАН и один из разработчиков 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 стал занимать слишком много времени. Мы уже сделали исправление и на днях готовим релиз, где она будет исправлена.

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

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


    1. AnROm Автор
      23.09.2023 19:47

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

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

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

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


      1. zhurikhin
        23.09.2023 19:47
        +3

        Судя по списку изменений здесь, эта функциональность была добавлена в версии Svacer 4.0.0, выпущенной 16.08.2021.


        1. Noospheratu
          23.09.2023 19:47
          +3

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


      1. usrsse2
        23.09.2023 19:47
        +3

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

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

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

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


        1. AnROm Автор
          23.09.2023 19:47
          -1

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

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


          1. usrsse2
            23.09.2023 19:47
            +1

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


            1. AnROm Автор
              23.09.2023 19:47

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


              1. usrsse2
                23.09.2023 19:47
                +1

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

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

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

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

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

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

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


        1. ReadOnlySadUser
          23.09.2023 19:47
          +1

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

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


  1. Arbane
    23.09.2023 19:47
    +1

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



  1. Andrey2008
    23.09.2023 19:47
    +6

    Статический анализатор кода PVS-Studio.
    Статический анализатор кода PVS-Studio.


  1. Evengard
    23.09.2023 19:47

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