Внутреннее качество разработки конфигураций 1С

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

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

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

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

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

1. Ошибки в требованиях и архитектуре на порядок(ки) хуже ошибок в коде

Написание кода "на коленке" приводит  к непредсказуемым доработкам в самом ближайшем будущем.

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

И тут выясняется, что ограничивать нужно по нескольким статусам проекта, а не по 1-му.

Пример 2: Ограничили по нескольким статусам (как и нужно), но допустили ошибку в форме ввода трудозатрат из проекта. Ошибку выявили только пользователи.

Чувствуете разницу?

Способ следования тезису:

Тщательное продумывание требований и архитектуры.

2. Код должен читаться как книга

Немного теории: исследования гласят, что при внесении изменений в чужой код тратится 60% на чтение и только 40% на собственно изменения.

Пример:

Представим метод ЗаполнитьТовары(ДокументОбъект, Параметр1, параметр2, ...Параметр10) с общей целью: заполнить ТЧ Товары документа.

Доработка: Нужно сделать так, чтобы при определенном условии добавлялось 2 строки товаров, а не одна. 

Вроде как нет проблемы, метод найден, цель понятна. Кодер, радостно разминая пальцы, с возгласами "Ща за 15 минут сделаю и на обед :))" приступает к работе.

Через полчаса бормотаний, на 700-ой строчке единственного метода маячит долгожданный текст

ДокументОбъект.Товары.Добавить() 

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

- анализ условий добавления строк;

- формирование дополнительных данных для заполнения строк;

- собственно добавление строк.

Шаги алгоритма настолько перепутаны, что нужно вносить дополнительные условия через каждые 50 строк "размазанного" кода.

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

Опять немного теории: средний человек может манипулировать в голове максимум 5-7 взаимосвязанными объектами одновременно. Под объектом понимаем любые данные, относящиеся к текущим размышлениям. Применимо к программированию, например, мы помним назначение входных и выходных параметров метода, их тип, порядок присвоения. Можно представить это как буфер (или оперативную память человека). Процесс манипулирования этими данными называется метким термином "умственное жонглирование". Есть, конечно, уникумы, способные на жонглирование более, чем 7 объектами. Такие способности можно развить. Вопрос в том, а нужно ли это?

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

А кто не слышал или сам не восклицал с чувством гордости:

"Я такой хитрый код сегодня наваял!". 

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

Готовы проявить такую же хитрость в расширении этого же кода спустя полгода :) ??

Источники проблемы: 

- отсутствие понимания назначения метода (подсистемы, модуля)

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

- отсутствие комментариев или наличие слишком технических комментариев.

Способы решения задач управления сложностью известны уже лет 40. Многие их читали, но немногие используют/не хотят использовать. Перечислю только наиболее базовые:

1) Каждый метод приводит к достижению одной конкретной цели

2) Количество параметров метода не должно превышать 5-7. Превышение - не преступление, но "звоночек" для того, чтобы задуматься о правильности логики метода.

3) Метод содержит дейстия одного уровня абстракции. 

Пример из реальности: 

Строительство дома - это:

- подготовка фундамента

- подвод коммуникаций

- возведение стен

- настил крыши.

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

Мы скрыли (выполнили инкапсуляцию) данного требования на уровне ручки, ручку на уровне двери, дверь на уровне стены.

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

4) Понятные имена методов, переменных, объектов метаданных.

5) 1 метод - не более 1-го экрана текста. Рекомендация относительная, но полезная.

6) Целевые комментарии к шагам алгоритма.

Список рекомендаций можно продолжать дальше.

3. Не жалейте свой код

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

Способы следования тезису:

- рассматрировать код обработки как черновик, который неизбежно станет мусором

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

4. Тестирование выявляет только явные ошибки

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

Способы следования тезису: 

- чтение и тщательный анализ своего кода.

- подход в собственном тестировании "хочу добиться ошибки", а не "подтверждаю корректность".

Общие соображения

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

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

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

Следствие: дефицит опытных специалистов 1С, при, казалось бы, избыточном общем предложении.

Опытному РП достаточно 5 минут, что оценить качество кода при приеме на работу.

Так что стремитесь к совершенству!

P.S. В статье только часть "правил хорошего тона". При наличии времени хочу написать еще 1-2 статейки на данную тематику

Начать дискуссию

Бесплатно с Страховые взносы

Как ИП в 2024 году уменьшить налог по УСН на страховые взносы в размере 1% и отправить уведомление. Мини-курс

Разбираем в мини-курсе, как ИП на УСН в 2024 году уменьшить налог на страховые взносы в размере 1% и нужно ли отправлять уведомление.

Как ИП в 2024 году уменьшить налог по УСН на страховые взносы в размере 1% и отправить уведомление. Мини-курс

