Управляй качеством кода 1С с помощью SonarQube

Публикация № 1089670

Разработка - Практика программирования

Анализ кода Sonarqube Технический долг АПК автоматизированная проверка конфигураций

Управляй техническом долгом проектов 1С с помощью SonarQube. В статье рассматривается пример применения SonarQube при разработке.

Оглавление

 

Введение

 

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

Нельзя просто так взять и не оставить после себя технический долг

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

Причины возникновения могут быть разными:

  • Недостаточная компетентность кадров;

  • Давление со стороны бизнеса;

  • Плохо спроектированная архитектура и отсутствие документации;

  • Отсутствие процессов review и refactoring;

  • Отсутствует тестирование;

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

 

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

 

Технический долг

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

  • Внешний аудит - привлечение сторонней компании. Затратно, на результат может влиять человеческий фактор.

  • Внутренний аудит - визуальная проверка кода (code review).  Опять же на результат влияет человеческий фактор и иногда необъективность.

  • Автоматизированная проверка кода - применяются статические анализаторы. В мире 1С используется конфигурация 1С: АПК.

Существует еще один подход, который я считаю наиболее эффективным - непрерывная проверка кода (continuous code inspection). Более подробно можно изучить подход в статье Управление техническим долгом - Концепция Continuous Inspection. Мой выбор пал на SonarQube.

SonarQube - программное решение для непрерывного анализа и измерения качества кода. На текущий момент платформой поддерживается более 27 языков программирования. К сожалению, язык 1С не включен в официальный перечень поддерживаемых языков SonarQube. 

На рынке существует как минимум два плагина для поддержки языка 1С в SonarQube.

В статье используется плагин SonarQube 1C (BSL) Community Plugin, т.к. он бесплатен. Плагин основан на проекте BSL Language Server - реализации протокола language server protocol для языка 1С: Предприятие 8 и OneScript. 

 

Быстрый старт

 

Быстрый старт

 

В рамках базового примера мы развернем SonarQube, подготовим рабочий каталог проекта 1С, загрузим результаты проверки кода на сервис. В примере будет использоваться операционная система Windows. Повторить то же самое для unix / macos систем возможно, но с небольшими изменениями. Все скрипты будем выполнять в консоли CMD или Powershell (не имеет значения).

Мною заранее был заготовлен шаблон рабочего окружения. Скачиваем его по ссылке.

 
 Кто используют Git

Клонируем на компьютер с помощью консоли:

git clone https://github.com/otymko/article-sonar-for-infostart.git

Визуально проект выглядит:

Подготовленный шаблон

В его состав входят:

  • project1c - рабочий каталог с проектом для анализа.

    • src - каталог для исходных кодов 1С

    • check.bat - скрипт запуска проверки кода

    • sonar-project.properties - файл настроек проекта для SonarQube

 

Первый этап

 

Развернем сервис SonarQube версии 7.9. Будем рассматривать простую установку, с использованием внутренней базы данных. По умолчанию SonarQube использует базу данных H2. В дальнейшем, если вы хотите использовать сервис постоянно, обновлять его  - нужно использовать внешнюю базу данных, например PostgreSQL.

 

Для SonarQube требуется Java 11+. Скачиваем OpenJDK 11 https://jdk.java.net/archive/ и распаковываем в каталог C:\openjdk11.

 

Далее скачиваем архив с SonarQube по ссылке https://www.sonarqube.org/downloads/. Распаковываем в каталог C:\sonarqube.

 

Теперь нужно выставить базовые настройки. Для этого отредактируем файл конфигурации C:\sonarqube\conf\sonar.properties:

sonar.web.javaOpts=-server -Xmx2g -Xms1g -XX:+HeapDumpOnOutOfMemoryError
sonar.ce.javaOpts=-Xmx6g -Xms4g -XX:+HeapDumpOnOutOfMemoryError 
sonar.search.javaOpts=-Xms5g -Xmx6g -XX:+HeapDumpOnOutOfMemoryError

 

Указываем путь к java 11 (если ранее не было установлено и прописано в path). В файле C:\sonarqube\conf\wrapper.conf отредактируем строку:

wrapper.java.command=java

Меняем на:

wrapper.java.command=C:\openjdk\jdk-11.0.2\bin\java

Сервис можно запустить вручную из консоли или создать службу windows. Для ручного запуска в консоли запускаем скрипт:

C:\sonarqube\bin\windows-x86-64\StartSonar.bat

Дожидаемся завершение развертки сервиса. В консоли должно быть выведено:

 

Более подробно развертку SonarQube на Windows можно изучить здесь.

Скачиваем и копируем плагин для SonarQube в каталог C:\sonarqube\extensions\downloads\:

 

 
 Кто хочет использовать Docker

 

SonarQube будет доступен по адресу http://localhost:9000. По умолчанию в SonarQube создается пользователь admin / admin  - логин / пароль соответственно.

Теперь на сервисе SonarQube нужно:

  • Если используется внешняя база данных для SonarQube, то нужно сгенерировать token доступа пользователя для запуска анализа проекта.

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

 

Генерация token (необязательно)

 

Переходим на настройки пользователя admin http://localhost:9000/account/security/, указываем название token и нажимаем Generate. Копируем полученный token, он вам понадобится в дальнейшем.

 

 

Добавление новых пользователей

 

Создаем новых пользователей. Для этого переходим на страницу http://localhost:9000/admin/users и нажимаем Create user. Обязательно заполняем все поля:

 

 

Если используется проект Git то создаем пользователей для каждого пользователя Git.

 

Интерфейс на Русском языке

 

Сменим язык интерфейса сервиса на Русский. Для этого переходим на страницу http://localhost:9000/admin/marketplace, находим плагин локализации Russian Pack и устанавливаем, используя кнопку Install.

 

Внимание: для смены языка интерфейса на русский нужно будет перезапустить сервис SonarQube. Для этого нажимаем на той же странице Restart Server:

 

Подготовка каталога проекта SonarQube

 

В каталоге project1c/src должны находиться исходные коды 1С конфигурации. Рассмотрим ручной вариант экспорта в этот каталог.

 

Ручная выгрузка через конфигуратор

 

Если Git проект не используется, делаем ручную выгрузку проекта через конфигуратор. Для этого в конфигураторе 1С нажимаем Конфигурация -> Выгрузить конфигурацию в файлы...

 

 

Указываем путь к каталогу project/src и нажимаем выполнить.

 

 

После завершения каталог исходных кодов должен выглядеть примерно так:

 

 

 
 Для тех кто использует Git

 Клонируем проект git в каталог project1c/src. Выполняем команду:

git clone url_your_project_1c /path/to/project1c/src

Каталог должен выглядеть примерно вот так:

 

 

Второй этап

 

Для второго этапа потребуется консольное приложение для запуска анализа проекта sonar scanner. Скачиваем сканер со страницы https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/. В нашем случае нужна версия для Windows x64:

 

 

Скачиваем по ссылке https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.0.0.1744-windows.zip. После распаковки архива копируем полный путь к скрипту sonar-scanner.bat. Скрипт расположен в каталог bin.

 

 

Теперь нужно изменить скрипт запуска анализа проекта. Редактируем файл project1c/check.bat.

 

 

Заменяем в нем путь к sonar-scanner и значение token (необязательно).

Без токена:

../sonar-scanner-cli-4.0.0.1744-windows/sonar-scanner-4.0.0.1744-windows/bin/sonar-scanner.bat

 С токеном:

../sonar-scanner-cli-4.0.0.1744-windows/sonar-scanner-4.0.0.1744-windows/bin/sonar-scanner.bat -D"sonar.login=1952877e4d61d69c766eb8d9ca1d39ac48a4254f"

Последнее, что потребуется  - это проверка настроек проекта SonarQube. Откроем файл настроек project1c/sonar-project.properties.

 

 

В этом конфигурационном файле меняем, если нужно:

  • sonar.projectKey - ключ проекта

  • sonar.projectName - имя проекта

  • sonar.projectVersion - версию проекта

 
 Для тех, кто использует проект Git

Нужно раскоментировать строки:

  • sonar.projectBaseDir=src

  • sonar.scm.enabled=true

  • sonar.scm.provider=git

Изменить строку:

