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

Публикация № 1273522 03.08.20

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

Поиск код рефакторинг реинжениринг качество легаси

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

Легаси он везде

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

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

На все эти вопросы есть множество ответов, методик разработки, проработки архитектуры и много, много, много еще интересного. И, конечно же, мы всего этого здесь не коснемся. Рассмотрим лишь маленькую тему - как узнать какой код в конфигурации (а также внешних обработках) используется, а какой нет. Это может показаться не такой большой проблемой, о которой нужно писать, но это лишь на первый взгляд.

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

Зачем вообще этим заниматься

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

От части - это правда. Нет смысла бросаться и удалять в конфигурации все, что не используется в данный момент. Особенно, если это типовая конфигурация, в которой Вы не используете общие модули или отдельные процедуры подсистем из БСП. Это же не значит, что их можно удалить :)

Очистка кода от неиспользуемых процедур и функций или целых модулей необходимо только:

  1. Вы на поддержке и регулярно устанавливаете типовые обновления. При этом в общих модулях от поставщика почему-то не удалили процедуры и функции предыдущих релизов, хотя по факту они не используются в свежих версиях конфигурации. Да, они могут использоваться в самописных модулях или внешних отчетах / обработках, но возможно это повод их отрефакторить и привести к актуальному виду.
  2. В конфигурации огромный объем кода, который вроде бы никто не использует, но он остался с давних времен. Может с этапа внедрения какой-нибудь подсистемы или более глобальных событий. В любом случае, со временем появится путаница какие процедуры и функции стоит использовать и сопровождать, дорабатывать, а какие нет. 
    • Сталкивался с такими запущенными решениями. Очень часто можно было встретить такое поведение разработчиков: никто не знает что это за функция, где она используется и можно ли ее вообще изменять. Поэтому я добавлю новую! Со своими фичами и багами! :) Думаю, Вы понимаете к чему это потом приводит...
  3. Вы делаете тиражируемое решение и внутренне качество должно быть на уровне. С появлением неиспользуемых модулей в таком решении его сопровождение может стать проблемным. Как для Вас, так и для клиентов из-за нескончаемого потока багов...

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

От простого...

Допустим, из-за причин выше у Вас появилась необходимость удалить процедуру / функцию из конфигурации или внешних отчетов / обработок. У Вас могут быть и другие причины :) В любом случае, нам уже известен модуль, где располагается эта процедура / функция, названия метаданных и содержимое этого модуля. Как действовать дальше?

Метод "На продакшене все и узнаем"

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

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

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

Мы этот вариант особо описывать не будем, ведь с ним и так все понятно. Надеюсь что эти "bad practice" Вы не используйте вне зависимости от масштаба информационной системы / базы.

Метод "Ручной поиск"

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

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

А вот так выглядит поиск по файлам внешних отчетов и обработок. Заметите знакомые обработки, попавшие в поиск? :)

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

Например, если нужно найти где используется функция "ТолькоЦифрыВСтроке" из общего модуля "СтроковыеФункцииКлиентСервер", то в глобальном поиске лучше использовать следующее значения поиска:

  • "СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(" - то есть полный путь к вызову функции.
  • ".ТолькоЦифрыВСтроке(" - только имя функции.

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

