Использование расширения VS Code «PVS-Studio» для эффективной борьбы с ошибками в C# коде

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

VS Code — это знакомый многим редактор кода, главная особенность которого — возможность дополнить свой функционал с помощью множества полезных расширений. Одно из них теперь помогает эффективнее находить ошибки не только в C, С++, но и в C# коде.

Введение

На сегодняшний день существует множество общепринятых способов, которые используются разработчиками для обеспечения качества кода. Это и руководство принципами проектирования, и внедрение различных процессов, таких как code review и unit-тестирование, в процесс разработки. Кроме того, быстро набирают популярность программные инструменты для выявления ошибок и уязвимостей в коде. Примером такого инструмента может служить статический анализатор С, C++, C# и Java кода — PVS-Studio. Этот анализатор прост в использовании и интегрируется с самыми разными IDE (а также с VS Code) через соответствующие расширения, позволяющие удобно запускать анализ и эффективно работать с его результатами.

Обзор расширения PVS-Studio для Visual Studio Code я уже делал ранее. С тех пор в него было добавлено несколько новых возможностей:

  • Запуск анализа C, С++ (CMake) и C# (MSBuild) решений из интерфейса VS Code;

  • Подавление предупреждений c помощью suppress-файлов;

  • Запуск анализа отдельных файлов с кодом или .NET проектов (.csproj).

В этой же статье на примере анализа .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-файл, в свою очередь, является удобным способом отложить технический долг на потом и сосредоточиться на качестве нового кода.

В этом случае стандартный сценарий использования функции, следующий:

  1. Выполняется общий анализ решения;

  2. Полученные предупреждения подавляются;

  3. Подавленные предупреждения периодически просматриваются разработчиком небольшими порциями. Чтобы вернуть подавленные предупреждения, нужно отредактировать или удалить файл с расширением .suppress.json, который можно найти в папке .PVS-Studio в директории решения.

Подробнее эта тема рассматривается в статье "Как внедрить статический анализатор кода в legacy проект и не демотивировать команду".

Заключение

Надеюсь, мне удалось продемонстрировать вам, уважаемые читатели, что расширение PVS-Studio – это удобный и полезный в разработке инструмент. В заключении хочу отметить, что оно активно развивается, и уже в ближайших релизах у Java-разработчиков тоже появится возможность использовать его для проверки своих проектов, но об этом будет уже другая статья.

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

Чистого кода и успешных проектов! До встречи в следующих статьях!

Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Andrey Moskalev. Using the PVS-Studio extension for VS Code to effectively handle errors in C# code.

Источник: https://habr.com/ru/companies/pvs-studio/articles/772870/


Интересные статьи

Интересные статьи

Документацию рядом с кодом мы ведём уже 6 лет, она делится по слоям: фронт, миддл и бэк. С миддлом всё хорошо, а вот с фронт-документацией всё портят изображения экранных форм. От них репозиторий разд...
Думаю, ни для кого не секрет, что основная аудитория хабра - люди 20-30-40 лет. И большинство из них помнят про такие штукенции - как КПК/коммуникаторы. Кто-то из вас, читателей - и сам пользовался он...
Как отслеживать использование памяти CPU и загруженность диска в Java. Читать далее
Вот и наступил 2020 год. И как всегда в начале года мы ставим себе амбициозные цели на год, обещаем заняться планированием, стать лучше и т.п. Мы начинаем использовать новый крутой сервис по упра...
Во время проведения WWDC 2019, одним из самым больших и захватывающих моментом был анонс релиза SwiftUI. SwiftUI — это совершенно новый фреймворк, который позволяет проектировать и разрабатывать ...