Практика применения DevOps. Работа с SonarQube

Публикация № 1340227 07.12.20

Разработка - Рефакторинг и качество кода

Во второй части мастер-класса «Практика применения DevOps» на конференции Infostart Event 2019 Inception выступил Виталий Подымников – он рассказал про процесс проверки качества кода и использование SonarQube для работы с ним.


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

Продолжаем цикл статей по практике применения DevOps.

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

А моя часть посвящена установке и настройке SonarQube для проверки качества кода.

 

Установка SonarQube и настройка wrapper.conf

 

 

SonarQube состоит из двух частей.

  • серверная часть SonarQube;
  • и sonar-scanner – это утилита, которая анализирует ваши проекты и отправляет данные на сервер SonarQube.

 

Для работы SonarQube требуется Java 11+

На компьютере, где вы собираетесь работать с SonarQube, обязательно нужно поставить Java, с версией больше 11-й. Мы используем у себя OpenJDK – его можно установить из https://jdk.java.net/archive/. Нужно просто скачать дистрибутив Java с сайта и распаковать его туда, откуда потом будет удобно вызывать.

 

Установка и настройка SonarQube

Следующим шагом нужно скачать сам SonarQube с официального сайта https://www.sonarqube.org/downloads/. Здесь есть возможность скачать бесплатную версию (Community Edition) и платную. Но нам для 1С пока возможностей бесплатной версии хватает. Тоже скачиваете архив и распаковываете его куда-нибудь.

 

 

Чтобы SonarQube заработал, его нужно будет немного настроить.

Все настройки SonarQube лежат в папке conf. Здесь есть:

  • файл sonar.properties – это все настройки SonarQube;
  • и файл wrapper.conf – это настройки исполняемого файла wrapper.exe.

Настроим wrapper.conf. Если Java у вас не прописана в PATH, вы можете здесь указать абсолютный путь к ней. Обратите внимание, в этом пути слэши должны быть обратные (/), потому что прямые слэши, которые используются в Windows (\), в этом файле могут работать некорректно – wrapper не стартанет и будет выдавать ошибку.

Больше ничего во wrapper.conf настраивать не нужно.

 

Настройка sonar.properties

Основные настройки находятся в sonar.properties. Здесь можно настроить очень много разных параметров, но нам среди них нужно буквально шесть мест – в файле они все подписаны. Это параметры:

  • User credentials
    • sonar.jdbc.username
    • sonar.jdbc.password
  • Microsoft SQLServer
    • sonar.jdbc.url
  • WEB SERVER
    • sonar.web.javaOpts
  • COMPUTE ENGINE
    • sonar.ce.javaOpts
  • ELASTICSEARCH
    • sonar.search.javaOpts

 

Настройка доступа SonarQube к базе данных

 

 

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

SonarQube для хранения может использовать различные базы данных:

  • Embedded Database (внутреннюю базу SonarQube)
  • Oracle
  • PostgreSQL
  • И Microsoft SQLServer – у нас в Инфостарте используется MS SQL.

По умолчанию используется внутренняя база SonarQube, но со временем SonarQube начинает «пухнуть», в нее может что-то не влезть, плюс эта база не поддерживает обновления версий SonarQube. Поэтому мы рекомендуем развернуть специальную базу – или PostgreSQL, или MS SQL, и использовать ее.

Поскольку мы используем аутентификацию самого MS SQL, нам нужно также задать имя пользователя и пароль для доступа к SQL. Если бы у нас была какая-то внутренняя аутентификация, можно было бы без них обойтись. Соответственно, в секции User credentials указываем имя пользователя (sonar.jdbc.username) и пароль (sonar.jdbc.password).

Потом мы указываем строку подключения к MS SQL (sonar.jdbc.url) – IP-адрес, где у нас развернута база и имя базы данных. Пусть вас не смущает, что он через точку с запятой – так оно и должно быть. Этого достаточно, чтобы sonar развернулся на SQL.

 

 

Единственный важный момент – когда вы создаете базу на MS SQL, ее порядок сортировки должен быть Case-sensitive, Accent-sensitive (_CS_AS), как на слайде – Cyrillic_General_CS_AS. Это должно быть обязательно, иначе, когда у вас будет запускаться SonarQube, он ругнется, что он не может сюда развернуться. Поэтому важно это не забывать.

 

Настройки выделения памяти

 

 

Теперь надо еще явным образом прописать, сколько выделять памяти Java-машине. У нас всего таких три места:

  • sonar.web.javaOpts – память на веб-интерфейс SonarQube,
  • sonar.ce.javaOpts – память на фоновые задания, которые там крутятся.
  • sonar.search.javaOpts – память на ElasticSearch, который используется для поиска в этой базе данных.

Здесь нам нужно установить параметры Xmx и Xms – сколько мы готовы выделить оперативной памяти на сервере.

  • Xms – это сколько он сразу выделяет.
  • Xmx – сколько максимум.

Но мы их ставим одинаковыми – пусть сразу выделяет столько, сколько у него есть.

И тут логика такая – если у вас свободной оперативки 10 Гб, вы можете доступные 9 Гб раскидать на эти три строчки: допустим, на веб-интерфейс 2 Гб и по 3,5 Гб на фоновые задания и на Elastic Search.

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

 

Настройка SonarQube

После того как вы отредактировали файл sonar.properties, можно запустить сам SonarQube.

 

 