// ...
СтроковыеФункцииКлиентСервер
	.ТолькоЦифрыВСтроке(
// ...

Плюс ко всему, глобальный поиск не сможет помочь, если вызов идет каким-нибудь таким способом:

Модуль = ОбщегоНазначения.ОбщийМодуль("СтроковыеФункцииКлиентСервер");
Если Модуль <> Неопределено Тогда
	Результат = Модуль.ТолькоЦифрыВСтроке(КакоеТоЗначение);
КонецЕсли;

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

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

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

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

Метод "Добавить метку"

Идем дальше, становимся более осторожными. Особенно если уже набили шишек на рабочей базе и потеряли премию. Есть способ точно узнать используется ли модуль, процедура, функция или отдельный фрагмент кода с практически 100% гарантией, но это потребует некоторого времени. Вернемся к той же функции, что и в предыдущем примере:

РезультатПроверки = СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(ИсходнаяСтрока);

Содержимое функции, которое я взял из "Библиотеки стандартных подсистем", выглядит так:

// Проверяет, содержит ли строка только цифры.
//
// Параметры:
//  Значение         - Строка - проверяемая строка.
//  Устаревший       - Булево - устаревший параметр, не используется.
//  ПробелыЗапрещены - Булево - если Ложь, то в строке допустимо наличие пробелов.
//
// Возвращаемое значение:
//   Булево - Истина - строка содержит только цифры или пустая, Ложь - строка содержит иные символы.
//
// Пример:
//  Результат = СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке("0123"); // Истина
//  Результат = СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке("0123abc"); // Ложь
//  Результат = СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке("01 2 3",, Ложь); // Истина
//
Функция ТолькоЦифрыВСтроке(Знач Значение, Знач Устаревший = Истина, Знач ПробелыЗапрещены = Истина) Экспорт
	
	Если ТипЗнч(Значение) <> Тип("Строка") Тогда
		Возврат Ложь;
	КонецЕсли;
	
	Если Не ПробелыЗапрещены Тогда
		Значение = СтрЗаменить(Значение, " ", "");
	КонецЕсли;
		
	Если СтрДлина(Значение) = 0 Тогда
		Возврат Истина;
	КонецЕсли;
	
	// Если содержит только цифры, то в результате замен должна быть получена пустая строка.
	// Проверять при помощи ПустаяСтрока нельзя, так как в исходной строке могут быть пробельные символы.
	Возврат СтрДлина(
		СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить(
		СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( 
			Значение, "0", ""), "1", ""), "2", ""), "3", ""), "4", ""), "5", ""), "6", ""), "7", ""), "8", ""), "9", "")) = 0;
	
КонецФункции

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

Думаю, по названию Вы уже догадались. Нужно добавить сохранение каким-либо способом в логи информацию о вызове. Это можно сделать:

  • Через запись в журнал регистрации, если он используется и программный код находится на сервере. На клиенте делать такое тоже возможно, то может потребовать затрат на клиент-серверный вызов или отложенную передачу данных с клиента на сервер для записи в журнал.
  • Через замер времени операции с помощью подсистемы "Оценка производительности" из БСП.
  • Можно нагородить своих "костылей" и записывать информацию в отдельный регистр сведений.

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

Функция ТолькоЦифрыВСтроке(Знач Значение, Знач Устаревший = Истина, Знач ПробелыЗапрещены = Истина) Экспорт
	
	#Если Сервер Тогда
		
	ЗаписьЖурналаРегистрации("АнализКода.ПроверкаИспользования",
		УровеньЖурналаРегистрации.Информация,,,
		"Выполнен вызов функции СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке");
		
	#КонецЕсли
	
	// тут продолжение функции ...
	
КонецФункции

Если же использовать подсистему "Оценка производительности", то сохранение информации о вызове можно сделать так:

Функция ТолькоЦифрыВСтроке(Знач Значение, Знач Устаревший = Истина, Знач ПробелыЗапрещены = Истина) Экспорт
	
	#Если Клиент Тогда
		
	УИДЗамера = ОценкаПроизводительностиКлиент.ЗамерВремени("Использование_НаКлиенте_СтроковыеФункцииКлиентСервер_ТолькоЦифрыВСтроке",Ложь,Ложь);
	ОценкаПроизводительностиКлиент.ЗавершитьЗамерВремени(УИДЗамера, Ложь);
		
	#ИначеЕсли Сервер Тогда
		
	НачалоЗамера = ОценкаПроизводительности.НачатьЗамерВремени();
	ОценкаПроизводительности.ЗакончитьЗамерВремени("Использование_НаСервере_СтроковыеФункцииКлиентСервер_ТолькоЦифрыВСтроке", НачалоЗамера);
		
	#КонецЕсли

	// тут продолжение функции ...
	
КонецФункции

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

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

Метод "У меня все в логах записано"

И тут нам на помощь приходит, барабанная дробь, технологический журнал! Для получения информации о вызове функции "ТолькоЦифрыВСтроке" настроим сбор ТЖ с помощью следующей настройки:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
 <dump create="false"/>
 <log location="F:\Logs1С\" history="168">
  <event>
   <eq property="name" value="scall"/>
   <like property="context" value="%СтроковыеФункцииКлиентСервер%ТолькоЦифрыВСтроке%"/>
  </event>
  <property name="all"/>
 </log>
