Платформа, яка пережила все
15 / 21

Розділ 14. На алеї

Частина III · Розділ 14

На алеї

1

Юлію я знайшов вже звичним способом — через Наталю. «Якщо хочеш про тести — наша QA-лід. Вона любить інтерв'ю на ходу, у парку. Я тобі скину контакт».

Юлія написала: «У четвер о четвертій, біля верхнього входу в Маріїнський парк. Звідти до мене пів години пішки, у мене ритуал — гуляю після обіду, перед другою половиною робочого дня. Якщо ти не проти ходи — поговоримо на ходу».

У четвер о четвертій я стояв біля верхнього входу — там, де Грушевського переходить у Маріїнський. Юлія прийшла за хвилину. Тридцять чотири роки, спортивна куртка, кросівки, у руках телефон і термокухоль. Чорне волосся, зав'язане у хвіст, очі уважні.

— Денис? Підемо лівою алеєю, там менше людей. Я люблю петлю — півгодини, повертаємось на цю саму точку. Встигнемо.

Ми пішли. Парк був майже порожнім — обідні діти у садочках, кілька бігунів, бабуся з онуком на велосипеді з третім колесом ззаду.

— З чого почати? — запитав я.
— З того, як я взагалі потрапила в 1С. Бо ти, мабуть, чекаєш зустріти класичну QA з тестинг-фреймворків. Я не з них.

2

Юлія прийшла у 1С з банку. До цього вісім років працювала тестувальницею у відомому українському банку — спочатку мануальною, потім автоматизованою, потім QA-лідом невеликої команди, що тестувала мобільний застосунок. Класичний шлях — від ручних тест-кейсів через Selenium і Appium до сучасних BDD-фреймворків.

— У двадцять другому банк скоротив команду, — каже вона. — Я залишилася без роботи. На ринку у Києві — переважно банк-фінтех, на той момент усі заморожені. Я три місяці шукала. Натрапила на оголошення цієї компанії. Шукали QA для ритейлу. Я навіть не дивилася, на чому у них стек. Прийшла на співбесіду, побачила — 1С. Я в голові: «це ж не QA, у них там нічого нема для тестування». Хотіла встати і піти.

— Чому залишилась?
— Бо мене інтерв'ював Костя. Він сказав мені: «Юліє, ми хочемо побудувати тут культуру автотестів. У нас її поки немає. У нас усе ручне. Ти приходиш на чисте поле. Через два роки у нас з'явиться CI з тестами або не з'явиться взагалі — залежить тільки від тебе». Це прозвучало як виклик, який я не могла викинути з голови.

— І як, побудували?
— Побудували. Не на сто відсотків — на тридцять. Але це у тридцять разів більше, ніж було. Я зараз тобі покажу, як це сталось.

3

— Перший рік — я просто дивилася і документувала, — продовжила Юлія. — Прийшла, побачила: тестують вручну. Перед релізом збираються три бухгалтерки з фінансового відділу і клікають. Уся їхня методика — на папері: «створити документ реалізації, провести, перевірити, що рух у регістрі є». Список з шістдесяти семи кроків. Виконують годину. Раз на тиждень.

— Це і є тестування?
— Це і є тестування у 95% 1С-світу. Якщо взагалі є. У багатьох клієнтів і цього нема — продакшен і є тестова база, бухгалтер у понеділок робить документ і дивиться, чи проводиться. Якщо проводиться — значить, працює. Якщо ні — Юра приїде.

— Чому так?
— Кілька причин. Перша — історична. 1С виросла з бухгалтерії. У бухгалтерії «тестування» — це баланс зведений чи ні. Якщо зведений — програма правильна. Якщо ні — у програмі помилка. Це функціональна перевірка на рівні домену, а не інженерна культура. Інженерну культуру у 1С ніхто не приніс.

— Друга — технологічна. Платформа довго не давала нормального способу запустити автотести. Що ти будеш тестувати? Метадані? Запити? Форми? Кожне з них — окремий рантайм, окрема залежність від бази. Без бази 1С — це нічого. А з базою — це інтеграційний тест, не unit. Інтеграційний тест повільний, складний у налаштуванні. Розробник дивиться на це і думає: «легше клікнути».

— Третя — економічна. Ми це з Наталею вже обговорювали. У франчайзі не платять за тести. Клієнт не платить за тести. Тести — це інвестиція, яка окупається через рік-два. Хто може собі це дозволити — окремі in-house. Решта — ні.

4

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

— Як з'явилася Vanessa Automation?

Юлія посміхнулась.

— Vanessa — це дитя ентузіастів. Серед них було кілька українських розробників, не пам'ятаю точно імен, у двадцятих роках я знайомилася з кількома на конференціях. Це open-source проект, який починався як експеримент: «а що, як писати тести для 1С на Gherkin?». Gherkin — це стандартна BDD-нотація, Given - When - Then, придумана у Cucumber для Ruby.