Для его запуска в каталоге bin у нас есть соответствующие папки под каждую из поддерживаемых операционных систем – для Linux, Mac и Windows. Допустим, у нас здесь стоит 64-битный Windows. Заходим сюда:

  • здесь есть батник StartSonar, которым можно запустить SonarQube из командной строки;
  • можно поставить SonarQube как сервис, чтобы он крутился на сервере как служба:
    • файл InstallNTService.bat создает сервис SonarQube в списке сервисов;
    • UninstallNTService.bat – удаляет;
    • StartNTService.bat запускает сервис;
    • а файл StopNTService.bat – останавливает.

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

 

 

После того как мы запустим сервис, в службах служба появится SonarQube – вы можете уже им пользоваться.

 

 

Чтобы проверить, что SonarQube запустился, нужно в браузере написать URL, на котором поднят SonarQube, указать порт (по умолчанию 9000), и в конце нужно написать maintetance. Это, по сути, проверка работоспособности – здесь он показывает, что SonarQube активен, все системы в норме. И дальше вы уже можете приступить к настройке внутри самого SonarQube, посмотреть, как оно работает.

 

 

Что здесь важно? Когда вы только устанавливаете SonarQube из коробки, тут есть только один пользователь admin и пароль тоже admin. Этот пароль лучше потом поменять, потому что очень много прав у админа, не стоит всем эти права раздавать.

 

 

SonarQube – это платформа, которая расширяется на разные языки программирования с помощью плагинов. Плагины есть бесплатные, а есть платные. Есть дорогие, а есть не очень дорогие.

Плагин можно поставить через магазин – Администрирование – Магазин. Здесь есть куча различных плагинов – часть из них уже установлены в коробочной версии SonarQube (например, самые распространенные – для Java, для C).

Первым делом мы поставим нужные нам плагины:

  • 1C (BSL) Community Plugin – это бесплатный плагин, который использует диагностику кода с помощью BSL Language Server. Есть платные варианты, но они обычно стоят очень много денег, а для «попробовать» (понять, насколько это вообще нужно) нам вполне хватает бесплатного.
  • Russian Pack – для перевода самого SonarQube на русский язык. Здесь еще не полностью все переведено, но большинство основных команд уже на русском.

 

 

Некоторые плагины поставляются разработчиками не через магазин, а отдельно в виде jar-файла. Если чего-то в магазине нет, в папке самого SonarQube есть папка extensions, где в папке plugins находятся исполняемые файлы с расширением jar – это все те плагины, которые у нас сейчас установлены. Поставляемый jar-файл плагина можно просто сюда скопировать, SonarQube это увидит, покажет, что появился новый плагин, его нужно будет перезапустить и потом можно будет этим пользоваться.

 

Настройка пользователей

 

 

Дальше нам обязательно нужно настроить безопасность (Администрирование – Конфигурация – Общие настройки – Безопасность). И мы рекомендуем здесь включать галочку Force user authentication, чтобы у вас анонимные пользователи не могли зайти в SonarQube, чтобы обязательно была авторизация под кем-то.

 

 

Через пункт Безопасность – Пользователи мы заводим пользователей.

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

 

 

Здесь просто создаете пользователя – имя для входа, пароль.

 

Токены доступа

 

 

Чтобы работал Sonar-scanner для пользователя, под которым он будет у вас запускаться, нужно обязательно задать токены – для этого здесь есть колонка Токены. Если для пользователя нажать кнопку в этой колонке, можно сгенерировать новый токен.

 

 

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

 

Пороги качества

Дальше – после того как вы настроили пользователей и сделали токены, нам нужно немного кастомизировать SonarQube под себя. Для этого можно использовать так называемые «пороги качества» – это те критерии, по которым мы определяем, что текущую сборку можно выпускать.

 

 

По умолчанию в SonarQube есть порог качества Sonar way.

 

 

Вы здесь можете создать свой порог качества – мы свой порог назвали Infostart way. У нас сборочная линия настроена так, что если текущая сборка порог качества не проходит, то она валится с ошибкой – говорит, что пока не исправите, никакого релиза не будет.

 

 

Здесь можно добавлять различные метрики. Их очень много, можно очень сильно кастомизировать.

Мы для демонстрации пока добавили, что если нет новых блокирующих замечаний, значит, все хорошо, и можно выпускать.

Пороги качества можно ставить как в целом, допустим, по всему SonarQube, так и прописывать отдельно по проектам. Я сейчас поставил по умолчанию, чтобы ко всем новым проектам, которые будут попадать в SonarQube, сразу применялся этот порог качества.

 

Профили качества

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

 

 

Когда мы устанавливаем 1C (BSL) Community Plugin, у нас автоматически появляется профиль для языка 1С (BSL).

Он встроенный. В нем сейчас есть 114 правил. Мы можем в них провалиться по гиперссылке.

 

 

Здесь будет выведен полный список этих правил.

 

 

Можно посмотреть, что каждое правило в себе содержит – какая у него критичность, какие пороговые значения. Но этот профиль качества – это как конфигурация на поддержке, мы его изменять не можем. Чтобы его изменить, его нужно скопировать.

 

 

Мы скопировали этот профиль, назвали его Infostart rules и сделали его для языка 1С (BSL) по умолчанию.

 

 

В таблице профилей качества видно, что он отнаследовался от встроенного профиля BSL Language Server rules.

 