sonar.sources=src на sonar.sources=./

 

P.S. в конфигурационном файле sonar нельзя указывать значения параметров в кириллице.

Неправильно:

sonar.projectName=МойЛучшийПроект

Правильно:

sonar.projectName=\u041C\u043E\u0439\u041B\u0443\u0447\u0448\u0438\u0439\u041F\u0440\u043E\u0435\u043A\u0442

Для кодировки кириллицы используем сервис https://www.online-toolz.com/tools/text-unicode-entities-convertor.php. После кодировки нужно будет заменить символы % на \.

 

Последний этап

 

Запускаем анализ проекта через скрипт project1c/check.bat. Дожидаемся сообщения в консоли:

 

 

Проблемные ситуации

 

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

ERROR: Error during SonarQube Scanner execution
ERROR: null
ERROR: Caused by: GC overhead limit exceeded

 

 

Проблему можно решить с помощью Java Memory Settings. Нужно указать в переменной среды или в скрипте check.bat значение SONAR_SCANNER_OPTS. Например, для выделения 4 ГБ оперативной памяти указываем:

set SONAR_SCANNER_OPTS=-Xmx4g

 

Анализ проекта

 

Переходим на главную страницу сервиса sonarqube http://localhost:9000/projects. При первом анализе нужно дождаться его завершения на сервисе (выполняется фоновое задание загрузки результатов анализа).

 

 

Фоновое задание:

 

 

После завершения загрузки страница списка проектов будет выглядеть:

 

 

Переходим в проект MyConf. На странице метрик проекта видим:

  • Количество ошибок

  • Количество уязвимостей

  • Время на исправление технического долга

  • Количество дефектов кода (code smells)

  • Процент и количество дублирующегося кода.

 

 

На закладке Замечания увидим ошибки и дефекты кода. Используя фильтры на панели слева, можно отфильтровать замечания, например, по правилам проверок:

 

 

Отфильтровываем замечания. Получаем:

 

 

Переходим в первое замечание:

 

 

Для тех, кто использует проект Git, будут доступны фильтры по авторам (если заведены пользователи на сервисе, то они будут отображаться сразу в замечании).

 

 

Возвращаемся на страницу метрик проекта. Переходим в дублирование кода и выбираем любое дублирование:

 

 

Список дублирования в коде:

 

 

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

 

 

Так как у нас сейчас нет истории изменения показателей проекта во времени, я покажу как это может выглядеть на примере другого проекта:

 

 

В области New code, выводится информация  о новых результатах проверок. На примере Дефектов кода можно увидеть динамику изменения показателей:

 

 

График изменений:

 

 

P.S. Хотите больше диагностик кода? Вы можете предложить, реализовать их в проекте https://github.com/1c-syntax/bsl-language-server.

 

Расширенный пример

 