</config>

Делаем отбор событий исходящего удаленного вызова (SCALL) с отбором по контексту (context). В контексте как-раз и хранится стэк вызовов. В результате в ТЖ будут попадать следующие события:

45:59.073005-1,SCALL,5,process=rphost,p:processName=trade_11_4,OSThread=16444,t:clientID=354,t:applicationName=1CV8C,
t:computerName=YY-COMP,t:connectID=30,SessionID=2,Usr=Администратор (ОрловАВ),AppID=1CV8C,DBMS=DBMSSQL,
DataBase=YY-COMP\trade_11_4,ClientID=362,Interface=b3711610-b248-42aa-a215-5d7150a5f7fd,
IName=IClusterMiscUtils,Method=0,CallID=1893457,MName=isItTimeToGetLocks,DstClientID=3062,
Context='
Форма.Вызов : ВнешняяОбработка.ПроверкаИспользованияКода.Форма.Форма.Модуль.ВызватьНаСервереНаСервере
    ВнешняяОбработка.ПроверкаИспользованияКода.Форма.Форма.Форма : 9 : ТестВызова();
        ВнешняяОбработка.ПроверкаИспользованияКода.Форма.Форма.Форма : 32 : Результат = СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке("231313А");
            ОбщийМодуль.СтроковыеФункцииКлиентСервер.Модуль : 359 : НачалоЗамера = ОценкаПроизводительности.НачатьЗамерВремени();
                ОбщийМодуль.ОценкаПроизводительности.Модуль : 21 : Если ОценкаПроизводительностиВызовСервераПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда
                    ОбщийМодуль.ОценкаПроизводительностиВызовСервераПовтИсп.Модуль : 19 : Возврат Константы.ВыполнятьЗамерыПроизводительности.Получить();'

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

Но для клиентского приложения поиск вызовов отловить сложнее. Событие "SCALL" также может быть отловлено на стороне клиента, но стэк вызовов формируется несколько иначе. В нем нет явной информации о вызове функции "СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке" как на стороне сервера. Вместо этого в стэке присутствует программный клиентский код, влияющий на вызовы. Надежного способа поиска выполнения кода на клиенте я так и не нашел, но радует что клиентская часть чаще всего не является проблемой.

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

Вместо заключения

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

  • Проверка на пользователях. Самый ужасный способ :)
  • Глобальный поиск по конфигурации, расширениям и файлам внешних отчетов и обработок.
  • Через добавления записи события в лог при вызове кода и последующий анализ собранных данных.
  • И в конце рассмотрели вариант с использованием технологического журнала.

Может показаться, что все эти способы очень замороченные и на практике их использовать очень проблематично. Ну, кроме первого способа :). На самом деле никто не мешает их комбинировать как это обычно приходится применять мне:

  1. Сначала ищем использование с помощью глобального поиска и изменяем / удаляем код там где найдем.
  2. Добавляем запись метки в лог при вызове анализируемого кода.
  3. Если вызовы до сих пор остаются и не удается найти откуда именно они выполняются, то задействуем технологический журнал.

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

На этом все.

А как Вы решаете подобные задачи? Добро пожаловать в комментарии, если есть что дополнить.

Другие ссылки

  • К сожалению, похожих публикаций не заметил. Дайте знать истину в комментариях :)

Авторские разработки

 
 Другие разработки (8 штук, бесплатные и за $m)

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Evg-Lylyk 4223 03.08.20 10:48 Сейчас в теме
Познавательно конечно, но все предложенные методы не очень.
Тема востребованная, думаю это должно решатся инструменты типа АПК, SonarCube
3. пользователь 03.08.20 11:01
(1) как активный пользователь JetBrains Resharper мне очень не хватает подобного для разработки на платформе 1С.
У меня есть мечат, что что-то подобное появиться и в "желтой" экосистеме. Это было бы намного лучше SonarCube, потому что применялось бы в активной фазе процесса разработки, а не после коммита в репозиторий.