Настройка правил

В этом профиле у нас уже появляется возможность отредактировать правила. Мы можем выбрать гиперссылку в таблице правил и детализировать активные правила, например.

 

 

Очень важный момент – здесь слева есть гибкая система фильтров, можно фильтровать по чему угодно.

Например, сейчас в профиле Infostart rules отобраны только активные правила этого профиля.

 

 

Допустим, мы здесь можем отредактировать какое-нибудь правило. Например, есть правило «Ограничение на длину строки», которое заключается в том, что строка не должна превышать 120 символов. Это незначительная ошибка, но SonarQube считает, что это ошибка.

 

 

А мы говорим, что у нас широкие мониторы, нам 120 символов мало, мы хотим видеть 500 символов. Соответственно, теперь мы поменяли пороговое значение, при котором срабатывает это правило, как ошибочное.

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

Тут все достаточно просто настраивается.

 

 

Мы всегда можем вернуть родительские настройки по соответствующей кнопке (у нас здесь указан родитель этого правила).

 

 

Кроме этого, тут есть неактивные правила. Это те, которые по умолчанию выключены. Но если мы, допустим, хотим, чтобы у нас было запрещено использование тернарного оператора, мы можем это правило активировать, и тогда оно тоже будет срабатывать в нашем коде.

Понятно, что неактивные правила при проверке не отрабатывают, а активные – отрабатывают.

 

 

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

 

 

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

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

 

Sonar-scanner

 

 

Теперь нам нужно, чтобы у нас в SonarQube появились какие-то данные, содержащие показатели качества кода по нашим проектам – такая красивая картинка, которую можно вставлять во всякие презентации.

Для этого служит приложение sonar-scanner – утилита, которая анализирует ваш проект и проверяет его на соответствие действующим правилам.

 

 

Вы можете просто ввести в поисковике sonar-scanner, и первая же ссылка https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/ ведет на сайт SonarQube. Здесь у нас есть возможность скачать sonar-scanner для различных операционных систем. Мы скачиваем sonar-scanner для Windows.

 

 

Структура у него стандартная:

  • в папке bin находится батник sonar-scanner.bat;
  • а в папке conf находится файл sonar-scanner.properties – это настройки.

По умолчанию SonarQube ставится на localhost, но у нас SonarQube крутится на специальном сервере, поэтому мы здесь прописываем свойство sonar.host.url (определенный IP-шник).

Больше здесь никаких особых настроек не нужно.

 

 

После всего этого мы заходим в какой-нибудь проект, например, у нас есть выгрузка EDT-шного проекта «Conference» – здесь находятся исходники всех наших подсистем, справочников и всего остального.

Чтобы просканировать проект вручную, надо положить в папку с исходниками батник check.bat и, опционально, еще файл sonar-project.properties.

 

 

Пример команды для батника check.bat вы можете получить из самого SonarQube, когда вы добавляете новый проект на закладке Проекты.

 

 

Здесь он потребует:

  • токен доступа, потому что без токена он работать не хочет;
  • далее выбираем язык;
  • выбираем операционную систему;
  • и здесь будет сгенерирован текст команды, которую можно скопировать в батник.

У нас получилась примерно следующая строка:

sonar-scanner.bat -D"sonar.projectKey=test" -D"sonar.sources=." -D"sonar.host.url=http://10.10.1.150:9000" -D"sonar.login=токен"
  • Первым параметром указывается путь, куда мы установили sonar-scanner (путь к тому батнику в папке bin)
  • sonar.projectKey – это ключ проекта (по этому ключу у нас будет собираться диагностика по проекту).
  • sonar.sources – это какие файлы он должен анализировать этим батником. Для нашего проекта в качестве этого свойства указана папка EDT/src – папка, где лежат все выгруженные файлы конфигурации. Этой некий фильтр, который позволяет управлять тем, что будет сканировать sonar-scanner. Например, если мы хотим сканировать только общие модули, мы можем указать ему в параметре sonar.sources значение EDT/src/CommonModules, тогда он будет проверять только папку CommonModules и отправлять в SonarQube.
  • sonar.host.url – мы указываем, где находится сам SonarQube, куда отправлять данные
  • sonar.login – токен доступа, под которым мы должны в SonarQube авторизоваться.

 

 

Мы у себя в батнике check.bat, который лежит в корне нашего проекта, оставили только токен и ключ проекта, а остальные параметры вынесли в sonar-project.properties.

На Инфостарте есть статья Олега Тымко, где рассказано, как это все настраивается. Там есть ссылка на репозиторий, где можно скачать пример настройки проекта вместе с файлами sonar-project.properties и батником запуска check.bat.

 

 

Чтобы запустить анализ, мы снова запускаем командную строку и вызываем в ней батник.

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

Мы получили надпись EXECUTION SUCCESS – значит, все отправлено.

 

 

Теперь если мы вернемся в SonarQube, у нас порог качества у проекта Conference поменялся на «Пройдено» и обновилась дата последнего анализа.

 

Навигация по ошибкам и работа над ошибками

После того как мы запустили sonar-scanner и прогнали наш проект, у нас появились какие-то данные, с которыми можно работать дальше.

 

 

Провалимся в проект Conference. Здесь у нас построены различные графики, видно, как что менялось со временем. Это, кстати, очень полезно, чтобы видеть, растет ли у нас технический долг.

 

 

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

 

 