Курсы повышения
квалификации

20
Официальное удостоверение с занесением в госреестр Рособрнадзора

За майнинговую ферму могут посадить на 6 лет

В Краснодарском крае следователи отправили на скамью подсудимых подозреваемого в мошенничестве с майнинговой фермой.

Экосистемность как единственно верная стратегия развития ИТ-продукта для крупного заказчика

Цифровая трансформация и автоматизация процессов последние 15 лет были настоящим трендом. Сегодня время диктует свои условия бизнесу — мало просто усовершенствовать процесс, нужно посмотреть на него более глобально. 

Иллюстрация: Вера Ревина/Клерк.ру
Лучшие спикеры, новый каждый день

«Бесплатная» юридическая помощь обошлась клиентам в 5,5+ млн рублей

В Хабаровске окончено расследование уголовного дела о мошенничестве при оказании юридических услуг.

18

Инвестиции. Способы и особенности пассивного дохода в России 2024 

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

Иллюстрация: Вера Ревина/Клерк.ру

⚡️ Итоги дня: биткоин упал на 5%, космический мусор пробил крышу дома, а Касперский анонсировал новый отечественный смартфон

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

34
Опытом делятся эксперты-практики, без воды

Как получить путевку в санаторий бесплатно

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

Иллюстрация: Вера Ревина/Клерк.ру

Совет Федерации одобрил закон о повышении оплаты сверхурочной работы

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

«Шестое Правило Волшебника». Хроники перехода с 7-ки на 8-ку.

«Существует единственная власть, которой ты можешь подчиниться - это власть разума».

«Шестое Правило Волшебника». Хроники перехода с 7-ки на 8-ку.
Зарплата

К каким расходам относить компенсацию за задержку зарплаты

В Трудовом кодексе закреплено, что работодатель обязан выплачивать компенсации (проценты) за задержку зарплаты и других выплат, присужденных работнику судом. Это значит, что выплаченные суммы можно относить расходам, уменьшающим базу по прибыли. А к каким именно и в каком размере? Прописали в ТК.

Иллюстрация: Вера Ревина/Клерк.ру

Роскачество наглядно показало, какой пароль безопасный

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

Банки

Модульбанк запустил B2B переводы по СПБ

Модульбанк представил новые B2B переводы через систему быстрых платежей (СБП), позволяющие юрлицам и ИП проводить моментальные платежи круглосуточно.

Миникурсы, текстовые и видеоинструкции для бухгалтеров

Что новенького на «Клерке»: релизы, новые опросы, курсы по охране труда — все, что нельзя пропустить

Подготовили обзор изменений на сайте, которые уже произошли в апреле. Каждый день делаем пребывание на «Клерке» интереснее и удобнее с помощью нашего IT-отдела. Будем знакомить вас с работами, которые мы проделываем (а вы не всегда их замечаете). Обязательно пишите в комментариях, что улучшить на сайте, чего не хватает, если заметили баги — вам тоже сюда.

Фото: Наталья Лукина / Клерк.ру

Работодатели не могут уменьшать ставку мобилизованных сотрудников

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

Учет офисных расходов при УСН

Офис — это не только место, в котором трудятся сотрудники. Это еще и дополнительные обязательные расходы, которые несет регулярно компания. Причем таких затрат бывает куда больше, чем может показаться на первый взгляд. В статье разъяснено, какие расходы на содержание офиса может понести налогоплательщик, если он находится на упрощенной системе налогообложения (УСН). Также прописано, как при данной системе учитывать подобные затраты.

Иллюстрация: Вера Ревина/Клерк.ру

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

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

Бесплатно с Уведомление по ЕНП

Какие налоги войдут в уведомление по ЕНП в апреле 2024 года

В уведомлении за апрель не будет взносов. Будет и НДФЛ с 1 по 22 апреля и квартальные авансовые платежи по другим налогам.

Какие налоги войдут в уведомление по ЕНП в апреле 2024 года

Секреты управленческого учета для бухгалтеров маркетплейсов

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

Секреты управленческого учета для бухгалтеров маркетплейсов
Экспорт

Экспорт не подтвержден в течение 180 дней: почему не будет ни уточненки, ни пеней

С 1 января 2024 года вступила в силу норма, принятая еще в 2022 году. Она касается нового порядка определения налоговой базы по НДС по неподтвержденному экспорту.

Иллюстрация: Вера Ревина/Клерк.ру

Интересные материалы

ЭДО

❌ С 18 по 21 апреля может не получиться сдать отчетность в налоговую. Эксперт: оштрафовать не должны, а в срок техработ ФНС может не уложиться

По информации Управления электронного документооборота ФНС и операторов ЭДО с 18 по 21 апреля 2024 года возможны задержки при приеме и обработке налоговой и бухгалтерской отчетности.

637