Компания 1C-ИжТиСи разработала конфигурацию 1С: Автоматизированная проверка конфигураций (https://v8.1c.ru/acc/). 

 

Решение позволяет проверять конфигурации в автоматическом режиме на соответствие стандартам разработки 1С. Конфигурация имеет большое количество проверок кода 1С, но, к сожалению, отсутствует функционал анализа изменения качества кода. Используя проект acc-export из 1С: АПК, можно выгрузить результат анализа кода в SonarQube.

 

В рамках этой главы нужно установить:

Конфигурацию 1С: АПК нужно развернуть на компьютере, создать новый проект и выполнить первоначальную проверку. Более подробно можно почитать в статье Автоматизированная проверка конфигураций… и пара слов о стандартах разработки.

 

После установки OneScript потребуется установить библиотеку vanessa-runner (https://github.com/oscript-library/vanessa-runner). Выполняем в консоли:

opm install vanessa-runner

 

Скачиваем обработку экспорта  https://github.com/otymko/acc-export/releases/download/1.1.0/acc-export.epf в каталог project1c.

 

Подготовка каталога проекта

 

В каталоге project1c создадим acc.properties - файл настроек экспорта из АПК.

 

 

  • acc.projectKey - наименование конфигурации в АПК. 

  • acc.catalog - каталог проекта (не к src) 

  • acc.sources - путь / каталог исходных кодов, например, src. 

  • acc.check - запуск проверки конфигурации. Настройки будут взяты с параметров запуска по расписанию. 

  • acc.format - формат экспорта из АПК (reportjson или genericissue). По умолчанию reportjson. Можно не указывать. 

  • acc.titleError - представление вывода ошибки при экспорте. Может принимать значения: code (только код ошибки), name (только наименование ошибки), codeName (код и наименование ошибки). По умолчанию codeName.

 

Отредактируем файл sonar-project.properties и добавим настройку:

sonar.bsl.languageserver.reportPaths=acc-json.json

Создадим скрипт acc.bat запуска экспорта проверок АПК.

 

 

@chcp 65001 
@set RUNNER_IBNAME=/FC:\Sonar\acc
@set RUNNER_DBUSER=Администратор
@call runner run --command "acc.propertiesPaths=./acc.properties;" --execute "./acc-export.epf" --ordinaryapp=1

 

Выгрузка результат

 

Запускаем скрипт acc.bat, затем check.bat и дожидаемся завершения:

 

 

Когда SonarQube обработает результат проверки, нам будут доступны новые данные для аналитики.

 

 

На закладке замечания список правил проверки расширился:

 

 

В итоге, мы имеем загруженные результаты проверки 1С: АПК в SonarQube для дальнейшей аналитики.

 

Подведем итоги

 

В результате проверки кода и загрузки результатов в SonarQube, мы получаем метрики, наглядно показывающие текущее состояние качества проекта.

Что теперь с этим делать?

  • Исправлять критические ошибки, уязвимости.
  • Исправлять дефекты, дублирование кода, если реализуются попутные задачи.
  • Уменьшать количество дублирующего кода.
  • Установить пороги качества.

 

Дальнейшее развитие темы

 

  • Автоматический запуск проверки качества кода. Автоматизируем запуск проверки качества, используя, например, Jenkins или GitLabCI. 
  • Исключение из проверки объектов конфигурации, которые находятся на поддержке.  В этом может помочь проект edt-export-bugs. Также с его помощью можно автоматизировать получение проверок из EDT. Более подробно можно почитать здесь (https://github.com/Stepa86/edt-export-bugs).
  • Рассылка результатов проверки кода ответственным / виновникам замечаний.

 

Благодарности

 

Хочу выразить огромную благодарность за инструменты и помощь при создании статьи:

Мой жене за чтение технической статьи. А так же читателям статьи, кто дотянул до конца =)

 

Ссылки

 

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

Лучшие комментарии
34. litonchik 08.07.19 10:36 Сейчас в теме
Спасибо за статью!
Читая комментарии под статьями такого рода, иной раз, поражаюсь токсичности комьюнити.
GreenDragon; tsmult; YPermitin; Kinestetik; mivari; vlad.frost; t.v.s.; disa_da; Kosstikk; seperblunt2; ComConnector; ltfriend; romankoav; Stepa86; baton_pk; user774630; VitaminC; olegtymko; CyberCerber; nixel; tsukanov; user764477; Labotamy; +23 Ответить
14. vlad.frost 187 08.07.19 08:08 Сейчас в теме
(3) ну, например, чтобы:
- не настраивать ответственных по объектам метаданных в АПК: SonarQube сам определит ответственного за косячный код по git blame;
- разделить ошибки на legacy и привнесённые в новом коде, старый код не трогать, а сосредоточиться на исправлении новых косяков;
- видеть ошибки АПК в контексте окружающего кода, а не только модуль и номер строки;
- ускорить отображение отчётов;
- получать постоянные ссылки на ошибки, чтобы взять их на контроль и добиться исправления.
GreenDragon; Kinestetik; SerebanSK; nvv1970; mrXoxot; Kosstikk; JohnyDeath; olegtymko; nixel; Stepa86; +10 Ответить
5. Vladimir Litvinenko 2294 07.07.19 23:46 Сейчас в теме
(4) Вы можете делать коммиты, связанные с обновлением типовых конфигураций (обновлением БСП или переходом на новую версию типовой конфигурации) от имени специально выделенного пользователя. Для этого достаточно перед коммитом указать в качестве e-mail автора служебный или свой второй e-mail. Тогда изменения типовой конфигурации привяжутся не к тем пользователям, под которым ведется регулярная разработка.

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

Если вы пользуетесь АПК, то ситуация будет аналогична: если Вы дорабатываете типовой модуль и хотите его проверить после доработки, то в результаты его проверки попадет и типовой код и Ваш. АПК позволяет фильтровать объекты конфигурации, подлежащие проверке, а не части модулей. При использовании возможностей git как раз появляется возможность проверять только внесенные в модуль изменения в привязке к авторам.
tsmult; Kinestetik; Lucechiaro; SerebanSK; Stepa86; olegtymko; acanta; +7 1 Ответить
13. olegtymko 535 08.07.19 05:55 Сейчас в теме
(12) На скриншоте тестовый проект, где ~800 ошибок, был проверен только в рамках статьи.

Во вложении метрики самописного проекта не на БСП, над который сейчас ведутся работы по улучшению качества кода (этот же скриншот есть в статье).
Если смотреть тренд количества ошибок, дублирования кода - то их количество со временем уменьшается.
Прикрепленные файлы:
GreenDragon; Kinestetik; acanta; kuzyara; +4 Ответить
Остальные комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. capitan 1621 07.07.19 18:49 Сейчас в теме
Как скучно я живу )
2PRV; kolya_tlt; Kinestetik; artkor; Leon29; IntellXeon; for_sale; nvv1970; darkmessiahan; romankoav; zqzq; testnv0; DoctorRoza; RFP; omut; acanta; YPermitin; vvp117; yku; vandalsvq; Bassgood; +21 Ответить
2. vvp117 07.07.19 20:19 Сейчас в теме
(1) согласен) это насколько же должно быть нечем заняться, чтобы упарываться в такой глубокий анализ)
23. Labotamy 08.07.19 08:30 Сейчас в теме
(2) Упароваться надо чтобы такого, случайно не было.
Прикрепленные файлы:
Kinestetik; b00ker; amaksimov; IntellXeon; SerebanSK; for_sale; Kosstikk; A_Max; tsukanov; litonchik; JohnyDeath; azhilichev; +12 Ответить
37. vvp117 08.07.19 13:08 Сейчас в теме
(23) Ну допустим вы это нашли. В типовой. На поддержке. И что будем делать с этим?
VladC#; Rustig; +2 2 Ответить
38. Labotamy 08.07.19 13:12 Сейчас в теме
(37) Например фиксить расширением, и слать вендору.
GreenDragon; portwein; vlad.frost; nvv1970; +4 1 Ответить
41. Rustig 1415 08.07.19 14:44 Сейчас в теме
(38) фантазия... хотя думаю, стажеров можно на это посадить...
42. Labotamy 08.07.19 14:51 Сейчас в теме
(41) Так оно наверняка у вас не работает, и вы уже тратите ресурсы на поиск этой ошибки. Если это в "не используемом" функционале, то конечно фиг бы с ней. Это если про вендорный код. А в своем в принципе сразу видите "ой тут наверное что то не так" и исправляете.
44. Rustig 1415 08.07.19 15:27 Сейчас в теме
(42) согласен, крутая штука. Автор молодец!
43. nvv1970 08.07.19 15:14 Сейчас в теме
(37) В 1С в некоторых отделах, на некоторых продуктах работают весьма отзывчивые люди. Присланный им на партнерке или в саппорт репорт внезапно не отфутболивается, баг или недоработка берется в работу и исправляется, а сами сотрудники тебе благодарны за помощь.
Такое случается не везде, но если случается, то вселяет веру в людей и надежду что наше дело - "правое".
check2; dvissarov5; Дмитрий74Чел; creatermc; b00ker; user811769; Rustig; +7 1 Ответить
46. for_sale 856 08.07.19 17:00 Сейчас в теме
(37)
Ну, допустим, вы это нашли в вашем коде. "Ну его, этот сонаркуб, а то ещё окажется, что я не такой великий программист, как я о себе думал"?)
57. vvp117 08.07.19 19:47 Сейчас в теме
(46) Ооо нет, что вы) сонаркуб это чудесно. Просто где бы взять время на настройку и понимание всей этой инфраструктуры? Если куча свободного времени и осталось только причесать код по указке сонаркуба - тогда я вам завидую :) вы молодец
VladC#; Rustig; +2 Ответить
58. for_sale 856 08.07.19 22:03 Сейчас в теме
(57)
Я ни на что не намекаю, но очень часто бывает так, что свободного времени нет именно потому, что код - говно, и на поддержку его уходит всё свободное время :)
check2; nixel; +2 Ответить
8. olegtymko 535 08.07.19 01:56 Сейчас в теме
(1) всегда должно быть место для хобби=)
3. Xershi 958 07.07.19 20:26 Сейчас в теме
Раз используется апк, то зачем весь этот зоопарк?
serg_gres; +1 Ответить
7. olegtymko 535 08.07.19 01:55 Сейчас в теме
(3)автоматизированно в контуре ci проводить анализ состояния системы и с помощью sonarqube видеть общий тренд изменения качества решений. Так же, на мой взгляд, одна из самых главных "плюшек" сонара - привязка результатов диагностик к пользователям через git blame. Для меня ещё полезным показалось дублирование кода - этого соответственно нет в АПК.
Kinestetik; mrXoxot; vlad.frost; nvv1970; Kosstikk; citnp07; JohnyDeath; Labotamy; Stepa86; +9 Ответить
14. vlad.frost 187 08.07.19 08:08 Сейчас в теме
(3) ну, например, чтобы:
- не настраивать ответственных по объектам метаданных в АПК: SonarQube сам определит ответственного за косячный код по git blame;
- разделить ошибки на legacy и привнесённые в новом коде, старый код не трогать, а сосредоточиться на исправлении новых косяков;
- видеть ошибки АПК в контексте окружающего кода, а не только модуль и номер строки;
- ускорить отображение отчётов;
- получать постоянные ссылки на ошибки, чтобы взять их на контроль и добиться исправления.
GreenDragon; Kinestetik; SerebanSK; nvv1970; mrXoxot; Kosstikk; JohnyDeath; olegtymko; nixel; Stepa86; +10 Ответить
85. gubanoff 47 09.07.19 12:59 Сейчас в теме
(14)
- разделить ошибки на legacy и привнесённые в новом коде, старый код не трогать, а сосредоточиться на исправлении новых косяков;

В последних версиях АПК появился режим "поместить все ошибки в исключения" как раз для первоначального занесения всех ошибок в исключения в старом коде.
87. vlad.frost 187 09.07.19 13:15 Сейчас в теме
(85)
В последних версиях АПК появился режим "поместить все ошибки в исключения" как раз для первоначального занесения всех ошибок в исключения в старом коде.


Этот сценарий я рассматриваю как потенциально опасный, т.к. маскирует потенциальные ошибки.

Пример:у меня эпизодически проявляется ошибка "Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)!"

Я открываю SonarQube, ставлю фильтр на каталог по имени модуля и вижу там ошибку "Отсутствует исключительная управляемая блокировка на записываемые (удаляемые) данные." - эта ошибка унаследованная, привнесена была год назад, но благодаря связке АПК+SonarQube я могу определить причину и исправить ошибку.

Так что, если поместить все старые ошибки в исключения, возможности оперативно диагностировать источник ошибки у меня не будет.
17. Labotamy 08.07.19 08:24 Сейчас в теме
(3) Еще возможность использовать "внешние" анализаторы, а отчет смотреть сводный.
vlad.frost; +1 Ответить
4. omut 07.07.19 23:26 Сейчас в теме
На практике или дописываю типовую конфу, или делаю свою на базе БСП. В обоих случаях собственного кода в общем объеме не так и много. Можно ли анализировать только отличия от типовой? Зачем мне знать качество кода других программистов, раз на них никак не влияю...
5. Vladimir Litvinenko 2294 07.07.19 23:46 Сейчас в теме
(4) Вы можете делать коммиты, связанные с обновлением типовых конфигураций (обновлением БСП или переходом на новую версию типовой конфигурации) от имени специально выделенного пользователя. Для этого достаточно перед коммитом указать в качестве e-mail автора служебный или свой второй e-mail. Тогда изменения типовой конфигурации привяжутся не к тем пользователям, под которым ведется регулярная разработка.

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