Но так да, это все олдскульные способы проверки.
Плюс Сонар, АПК никак не помогут, если код для анализа в правилах конвертации или приходит из другой системы как в примере из статью. Но это никак не уменьшает значимости его использования!
2. VKislitsin 894 03.08.20 10:58 Сейчас в теме
Юрий, по названию статьи я предположил, что речь пойдет о том как обнаружить неиспользуемый код - возможно об альтернативе функционалу Конфигуратора "Проверка конфигурации" с установленным флажком " Поиск неиспользуемых процедур и функций".
В статье же описано как проверить что некий метод действительно нигде не используется. Подскажите, как всё же Вы находите те методы, которые затем проверяете на использование описанными способами?
CratosX; a_a_burlakov; Дмитрий74Чел; artbear; SagittariusA; user1147832; YPermitin; CyberCerber; tormozit; +9 Ответить
4. пользователь 03.08.20 11:03
(2) обычно это такие случаи:

Нужен был метод какой-либо, а в системе их подобны 4. Делаем рефакторинг и переносим в один общий модуль, чтобы код не дублировать. В местах, где этот метод уже не нужен делаем проверки, иногда не быстрые :)

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

Осторожность, паранойя...
5. tormozit 6872 03.08.20 11:13 Сейчас в теме
(2) Я тоже испытал подобное чувство после прочтения. Думаю стоит изменить название статьи.
CratosX; Дмитрий74Чел; artbear; YPermitin; +4 Ответить
6. пользователь 03.08.20 11:14
(5) предлагайте варианты.

Возможно исправлю, но не сразу. Голосование! :)))
28. CratosX 111 13.02.22 06:57 Сейчас в теме
(6) вам же уже предложили, добавить слово "проверить" в заголовок: Как проверить, используются ли функции и процедуры в коде.
7. CyberCerber 980 03.08.20 11:45 Сейчас в теме
Тоже ожидал увидеть либо, что есть поиск в конфигураторе при проверке конфигурации, либо предупреждение "на лету" в EDT
artbear; YPermitin; +2 Ответить
8. sapervodichka 6465 03.08.20 11:57 Сейчас в теме
У меня концепты такие: 1) Если функционал легко обновляемый, даже если не работающий, то его не нужно трогать (пусть будет и будет законсервирован, иначе можно удалить из благих намерений и сломать программу). 2) Если функционал не нужный и сложно обновляемый, то при переходе на новый релиз вы его и удалите и проверите работоспособность. 3) Если функционал не нужный и ресурсоемкий, то вы его вычислите после жалоб на медленную работу и отключите. =))) А вот прям чтобы сидеть и выискивать ненужный код.... сильно сомневаюсь, что это кому-то нужный оплачиваемый позитив. А вот методы описанные в статье, про подключение к новым доработкам замеров производительности и проверки таким образом частоты вызовов и работоспособности функционала - это очень полезная вещь! +1
SerVer1C; nekit_rdx; shard; zqzq; YPermitin; &rew; +6 Ответить
9. VKislitsin 894 03.08.20 12:47 Сейчас в теме
(8)
ние к новым доработкам замеров производительности и проверки таким образом частоты вызовов и работоспособности функционала - это очень полезная вещь! +1

На мой субъективный взгляд, самый полезный прием из описанных - это с использованием ТЖ. Писать вызовы методов в ЖР или РС ЗамерыВремени мне представляется "засорением", тем более, что еще и требует вставки кода для этого. Но, вероятно, в каких-то случаях и эти способы имеют право на применение.
YPermitin; +1 Ответить
10. sapervodichka 6465 03.08.20 12:55 Сейчас в теме
(9) я имею ввиду новые документы, новые справочники, обработки разрабатываемые в конфе (к аналогичным типовым объектам замеры подключаются и это не является засорением, а является частью APDEX технологии, а вот к новым доработкам их редко подключают, а следовало бы иначе объекты выпадают из APDEX анализов встроенных во все новые конфы)
YPermitin; +1 Ответить
11. VKislitsin 894 03.08.20 13:11 Сейчас в теме
(10)
я имею ввиду новые документы, новые справочники, обработки разрабатываемые в конфе