И дальше мы работаем с теми замечаниями, которые он нашел. Что мы можем с ними сделать:

  • мы можем поменять тип этого замечания;

 

 

  • мы можем поменять важность этого замечания;

 

 

  • мы можем временно скрыть по каким-либо причинам замечание;

 

 

  • мы можем явным образом назначить ответственного замечанию;
  • и можем какие-то свои комментарии делать.

 

 

Все это можно сделать в ручном режиме или через массовое изменение – выделяем все или только некоторые, и массово меняем то, что нам нужно.

 

 

Допустим, удобно, когда у вас стартует новый проект, у вас уже есть какая-то наработанная база с кучей ошибок – непонятно, что с этим делать. Когда у вас первый раз прогонится sonar-scanner, у вас будет несколько тысяч ошибок. Естественно, никто сразу не сможет их исправить, удобно их массово учесть, как неактуальные – убрать их из текущих ошибок, а потом потихоньку рефакторить.

 

 

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

Но правильнее использовать такой параметр, как «Версия проекта». И первое состояние проекта считать нулевой версией, а все проверки завязать на новый код, который отличается от последней версии.

 

Типы ошибок

 

 

Обратите внимание, что здесь есть несколько типов ошибок:

  • просто явные ошибки;
  • уязвимости (можно какое-то правило определить как уязвимость);
  • дефекты кода;
  • есть покрытие тестами – но пока для 1С нет какого штатного плагина или утилиты, как это покрытие высчитывать (я думаю, через какое-то время это тоже появится, мы тоже хотели, чтобы код был полностью покрыт).
  • и процент дублирования кода – мы придерживаемся того, что у нас не должен один и тот же код кочевать из модуля в модуль, поэтому мы этот показатель тоже отслеживаем, он тоже важный.

 

Настройка оповещений

Теперь – еще один момент. Мы хотели бы еще, когда у нас прошла сборка, чтобы нам куда-то прилетало оповещение о том, что что-то произошло – появились какие-то новые ошибки. Это настраивается в несколько этапов.

 

 

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

 

 

Важный момент – в качестве Server base URL здесь нужно указать тот IP, на котором у вас находится SonarQube. Это нужно, чтобы гиперссылки в письме ссылались на правильный сервер (по умолчанию он всегда будет отправлять на localhost).

Например, вам придет сообщение, что прошел новый анализ, в новой версии появилось 55 ошибок – хотите их посмотреть? И чтобы к этим ошибкам перейти прямо из письма, вам нужно здесь указать, где у вас находится SonarQube.

 

 

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

 

 

И дальше уже каждый пользователь сам себе настраивает те уведомления, которые он хочет получать. Для этого он заходит в Пользователь – Мой аккаунт – закладка Оповещения.

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

 

 

Также мы можем настроить оповещения в рамках каждого проекта.

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

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

 

Автоматический запуск анализа

Запускать анализ кода вручную через батник – это хорошо, но хотелось бы, чтобы это можно было делать автоматически. О том, как настроить автоматический запуск анализа кода, вам расскажет Валерий – он будет собирать сборочную линию. В сборочной линии на одном из шагов применяется sonar-scanner, он сканирует текущий проект, посылает результаты в SonarQube и получает данные о том, прошли мы порог качества или не прошли.

 

Анализ качества кода в EDT

 

 

Поскольку разработка конфигурации Conference у нас ведется в EDT, мы хотели непосредственно в процессе разработки видеть замечания по текущему модулю, чтобы не ждать, пока мы что-то закоммитим, scanner все просканирует и только тогда мы что-то увидим.

Мы искали какое-то решение и нашли специальный плагин для EDT https://github.com/DoublesunRUS/ru.capralow.dt.bslls.validator, который использует BSL Language Server – те диагностики, которые используются в 1C (BSL) Community Plugin. Этот плагин сделал Александр Капралов, исходники плагина опубликованы на GitHub.

Этот плагин наряду со стандартной проверкой для EDT показывает вам пул ошибок, которые потом всплывут в SonarQube.

 

 

Плагины в EDT ставятся через пункт меню Справка – Установить новое ПО.

 

 

Здесь мы должны выбрать сайт Александра Капралова http://capralow.ru/edt/bslls.validator/latest/. Выбираем этот адрес, и устанавливаем плагин. И теперь, если мы зайдем в EDT, мы можем в нем увидеть эти диагностики в режиме разработки модуля.

 

 

Давайте посмотрим в списке ошибок SonarQube какой-нибудь дефект. Например, дефект в общем модуле МенеджерОборудованияВызовСервера.

 

 

Заходим в это место кода в EDT и видим, что он пишет ровно то же самое, что потом напишет SonarQube. Это очень удобно – сразу такие ошибки исправлять в процессе разработки, не доводить до греха.

В следующих частях продолжим рассказывать:

 

*************

Данная статья написана по итогам доклада (видео), прочитанного на конференции Infostart Event 2019 Inception.

Больше статей можно прочитать здесь.


 