Если вы пользуетесь АПК, то ситуация будет аналогична: если Вы дорабатываете типовой модуль и хотите его проверить после доработки, то в результаты его проверки попадет и типовой код и Ваш. АПК позволяет фильтровать объекты конфигурации, подлежащие проверке, а не части модулей. При использовании возможностей git как раз появляется возможность проверять только внесенные в модуль изменения в привязке к авторам.
tsmult; Kinestetik; Lucechiaro; SerebanSK; Stepa86; olegtymko; acanta; +7 1 Ответить
6. Niki_Pro 08.07.19 01:22 Сейчас в теме
О, спасибо! Как раз начал знакомство с SonarQube. Супер
9. olegtymko 535 08.07.19 01:58 Сейчас в теме
(6) старался преподнести материал в самом простом виде, чтобы на старте можно было "пощупать" функционал.
gubanoff; +1 Ответить
91. Niki_Pro 10.07.19 00:55 Сейчас в теме
(9) Итак, получилось развернуть, но обо всем по порядку:

До этого разворачивал SonarQube 7.7 на стандартном порте 9000 - особо не успел разобраться, но он работал.
Затем, после вашей статьи, решил обновиться до 7.9. И весь вчерашний день решал головоломку, почему он то запускается, то падает.
Оказалось дело в jdk 11, странно что он без нее работал (но как-то криво)

Так что про jdk не забываем :)

Из статьи не понятен был момент - нужно ли создавать проект с ключем в SonarQube или он автоматом сам создастся?
Я создал проект, и в файле настроек указал параметры проекта.

И я в итоге сделал вот так
.../sonar-scanner.bat -D"project.settings=../sonar-project.properties"

а дальше в sonar-project.properties указал путь к проекту:

***
sonar.projectBaseDir=С:/myrepos/myprjkt
***

Кстати не забываем что слэш должен быть в файлике настроек именно "/" - а то пару раз косякнул с этим


И мое микро замечание - в секции примера слэш хорошо бы тоже одного направления сделать
"Без токена:

../sonar-scanner-cli-4.0.0.1744-windows\sonar-scanner-4.0.0.1744-windows/bin/sonar-scanner.bat

С токеном:

../sonar-scanner-cli-4.0.0.1744-windows\sonar-scanner-4.0.0.1744-windows/bin/sonar-scanner.bat -D"sonar.login=1952877e4d61d69c766eb8d9ca1d39ac48a4254f"
"
check2; tsmult; olegtymko; Labotamy; +4 Ответить
92. olegtymko 535 10.07.19 02:31 Сейчас в теме
(91) версия 7.9 сонара работает теперь только на java 11, как и последний sonar scanner. Опечатки поправлю, спасибо за внимательность)
93. olegtymko 535 10.07.19 02:34 Сейчас в теме
(91) по поводу ключей и каталогов - мною специально был заготовлен шаблон проекта и если следовать указаниям, не нужно будет прописывать отдельно путь к настройкам сонар проекта и к рабочему каталогу.
Niki_Pro; +1 Ответить
101. Niki_Pro 11.07.19 19:04 Сейчас в теме
(93)
Протестировал на маленькой базе - все нормально отработало.
Запустил аналогично на большой базе - 4 часа скрипт работал, и самое что странное ругнулся в самом конце

ERROR Caused by: GC overhead limit exceded

что еще странно что процент выполнения проверки файлов тормозиться по экспоненте. И последние 10 файлов проверялись 1 час.

Попробовал дописать исключение в файл настроек конкретного проекта -
sonar.exclusions= .... (кстати было бы круто если бы статье был пример шаблонных исключений)

Но ничего не поменялось.

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

Мне не критично если анализ будет хоть целый день идти, его каждый день запускать смысла нет.
102. Stepa86 1356 11.07.19 20:39 Сейчас в теме
(101) Сканеру не хватило памяти. У меня такое было при анализе УХи. Переварить регл. отчетность помогло только выдача сканеру 20 гигов оперативы. Вот пример батника

chcp 65001
@set SONAR_SCANNER_OPTS=-Xmx20g
C:\Sonar\sonar-scanner\bin\sonar-scanner
103. Stepa86 1356 11.07.19 20:41 Сейчас в теме
104. Niki_Pro 12.07.19 00:38 Сейчас в теме
(103) спасибо! Проверю:)

Да в статье описано, но у меня "Parsing files" не застряло где-то, а прошло все 100% и дальше стопорнулось.

SONAR_SCANNER_OPTS - по идее я эту настройку ранее уже выставил, просто связи с реальностью пока не увидел, возможно где-то очепятался, буду тестировать :)
111. Niki_Pro 15.07.19 20:05 Сейчас в теме
(103)
Проверил. Если ставлю 14Гб, то parsing files стопорится на 82%
При этом память используется на 98%

Если ставлю 8Гб, то Parsing files доходит почти до конца, но на 10-20 последних файлах все валится.

Какие решения вижу я - попробовать исключить ряд 1С-
модулей оригинальной конфы. Но решение так себе.

Конечно, увеличив мощность сервака, наверное все сработает, но может есть другой вариант?

Второй вариант - разбить на два проекта, по принципу - в первом проекте только справочники, во второй только документы.

Есть еще идеи? Может еще что то можно подкрутить?
112. olegtymko 535 16.07.19 03:27 Сейчас в теме
(111) типовая конфигурация? мб исключить регламентированные отчёты.
219. check2 122 12.04.20 21:49 Сейчас в теме
(91)
(93) Олег, однозначно, огромное спасибо за увлекательный и очень полезный квест :)
Соглашусь с Николаем, тоже встрял на этом моменте. (Кстати, Николай и Вам спасибо, что не поленились написать об этом!)
Надо бы написать, что создавать проект не нужно, что после запуска проверки он появится в списке проектов сам (я же правильно понял?)
Кроме этого, мне вот например не хотелось совсем ставить на диск c:\ поэтому хотелось бы понять между разными компонентами - что во что в итоге вставляется.
Ну ладно. это мелочи - разминка...
Настоящий квест - это подтягивание анализа из АПК:
1) После установки opm install vanessa-runner подмодуль add не встал :( Что приводило к ошибке: (вл. 1) вылечилось установкой opm install add, тогда acc, наконец, запустился.
2) Описание параметров acc.properties не оч. понятно, в частности что в acc.projectKey нужно указывать имя конфигурации как её загнали в АПК. Вроде как и ошибок не было, но тем не менее желанный файл acc-json.json в нужном месте не появлялся, а сама выгрузка ошибок проходила подозрительно мгновенно.
3) Отдельно - нужно обязательно описать что параметр RUNNER_v8Version, если бы его на снимке в тексте не было можно было бы долго искать что в него поставить.
Общее время прохождения квеста: 6ч28минут, включая обстоятельно статьи на эту тему (запуск и установка АПК не в счёт, включая и готовую проверку - с ней разбирался раньше)

