Перейти к содержанию

Раздел 20. Если что-то пошло не так (FAQ)

1. Как использовать список исключений? Сонар считает, что есть ошибка, но мы уверены, что ошибки нет.

У каждого замечания есть режим false-positive (ложное срабатывание). Если посмотрели и ошибки нет – в данном конкретном месте замечание помечается как ложное.

Если ложных срабатываний слишком много - ставится вопрос об отключении правила целиком через профили качества.

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

2. Как разделить типовой код и свой собственный код? Можно ли настроить фильтр по подсистемам?

Существует несколько приемов, общий смысл такой:

  • задается маска имени файлов или их перечень, которые передаются на анализ. Существует вспомогательный скрипт, который помогает создать перечень имен файлов, входящих в ту или иную подсистему. Если код вашей команды находится только и исключительно в определенных подсистемах, то такой подход подойдет.
  • Второй путь: проверяется сразу весь код конфигурации типовой и не типовой. Затем замечания по "неинтересным" модулям удаляются, как неактуальные. Проводят такую операцию специальным скриптом массовой обработки.
  • Эти скрипты могут выдаваться по запросу.

3. Нужно ли вообще разделять типовой код и собственный код?

Такой подход часто не нужен и даже вреден. Типовой код в системе, как правило, выполняется в любом случае и ответственность за его функционирование перед бизнес-пользователями системы несет команда разработки/поддержки системы аналогично ответственности за свой собственный код. Соответственно, команда поддержки должна владеть данным кодом и понимать его качество. А в этом случае разделение уже необязательно.

4. Как влияет включенный антивирус на анализ?

Рекомендуется отключение антивируса для ускорения сканирования в несколько раз. Даже стандартный защитник Windows замедляет скорость работы до трех раз.

5. На сервере 1С не видно языка «1C (BSL)».

У вас не подключена лицензия на наш плагин. Подключите лицензию, как в разделе «Подключение плагина «SonarQube 1C (BSL) Plugin» и активация лицензии»

6. Сканирование останавливается с ошибкой разбора xml-файлов. Или, напротив, не работают правила для метаданных.

Для анализа метаданных требуется включить анализ xml-файлов в файле sonar-project.properties.

Пример необходимой настройки этого файла:

