В общем, началось всё с мысли о том, что неплохо бы получить какого-нибудь коуча, который смог бы за деньги отсмотреть мой код и дать пару (или не пару) дельных советов о том, как же его улучшить. А закончилось — установкой программы, которая теоретически может проанализировать этот самый код сама.
Выбор был между ReSharper от JetBrains, который после бесплатного месяца использования стоит аж 300 долларов, что для некоммерческих целей (т.е. обучения) просто непозволительно дорого, и SonarQube, который вроде как должен работать не только с C Sharp, но и с 26 другими языками, при этом даже бесплатно.
Интерфейс на промо выглядел неплохо, и вооружившись пол литровой чашкой чая, я отправилась покорять новые вершины.
Что-то не так пошло уже после распаковки архива на диск C. Привычного exe-файла, который творил магию установки, не оказалось. Пришлось залезать в командную строку и набирать там команду StartSonar.bat в директории bin.
Вроде бы даже что-то начало происходить, но тут появилась первая проблема — требовался JDK минимум 11 версии.
Но ведь он уже был на компьютере. После некоторого времени, проведенного за серфингом по форумам, выяснилось, что нужно явно указать путь до нужной директории в файле конфигурации wrapper.
Очевидно, файл конфигурации лежал в одноименной папке conf, так что запутаться было сложно.
После явного указания пути вроде бы всё покатилось дальше, и даже (о чудо), получилось развернуть SonarQube, который локально стал доступен по ссылке http://localhost:9000/
Казалось бы, бери и загружай в программу нужный код, и будет тебе счастье? Но нет, оказалось, что и тут не всё так просто. Во-первых, для работы с .Net нужно было скачать специальный плагин — Scanner for MSBuild. Во-вторых, команды оказались для меня не совсем очевидны.
SonarScanner.MSBuild.exe begin /k:"test-case666"
MsBuild.exe /t:Rebuild
Казалось бы, похоже на то, что нужно запускать одну и ту же программу (по крайней мере, мне). Но нет. В первой строке нужно запустить этот таинственный плагин, а во второй — Microsoft Build Tools.
И вот казалось бы счастье уже близко, команды обрабатываются так, как нужно, но...
Оказалось, что нужно запускать все команды из директории, где лежит общее решение (.sln), а не отдельный проект (.csproj). Переделано, окей.
Что в результате? В клиенте мне отобразился вот такой дашборд:
Здесь можно посмотреть:
- баги (с подробным описанием),
- уязвимости,
- точки уязвимости, которые стоит проверить вручную,
- время технического долга,
- код с запашком,
- сколько кода покрыто unit-тестами,
- дублирование строк или блоков.
Оценивается программа по четырем критериям:
- надежность,
- безопасность,
- еще раз безопасность,
- удобство сопровождения.
Так как всё-таки это программа, которая рассчитана на работу в команде, тут есть система статусов, и можно оставлять различные комментарии. В моем случае мне предложили убедиться в том, что систему генерации псевдорандомных чисел здесь использовать безопасно.
В принципе, в моем случае это совсем небольшое приложение для работы с массивами и матрицами, так что это допустимо. Меняю статус на safe (безопасно) и получаю следующую картинку:
Можно немного поработать с разделом «код с запашком» — в программе есть комментарии по тем блокам, которые можно улучшить. Даже задано примерное время (по-моему, даже с запасом), которое уйдет на исправление ошибки.
При клике на ссылку « Why is this an issue?» кратко объясняется, почему не стоит использовать вариант, который есть в коде, и как это исправить. В моем случае было несколько неиспользованных переменных и проблемы со строковыми значениями.
У меня в цикле для конкатенации строк использовалась конструкция +=, но SonarQube советует использовать для этих целей StringBuilder. Надо будет посмотреть, насколько это эффективно.
Но то, что SonarQube стоит своих мучений при установке — это точно. Особенно в рамках обучения, когда рядом нет умного senior-а, который готов всё объяснить.
Всем пис!