— Як це виглядає?

Вона зупинилась на лавочці, дістала телефон, показала мені приклад зі своїх записів:

Сценарій: Реалізація товарів зі складу зменшує залишок

  Припустимо я авторизована як менеджер
  І у мене є склад "Основний" із залишком товару "Олівець" 100 штук

  Коли я створюю документ "Реалізація товарів"
    | Контрагент | Товар  | Кількість |
    | ТОВ Альфа  | Олівець| 20        |
  І проводжу його

  Тоді залишок товару "Олівець" на складі "Основний" дорівнює 80
  І у регістрі "ТоварНаСкладах" є рух виду "Расход" із сумою 20

— Це читабельний сценарій, — сказала вона. — Його може зрозуміти бухгалтер. Він пишеться разом з бухгалтером, не замість нього. Це принципово для 1С-світу — у нас нема Selenium-тестерів. У нас бухгалтери і програмісти. Vanessa переклала тести на мову обох.

— Як це виконується?
— Vanessa запускає спеціальний клієнт-робот, який підключається до тестової бази, відкриває форми, клацає кнопки, заповнює поля, перевіряє результат. Сценарій з мого прикладу — це триста рядків коду під капотом, який клікає по UI, проводить документ, читає регістр, порівнює числа. Завдяки цьому я бачу UI-flow клієнта, як ніби бухгалтер сидить за комп'ютером. Якщо у формі поле перемістилося — тест падає. Якщо запит у регістрі повертає не те — тест падає.

5

— А недоліки?

Ми знову пішли далі.

— Багато. Перший — швидкість. Один сценарій — щонайменше десять секунд. Складний — хвилина. Повний smoke-suite у нас — півтори години. Що це означає? Що ти не можеш запустити всі тести на кожному пуші. Можна тільки на ніч.

— Другий — крихкість. Vanessa клікає UI. Якщо UI змінився — тест падає. Якщо змінилась назва реквізиту — тест падає. Тести з UI-фокусом завжди крихкі. Це класична проблема Selenium, тільки у 1С контексті.

— Третій — складність налаштування. Тестова база має бути детермінованою — тобто, кожен прогон стартує з одних і тих самих даних. Це означає fixtures: заздалегідь підготовлені довідники, документи, регістри. Підготувати fixtures — це окрема робота, інколи більша за самі тести.

— Як ви це вирішили?
— У нас є скрипт ініціалізації на OneScript, який створює зразкову базу з нуля за чотири хвилини. Десять контрагентів, двадцять товарів, п'ять складів, типова номенклатура цін, кадри. Тести після цього виконуються над відомою стартовою точкою. Якщо тест зробив зміни — ми відкочуємо до snapshot через дамп бази.

— А звідки ти знала, як це зробити?
— Я це вчила два роки. Це не той tooling, який у тебе з коробки. У 1С-світі — це самостійна збірка з open-source шматків. Vanessa, xUnitFor1C, OneScript, кілька наших власних обгорток. У нас зараз QA-документація на двадцять п'ять сторінок, де описано, як написати новий сценарій. Молодший QA приходить — вчиться три тижні.

6

Ми наблизились до пам'ятника Грушевському. Юлія зупинилась.

— Я хочу тобі дещо сказати, що рідко публікують.

— Кажи.

— У 1С-світі немає культури тестування не тому, що люди ліниві або не знають, як. Це глибша культурна проблема. Платформа з самого початку продавалась як проста. Послання було: «не треба бути серйозним програмістом, щоб писати на 1С». Це послання — антитеза до інженерної культури, у якій тестування — обов'язкова частина професії.

— Як це вирішити?
— Це не технічна проблема. Це проблема самоідентифікації спільноти. Поки 1С-розробники вважають себе не зовсім програмістами, а «налаштовщиками систем» — тестування їм здається зайвим. У Java-світі ніхто не питає, чи писати unit-тести. Це базова дисципліна. У 1С-світі — це дискусійна тема. Це показник рівня зрілості галузі.

— А молодші — інакше?
— Молодші, які прийшли з інших стеків — як Костя, як я — приносять цю культуру з собою. Молодші, які прийшли «з нуля у 1С» — переважно засвоюють домінантну культуру, у якій тестів немає. Через два-три роки роботи у такій культурі — складно повернутись.

— Ти бачила прогрес?
— Бачила. Між двадцятим і двадцять шостим роками — частка in-house компаній з автотестами зросла з нуля до приблизно п'ятнадцяти-двадцяти відсотків. Це повільно, але неухильно. Через десять років, я думаю, буде половина. Через двадцять — більшість. Інерція індустрії.

7

Ми йшли назад до виходу з парку, повільно.

— Філософське питання, — сказав я. — Якщо ти зараз приходиш у нову компанію, з культурою без тестів — що ти робиш у перший рік?