Дмитрий, Вы как эксперт, полагаю, не забываете добавлять в новый функционал замеры производительности. И уж точно не так как предложено в статье, а по всем правилам: начало как можно раньше, окончание - как можно позже.
Засорением я назвал использование подсистемы не по назначению. Здесь приведено её использование в "побочных" целях. Замер начинается и завершается в одном месте. Если эти записи не удалить из РС ЗамерыВремени, то Ключевая операция "Использование_НаСервере_СтроковыеФункцииКлиентСервер_Только­ЦифрыВСтроке" исказит (приукрасит) показатель APDEX потому что всегда выполняется мгновенно. И чем больше будет таких записей, тем лучше будет выглядеть общий APDEX. Особенно красивым он будет, если вызов СтроковыеФункцииКлиентСервер_ТолькоЦифрыВСтроке найдется в каком-нибудь частом цикле.

Упс, похоже промахнулся веткой. Отвечал Дмитрию на (10)
YPermitin; +1 Ответить
12. sapervodichka 6465 03.08.20 13:18 Сейчас в теме
(11) Виталий, (норм, я увидел) со всем согласен "Нужно делать так как нужно, а как не нужно - делать не нужно", как говорил Винни Пух ))
nekit_rdx; YPermitin; VKislitsin; +3 Ответить
13. PerlAmutor 129 03.08.20 19:24 Сейчас в теме
В сервере не хватает модуля сбора статистики - профайлера, который бы собирал информацию по всем вызовам, в том числе длительность, количество и объемы оперириуемых данных. Чтобы можно было построить "Heat-map" по всему дереву конфигурации с именами функций и методов. Целиком для сервера (на сколько бы кластеров он не был разнесен).

На основе статистики можно было бы собирать динамический вариант конфигурации. Например не выкачивать 1.5Гб ERP из БД и не загружать всю конфигурацию в каждый rphost, а собирать её исходя из используемых участков и объектов метаданных и дополнять в процессе использования. Тоже самое и для пользовательского кэша. Обновили конфигурацию - проверили контрольные суммы объектов метаданных, увидели изменения - скачали только недостающее.
nekit_rdx; bulpi; AlexKo; sapervodichka; YPermitin; +5 Ответить
14. sapervodichka 6465 04.08.20 01:23 Сейчас в теме
(13) Влад, прив, мысль Агонь! (всё по делу)
YPermitin; +1 Ответить
15. makfromkz 33 04.08.20 14:27 Сейчас в теме
В типовой разве нет в конфигураторе проверки модулей конфигурации?
ByNiko1984; +1 Ответить
16. ByNiko1984 05.08.20 08:49 Сейчас в теме
(15) статья о другом. Про практику больше. Хотя заголовок немного может обманывать
17. tormozit 6872 05.08.20 09:12 Сейчас в теме
Еще замечание. Авто анимация - не всегда хорошо. В данной статье ярко прочувствовал, как она отвлекает и мешает читать текст. Даже если она показывает что то очень полезное, оно очень быстро становится запомненным и потом только мешает. Снова призываю вместо авто анимации делать видео, чтобы при чтении текста GIF-анимация не отвлекала. А вот когда уже я захочу посмотреть видео, я нажму, посмотрю, остановлю его и буду спокойно читать дальше. К тому же в видео есть пауза - в ряде случаев очень полезна возможность, отсутствующая в авто анимации.
CratosX; VKislitsin; YPermitin; +3 Ответить
18. пользователь 05.08.20 09:24
(17) мне видео наоборот очень не нравится. Это совсем другой тип контента, а анимация проще во всех смыслах. Я подумаю над вышесказанным :)
19. user721756 05.08.20 10:15 Сейчас в теме
Коллеги, пожалуйста, расставьте запятые - текст читается с большим трудом и в режиме "угадайка". Казнить нельзя помиловать.
YPermitin; +1 Ответить
20. пользователь 05.08.20 10:36
(19) ок, перепроверю вечером, поправлю :)
21. kosmo0 107 07.08.20 09:16 Сейчас в теме
Три месяца проверки на использование - с моей точки зрения автор очень оптимистичен.

Обычно делал так :
- потенциальный код на удаление комментировал (обязательно дата когда код закомментировали, сообщение программисту почему закомментировали, и срок через который это все можно удалить - уважайте программиста который, возможно, будет работать после вас),
- вставлял команду на запись в журнале регистрации,
- ОБЯЗАТЕЛЬНО УВЕДОМЛЕНИЕ ПОЛЬЗОВАТЕЛЮ что обработка данных не будет выполнена и что он ДОЛЖЕН СООБЩИТЬ ОБ ЭТОМ в такой-то отдел (можно даже телефон или мыло указать).

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

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