sonar.sources=./src/cf
sonar.inclusions=/*.bsl,/.os,**/.xml
sonar.exclusions=*/.html
sonar.lang.patterns.xml=/*.xsd,/*.xsl

Строка с sonar.inclusions нужна для указания проверяемых файлов.

Строка с sonar.lang.patterns.xml нужна для отключения проверки xml-файлов двумя плагинами (SonarBSL plugin и XML plugin), что приводит к аварийной остановке сканирования.

7. Возможно ли указать файл импорта из АПК? Будет ли привязка ошибок к коду, которые загружены импортом из АПК?

Да, такая возможность существует. К текущему техническому долгу будет плюсоваться тот технический долг, который нашел АПК. За исключением тех правил, которые одинаковы и у SonarQube и у АПК. Поведение адаптера АПК штатное, как у SonarQube. Привязка кода к замечаниям идет также. Автор берется из исходников, в итоге, сохраняется автор, на которого назначается замечание.

Замечание: АПК работает только на WIndows, по крайней мере, текущие версии. Поэтому понадобится Windows-компьютер с запуском Sonar Scanner и АПК.

Подробнее в соответствующем разделе настоящего руководства.

8. Можно ли как-либо управлять представлением имен модулей? Т.е. сейчас имена с каталогами, как при выгрузке в файлы, а хотелось бы видеть близкие к именам метаданных.

Можно написать собственные user-скрипты и подключать стили в своем браузере. На Github есть примеры таких скриптов. Например,

https://github.com/artbear/sonarqubebeauty

9. Как интегрировать результаты анализа Сонара с результатами автотестирования в Allure для получения единого отчета?

Сейчас никак. Нужно использовать сервер сборок, например, Jenkins, который умеет отображать информацию от разных источников.

10. При просмотре либо в онлайне jenkins-лога или как неформатированный текст можно увидеть вместо русского языка только знаки вопроса или иероглифы, аналогичные символы видны при запуске инструмента gitsync.

Несколько вариантов решения:

  • Jenkins надо запустить в режиме utf8 (рекомендуемый способ),
  • Правильнее и проще всего переключить Jenkins установкой свойства при запуске -Dfile.encoding=UTF-8,
  • Помните, что нужно переключить как сам сервер Jenkins, так и сервер ноды, на которой выполняется анализ,

  • либо в начале шага Jenkins задавать ту кодировку, в которой он работает,

  • например, добавлять в начале шага chcp 1251.

11. При попытке копировать профиль качества в SonarQube (версия 7.3) происходит ошибка с текстом "Данный запрос не может быть выполнен" и потом требуется повторно аутентифицироваться.

  • Очистите cookie и кэш браузера. Заново запустите.
  • Попробуйте посмотреть логи.
  • Попросите помощи сообщества, в том числе при помощи команды разработки SonarQube.

12. Плагину в EDT требуется предложенная архитектура и каков принцип его работы? Откуда он берет правила?

Плагин для EDT является частью предложенной архитектуры – фактически это адаптация для 1С штатного SonarLint. Правила (а точнее, профиль качества – комплект правил) всегда актуализируется по всем частям контура – от сканера на GIT сервере, до Анализатора внутри EDT. Это основная концепция – везде результаты одинаковы, где бы не анализировался проект: на сервере, в IDE. Отдельно поставить плагин для EDT не получится – отдельно не продается и идет как дополнение к основному плагину для сервера.

13. Что такое Технический долг?

Есть такое каноническое определение, что технический долг – количество человеко-дней, необходимое для приведения системы в идеальное состояние, например, у нас может быть какая-нибудь плохо спроектированная архитектура, слабо структурированный или слишком запутанный код. На тот момент, когда мы его написали, мы понимали, что это такое, но сейчас есть ощущение, что что-то здесь не так и что-то надо исправить. Условно, с точки зрения разработчика, количество технического долга при просмотре некачественного кода можно охарактеризовать, как количество восклицаний «Что же здесь происходит?» в час.

Очень часто, когда разработчики разбираются в сложном и запутанном коде, они долго не могут понять, что делает этот код, и тратят свое время на повторное укладывание в голове происходящего. Тем самым тратят свои (и заказчика) деньги. Примерно посчитав, сколько времени тратит разработчик на каждый такой случай, мы можем определить общий объем технического долга в часах и перевести его в деньги, например, умножив на часовую ставку программиста.

14. В чем преимущество плагина?

Преимущества нашего плагина перед АПК:

  1. Наш намного быстрее работает, на порядок более мощные правила.

Примеры:

  • Возможное использование неинициализированной переменной
  • Поиск последствий копипаста
  • Одинаковые блоки кода
  • Одинаковый код во взаимоисключаемых ветках ветвления кода
  • Одинаковые условия в последовательности вида "Если - ИначеЕсли - ИначеЕсли"
  • Одинаковые части условий в разных условиях блока "Если ИначеЕсли"
  • Цикломатическая и когнитивная сложность кода
  • Сравнение выражения с самим собой
  • Неиспользуемый параметр процедуры/функции
  • Недостижимый код
  • Неиспользуемый реквизит формы
  • Неиспользуемый итератор цикла
  • Неразрешимые ссылки на объекты метаданных в элементах форм и т.п.

  • Правила для анализа запросов.

Примеры:

  • Запросы в цикле
  • Использование составных типов в запросе
  • Сравнение с NULL и т.п.

  • АПК в принципе никогда не повторит эти правила, потому что АПК не строит синтаксическое/семантическое дерево модулей, а просто читает текст и пытается что-то с ним сделать.

  • Мощнейший механизм поиска и анализа дубликатов любых текстов, в т.ч. кода 1С.

  • Веб-сайт с результатами анализа. Анализ результатов доступен с любого устройства.

  • Управление замечаниями.

  • Анализ кода 1С не только из хранилища 1С, но и просто из Git-репозиториев.

  • Наш плагин умеет интегрировать результаты замечаний от АПК и показывать их на веб-сайте.

15. Каким образом выполняется анализ лицензии?

При запуске на сервере «SonarQube» плагин выполняет наличие и валидацию лицензионного файла «sonarqube-bsl-plugin.lic».

В случае отсутствия файла лицензии или завершения действия лицензии выдается ошибка проверки лицензии в логах работы сервера «SonarQube», при этом плагин продолжает свою работу.

Также при запуске выполняется отправка имени сервера, на котором используется лицензия, на адрес https://backend.silverbulleters.org/telemetry/sonar для контроля правильности использования лицензии согласно лицензионному соглашению.

16. В SonarQube блокирующие и критические ошибки и уязвимости были помечены как «Исправленные», но на следующий день они снова отобразились в списке ошибок как «переоткрытые». Почему и зачем они открылись вновь?

Это удобное предопределенное поведение. Замечания, переведенные в статус «Исправленные» (resolved as fixed), проверяются при повторном анализе SonarQube.

Если строки кода, для которых сработало замечание, не менялись, замечания будут выданы повторно.

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

Фактически, если ошибки возникли повторно, что-то пошло не так. Возможные варианты:

  • Код системы реально не исправлен;
  • Код системы исправлен с ошибками;
  • Установили неверный статус.

Проверьте и исправьте свой код или вдумчиво исправьте статусы на другие.