Вебинар: C# разработка и статический анализ: в чем практическая польза? - 18.11
VS Code — это знакомый многим редактор кода, главная особенность которого — возможность дополнить свой функционал с помощью множества полезных расширений. Одно из них теперь помогает эффективнее находить ошибки не только в C, С++, но и в C# коде.
На сегодняшний день существует множество общепринятых способов, которые используются разработчиками для обеспечения качества кода. Это и руководство принципами проектирования, и внедрение различных процессов, таких как code review и unit-тестирование, в процесс разработки. Кроме того, быстро набирают популярность программные инструменты для выявления ошибок и уязвимостей в коде. Примером такого инструмента может служить статический анализатор С, C++, C# и Java кода — PVS-Studio. Этот анализатор прост в использовании и интегрируется с самыми разными IDE (а также с VS Code) через соответствующие расширения, позволяющие удобно запускать анализ и эффективно работать с его результатами.
Обзор расширения PVS-Studio для Visual Studio Code я уже делал ранее. С тех пор в него было добавлено несколько новых возможностей:
В этой же статье на примере анализа .NET проекта я продемонстрирую, что выявлять ошибки с помощью расширения PVS-Studio для VS Code – это просто!
Перед анализом стоит проверить, установлены ли анализатор PVS-Studio для вашего языка программирования и расширение PVS-Studio для VS Code. Если это не так, можно воспользоваться инструкциями по установке из предыдущей статьи, посвященной этому расширению.
Открываем папку с решением. Запустить анализ всего решения можно, кликнув по кнопке Analyze project в окне PVS-Studio. Обычно это окно находится в одной из вкладок нижней панели VS Code.
Если окно PVS-Studio скрыто, вы можете отобразить его с помощью команды Show window в палитре команд (Ctrl + Alt + P).
А как быть, если нужно проанализировать только определенные файлы с кодом или проекты? В этом случае можно воспользоваться одним из новых способов запуска анализа, например, через контекстное меню обозревателя.
С остальными способами вы можете ознакомиться в документации.
При первом анализе .NET решения вы увидите следующее сообщение:
При клике по кнопке Edit перед вами откроется .jsonc файл, в котором можно указать необязательные параметры анализа, аналогичные некоторым аргументам консольной версии анализатора.
Ознакомившись с этим файлом, следует запустить анализ еще раз. Теперь вам может быть предложено выбрать в палитре команд решение (.sln), которое включает анализируемые файлы или проекты (в случае, если в открытой директории более одного решения). После этого анализ будет запущен, а окно PVS-Studio примет следующий вид:
К концу анализа у нас сформируется полный список предупреждений. Так как я анализировал всего несколько файлов из решения, их получилось немного.
Для удобной обработки результатов анализа в плагине есть несколько фильтров и функций, ознакомиться с которыми вы можете в документации.
Среди полученных предупреждений есть два, которые заслуживают особого внимания. Давайте посмотрим код, на который они указывают. Для этого дважды кликнем по одному из выбранных предупреждений. В результате этого нужный код отобразится в редакторе.
Предупреждение: V3142. Unreachable code detected. It is possible that an error is present. SharedDoAfterSystem.cs: 52.
Данное предупреждение указывает на 52 строку и говорит о недостижимости последующего кода.
Долго думать не приходится, ведь следующее предупреждение явно указывает на причину этой проблемы.
Предупреждение: V3022. Expression is always true. Probably the '&&' operator should be used here. SharedDoAfterSystem.cs: 49.
Обратите внимание на условное выражение на строке 49. Согласно предупреждению, данное выражение всегда истинно. В этом нетрудно убедиться, ведь здесь одно и то же поле args.NewMobState проверяется на неравенство с двумя значениями MobState.Dead и MobState.Critical через оператор ИЛИ. В результате вторая проверка всегда истинна, если первая ложна и наоборот.
Эта ошибка приводит к тому, что метод OnStateChanged всегда завершается возвратом на строке 50, а весь последующий код никогда не выполняется.
Просмотрев предупреждения и исправив ошибки, стоит подавить ложные или несущественные предупреждения, чтобы не отвлекаться на них при последующих анализах.
Для этого нужно выделить их в таблице (с помощью комбинации клавиш Ctrl + A можно выделить сразу все), открыть контекстное меню и выбрать опцию Mark as a False Alarm или Add selected messages to suppression file (данную функцию также представляет кнопка в виде молнии в верхнем правом углу окна PVS-Studio).
Первая функция отличается от второй тем, что она подавляет предупреждение путем добавления комментария вида //-V[Код предупреждения] в первую строку кода, на которую указывает предупреждение. Вторая функция, в свою очередь, сохраняет информацию о подавленных предупреждениях в специальном файле.
Стоит отметить, что для подавления ненужных предупреждений предпочтительно использовать функцию Mark as a False Alarm.
Функция добавления предупреждений в suppression-файл, в свою очередь, является удобным способом отложить технический долг на потом и сосредоточиться на качестве нового кода.
В этом случае стандартный сценарий использования функции, следующий:
Подробнее эта тема рассматривается в статье "Как внедрить статический анализатор кода в legacy проект и не демотивировать команду".
Надеюсь, мне удалось продемонстрировать вам, уважаемые читатели, что расширение PVS-Studio – это удобный и полезный в разработке инструмент. В заключении хочу отметить, что оно активно развивается, и уже в ближайших релизах у Java-разработчиков тоже появится возможность использовать его для проверки своих проектов, но об этом будет уже другая статья.
Напомню, что вы можете установить расширение вместе с анализатором кода PVS-Studio c официального сайта.
Чистого кода и успешных проектов! До встречи в следующих статьях!
0