Можно держать список таких удаляемых фрагментов, можно при очередном обновлении увидеть "ненужный" кусок кода, определить сколько времени пользователи не применяли данный код (заодно прошерстить журнал регистрации на сообщения) - если не использовалось более года удалить.
Дмитрий74Чел; YPermitin; +2 Ответить
22. пользователь 07.08.20 09:19
(21) полностью согласен, 3 месяца это обычный срок. Но бывают и места в коде, где год и более. Если знаешь конфигурацию, то примерно представляешь где и в какой срок проверять.

Но иногда и год может не помочь, к сожалению (:
23. It-developer 20 07.08.20 13:25 Сейчас в теме
Я писал лет 5 назад обработку по удалению неиспользуемого. Неиспользуемый искал через конфигуратор ("Проверка конфигурации" с установленным флажком " Поиск неиспользуемых процедур и функций"). Из того что написано в статье более-менее это ТЖ, но когда-то был негативный опыт работы с ним поэтому тоже минус, все остальное - очевидно. Я думал будет какой-то "умный" поиск, который будет анализировать код
24. tezin 574 26.10.20 12:33 Сейчас в теме
YPermitin, проверка с флажком "Поиск неиспользуемых процедур и функций" не анализирует экспортные методы общих модулей, т.к. видимо считается что данные методы могут вызываться не только внутри самой конфигурации. Что используете для поиска устаревших экспортных методов общих модулей?
user1464234; FatPanzer; +2 Ответить
25. FatPanzer 26.10.20 12:39 Сейчас в теме
(24) Да, понятие "неиспользуемые методы" - довольно-таки скользкое в отношении экспортных.
Поручик; +1 Ответить
26. tezin 574 26.10.20 13:11 Сейчас в теме
(25) ну вердикт "к удалению" в этом случае точно должен человек выносить
но инструментов для поиска этих "подозреваемых" я пока что то не нашел
сейчас свою обработку пилю (уже закончил практически), но может есть что то готовое
27. Поручик 4637 18.01.22 16:12 Сейчас в теме
В хозяйстве всё пригодится. В нашей конфигурации не то что код, остались даже модули и объекты со времён ранних версий, которые давным-давно не используются. Вычищать барахло большого желания нет, так как это потребует реструктуризации баз в нескольких конторах. Оно мне по ночам надо, учитывая, что конторы работают чуть ли не в режиме 24/7?
29. kser87 2363 01.03.22 11:28 Сейчас в теме
Помимо неиспользуемого кода еще могут быть ненужные, устаревшие объекты: справочники, документы, предопределенные данные. Сталкивался также с такими ситуациями:

1) в базе огромное количество проверок на устаревший функционал. Например, настроена дата перехода на новый механизм учета ОС. и в коде повсюду проверки на нее. Закешированы, но все равно их количество огромно и АПДЕКС проседает.

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

См. также

Шаблоны для применения cтандартов и методик разработки конфигураций 1С

Рефакторинг и качество кода Платформа 1С v8.3 Абонемент ($m)

Готовые шаблоны текста для применения cтандартов и методик разработки конфигураций 1С, инструментарий. Версия платформы 8.3.22.1851.

5 стартмани

04.06.2023    4023    15    improg    17    

26

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

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

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

16.05.2023    2556    leobrn    11    

46

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

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

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

15.05.2023    3871    improg    54    

55

5 недостатков кода, из-за которых его сопровождение превращается в ад

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

О сопровождаемости кода. Коротко и в легкой форме. Какие проблемы с кодом бывают, как их решать.

27.04.2023    1675    wonderboy    18    

9

Анализ контекстных вызовов

Инструментарий разработчика Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

11.03.2023    1610    1    Sirruf    0    

3

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

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

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

26.02.2023    2581    kraynev-navi    10    

47

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

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

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

06.02.2023    3104    biimmap    9    

29

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

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

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

13.01.2023    3888    aleksei_adamov    10    

45

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

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

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

05.01.2023    5409    ardn    161    

40

Оптимизация хардкода

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

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

1 стартмани

