Человеку свойственно ошибаться. Это сказывается при таких факторах как стресс, отвлекающие факторы и естественная невнимательность к мелочам. Дело в том, что человек отнюдь не заточен под выполнение однообразных операций и человеческий мозг отдает меньше ресурсов и значимости к мелким деталям. Для этого человек изобрел вычислительные машины – компьютер прекрасно справляется с однотипными задами, проверяя всё до мельчайших деталей (в рамках заданного алгоритма).

В данной статье будет рассказано о том, как поставить помощника разработчику, который будет изучать весь проект целиком на предмет потенциальных ошибок и “загнивания” кода. Этот инструмент позволит быстро понять в каком состоянии находится проект, насколько он пригоден к дальнейшей модификации. Также, будет небольшой бонус в виде плагина, который помогает визуально определить ошибку прямо при написании кода.

Встречайте – SonarQube!

Сразу перейдём к делу – изучим требуемые реквизиты для установки. Процесс установки как обычно – кликом на установщик, если не оговорено иное. После установки будет рассмотрено как запустить процесс анализа .NET проекта на примере маленького, но очень гордого проекта и посмотрим какие ошибки нам сообщит SonarQube

Установка

Приведем полный список необходимых компонентов с ссылками в открытом доступе (архив будет приложен):

После установки .NET и JRE 8 с помощью инсталляторов, требуется распаковать архивы Sonar-server и MsBuild сканнера. Содержимое этих архивов выглядит примерно так:

2017-02-17_1921

От корней этих двух папок далее будем отталкиваться. Далее приступим к настройке сервера.

Установка сервера

Сонар представляет собой Windows-сервис, который, по умолчанию, прослушивает 9000 порт. Поэтому рекомендуется либо освободить этот порт, либо назначить другой порт (об этом в конце).

Посмотреть занят ли порт можно командой

netstat -n -o -ab | find “9000”

Примерно так выглядит свободный порт – в крайней правой колонке все processID = 0. В противном случае нужно прибить процесс с указанным айди

2017-02-17_1944

В папке sonarqube\bin\windows-x86-[32|64] (зависит от разрядности рабочей станции), запустить InstallNTService.bat. Когда сервис будет установлен – запустить StartNTService.bat. 

Сервису требуется некоторое время для запуска. Примерно 30 секунд. После чего сервис будет доступен по адресу localhost:9000 , как показано ниже:

2017-02-17_1948

Соответственно, netstat выдаст такой результат:

2017-02-17_1949

 

Заметка: для входа в систему используйте логин: admin, пароль: admin. Функционал админки на самостоятельное изучение.

Теперь сервис настроен, и любой сонар-анализатор будет складывать туда результаты анализов. Далее будет настроен анализатор для MSBuild и показано его использование.

Настройка анализатора

В первую очередь следует добавить запускаемые файлы в переменные среды (Path). Это делается так: Мой комьютер – Свойства – Изменить параметры – вкладка “Дополнительно” – Переменные среды.

2017-02-17_1926

Туда следует добавить пути:

  • MsBuildScanner: ~\msbuildScanner\SonarQube.Scanner.MSBuild.exe
  • MsBuild: C:\Program Files (x86)\MSBuild\XX.0\Bin , или другой путь куда была установлена MSBuild.

Проверьте работоспособность добавленных путей, открыв командную строку (Win+R – ввести: cmd – enter), и написав там SonarQube.Scanner.MSBuild.exe и MsBuild.exe – если эти две инструкции отработали по очереди – значит система почти готова! Осталось запустить сканирование!

Сканирование

Рассмотрим сканирование с помощью командной строки, так как на серверах билд запускается именно так. Сканирование выполняется тремя строчками:

SonarQube.Scanner.MSBuild.exe begin /k:"org.sonarqube:sonarqube-scanner-msbuild" /n:"%PROJECT_NAME%" /v:"%PROJECT_VERSION%"
MSBuild.exe %SOLUTION_FILE_PATH% /t:Rebuild
SonarQube.Scanner.MSBuild.exe end

где,

  • PROJECT_NAME – уникальное имя проекта для его идентификации при рассмотре анализа
  • PROJECT_VERSION – версия проекта
  • SOLUTION_FILE_PATH – относительный или полный путь к .sln файлу.

В данном примере, решение лежит в папке src, а рядом с этой папкой лежит скрипт для сборки проекта с его анализом.

2017-02-17_1957

Соответственно, в данном случае, текст скрипта заменен (вместе с процентами) на:

  • PROJECT_NAME – “Phantasm”
  • PROJECT_VERSION – “1.0”
  • SOLUTION_FILE_PATH – “src\Phantasm.sln”

После запуска батника, состояние сайта обновится следующим образом:

2017-02-17_2002

Где Code Smells означает потенциальные проблемы в маленьком, но очень гордом проекте. Однако, как видно на скринах ниже, поддерживаемость проекта хорошая “А”, и ожидаемое время на исправление ошибок – 4 часа. Естественно, сканнер не может предполагать сколько займет реализация TODO комментариев.

2017-02-17_20042017-02-17_2004_001

Таким образом, была получена, понятная менеджменту, метрика о техническом состоянии проекта. Далее будет рассмотрен случай настройки сервера на другой порт и плагин для студии.

Настройка сервера на другой порт

Зачастую порт по умолчанию занят другим важным процессом. Тогда будет очень кстати знание о смене порта сервиса. Данный процесс не ограничивается сменой конфигурации сервиса в случае работы с MSBuild. Также требуется указать для MSBuild на какой порт стучаться с результатами анализов. Далее будет показано в каких файлах какие изменения применить, чтоб, например, выставить порт 50110. Прежде всего, требуется остановить сервис, если он включен, и убедиться что желаемый порт свободен.

Итак, конфигурация:

 

\sonarqube\conf\sonar.properties

sonar.web.port=50110
\msbuild-scanner\SonarQube.Analysis.xml

<Property Name="sonar.host.url">http://localhost:50110</Property>

В итоге, сервис теперь доступен на порту 50110, и результаты повторного анализа туда приходят:

2017-02-17_2020

Если сервис недоступен по причине даунтайма или неправильно настроен порт – анализ произойдет с ошибкой, внимательно следите за логами. Пример хороших логов будет приложен в статье.

На этом всё со сканером, но прощаться рано – напоследок оставлен плагин для Visual Studio 2015/2017 от Сонара.

SonarLint

Плагин можно скачать тут. Он просто подсвечивает предупреждения, которые выдает студия:

2017-02-17_2032

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

Плодотворной работы!

 

PS – требуемые файлы в одном пакете: https://yadi.sk/d/mrDGMQ0k3EDbUK