В итоге, пузырьки разлетелись, в качестве подопытного кролика выступила конфигурация СППР. Технический долг её составляет 359 дней...Штош :( И проверочку мы не прошли...Айяйяй… (вл 2)

Как я понял, что. несмотря на то, что АПК может не только модули проверят (и проверяет) в SQ приезжают только модули и ошибки/замечания по ним.
Плюс АПК, однозначный в проверке не используемых экспортных методов, но в итоге получается дубляж ошибок, как например на (вл 3), получается, в идеале нужна тонкая настройка. Кстати, достаточно яркий пример, что что расширение посчитала просто информацией, то отступление от канонической формы АПК признала как критичную ошибку... (Возможно уровень критичности этой проверки в АПК можно понизить)
Очень завидная штука в анализе расширением - это время исправления. Просто управленца. Чего не скажешь про данные из АПК.
Убил вот какой момент, в тексте очень много вхождений в части библиотек "2.3.0.5" - версия библиотек. Модуль их считает IPшником!!! и рассматривает как уязвимость (вл 4), все 31 уязвимость - это строки версий библиотек. Отключать? Или можно правило перегенерировать, чтобы не ошибалось?
Прикрепленные файлы:
227. olegtymko 535 15.04.20 07:55 Сейчас в теме
(219) Спасибо за обратную связь. Отвечу на ваши вопросы
* по поводу vanessa-runner - да, там есть / был ньюанс с наличием add пакета. Нужно просто знать об этом ньюансе.
* по описаний параметров для запуска АПК можно посмотреть в самом проекте https://github.com/otymko/acc-export
* по поводу параметра RUNNER_v8Version я допишу в тестовый пример скрипта.
* по критичности замечаний из АПК можно добавить ишуз в проект acc-export (https://github.com/otymko/acc-export/issues), возможно его кто нибудь сделает.
* с проверкой на хардкод IP есть fp, частично эти проблемы можно решить, частично нет. Сейчас существует в плагине для сонара возможность исключать из проверки модули на поддержке (которые на замке).
10. kuzyara 1012 08.07.19 04:45 Сейчас в теме
Поставил сонар на допиленную ут10, выдал 3 тысячи ошибок и 39 тыс. предупреждений.
И что дальше? Как качеством управлять то?
Прикрепленные файлы:
11. olegtymko 535 08.07.19 05:09 Сейчас в теме
(10)
И что дальше? Как качеством управлять то?


"Предупреждён — значит вооружён". Теперь мы понимаем что у нас есть 2 тыс. критических проблем и 44 уязвимости. Их нужно устранять, чтобы сделать решение более стабильным. Так же нужно учитывать, что большая часть кода - это код на поддержке. Его нужно исключить. Для этого можно использовать проект https://github.com/Stepa86/edt-export-bugs. Далее используя анализ на продолжительном периоде, можно отслеживать новые ошибки / дефекты с помощью отбора по дате создания замечания. (см. приложенный файл)

Еще вопрос: т.к. используются обычные формы, перед анализом, были ли они извлечены? Например через gitsync. Я для этого использую скрипт https://github.com/otymko/acc-export/blob/master/run.os.
Прикрепленные файлы:
Labotamy; +1 Ответить
12. kuzyara 1012 08.07.19 05:24 Сейчас в теме
(11) gitsync
На вашем проекте, судя по скриншотам, >800 ошибок и 23 тыс. дефектов?
Покажите, пожалуйста, тренд количества ошибок или что-нибудь отображающее профит.
Очень уж любопытно, продвинулись ли Вы куда-нибудь дальше "понимания".
13. olegtymko 535 08.07.19 05:55 Сейчас в теме
(12) На скриншоте тестовый проект, где ~800 ошибок, был проверен только в рамках статьи.

Во вложении метрики самописного проекта не на БСП, над который сейчас ведутся работы по улучшению качества кода (этот же скриншот есть в статье).
Если смотреть тренд количества ошибок, дублирования кода - то их количество со временем уменьшается.
Прикрепленные файлы:
GreenDragon; Kinestetik; acanta; kuzyara; +4 Ответить
35. Dach 295 08.07.19 12:56 Сейчас в теме
(11)

Скажите пожалуйста, получается то есть, если проект на обычных формах - каждый раз, перед выгрузкой файлов конфигурации в project/src (ну или перед выгрузкой этих же файлов git) - их нужно разобрать? И код из ссылки это все корректно делает?

За статью - спасибо, очень большая и ценная работа проделана
36. olegtymko 535 08.07.19 13:01 Сейчас в теме
(35) Да, придется их разобрать. Иначе все обычные формы будут в файлах bin, и проверки bsl ls их не увидят. Так же АПК не увидит файлов, на которые можно повешать замечания.

Этим скриптом пользуюсь я сам. Тоже самое можно с помощью gitsync сделать.
122. CMblCL 21.07.19 20:28 Сейчас в теме
(11) А какую версию v8unpack используете? Пытаюсь парсить обычные формы при помощи вашего скрипта получаю исключение:
"Внешнее исключение System.Reflection.TargetInvocationException): Адресат вызова создал исключение."
123. olegtymko 535 22.07.19 03:16 Сейчас в теме
(122) попробуйте все тоже самое, но на версии OneScript 1.0.21
124. CMblCL 22.07.19 16:03 Сейчас в теме
156. roman_1379 29.07.19 15:12 Сейчас в теме
(11)
(123)
Добрый день.
Пытаюсь использовать скрипт https://github.com/otymko/acc-export/blob/master/run.os под Windows но где взять библиотеку v8unpack? Не дадите ссылку? В инете нахожу только для unix или исполняемый exe файл
(123)
19. Labotamy 08.07.19 08:26 Сейчас в теме
(10) Гоняешь перед выпуском релиза и в секции "New code" не должно быть новых утечек.
15. fenixnow 173 08.07.19 08:20 Сейчас в теме
Все это прикольно, но на текущем этапе развития, это просто некая игрушка, нежели чем инструмент. :) Как правильно сказал Олег - хобби
VladC#; artbear; +2 Ответить
18. nixel 897 08.07.19 08:24 Сейчас в теме
(15) АПК - игрушка? Или SonarQube как платформа с десятилетней историей?
Или их связка, которая успешно работает уже более трех лет?
vlad.frost; olegtymko; +2 Ответить
21. fenixnow 173 08.07.19 08:28 Сейчас в теме
(18) Связка АПК - Сонар, да еще минимальный набор проверок в сонаровском плагине.
24. Labotamy 08.07.19 08:39 Сейчас в теме
(21) Я там скрин наверху оставил, с результатом "минимального набора". На текущий момент мне известно 4ре анализатора, их результаты можно импортить в сонар. На 3 есть отсылы в статье.
vlad.frost; +1 Ответить
20. Labotamy 08.07.19 08:27 Сейчас в теме
(15)Какая обоснованная критика =)
22. fenixnow 173 08.07.19 08:29 Сейчас в теме
(20) Алексей, все в курсе всего, обсуждалось в телеграмме... :) Надеюсь, вы не обнуляетесь за выходные? :)
25. Labotamy 08.07.19 08:39 Сейчас в теме
(22)Формулировки "игрушка" не припомню. А вот ваш, не сильно обоснованный скепсис припоминаю.
173. GreenDragon 06.08.19 15:09 Сейчас в теме
(25) Пропустил диспут в телеге, но вот с термина "игрушка" приорал знатно. Особенно когда в курсе цен на эту игрушку и затрат, которые несутся без неё.
174. olegtymko 535 06.08.19 15:45 Сейчас в теме
(173) Иногда такие "игрушки" спасают много жизней в продакшене. =)
tsmult; GreenDragon; +2 Ответить
175. GreenDragon 06.08.19 15:51 Сейчас в теме
(174) Именно. Я буквально из под палки заставляю коллег код-ревью делать. И им каждый раз "некогда", несмотря на 6-7 значные суммы убытков из-за простоя базы дольше 15 минут. А с сонаром хотя бы часть ошибок не окажется в продакшене. Соответственно меньше претензий к нашему отделу со стороны руководства.
16. fenixnow 173 08.07.19 08:20 Сейчас в теме
Плюсик поставил за труды
26. azhilichev 198 08.07.19 08:57 Сейчас в теме
Коллеги, знаю, что бесплатный сонар позволяет анализировать одну ветку. В примере из статьи - это master. По вот этому workflow содержимое ветки master - это то, что находится в боевой системе. Получается, что контроль качества выполняется после публикации изменений? Или я что-то неправильно понял? Пробуем использовать инструменты контроля качества. И пока не получается запустить инструмент так, чтобы он проверял изменения каждого разработчика перед публикацией.
27. Labotamy 08.07.19 08:59 Сейчас в теме
(26)В природе есть комьюнити бранч плагин. Но это все, что я онем знаю.
28. Stepa86 1356 08.07.19 09:04 Сейчас в теме
(26) Можно под разные ветки завести разные проекты прост. Типа "ВажныйПроект_master", "ВажныйПроект_dev", "ВажныйПроект_ПесочницаДляСтажеров"
29. olegtymko 535 08.07.19 09:10 Сейчас в теме
(26)Не попробуете - не узнаете. Вот бесплатный плагин веток для SonarQube CE -> Sonarqube Community Branch Plugin
30. nixel 897 08.07.19 09:30 Сейчас в теме
(26) если работаете в EDT, то можно доустановить плагин от Александра Капралова, который будет показывать диагностики из BSL LS прямо в EDT.
А так да, выше дали ссылку на комьюнити бранч-плагин, лично проверял его работу на 4 серверах от 7.4 до 7.8.
Недавно вышел релиз плагина под свежий LST релиз SonarQube, конкретно его я еще не проверял, но в комментариях пишут, что работает.
31. user1249164 08.07.19 10:10 Сейчас в теме
Такое ощущение как будто для малолеток реклама
32. olegtymko 535 08.07.19 10:18 Сейчас в теме
(31) Никогда не поздно, никогда не рано начать отслеживать качество кода =)
33. Labotamy 08.07.19 10:32 Сейчас в теме
176. GreenDragon 06.08.19 16:15 Сейчас в теме
(33) реклама качественного кода. Только вот непонятно - каким образом к этому "малолетки" привязаны. Мне вот 39, а я "повёлся" на статью.
34. litonchik 08.07.19 10:36 Сейчас в теме
Спасибо за статью!
Читая комментарии под статьями такого рода, иной раз, поражаюсь токсичности комьюнити.
GreenDragon; tsmult; YPermitin; Kinestetik; mivari; vlad.frost; t.v.s.; disa_da; Kosstikk; seperblunt2; ComConnector; ltfriend; romankoav; Stepa86; baton_pk; user774630; VitaminC; olegtymko; CyberCerber; nixel; tsukanov; user764477; Labotamy; +23 Ответить
39. Kosstikk 86 08.07.19 14:39 Сейчас в теме
(34) радует, что не все комьюнити с менталитетом кодера "сказали-делаю, а вот это все остальное - для меня сложно" чем прогрессивнее будет комьюнити, тем лучше со временем станут условия для 1с разработчиков не как добывателей денег, а как специалистов.
GreenDragon; t.v.s.; litonchik; olegtymko; Labotamy; +5 Ответить
40. Rustig 1415 08.07.19 14:43 Сейчас в теме
(34) три минуса на сообщение, и токсичность исчезнет - растворится как туман... :)
45. nvv1970 08.07.19 15:31 Сейчас в теме
(34) https://ru.wikipedia.org/wiki/Менталитет_краба
Наверно не любят тех, кто выбрался из ведра ))
t.v.s.; tsukanov; +2 Ответить
47. for_sale 856 08.07.19 17:05 Сейчас в теме
Статья отличная, спасибо!