*************

 

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. awk 738 08.12.20 13:59 Сейчас в теме
А покрытие кода-то где? Покрытие кода-то забыли....
4. olegtymko 849 09.12.20 18:40 Сейчас в теме
(1) способ через Coverage41C публично появился позже, чем было выступление на IE.
5. awk 738 10.12.20 07:48 Сейчас в теме
(4) Я знаю, но без ссылки на Coverage41C, публикация не полна.
8. arcius_7012 167 14.12.20 12:40 Сейчас в теме
(5) Это запись мастер-класса с инфостарт-инвента от 2019 года, тогда Coverage41C еще даже не существовало в открытом доступе)
2. arcius_7012 167 08.12.20 14:12 Сейчас в теме
(1) На покрытие кода времени уже в рамках мастер-класса не хватило. Было хорошее выступление про покрытие от Станислава Косолапова на митапе https://infostart.ru/events/1241075/
3. awk 738 08.12.20 14:14 Сейчас в теме
6. axelerleo 325 11.12.20 16:54 Сейчас в теме
А как отфильтровать ошибки которые идут "из коробки" в конфигурации вендора, от того, что было доработано?
Мне в голову пришло только создание отдельной первоначальной выгрузки конфигурации поставщика под отдельным пользователем хранилища, а затем уже поверх - выгрузки из доработанной конфигурации. Или есть другие варианты?
7. arcius_7012 167 14.12.20 12:38 Сейчас в теме
(6) В настройке плагина есть параметр (BSL Language Server - Skip computing diagnostics on modules with parent configurations) - исключить из анализа конфигурацию "на замке" (with support locked) либо вообще файлы на поддержке (with support). Мы у себя, например, исключаем из анализа все файлы с замками, потому что это ошибки вендора. Но если "замок" сняли, тогда уже анализируем ошибки вендора и по возможности исправляем.

При обновлении на новый релиз также можно помещать его в хранилище под специальным пользователем и все замечания по такому пользователю не анализировать, так как это ошибки вендора.
Прикрепленные файлы:
axelerleo; +1 Ответить
9. rukalico 23.02.21 20:24 Сейчас в теме
Спасибо за статью, все получилось за исключением анализа файлов Расширения.

При анализе выходит ошибка вида:
Caused by: java.lang.IllegalArgumentException: 21 is not a valid line offset for pointer. File CommonModules/ОбработкаТабличнойЧастиСервер/Ext/Module.bsl has 10 character(s) at line 577.

Ругается на строку с директивой #Вставка (модуль доработан через ИзменениеИКонтроль).
Пробовал перевыгружать, пробовал пересохранять файл без BOM.
Встрял на этом месте и поиск схожей проблемы в гугле не дает ответов.
10. arcius_7012 167 24.02.21 11:36 Сейчас в теме
(9) Проверьте, что у вас стоит последняя версия плагина. Если и в последней версии ошибка, то тогда вот сюда https://t.me/bsl_language_server можно написать, там уже упоминалась такая ошибка и вроде как ее исправляли.
11. progvicof 31 08.04.21 22:20 Сейчас в теме
Такой вопрос.
У меня локально на компе sonarcube установлен как служба. Служба работает.
В варианте встроенной базы данных работает путем обращения через через localhost:9000.

Меняю настройки так:
sonar.jdbc.url=jdbc:sqlserver://localhost;databaseName=sonar
sonar.jdbc.username=sonarqube
sonar.jdbc.password=sonarqube

Скуль также установлен у меня на компе. Создаю на скуле пользователя sonarqube с паролем sonarqube. Выставляю ему полные права. Создаю базу sonar. Кодировку базы ставлю Cyrillic_General_CS_AS.
И тут всё. Перестает работать. Вижу, что таблицы не созданы. Т.е. похоже, что не может подключиться. Под sa пробовал, службу перезапускаю каждый раз при изменениях. Ситуация не меняется. Куда копнуть?
14. Vetal89 10.03.22 12:13 Сейчас в теме
12. hrom 66 22.02.22 07:40 Сейчас в теме
Не знаете почему в текущем дистрибутиве пропали файлы "InstallNTService.bat" и "UninstallNTService.bat" ?
13. arcius_7012 167 22.02.22 10:38 Сейчас в теме
(12)
InstallNTService.bat


В обновлении 8.5 они эти файлы переместили на страницу документации (задача SONAR-13688), теперь нужно брать отсюда operate-server скрипт:
sc create SonarQube binPath= "\"%SONAR_HOME%\bin\windows-x86-64\wrapper.exe\" -s \"%SONAR_HOME%\conf\wrapper.conf\""
15. Mikhail_Est 25.05.22 12:55 Сейчас в теме
Просьба пояснить почему могут не передаваться авторы коммитов из git в sonar.

Мои действия:
1) выгружаю изменения из хранилища 1с в локальный git. (gitsync --tempdir C:\project1c\tempfiles_gitsync sync --storage-user gitbot --storage-pwd 123 --limit 1 --minversion 159 tcp://192.... C:\project1c\git\ka
2) Запускаю sonar scanner c настройками:
......
sonar.projectBaseDir=git/ka
sonar.scm.enabled=true
sonar.scm.provider=git
....

В целом информация успешно попадает в sonarqube. Но в sonareqube в разделе "Замечания" только один "автор" - моя учетка.
Почему-то все замечания прикрепляются к моей учетке, а не к авторам "коммитов" в хранилище 1С.
16. arcius_7012 167 25.05.22 13:08 Сейчас в теме
(15) Добрый день.

Сонар использует git blame для определения автора конкретного замечания. Если у вас все повесилось на одного автора - значит и в гите у вас все коммиты идут под одним пользователем.