07.12.2022    1750    1    shard    44    

5

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

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

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

01.12.2022    4891    kuzyara    42    

78

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

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

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

15.11.2022    1147    shastin87    5    

9

Вскрытие статического анализа кода проектов 1С

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

Для анализа кода многие используют SonarQube с плагинами для 1С, 1С: АПК и т. д. Но не многие знают, как все это работает. Олег Тымко на конференции Infostart Event 2021 Post-Apocalypse рассказал о внутреннем устройстве статического анализа кода и рассмотрел интересные ошибки, которые можно найти в проектах на 1С.

18.10.2022    3106    olegtymko    7    

22

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

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

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

20.06.2022    1316    user1374747    0    

7

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

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

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

03.06.2022    3161    Enigma    3    

22

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

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

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

02.06.2022    7661    TimofeySin    67    

65

Проверка программного кода посредством BSL LS

Рефакторинг и качество кода Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

30.05.2022    2901    6    burlakov    3    

9

Мастер-класс SonarQube. В омут с головой

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

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

19.05.2022    11620    nixel    84    

132

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

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

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

16.05.2022    6160    ardn    44    

56

Phoenix BSL: правим ошибки "не отходя от кассы"

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

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

11.05.2022    4654    mas_kot    11    

46

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

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

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

03.12.2021    5523    q_i    161    

71

Стек технологий для 1С

Инструментарий разработчика Рефакторинг и качество кода Групповая разработка (Git, хранилище) Механизмы платформы 1С Бесплатно (free)

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

29.11.2021    32573    mrXoxot    63    

429

Как читать чужой код? Часть 3. Разбор и доработка запросов

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

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

20.09.2021    5202    biimmap    35    

39

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

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

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

20.09.2021    13353    biimmap    55    

139

Где баланс между производительностью и возможностями программы ? Исправление автоподбора контрагента в УНФ

Рефакторинг и качество кода HighLoad оптимизация Адаптация типовых решений Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Россия Управленческий учет Абонемент ($m)

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

1 стартмани

27.08.2021    6541    0    con-men    0    

8

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

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

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

02.08.2021    16606    ivanov660    77    

142

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

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

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

19.07.2021    13127    ivanov660    121    

69

Автоматизация расчета покрытия кода тестами

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

На Infostart Meetup, посвященном DevOps-технологиям, с докладом о том, как автоматизировать расчет покрытия кода, выступил программист компании 42Clouds Станислав Косолапов. Станислав рассказал об инструменте собственной разработки для таких задач и показал работу решения на практике.

21.05.2021    6689    amoarok    14    

67

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

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

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

17.05.2021    11708    Shining_ninja    99    

129

Как контролировать качество внешних обработок, отчетов, правил обмена, расширений 1С и поставить это на поток

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

Если код написан качественно, его легче развивать и дешевле поддерживать. О том, как организовать контроль качества кода в ручном и автоматическом режиме, и какие инструменты могут в этом помочь, на INFOSTART MEETUP Новосибирск.Online рассказал Олег Тымко.

09.04.2021    8805    olegtymko    26    

112

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

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

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

07.04.2021    5354    SergeyN    13    

39

Как быстро развернуть автоматическую линию проверки своего решения на 1С, затратив 8 часов и получив выигрыш в 1 человеко/месяц

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

У разработчиков 1С уже есть все инструменты, позволяющие использовать современные инженерные практики в 1С. О том, как за 8 часов внедрить автоматические проверки для решений на 1С, снизить в них количество глупых ошибок, а также высвободить ресурсы на более интеллектуальную работу на INFOSTART MEETUP Ekaterinburg.Online рассказал Артур Аюханов.

05.04.2021    8873    artbear    16    

111

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

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

Учебный курс по теории и практике программирования. Бесплатно. В виде структурированного текста. Статья 4. Эта статья посвящена причинам возникновения проблем с качеством кода и методикам их преодоления.

22.03.2021    3073    Артано    6    

17

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

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

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

02.02.2021    5761    RPGrigorev    23    

40

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

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

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

07.12.2020    16499    arcius_7012    21    

84

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

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

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

16.11.2020    10088    ivanov660    23    

11

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

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

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

04.11.2020    2477    vasilev2015    25    

5

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

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

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

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

14