Вопрос не в тему, но по скриншоту из темы - почему "Если ИначеЕсли" должна обязательно содержать Иначе?

КолвоОчков = 10;

Если Ничья Тогда
	КолвоОчков = КолвоОчков + 1;
	
ИначеЕсли Победа Тогда
	КолвоОчков = КолвоОчков + 3;
	
КонецЕсли;

ЗаписатьВТурнирнуюТаблицу(КолвоОчков);
Показать


Зачем сюда Иначе пихать, если Иначе ничего не нужно?
48. tsukanov 61 08.07.19 17:08 Сейчас в теме
(47) Это холиварная проверка. Согласны - используйте. Не согласны - отключите.
Все просто
for_sale; +1 Ответить
52. for_sale 856 08.07.19 17:28 Сейчас в теме
(48)
А чё, так можно было? Ок, спасибо)
49. nixel 897 08.07.19 17:16 Сейчас в теме
(47) это проверка из разряда "защитного программирования". Нужно на 100% быть уверенным, что это не "иначе" продолбали, а просто предварительную инициализацию сделали. Плюс не во всех ветках бывает такой простой инкремент, где-то могут вызываться функции с побочным эффектом.

Уверены, что в данном случае все в порядке? ставьте на конкретное срабатывание статус won't fix.
Уверены, что всегда все ок или вас эта проверка раздражает - выключайте проверку в настройках "Quality Profile" или в конфигурационном файле BSL Language Server (в зависимости от режима запуска)
mickey.1cx; for_sale; +2 Ответить
53. for_sale 856 08.07.19 17:28 Сейчас в теме
(49)
Ок, если можно настраивать, тогда вообще класс
61. olegtymko 535 09.07.19 04:08 Сейчас в теме
(53) и поэтому при тестировании все бы сломалось.,т.к. проигрыш идёт в эксепшэн)
50. Labotamy 08.07.19 17:19 Сейчас в теме
(47)Формально у вас еще и копипаста в подсчете очков.

КолвоОчков = 10;

Если Ничья Тогда
    Инкремент = 1;
ИначеЕсли Победа Тогда
    Инкремент = 3
ИначеЕсли ФикирБылПьян Тогда
    Инкремент = 10;   
Иначе
    Инкремент = 0;
КонецЕсли;

КолвоОчков = КолвоОчков + Инкремент;

ЗаписатьВТурнирнуюТаблицу(КолвоОчков);
Показать
51. for_sale 856 08.07.19 17:27 Сейчас в теме
(50)
Копипаста - звучит как что-то плохое) Я бы в данном контексте его не использовал. Потому что у меня нет Иначе, а без него мне не нужен Инкремент, он в конце ошибку даст. Потому что формально в вашем примере добавлено одно ненужное действие, которое может выполняться, например, в цикле, например, миллион раз - и вот уже у нас миллион ненужных действий. Если же Инкремент вынести за Если, то тогда у нас миллион ненужных присваиваний переменных.
54. Labotamy 08.07.19 17:49 Сейчас в теме
Да, вы правы, я продолбал инициализацию.
55. for_sale 856 08.07.19 18:39 Сейчас в теме
(54)
И миллион ненужных действий) Чтобы формально следовать какому-то "правилу")
59. Labotamy 09.07.19 01:32 Сейчас в теме
(55) Все зависит от цены. Да, и тут вы тоже правы, миллион действий что-то стоит. Дальше обычно идет болтовня о компромиссе между производительностью и поддерживаемостью.
1. 836мс
2. 984мс

P.S. мерил в оскрипте
56. olegtymko 535 08.07.19 19:13 Сейчас в теме
(47) Холиварная тема. У меня в коде больше таких условий:

КолвоОчков = 10;

Если Ничья Тогда
    КолвоОчков = КолвоОчков + 1;    
ИначеЕсли Победа Тогда
    КолвоОчков = КолвоОчков + 3;
Иначе
    ВызватьИсключение("Никогда такого не было и вот опять");
КонецЕсли;

ЗаписатьВТурнирнуюТаблицу(КолвоОчков);
Показать
AgentNiCho; mickey.1cx; +2 Ответить
60. Labotamy 09.07.19 02:01 Сейчас в теме
(56) Вот Олег попался в ловушку отсутствия какого-то указания на то, что при проигрыше КоличествоОчков не увеличивается и случайно все сломал. Это и называется поддерживаемость =)
64. for_sale 856 09.07.19 07:39 Сейчас в теме
(60)
Тут я могу только начать реальный холивар, заявив, что это не функция кода - объяснять бизнес-логику, что для этого должно быть ТЗ, документация и комментарии:
КолвоОчков = 10;

Если Ничья Тогда
    КолвоОчков = КолвоОчков + 1;
    
ИначеЕсли Победа Тогда
    КолвоОчков = КолвоОчков + 3;

// проигрыш - кол-во не меняется,
// никаких других ситуаций не бывает
    
КонецЕсли;

ЗаписатьВТурнирнуюТаблицу(КолвоОчков);
Показать


Причём, не отменяя нужность документации, думаю, важнее всего как раз такое писать в комментарии, потому что он ближе всего к программисту.
65. Stepa86 1356 09.07.19 08:04 Сейчас в теме
(64) Вот именно в Иначе и нужно вставить этот комментарий, чтоб всем остальным было очевидно, что здесь не продолбали вариант с проигрышем. А еще лучше, чтоб волшебные цифры 0, 1 и 3 были инкапсулированы

Если Ничья Тогда
    выигрыш = КоличествоОчковПриНичьей();    
ИначеЕсли Победа Тогда
    выигрыш = КоличествоОчковПриПобеде();
Иначе
   выигрыш = КоличествоОчковПриПоражении(); 
КонецЕсли;

КолвоОчков = КолвоОчков + выигрыш;