Скорее всего у вас не настроен файл авторов для гитсинка.
17. Mikhail_Est 25.05.22 13:15 Сейчас в теме
(16) Добрый день!
Прикрепил два скрина.
На одном видно авторов коммитов, на втором "файл авторов для гитсинка".
В sonar создал пользователей с такими же e-mail как в "файле авторов для гитсинка".
Прикрепленные файлы:
18. cmd_vasec 34 27.05.22 17:22 Сейчас в теме
(17) Тоже была такая проблема. Оказалось, что папка из которой запускал sonar scanner не содержала папку .git, т.е. папка .git и папка .scannerwork должны быть в одной папке.
Mikhail_Est; +1 Ответить
19. rom-x 152 14.07.22 08:01 Сейчас в теме
Для тех кто будет делать серверную базу sonar на ms sql server, при запуске StartSonar.bat столкнулся с ошибкой The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12] и Fail to connect to database.
MS SQL server 2014, Windows Server 2008, необходимо установить последний накопительный пакет обновления для SQL Server, после этого все заработало.
https://support.microsoft.com/en-us/topic/kb3135244-tls-1-2-support-for-microsoft-sql-server-e4472ef8-90a9-13c1-e4d8-44aad198cdbe
20. Mikhail_Est 02.08.22 07:10 Сейчас в теме
В sonarqube обновил через "Магазин" plugin "1C (BSL) Community Plugin" до версии 1.11 (была версия 1.10).
В логах сканирования теперь появиляются ошибки вида:
....
INFO: Bean 'utilsConfiguration' of type [com.github._1c_syntax.bsl.languageserver.infrastructure.UtilsConfiguration$$EnhancerBySpringCGLIB$$a94ce1f8] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
INFO: Bean 'stringInterner' of type [com.github._1c_syntax.utils.StringInterner] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
..........

Версия sonarqube - 8.9.8.54436
Версия Java - OpenJDK Runtime Environment Temurin-11.0.15+10 (build 11.0.15+10)

Просьба подсказать критичные ли это ошибки,и как их можно исправить.
21. arcius_7012 167 02.08.22 10:29 Сейчас в теме
(20) Добрый день! С таким вопросом лучше писать в https://t.me/bsl_language_server
Mikhail_Est; +1 Ответить
Оставьте свое сообщение

См. также

Ревьювер. Инструмент для проведения code review

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Если вы работаете в команде разработчиков, то, вероятно, знакомы с процессом код-ревью. Это необходимый шаг в разработке программного обеспечения, который помогает выявить ошибки и улучшить качество кода. Однако, процесс ревью может занимать много времени и быть довольно утомительным, особенно на ранних этапах разработки. Мы столкнулись с этими проблемами в команде и решили упростить процесс код-ревью с помощью внутреннего инструмента. Он значительно облегчил процесс ревью на определенном этапе работы и сократил время на рутинную работу. В результате, мы смогли значительно упростить процесс код-ревью в команде, что сэкономило время и улучшило качество кода.

16.05.2023    2361    leobrn    11    

44

Применение cтандартов и методик разработки конфигураций на практике

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Практические кейсы для того, чтобы не устать применять стандарты и методики разработки конфигураций.

15.05.2023    3204    improg    35    

52

SonarQube: про объемы, ветки, покрытие кода и интеграцию с Gitlab

DevOps и автоматизация разработки Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Опыт применения SonarQube в нескольких командах. Плюс некоторые тонкости: уменьшение объемов базы SQ, интеграция, покрытие кода.

26.02.2023    2466    kraynev-navi    10    

47

Зачем и как читать чужой код? Какой результат ожидаем получить? Основные подходы

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Данная статья является кратким содержанием статей цикла "Как читать чужой код". Цель такой публикации: создать чек-лист различных подходов для чтения непонятного кода. Более подробно каждый из методов можно прочитать в исходной статьей. Последовательность изложения материала полностью совпадает с исходными статьями, и разделена на 4 части.

06.02.2023    2922    biimmap    9    

29

Как проверять код на языке 1С с помощью BSL Language Server

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Некоторые разработчики на платформе 1С не проверяют свой код ни на соответствие стандартам 1С, ни на самые распространённые ошибки кодирования. И если раньше они могли оправдываться отсутствием инструментов для этого, то с появлением BSL Language Server оправданий больше нет.

13.01.2023    3759    aleksei_adamov    10    

45

Без комментариев!

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Подниму холиварную тему. Несколько раз коллеги меня спрашивали - почему в своем коде я не пишу комментариев. Отвечаю на этот вопрос статьей. Присоединяйтесь к обсуждениям, что вы думаете по этому поводу. Комментарии в коде - нужны или нет?

05.01.2023    5361    ardn    161    

39

Правила работы с транзакциями 1С

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Список правил при работе с транзакциями из BSL Language Server и SonarQube 1C (BSL) Plugin. Переработка и осмысление материала.

01.12.2022    4758    kuzyara    42    

78

Как избавиться от большого количества комментариев в коде с использованием EDT + Git

Рефакторинг и качество кода DevOps и автоматизация разработки Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Публикация освещает вопрос улучшения качества и читабельности кода путем отказа от излишних комментариев. Рассматривается пример из опыта работы команды разработки на EDT + Git. Команда работает в EDT меньше года. Конфигурация сильно доработана и не обновляется типовыми релизами.

15.11.2022    1134    shastin87    5    

