В релизе Svace 4.0.250113 мы ускорили анализ Go.
Go-проекты, как правило, импортируют много внешних пакетов (зависимостей). Под “зависимостями” в Go подразумеваются пакеты, расположенные в каталоге vendor, $GOMODCACHE или $GOPATH/pkg/mod. В некоторых проектах анализ кода зависимостей может занимать даже больше времени, чем анализ пользовательского кода.
Анализ кода зависимостей помогает лучше понимать семантику пользовательских процедур. Найденные ошибки в импортируемых внешних процедурах надо учитывать, несмотря на то что пользователь не всегда может их исправить. Ошибки в коде зависимостей также делают уязвимым код пользователя, который эти процедуры импортирует.
Часто пользовательский код не использует большинство процедур из импортированных пакетов. Для ситуации, когда процедура из кода зависимости недостижима (т.е. процедура не вызывается в пользовательском коде), можно исключить такие процедуры из анализа. Это позволит значительно увеличить скорость анализа и не повлияет на его точность.
Мы реализовали поиск недостижимых процедур в коде зависимостей. Чтобы исключить такой код из процесса анализа необходимо использовать опцию SKIP_UNREACHABLE_PROCEDURE_ANALYSIS.
Эта опция имеет три возможных значения:
off – Отключить опцию. Используется по умолчанию.
all – Исключить из анализа функции, недостижимые из публичных пользовательских функций. Как в пользовательском коде, так и в коде зависимостей.
deps – Исключить из анализа функции, недостижимые из любой пользовательской функции. Только в коде зависимостей.
Чтобы включить опцию необходимо выполнить следующую команду:
svace config SKIP_UNREACHABLE_PROCEDURE_ANALYSIS deps
В обновлении эта опция выключена по умолчанию, т.к. обновление не предполагает значительных изменений у пользователя. В релизе Svace 5.0 мы планируем включить данную опцию по умолчанию с значением deps.
Ниже приведены результаты сравнения времени анализа с значением deps. Ускорение времени анализа зависит от количества зависимых пакетов, используемых проектом.
KLOC: 5703
Обычный анализ: 480 секунд
Анализ с опцией deps
: 240 секунд
Ускорение в 2 раза.
KLOC: 7808
Обычный анализ: 800 секунд
Анализ с опцией deps
: 260 секунд
Ускорение в 3 раза.
Мы рекомендуем включать опцию SKIP_UNREACHABLE_PROCEDURE_ANALYSIS deps, это позволит уменьшить время анализа, а также уменьшить количество предупреждений, которые к пользовательскому проекту не относятся.