ЗаписатьВТурнирнуюТаблицу(КолвоОчков);
Показать
71. for_sale 856 09.07.19 08:25 Сейчас в теме
(65)
Это был очень условный пример, показывающий, что Иначе пригождается не всегда) Понятное дело, что хардкодинг - это Г-код, но смысл примера был не в этом.
73. Stepa86 1356 09.07.19 08:31 Сейчас в теме
(71) Этот пример в итоге показал, что затраты на Иначе окупились бы. Эта проверка на тех. долг. А тех. долг влияет на сопровождаемость - то есть насколько легко этот код смогут доработать другие программисты. Пример Олега показал, что именно в этом месте этот тех.долг выстрелил в ногу, а значит сонар очень даже правильно диагностировал проблему.

На моем реальном боевом проекте я тож сперва был скептически настроен к этой проверке. Психанул и везде, где в Иначе не должны заходить никогда расставил вызов исключений. И я очень удивился, когда у меня тесты отвалились.
74. for_sale 856 09.07.19 08:46 Сейчас в теме
(73)
Этот пример в итоге показал, что затраты на Иначе окупились бы.

Каким образом? Вы показали будущему программисту логику через Иначе (т.е. ещё одну команду и даже вызов функции), я - комментарием. Информация та же, вызовов меньше.

(73)
И я очень удивился, когда у меня тесты отвалились.

Возможно, нужно внимательнее подходить к разработке. Если вы говорите, что в Иначе не должно заходить никогда, а у вас исключения полезли, то тем, что вы сделаете пустое Иначе, вы проблему не решите.
75. Stepa86 1356 09.07.19 08:57 Сейчас в теме
(74)
> Вы показали будущему программисту логику через Иначе

И комментарий и логика используют ветку Иначе и поэтому стало понятнее и сложнее совершить ошибку. Можно обойтись и комментарием. Главный посыл в том, что ветка Иначе тут нужна.

> Возможно, нужно внимательнее подходить к разработке.

Да-да, нужно. Нужно писать без ошибок. У меня не получается. Поэтому я использую всякие вспомогательные костыли, типа статистического анализа кода, код-ревью, тесты и прочую ненужную вещь, чтобы снизить количество ошибок. Исключение в блоке иначе, в который никогда не должны бы заходить работает значительно лучше, чем отсутствие такого блока в принципе, потому что мы посчитали, что сюда не должны бы зайти.
89. for_sale 856 09.07.19 18:27 Сейчас в теме
(75)
потому что мы посчитали, что сюда не должны бы зайти

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

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

Правила нужны для того, чтобы облегчать жизнь. Если правилам следуют просто формально, то это, видимо, неправильные или неправильно понятые правила. За добрый десяток постов мне так и не показали, где в моём абстрактном примере мне понадобится Иначе. А пихать его просто потому, что где-то кто-то сказал, что Иначе должно быть - не знаю почему, но не хочется)
90. Stepa86 1356 09.07.19 18:47 Сейчас в теме
(89) Не всем повезло с умением писать сразу код без ошибок, который в последствии не требует сопровождения и доработок.

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

Чем проще система, чем меньше программистов участвует в разработке и чем меньше ущерб от ошибок в ней - тем меньше можно заморачиватся с внутренним качеством.
84. caponid 09.07.19 11:27 Сейчас в теме
(65) хм... разве это защитное программирование?
вот мой вариант:
РезультатПартии = 0;    
Если СтатусПартии = Статусы().Ничья Тогда
    РезультатПартии = 1;    
ИначеЕсли СтатусПартии = Статусы().Победа Тогда
    РезультатПартии = 3;    
ИначеЕсли СтатусПартии = Статусы().Поражение Тогда
    РезультатПартии = 0;    
Иначе
    //ВызватьИсключение("Некорректный статус партии: " + СтатусПартии);
    // или не вызывать....
    СтатусПартии = Статусы().Дисквалификация;
    КолвоОчков = 0;
КонецЕсли;

КолвоОчков = КолвоОчков + РезультатПартии;
ЗаписатьВТурнирнуюТаблицу(КолвоОчков);
Показать

ведь может что то сломаться - и партия будет незавершенная...
Labotamy; Stepa86; +2 Ответить
77. Labotamy 09.07.19 09:08 Сейчас в теме
(64)Нас же предупреждали, что это диагностика холиварная. На примерах разобрали, что придумана не из воздуха. В планах есть добавить настройку, что бы она срабатывала только на СелектКейсах.
Использовать ее на своих проектах или нет, решаете вы сами.

P.S. У некоторых диагностик есть параметры. Например, можно увеличить ограничение на длину строки (Стандарт глосит: 120. Имхо: 140).
62. SmileDDD 09.07.19 05:52 Сейчас в теме
Подскажите пожалуйста. Все ли ошибки выгружаются из АПК? Которые не в модулях тоже?
63. olegtymko 535 09.07.19 07:10 Сейчас в теме
(62) На данный момент не все, но в планах добавить. Ну и самое главное - это OpenSource проект. Можно создать issues c идеями / проблемами, можно самому доработать проект.
66. Scorpion4eg 302 09.07.19 08:05 Сейчас в теме
Добрый день. Словил ошибку
java.lang.IllegalArgumentException: Start pointer [line=3313, lineOffset=0] should be before end pointer [line=3313, lineOffset=0]
67. Labotamy 09.07.19 08:10 Сейчас в теме
(66)зарегистрируйте, пожалуйста ишуз на гитхабе.
Scorpion4eg; +1 1 Ответить
68. nixel 897 09.07.19 08:10 Сейчас в теме
(66) добрый день.

Дайте чуть больше логов, пожалуйста.
Scorpion4eg; +1 Ответить
69. Stepa86 1356 09.07.19 08:15 Сейчас в теме
70. Scorpion4eg 302 09.07.19 08:16 Сейчас в теме
(69) И можно было на ты) Чай не чужие люди.
Оставьте свое сообщение

См. также

3 онлайн-курса по 1С-программированию: обмен данными, расчетные задачи и бухгалтерские задачи с 12 мая по 8 июля 2020 г. Промо

Практика программирования v8 Бесплатно (free)

Пакет из 3-х курсов по 1С-программированию. Основная цель - сформировать у слушателей практические навыки, связанные с реализацией задач обмена для прикладных решений, работающих на платформе “1С:Предприятие”, а также с разработкой прикладных решений, предназначенных для автоматизации расчета заработной платы и задач бухгалтерского учета.

22.04.2020    3161    23    infostart    2    

JSON в запросах 1C#

Практика программирования Бесплатно (free)

Практические примеры работы с JSON непосредственно в языке запросов. Перенос курсов валют между УТ и БП. Требуется SQL Server 2016 и выше.

24.04.2020    2494    0    zhichkin    5    

Визионное программирование

Практика программирования Бесплатно (free)

Новый способ программирования и его практическая демонстрация.

22.04.2020    3364    0    mkalimulin    60    

Использование машинного обучения для решения инцидентов. Практическое применение

Практика программирования Бесплатно (free)

Продолжаю (и заканчиваю) тему с автоматическим решением инцидентов. Перейдем от теории к практике.

25.02.2020    3164    0    Repich    9    

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    34146    0    unichkin    45    

Использование машинного обучения для решения инцидентов

Практика программирования Бесплатно (free)

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

18.02.2020    4770    0    Repich    17    

Часовой на страже логов

Практика программирования Инструментарий разработчика Бесплатно (free)

При поддержке решений, которые установлены у большого количества пользователей на различных системах, очень важно вовремя получать подробную информацию о возникших проблемах. О том, как собирать логи и анализировать полученные данные в трекере ошибок Sentry на конференции Infostart Event 2019 Inception рассказал Андрей Крапивин.

13.01.2020    4831    0    Scorpion4eg    6    

Как управлять качеством кода 1С, используя платформу SonarQube

Рефакторинг и качество кода Инструментарий разработчика Бесплатно (free)

При быстром росте функциональности проводить визуальный Code-Review для обнаружения некачественного кода проблематично. О том, как автоматизировать проверку качества кода 1С с помощью платформы SonarQube на конференции Infostart Event 2019 Inception рассказал ведущий разработчик компании «Командор» Олег Тымко.