Юлія подумала.

— Я повторила б те, що зробила тут. Перший рік — спостереження. Я не приходжу і не кричу «нам треба тести». Я дивлюся, що болить. Який реліз падає у понеділок? Який документ ламається після оновлення? Який звіт дає неправильну суму? Я збираю болячки. Тільки коли у мене є карта болю — я починаю говорити про тести.

— Другий рік — smoke. Ми зробили двадцять тестів на найбільш болючі сценарії. Це покрило не двадцять відсотків коду — це покрило дев'яносто відсотків ризику падіння продакшену. Кожен реліз — ці двадцять тестів зелені. Якщо червоні — реліз не йде. Цього досить, щоб люди побачили цінність.

— Третій рік — розширення. Бачила, які ще болі є. Дописувала по двадцять-тридцять сценаріїв на квартал. Поступово в кожній великій підсистемі — свої тести. Не повний регрес, але карта критичних кейсів.

— Четвертий рік — це поточний, у нас близько двохсот сценаріїв. Це покриє приблизно тридцять відсотків критичної функціональності. Це не ідеал, але я можу спати по ночах.

— А unit-тести?
— Unit-тести — слабкі. У нас десь п'ятдесят unit-тестів на xUnitFor1C, переважно на критичну фінансову логіку — нарахування ПДВ, конвертація валют, розрахунок собівартості. Це функціональна точка, не покриття. Я не намагаюся вийти на 80% покриття. Я намагаюся знизити ризик у конкретних місцях.

8

— Що ти бажаєш 1С-індустрії?

Юлія усміхнулась.

— Я бажаю їй подорослішати. Прийняти, що тестування — це не лакшері, а норма. Прийняти, що бухгалтер у понеділок — не валідний тестер. Прийняти, що CI без тестів — не CI, а доставка.

— Це швидко станеться?
— Ні. Це поколіннєве. У моєї нинішньої команди — частково сталось, бо троє з семи розробників — молодші двадцяти восьми, вони звикли до тестів з університету. Старші — частково, частково ні. У наступному поколінні — буде більше.

— Що ти робиш зараз?
— Я пишу методички для нашої компанії. Раз на рік виступаю на конференції, типу тих, на яких ти був з Артемом. Не на велику аудиторію — на сорок-п'ятдесят чоловік. Цього достатньо. Я не змінюю індустрію. Я просто залишаю слід. Хтось почитає, спробує, передасть далі.

Ми вийшли з парку. Час був майже сім. Юлія підкинула термокухоль у руці.

— Тобі куди?
— До метро. А тобі?
— Я по Грушевського. Бувай. Якщо у книзі питання — пиши, я доточу. І, якщо тебе цікавить unit-test приклад — у мене є невелике саморобне рішення для модуля розрахунку ПДВ, я тобі скину.

Я подякував. Вона пішла.

9

Я стояв на верхньому вході парку, дивився на Грушевського, де вже починалась вечірня година пік. Подумав про одну річ.

На Юлії завершилася трійка героїв тієї in-house компанії, через яких я зрозумів сучасну зрілу 1С-розробку зсередини: Наталя проектує продуктивність, Костя будує інфраструктуру, Юлія пише тести. Кожен — професіонал з сусіднього стеку, який приніс свою дисципліну у 1С-світ. Зсередини це не виросло. Ззовні принесли.

Це є фундаментальною характеристикою сучасної 1С-індустрії. Її майбутнє — не в тому, щоб вона виросла сама з себе, а в тому, наскільки вона дозволяє іншим стекам зайти в неї і принести свою культуру. Поки що — повільно. Дозволяє, але обережно. Через два-три рукостискання, через знайомих знайомих.

На цьому закривається Частина III — про практику. Ми пройшли через типові конфігурації, через Розширення, через продуктивність, через git, через тести. Це не повний посібник для розробника. Це карта реальності, у якій сучасний український 1С-розробник живе у 2026-му. На ній видно, де є зріла практика, а де — порожнина. Видно — де можна виростити карʼєру, а де — застрягти.

Частина IV, остання у книзі, повертається до великого питання, з якого книга почалася. До питання, яке Антон у першому розділі сформулював простіше за всіх: «чому я не можу не писати?». Це питання про етику, право на існування, майбутнє платформи у країні, яка чотири роки воює з її батьківщиною.

Я довго думав, як зайти у цю частину. Не як памфлет. Не як виправдання. Як чесну розмову з тими, хто заплатив за цю платформу — і своїм часом, і своїм спокоєм.

Перший розділ — про той момент, коли все формально змінилось. Про указ номер сто тридцять три. Про п'ятнадцяте травня дві тисячі сімнадцятого року, коли Україна офіційно сказала 1С: ти більше тут не легально.

Розділ п'ятнадцятий. «Травень сімнадцятого». Цим відкривається Частина IV — найважча частина книги.