9

Рефакторинг и реинжиниринг в повседневной практике

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В этой статье будут затронуты многие темы. Использование WS ссылок, HTTP запросов, асинхронных запросов к внешним сервисам, работа с XML, методики интеграции. Но лишь попутно. Для наглядности. На технических вопросах реализации останавливаться не буду. Все примеры работы с этими объектами есть в коде. Файлы обработки и расширения доступны. Главная цель - рассмотреть рефакторинг и реинжиниринг как инструменты для достижения вполне конкретных практических целей.

20.06.2022    1286    user1374747    0    

7

Модульность в 1С – как следовать принципам DRY в реалиях 1С: Предприятие 8.3

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Принцип DRY – Don't repeat yourself (не повторяйся) – один из классических принципов программирования. Краеугольным камнем реализации этого принципа является модульная архитектура, которую можно реализовать в 1С с помощью расширений. Но экосистемы модулей общего назначения, сравнимой с существующими в других языках, в 1С пока что нет. О том, как спроектировать архитектуру таких модулей и управлять ими с помощью менеджера пакетов, на митапе «Путь к идеальному коду» рассказал технический директор компании «А1» Арсений Геращенко.

03.06.2022    3115    Enigma    3    

22

Красота разработки в 1С, или художественная верстка кода

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рекомендации по верстке и организации кода в 1С, которые я вывел для себя. P.S. Нет, это не про комментарии и номера версий.

02.06.2022    7512    TimofeySin    67    

65

Как выжить, если у тебя в базе 1С 50+ расширений

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Расширения – это простой способ делать доработки на лету. Но администрировать большое количество расширений и не допустить бардак – очень сложно. О том, как выжить в такой ситуации, реализовать управление доработками и установкой актуальных версий расширений, на митапе «Путь к идеальному коду» рассказал Юрий Былинкин – архитектор 1С в компании Аскона.

16.05.2022    6086    ardn    44    

56

Про простой и понятный код

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Внимание! Данная публикация с большой долей вероятности не добавит ничего нового к Вашим знаниям и Вашему опыту, поэтому если Вы читаете Инфостарт исключительно для целей "прокачки" своих навыков, не тратьте на её чтение своё время и перейдите сразу к следующей!

03.12.2021    5506    q_i    161    

71

Как читать чужой код? Часть 1. Общие вопросы. Доработка чужого кода. Code review

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Во всех вакансиях есть требование - умение читать чужой код. Но ни на одних курсах специально этому не учат. Чтобы устранить это противоречие, пишу данную статью. Рассмотрю случаи, в которых нам необходимо разбирать чужой код, поймём, чей код мы пытаемся разобрать, зачем и, главное, как. В статье описан личный опыт длиною в 18 лет начиная с версии платформы 7.7. Статья будет большой, набираемся терпения). Статья содержит в себе описание сценариев разбора кода, т.е. набор шагов. В статье не получится показать это на практике. Для этого планирую сделать онлайн или оффлайн курс, где на примерах будет показан разбор незнакомого кода. Статья разбита на 4 публикации для удобства изучения.

20.09.2021    13226    biimmap    55    

137

Распространенные ошибки разработчиков, приводящие к проблемам производительности

HighLoad оптимизация Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Рассмотрим примеры ошибок, анализ, исправление и мероприятия по недопущению подобного в будущем. Всего будет 18 примеров.

02.08.2021    16459    ivanov660    77    

142

Антипаттерны программирования в 1С

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Поговорим про плохой стиль программирования и рассмотрим 17 часто встречающихся антипаттернов.

19.07.2021    13057    ivanov660    121    

69

Чек-листы для проведения Code Review

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Бесплатно (free)

В данной статье будут приведены два чек-листа (основной и для проверки архитектурных решений). По данным чек-листам программист любой квалификации может проверить свой код и код других разработчиков.

17.05.2021    11633    Shining_ninja    99    

129

Эффективные приемы разработки

Математика и алгоритмы Рефакторинг и качество кода СКД Платформа 1С v8.3 Бесплатно (free)

На Infostart Meetup Ekaterinburg.Online выступил Сергей Наумов – руководитель центра аналитики и консалтинга WiseAdvice. Сергей поделился с коллегами приемами разработки, которые помогут избежать потенциальных проблем при реализации сложных проектов.

07.04.2021    5307    SergeyN    13    

39

Ускорение расчета себестоимости УПП 1.3 в несколько раз

Рефакторинг и качество кода Закрытие периода Платформа 1С v8.3 1С:Управление производственным предприятием Бухгалтерский учет Управленческий учет Бесплатно (free)

Как определить причину медленного расчёта себестоимости в УПП 1.3, один из вариантов поиска проблем производительности с помощью инструментов 1С и ускорения расчёта средствами встроенного языка

02.02.2021    5714    RPGrigorev    23    

40

Операторы перехода в программном коде: использовать или нет?

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим ситуации использования операторов перехода Перейти (GoTo), Возврат (Return), Прервать (Break), Продолжить (Continue). Как вы считаете - это дурной тон, нормальная практика или зависит от ситуации?

16.11.2020    9925    ivanov660    23    

11

Чистый кот (Clean cat)

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

От автора легендарного бестселлера "Совершенный кот".

04.11.2020    2465    vasilev2015    25    

5

Доработайте это "немедленно", или как уменьшить доработки конфигурации