30.12.2019    6803    0    olegtymko    9    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    26131    0    tormozit    100    

Конвейер проверки качества кода

Инструментарий разработчика Практика программирования Математика и алгоритмы v8 1cv8.cf Абонемент ($m)

Jenkinsfile для выполнения проверки качества кода. Собирает информацию с АПК, EDT и BSL-LS. Сопоставляет ошибки с гит-репозиторием, выгруженным ГитКонвертором. Отправляет в Сонар.

3 стартмани

04.09.2019    18532    20    Stepa86    44    

Приватный блокчейн и 1С популярно

Практика программирования Блокчейн Бесплатно (free)

Две предыдущие публикации на эту тему были сфокусированы преимущественно на технической стороне вопроса. Кроме того, их содержание оказалось понятным не каждому специалисту. В этой статье я постараюсь обяснить для всех и, что говорится, «на пальцах»: что такое приватный блокчейн, когда и зачем его следует применять и на что обратить внимание при использовании этой технологии в 1С.

02.09.2019    4899    0    mkalimulin    140    

Кодогенерация и метагенерация в 1С

Практика программирования Инструментарий разработчика Бесплатно (free)

В своем докладе на конференции INFOSTART EVENT 2018 EDUCATION Дмитрий Белозеров рассказал о разработке инструмента, позволяющего программно работать с метаданными 1С и писать скрипты для выполнения тех же действий, которые выполняет разработчик в конфигураторе –  с какими сложностями и нюансами пришлось столкнуться, и что получилось в итоге.

26.08.2019    7743    0    kirovsbis    28    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

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

20.09.2012    73637    0    tormozit    129    

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

Математика и алгоритмы Рефакторинг и качество кода v8 Бесплатно (free)

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

22.07.2019    14607    0    Stepa86    33    

Интеграция сценарного тестирования в процесс разработки

Практика программирования Инструментарий разработчика Бесплатно (free)

Разработчик системы «Тестер» Дмитрий Решитко в своем докладе на конференции INFOSTART EVENT 2018 EDUCATION показывает, что процесс тестирования можно очень плотно интегрировать в процесс разработки, что внедрение тестирования – это возможность развития программиста как такового, позволяющая ему упорядочивать ход мыслей и оставаться «в фокусе». Навыки построения процесса кодирования на стыке с тестированием сокращают время на концентрацию, освобождают от страха перед изменениями и улучшают память разработчика.

08.07.2019    8080    0    grumagargler    7    

О времени и 1С

Практика программирования Разработка Бесплатно (free)

Основы и особенности работы со временем в 1С. Как избавиться от боли при работе в разных часовых поясах. Что такое момент времени. И другое.

01.04.2019    28797    0    YPermitin    60    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    44725    0    tormozit    38    

Пример создания bridge (http api - tcp) для ККТ "Касса №1" ("К1-Ф")

Практика программирования ККМ Кассовые операции Кассовые операции Разработка Россия Бесплатно (free)

Пример создания bridge (http api - tcp) для ККТ "Касса №1" ("К1-Ф"). Данная статья будет полезна интеграторам, программистам, тем кто работает (интегрирует, разрабатывает) различное ТО либо железки. Версия и релиз технологической платформы не имеет значения.

17.03.2019    5558    0    dmarenin    1    

Быстрее чем INSERT! BULK-операции и примеры использования

Производительность и оптимизация (HighLoad) Практика программирования Внешние источники данных Перенос данных из 1C8 в 1C8 Разработка Бесплатно (free)

Microsoft SQL Server поддерживает так называемые BULK-операции, используемые для быстрого изменения больших объемов данных в базе. В статье пойдет речь о практических примерах их использования. Все примеры сделаны в контексте платформы 1С (а как иначе).

09.03.2019    19907    0    YPermitin    40    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    40484    0    tormozit    72    

Как писать понятные коммиты

Практика программирования Разработка Россия Бесплатно (free)

Как писать сообщения коммитов так, чтобы потом не было мучительно больно.

06.03.2019    11542    0    Scorpion4eg    35    

Подготовка ребёнка к ЕГЭ по информатике. Часть шестнадцатая

Практика программирования Разработка Бесплатно (free)

Поиск выигрышной стратегии, завершающая статья.

22.02.2019    4859    0    vasilev2015    0    

Развитие 1С программиста Промо

Практика программирования Личная эффективность Бесплатно (free)

Делюсь своим опытом и видением развития 1С программиста.

17.10.2018    18201    0    pashamak    62    

Подготовка ребёнка к ЕГЭ по информатике. Часть тринадцатая

Практика программирования Разработка Бесплатно (free)

Исправление ошибок в программе, часть вторая.

20.02.2019    5083    0    vasilev2015    3    

Выгрузка документа по условию Промо

Практика программирования Разработка v8 Бесплатно (free)

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

25.04.2019    14144    0    m-rv    2    

Как прикрутить ГУИД к регистру сведений Промо

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 Бесплатно (free)

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

16.04.2019    17738    0    m-rv    17    

Подготовка ребёнка к ЕГЭ по информатике. Часть восьмая

Практика программирования Разработка Бесплатно (free)

Шифрование и дешифрование информации. Закон Фано

05.02.2019    4794    0    vasilev2015    1    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    27397    0    m-rv    21    

Расширяем свой багаж

Практика программирования Разработка Бесплатно (free)

Алгоритм решения возможной нетиповой задачи на собеседовании.

29.01.2019    5510    0    scientes    15    

Подготовка ребёнка* к ЕГЭ по информатике. Часть пятая

Практика программирования Разработка Бесплатно (free)

Маршрутизация. Протокол IPv4 для ЕГЭ.

27.01.2019    5013    0    vasilev2015    5    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

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

05.12.2017    25707    0    itriot11    34    

Подготовка ребёнка* к ЕГЭ по информатике. Часть четвертая

Практика программирования Разработка Бесплатно (free)

Решение систем логических уравнений повышенного уровня сложности.

25.01.2019    5214    0    vasilev2015    0    

Подготовка ребенка* к ЕГЭ по информатике. Часть третья

Практика программирования Разработка Бесплатно (free)

Алгоритмы рекурсии, логические задачи. Подготовка к ЕГЭ.

22.01.2019    6626    0    vasilev2015    0    

Разработка и сценарное тестирование с Vanessa-ADD. Установка инструментов. Запись действий пользователя и выполнение сценариев

Практика программирования Бесплатно (free)

Вторая часть цикла публикаций, посвященных Vanessa-ADD и автоматизации тестирования.

21.01.2019    27902    0    Vladimir Litvinenko    96    

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    70993    0    Serginio    108    

Подготовка ребенка* к ЕГЭ по информатике. Часть вторая

Практика программирования Бесплатно (free)

Примеры на Паскале. Если сам родитель* - поддержи ! Если сам водила - посигналь !

19.01.2019    5229    0    vasilev2015    0    

Подготовка к ЕГЭ сына - школьника (по информатике)

Практика программирования Бесплатно (free)

Примеры на Паскале. Если сам отец - поддержи ! Если сам водила - посигналь !

17.01.2019    5860    0    vasilev2015    50    

Быстрая отладка экранных форм документов и справочников

Практика программирования Бесплатно (free)

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

18.12.2018    6348    0    milkers    19    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    30549    0    ids79    40    

1С + asterisk (автоматический обзвон) часть 1

WEB Практика программирования Телефония, SIP Россия Бесплатно (free)

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

29.11.2018    10692    0    dmarenin    9    

Записки про metadata.js

Практика программирования Бесплатно (free)

Отличительные особенности разработки на metadata.js

31.07.2018    11529    0    1c-intelligence    59    

Тестер: частые вопросы

Практика программирования v8 Бесплатно (free)

Ошибкам бой - тесты норма жизни!

25.07.2018    26219    0    grumagargler    26    

Учебный курс. Повышение качества разработки. Ошибки программы

Практика программирования Математика и алгоритмы Рефакторинг и качество кода Бесплатно (free)

Учебный курс по теории и практике программирования. Бесплатно. В виде структурированного текста. Лекции № 3,4,5. Эти лекции посвящены ошибкам программ, их классификации и способам исправления

10.07.2018    18515    0    Артано    92