О бедном стажере замолвите слово: автоматическая проверка Академии 1С-Битрикс
- Суть статьи одним предложением
- Как в ИНТЕРВОЛГЕ построен процесс обучения разработчиков
- О модуле проверки Академии intervolga.edu
- Что дальше?
Суть статьи одним предложением
Мы разработали модуль, который проверяет часть практических заданий уроков обучающего курса Академия 1С-Битрикс.
Как в ИНТЕРВОЛГЕ построен процесс обучения разработчиков
ИНТЕРВОЛГА давно построила свой процесс обучения новых сотрудников и лучше всего он отлажен на backend-разработчиках. Их у нас много, в произвольный момент времени во всей компании не меньше 5-ти стажеров, а в “сезон” количество доходит до 10. Приоткроем завесу тайны, что мы со всеми этими людьми делаем.
Один из наших основных инструментов — продукт «1С-Битрикс: Управление сайтом» (БУС). Многие процессы в компании выросли вокруг продукта и обучения ему сотрудников. А обучающие курсы датированы 2012 годом… Более того, ИНТЕРВОЛГА по заказу вендора разрабатывала добрую часть этих материалов и знает эту медаль со всех сторон.
В каждом отделе есть наставник (в других компаниях используется слово “ментор”, но у нас сложилось именно так), опытный программист, который и сам работает, и другим помогает. За каждым наставником закреплено несколько разработчиков рангом помладше. После успешного собеседования новички закрепляются за наставником и отправляются на свое первое задание: разработать на php без фреймворков CRUD-интерфейс нескольких таблиц. Мы любим это задание, потому что оно позволяет увидеть сильные и слабые стороны нового бойца:
-
как он организует обработку URL и роутинг;
-
как он организует файлы проекта;
-
насколько он DRY и насколько его классы SOLID (если ООП вообще используется);
-
как он управляется с уровнями абстракции;
-
какое количество строк в методах считает правильным;
-
насколько знаком с веяниями последних версий PHP;
-
и т.п.
Все это интереснее и показательнее, чем вопрос работоспособности и багов. Да и после собеседования на работу выходят только те, у кого все хорошо с алгоритмами и пониманием веба. С поддержкой наставника новенький решает задачу. Кто-то быстро — за пару рабочих дней. У кого-то, особенно если это еще студент, задача занимает пару недель.
Но это только присказка — сказка впереди.
После CRUD’а мы отправляем новенького проходить обучающие курсы Академии 1С-Битрикс:
-
Интеграция дизайна и настройка платформы
-
Основные технологии и расширение типовых возможностей системы
-
Расширенные технологии и производительность
Тут нужно помнить, что создавались эти курсы во времена БУСа 12-ой версии и назвать всю информацию актуальной никак нельзя. Поэтому каждому следующему стажеру наставники говорили «вот тут уже неправда» или «а тут надо делать не так, как на видео». Со временем из таких заметок, передаваемых из уст в уста, сформировалось письменное предание. Мы назвали этот документ «Руководство по прохождению обучающих курсов Академии 1С-Битрикс в ИНТЕРВОЛГЕ» и стали прикладывать к задачам на прохождение Академии.
К 2023-му документ разросся до 27 страниц. Уточнения к Академии близки к тому, чтобы перегнать саму Академию :)
Потом в документе появились популярные ошибки и упреждающие ответы на частые вопросы. Что легко забыть при установке обновлений? Как выбирать названия для папок? Как избежать нежелательного подключения bootstrap.css? И почти сотня других советов, примечаний и просто умных мыслей.
Так наши наставники повысили качество обучения, но и усложнили себе жизнь. Проверять нужно было МНОГО и ХОРОШО. Это важный труд, требующий времени. Нельзя оставить какой-нибудь урок на последние 15 минут рабочего дня. Счет шел на слоты размером минимум по полчаса.
В этом году «Руководству…» исполнится 7 лет. Возможно, это будет последний его день рождения, так как осенью 2022-го мы подошли к проблеме обучения с неожиданной стороны.
Мы решили, что большая часть заданий Академии проверяется достаточно просто, хоть и долго. Настройки модулей, компонентов, папки, файлы и т.п. Для всего этого в «1С-Битрикс: Управление Сайтом» есть не только UI, но есть и API. Который можно использовать и написать скрипт, который без участия наставника сказал бы стажеру: «ты молодец, ты все сделал правильно». А наставнику останется только поставить галочку в нужном месте в трекере задач.
Все началось с тестов, которые проверяли обновление системы и ошибки из «Проверки системы». Польза была налицо и мы дали зеленый свет внутренней разработке под названием «Проверка Академии / Модуль intervolga.edu».
Мы опробовали модуль на стажерах и наставниках, и не думаем останавливаться. Автор этой статьи тоже иногда притворяется наставником и совершенно непредвзято оценивает пользу от модуля как неоценимую. Если конкретно — уроки 3, 6 (тот самый, где стажеру надо сделать 2 инфоблока и переодеть 4 компонента news.list), 9 и 11 первого курса, 2, 3, 7 и 8 второго и 8 третьего курса занимают теперь в разы меньше времени для проверки. Если раньше по результату проверки количество замечаний доходило в некоторых случаях до 30, теперь самые простые ошибки срезаются и стажер допускает ошибку в 10-15 местах.
О модуле проверки Академии intervolga.edu
Потратив 4-мя разработчиками 650 часов за 5 месяцев мы написали 107 тестов по заданиям Академии. Код открытый https://github.com/intervolga/intervolga.edu
Установка простая — архив с модулем нужно распаковать в папке /local/modules/ (а скоро появится возможность устанавливать модуль через Маркетплейс) и установить на странице панели управления «Решения Маркетплейс».
После этого на странице Рабочий стол ⇒ Настройки ⇒ Настройки продукта ⇒ Настройки модулей ⇒ Проверка Академии будет доступна страница отчета о проверке. Отчет обновляется в момент открытия страницы. Тесты не нагружают систему, мы не стали выносить их в отдельный фоновый или асинхронный процесс.
Задумка была, чтобы модуль мог сам проверить простые задания и помочь наставникам проверять сложные. Для этого нужно было решить несколько разноплановых задач.
-
Собственно, сами тесты. Как проверить обновления через API? Настройки шаблонов сайта? Как найти компонент?
-
Расширяемая структура модуля, чтобы несколько людей могли спокойно работать, не мешая друг другу.
-
Информирование стажера об уточнениях к задачам. Таскать с собой «Руководство» уже не хотелось, раз мы шагнули в эпоху интерактива.
-
Главный враг автоматизатора — произвол в заданиях. “Сделайте модуль”, “создайте раздел” — а как модулю узнать, как новый модуль или раздел называются? Это тоже нужно было определить.
-
Никто не идеален, поэтому в модуле должна быть возможность поспорить с роботизированным наставником.
-
Все должно быть кликабельным. По заданию нужно создать Инфоблок, компонент и шаблон? Даже если модуль все проверил и доволен, живому наставнику нужны ссылки на Инфоблок в панели управления, на страницу с компонентом, на папку с файлами шаблона. И уж тем более ссылки нужны в сообщениях модуля для стажера вида “В папке Х нет нужного файла Y”.
Тесты
Исходный код модуля открыт. Комментировать построчно классы не будем, просто поделимся впечатлениями. Мы забрались в такие недра платформы, что некоторые наши senior-разработчики диву давались. В ежедневной разработке проектов, даже высоконагруженных и распределенных, нет необходимости использовать API системы обновлений или монитора качества.
Другой пример: мало кто знает о существовании таблицы в БД b_component_params, в которую «1С-Битрикс: Управление сайтом» сохраняет все вызовы компонентов. Мы узнали и начали ей пользоваться для поиска компонентов и шаблонов. Также нам редко доводилось самим парсить свойства разделов и страниц, виджеты, гаджеты …
В какой-то момент мы поняли, что для полноценного тестирования нам не обойтись без статического анализа кода. Такой инструмент уже был. Мы воспользовались парсером и механизмом стандартов кода из библиотеки PHP_CodeSniffer. Правда, одним стандартом дело не обошлось: сейчас их 4 (общий, шаблон компонента, старый класс, компонент с кешированием).
Структура модуля/компонента/шаблона …
Раз Академия поделена на курсы, то и мы поделили модуль так же. Курсы у нас — это набор уроков. Уроки — это набор тестов. Каждый тест создается в виде отдельного PHP-файла с классом.
Есть собственные внутренние концепции и API. Например, Файловые структуры (filestree) и Локаторы (locators), о которых расскажем в разделе о стажерском произволе.
Во всех курсах и в документации разработчикам рассказывают, из чего состоит модуль, шаблон сайта, компонент, шаблон сайта и показывают примерно такую картинку.
Структура модуля из официальной документации
Чтобы не проверять это раз за разом глазами наставника, мы сделали класс CustomModuleTree, который знает, какие папки и файлы обязательно должны быть (install, include.php), какие могут быть (lang, options.php), а каких быть ни в коем случае нельзя (classes всё). Мы сделали десятки проектов, в которых средствами БУСа проверяли выгрузки файлов заказчика — но впервые проверяли БУС средствами БУСа!
Информирование
Самая простая часть с точки зрения техники. Перед тестами мы добавили выдержки из того самого «Руководства…».
Формализуем полет фантазии
Главная проблема, которая останавливала нас раньше от написания подобных скриптов — многообразие имен, которые стажер может дать своим разработкам.
Пример. 2-ой курс, урок 5.1 «Создание собственных компонентов». Нужно создать компонент списка вакансий. Где его искать наставнику? Раньше он открывал свою IDE (у нас корпоративный стандарт PhpStorm от JetBrains), и искал там по очереди папку local, папку components, папку с компонентами (та еще шарада, стажер мог назвать ее custom, my или hahaha) и дальше – что-нибудь со словами vacancy и list. В особо тяжелых случаях компонент мог называться spisok_vakansiy.
Мы решили просто добавить определенности и для каждого задания выбрали 5-6 допустимых вариантов, полученных по формальным и неформальным правилам самой компании «1С-Битрикс». Например, компонент, который выводит список вакансий, может называться «vacancy.list» или «vacancies.list». Любые другие варианты модуль проигнорирует и подскажет воспользоваться одним из предложенных. Список не окончательный, мы сможем его дополнить в любой момент и выпустить обновление модуля.
Такой же подход мы реализовали во всем: агенты, обработчики событий, классы, свойства инфоблоков…
Все это мы назвали Локаторами. Локатор либо успешно находит свою цель, либо жалуется в результатах теста, что все пропало и рассказывает, где и как искал.
Цифровизируем споры
Мы сделали в простейшем виде возможность оспорить результат проваленного теста — 1 кнопкой «Не согласен».
возможность оспорить результат проваленного теста
Нашлось место даже «пасхалочке» — если у текущего пользователя установлен в профиле пол, кнопка это учтет.
Пока кнопки нам хватает, так как наставник и стажер физически сидят рядом и всегда могут обсудить разногласия. По этой же причине нет ролевой модели и проверки прав, нет (хотя напрашивается) полей «Напишите, почему вы не согласны» и «Приложите файлы». Доверие и поддержка, как и должно быть в здоровой ИТ-компании.
Минимум лишних действий наставника
Модуль может проверить, что стажер не забыл создать свойство инфоблока и сделал шаблон сайта. Но достоверно установить, что все в порядке, может только наставник. И раз уж у нас есть Локаторы для поиска, грех ими не воспользоваться. Каждый Локатор умеет не только находить, но и генерировать ссылки. Это кажется небольшим подспорьем, но в работе наставника это действительно важно.
Сколько ссылок будет достаточно для папки или файла? Одна? Две? Нет. У нас целых три варианта, чтобы уж точно никто не ушел обиженный
-
Путь к папке. Для любителей глазами увидеть путь в браузере и, по старинке, гулять по файловой структуре в PhpStorm.
-
Ссылка на папку в панели управления «1С-Битрикс: Управление сайтом». Если нужно глянуть одним глазком без переключения в IDE.
-
Кнопка «Копировать путь» для гуру горячих клавиш, которые ее используют с комбинацией Ctrl+Shift+N и сразу прыгнут к нужной папке в IDE.
Для всего, кроме файлов и папок у нас есть ссылки на страницы сайта и его панели управления.
Что дальше?
В дальнейших планах ИНТЕРВОЛГИ простой и понятный процесс — каждое замечание, которое пропустил модуль, но заметил наставник, автоматизировать. Научиться видеть запросы в циклах, закомментированные куски кода и разработать «нулевой курс» (за все хорошее против всего плохого), который будет проверять базовые вещи: запрет на индексацию SEO, наличие свежих бекапов, соблюдение стандартов кодирования. Потенциальная сфера применения модуля шире, чем просто проверка 3-х курсов Академии в первые месяцы работы.
Мы опубликовали модуль и его исходные коды, чтобы сообщество Битрикс-разработчиков могло с ним познакомиться и помогло сделать лучше. Мы принимаем предложения по развитию, но поддержка не будет отвечать на вопросы «я что-то нажал и все исчезло». Это инструмент для умных и проактивных.
Обучаетесь по курсам Академии сами? Устанавливайте модуль, сразу учитесь правильным трюкам и половина собеседования в ИНТЕРВОЛГУ у вас в кармане. Обучаете по этим курсам своих программистов? Сравните ваши критерии хорошей работы с нашей и разгрузите наставников.
Ссылка на модуль и на его исходный код:
Статьи по теме
- аренда команды (от 2 человек, не менее 3 месяцев);
- итерации с фиксированной ценой (1-3 месяца длительностью).
- регулярные онлайн-планерки с заказчиком;
- квалифицированных специалистов;
- организованную команду (находятся в одном помещении, что упрощает решение рабочих вопросов);
- полную прозрачность и регулярность отчетов о результатах.
- нагруженный интернет-магазин;
- личный кабинет;
- оптовые продажи — B2B-платформа;
- маркетплейс;
- технический аудит сайта;
- Битрикс24 — корпоративные HR-порталы;
- Битрикс24 — построение CRM-системы;
- Битрикс24 — личные кабинеты сотрудников;
- Битрикс24 — аудит портала;
- 1С — интеграция с другими системами;
- 1С — доработка системы;
- маркетинг — комплексное интернет-продвижение;
- маркетинг — продвижение для B2B.