Рефакторинг и качество кода Платформа 1С v8.3 Россия Бесплатно (free)

Доработки конфигурации - необходимое зло. Автор предлагает несколько простых подходов и приемов, позволяющих хотя бы немного, но оптимизировать объем доработок конфигурации, упростить их, и облегчить дальнейшие доработки и обновления конфигурации. Все примеры и подходы взяты автором из реальной жизни и основаны на собственных наблюдениях.

25.09.2020    5031    Богатырев Артур    24    

14

Как найти неиспользуемый код

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Описание нескольких способов поиска и определения неиспользуемого кода

03.08.2020    6067    Infostart    29    

71

Как поставить качество кода на поток и при этом не разориться? Какие шаги стоит сделать уже завтра, чтобы повысить планку качества?

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Наличие в 1С-решениях некачественного кода мешает их поддержке и эффективному развитию. Как добиться соблюдения стандартов разработки при написании кода и внедрить бюджетный Code Review с помощью инструментария на основе АПК (Автоматизированной проверки конфигураций) на конференции Infostart Event 2019 Inception рассказал технический руководитель компании Бизнес Лоджик Иван Козлов.

22.06.2020    5191    kozlov.alians    1    

23

Молчание "best practices": тестовые и эталонные данные, структура и связность, падения и новая функциональность, и другие неудобные вопросы к сценарному тестированию

Рефакторинг и качество кода Тестирование QA Платформа 1С v8.3 Бесплатно (free)

Непонимание некоторых базовых вопросов мешает программистам начать применять инструменты тестирования в процессе разработки для 1С. Как разобраться в терминологии и интегрировать процесс тестирования в разработку 1С-решений на конференции Infostart Event 2019 Inception рассказал руководитель отдела разработки компании C.T.Consultants Решитко Дмитрий.

29.05.2020    6915    grumagargler    14    

49

Рефакторинг в редакторе модулей

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Для тех, кто не пользуется Ctrl+Alt+R. “Контролируемый процесс улучшения кода без написания новой функциональности”, “Равносильное преобразование алгоритмов” и т.п в данной статье НЕ рассматриваются. Тема статьи: замечательные команды из подменю Рефакторинг контекстного меню редактора модулей в конфигураторе. В статье описано, как команды из подменю Рефакторинг помогают при написании кода

10.03.2020    6101    pparshin    6    

52

Качество кода: Поведенческие паттерны проектирования

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Поговорим про применение паттернов проектирования в разработке на 1С.

03.03.2020    12702    ivanov660    0    

83

Боремся с запросами в циклах. Мой опыт рефакторинга запросов

Рефакторинг и качество кода Запросы Конфигурации 1cv8 Бесплатно (free)

В текущей публикации я предлагаю вам несколько простых примеров с решениями, в которых будет представлено решение "единым запросом", без использования запросов в цикле.

02.03.2020    14410    aximo    55    

72

Код разработчика в зависимости от опыта работы

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Пятничный пост! Как меняется код разработчика в зависимости от опыта работы.

14.02.2020    13668    Infostart    229    

106

Стабильность превыше всего

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Странная заметка о поддержании стабильности в условиях интенсивного изменения конфигурации.

07.11.2019    11004    Infostart    41    

75

Оценка скорости кода. Сложность алгоритма

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Эта тема одной из первых всплывает на собеседовании программистов языков вроде Java и C, но она почти неизвестна в "мире 1С". Поговорим о вычислительной сложности алгоритмов.

07.10.2019    7706    m-rv    12    

16

Управление качеством кода

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

О SonarQube, АПК, EDT. Какие преимущества дает их использование. Для каких команд подходит.

22.07.2019    23099    Stepa86    40    

179

По следам код-ревью

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Приведу примеры с картинками и небольшим пояснением по вопросам, связанным с код-ревью (обзором кода).

09.07.2019    16307    ivanov660    112    

117

Совершенный коТ (Cat complete)

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Стандарты программирования в картинках. Самоирония прилагается.

03.06.2019    11285    vasilev2015    150    

69

Даем названия переменным: как префиксы экономят наше время

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Понятные названия переменных экономят время и силы разработчика : в начале, когда мы даём названия переменным, в процессе развития разработки, когда мы "на лету" понимаем назначение той или иной переменной, в конце, когда мы передаём разработку на поддержку других программистов, сами переходя к новым разработкам

06.05.2019    11624    Designer1C    86    

13

Логические выражения и красивый код

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

В данной статье я хочу поделиться своей практикой применения логических выражений при написании кода. Учитывая тот факт, что платформа 1С 8.х использует сокращенный цикл вычисления логических выражений, можно заменить громоздкие конструкции “Если Тогда ИначеЕсли КонецЕсли” на красивую и лаконичную запись, похожую на список операций.

20.04.2019    37558    Vortigaunt    88    

58

Антидот

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Необходимое лекарство для тех, кто случайно передозировал чтение статей о хорошем-плохом программировании на 1С.

22.01.2019    8018    mkalimulin    183    

23

Быстрый способ разобраться в чужом коде

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Добрый день! Хочу рассказать о способе, который позволит быстро разобраться в чужом коде. Я, конечно, думаю, что это жесткий баян, но не видел, чтобы кто-то пользовался этим способом. По крайней мере, новичкам точно будет интересно.

29.12.2018    13108    wizard.ilmir02    22    

78