Модернізація застарілих систем за допомогою АІ-агентів: мейнфрейми, ERP та нішевий код
Сучасні підприємства часто залежать від програмного забезпечення, що створювалося десятиліттями, мовами, такими як COBOL (мейнфрейми), SAP ABAP, PL/SQL або VB6. Ці застарілі системи важко змінювати та дорого підтримувати. На щастя, нові АІ-агенти для кодування та шаблони проєктування тепер дають змогу поступово модернізувати застарілі стеки. У цій статті ми досліджуємо, як інструменти на основі ШІ допомагають аналізувати та переписувати старий код, а також описуємо перевірені шаблони (фасади інтерфейсів, підхід «душителя», автоматизоване тестування) для поступової заміни застарілої функціональності. Ми також розглядаємо походження даних, контроль ризиків, планування відкату та реальну рентабельність інвестицій проти потенційних підводних каменів. Навіть новачки можуть навчитися, як почати: ШІ тепер «розблоковує» кодування, перетворюючи застарілий код на зрозумілу документацію або новий код, тож кожен може зробити перший крок до модернізації старої системи.
АІ-агенти для кодування застарілого коду
АІ-агенти для кодування — це інструменти, які використовують машинне навчання (часто великі мовні моделі) для читання, аналізу та навіть переписування коду. Вони можуть працювати із застарілими мовами, які жоден член команди не знає досконало. Наприклад, новий інструмент Kozuchi AI від Fujitsu може аналізувати програми на COBOL та миттєво генерувати зрозумілі для людини проєктні документи (global.fujitsu). WatsonX Code Assistant для Z від IBM використовує ШІ для перетворення функцій COBOL на високоякісний Java, направляючи розробників через кожен крок (www.ibm.com). А відкритий вихідний код Legacy Modernization Agents від Microsoft (на GitHub) використовує Azure OpenAI та GitHub Copilot для аналізу COBOL і генерування еквівалентних сервісів Java або .NET (github.com). Ці агенти збирають бізнес-логіку та потоки даних, приховані в старому коді, і допомагають будувати нові компоненти навколо них.
Ключова привабливість АІ-агентів полягає в тому, що будь-хто може почати їх використовувати. Вам не потрібно писати код вручну; замість цього ви видаєте підказки або використовуєте спеціалізовані інструменти. Наприклад, новачок міг би скопіювати невелику процедуру COBOL або VB6 у ChatGPT і попросити її узагальнення простою англійською мовою або псевдокод. Агент «розуміє» структуру коду та може запропонувати сучасні еквіваленти. Це демократизує модернізацію – неексперти можуть досліджувати застарілу логіку без ручного перегляду коду. Багато постачальників тепер об’єднують АІ-агентів у доступні платформи: рішення Capgemini для модернізації SAP використовує генеративний ШІ для автоматичного документування коду ABAP, зменшуючи вдвічі зусилля на тестові сценарії та перетворення (www.sap.com). Важливе застереження – людський нагляд: агенти прискорюють процеси, але розробники все ще перевіряють результат. Отже, АІ-агенти для кодування прискорюють виявлення та відображення застарілих систем, скорочуючи тижні ручного аналізу до днів або хвилин (blog.naitive.cloud) (global.fujitsu).
Мапування інтерфейсів: Адаптери, фасади та накладки
Одним із викликів модернізації є мапування інтерфейсів між новими компонентами та застарілим ядром. Поширеним рішенням є інтерфейсний адаптер або фасадний шар. Наприклад, системи ERP часто залишаються «системою обліку», тому нові інтерфейси користувача або сервіси повинні взаємодіяти з ними через чисті API. Архітектура накладання (або «рівень досвіду») знаходиться між користувачами та старою ERP. Вона перекладає сучасні виклики в інтерфейс старої системи і навпаки (sysgraft.com) (sysgraft.com). Цей шар адаптера обробляє мапування даних, перетворення автентифікації, обробку помилок та буферизацію. (Наприклад, він може мапувати застарілі назви полів на нову доменну модель, ставити в чергу записи, коли стара система повільна, та стандартизувати коди помилок.) Ізолюючи цей код, ви можете пізніше переписати або замінити ERP за фасадом, не змінюючи зовнішнього інтерфейсу. Цей шаблон гарантує, що ви можете поступово впроваджувати покращені екрани та сервіси, а адаптер перекладатиме між світами (sysgraft.com) (aws.amazon.com).
Інший підхід полягає у використанні API Gateway або Facade як точки входу. AWS ілюструє це у патерні «душитель» для локальних систем: вони розміщують API Gateway перед застарілою програмою, а потім створюють нові мікросервіси за ним. Усі виклики проходять через один і той же фасад API, незалежно від того, чи обробляється запит старим монолітом, чи щойно розгорнутим сервісом (aws.amazon.com) (aws.amazon.com). Це підтримує послідовний інтерфейс для клієнтів, тоді як частини системи «душать» старий моноліт. З часом більше кінцевих точок перенаправляються на нові реалізації (наприклад, спочатку лише читання даних зі старої системи, а потім запис нових даних у новий сервіс).
На практиці мапування інтерфейсів часто поєднує ці ідеї: ви розгортаєте шар адаптера перед застарілою системою та відкриваєте новий API або веб-інтерфейс. Нові модулі викликають адаптер замість безпосередньої взаємодії з застарілими таблицями баз даних або екранами. Це ізолює старі та нові частини та полегшує перенаправлення викликів. Якщо новий сервіс ще не готовий, адаптер проксіює трафік назад до застарілого коду. Якщо новий сервіс виходить з ладу, трафік може повернутися до старої системи (докладніше про відкат нижче). Створюючи цю «прокладку», ви можете модернізувати одну частину функціональності за раз, не ламаючи все (martinfowler.com).
Шаблон міграції «Фіг-душитель»
Пов’язаним патерном високого рівня є підхід до міграції Strangler-Fig (Фіг-душитель). Запроваджений Мартіном Фаулером, він порівнює лозу, яка поступово обростає дерево і згодом замінює його (martinfowler.com) (aws.amazon.com). Замість одного великого переписування, ви поступово замінюєте функції старої системи на нові. На ранньому етапі ви додаєте невеликі покращення як окремі сервіси, які працюють поруч (або поверх) застарілого коду. З часом ці нові сервіси поглинають все більше бізнес-логіки, доки стара система не оброблятиме лише винятки. Нова функціональність і навіть деякі старі функції тепер знаходяться в новому коді, і старий моноліт нарешті можна буде вивести з експлуатації (martinfowler.com) (martinfowler.com).
Фаулер виділяє чотири кроки для модернізації «душителем»: (1) Зрозуміти бажані результати; (2) Розбити проблему на частини; (3) Успішно реалізувати частини; (4) Змінити організацію, щоб підтримувати це (martinfowler.com). На практиці це може означати виявлення ключової бізнес-можливості (наприклад, введення замовлення), її переробку в новому сервісі (Node.js, .NET тощо), а потім написання коду адаптера, щоб виклики замовлень надходили до нового сервісу замість застарілої програми. Оскільки це робиться частинами, ризик зменшується: кожна нова частина може бути запущена і принести цінність негайно (martinfowler.com). Наприклад, у прикладі AWS програма спочатку обробляла лише прості запити «лише для читання» через новий фасад API, а потім додала операції запису для підмножини користувачів (sysgraft.com). На кожному кроці система продовжувала працювати для користувачів.
АІ-агенти для кодування допомагають у міграції за методом «душителя», швидко створюючи або рефакторингуючи ці нові компоненти. Наприклад, агент може прочитати застарілу логіку COBOL щодо «розрахунку бонусів співробітникам» і згенерувати еквівалентну функцію Java або Python. Потім ви розгортаєте її як сервіс за шаблоном «душителя». Ключем до успіху є створення перехідних інтерфейсів: код, який існує лише до завершення міграції. Багато команд відмовляються від додаткового «зайвого» коду для з'єднання старого та нового, але ця перехідна логіка (маршрутизація, синхронізація даних тощо) робить поступову міграцію можливою з меншим ризиком (martinfowler.com) (aws.amazon.com).
Автоматизований тестовий стенд для застарілого коду
Один урок з невдалих міграцій полягає в тому, що невиявлені помилки можуть паралізувати переписування. Щоб безпечно модернізувати, вам потрібен комплексний автоматизований тестовий стенд навколо застарілої системи. На практиці це означає написання тестів на декількох рівнях та їх інтеграцію в конвеєр збірки:
- Модульні тести: Перевіряють окремі функції або модулі. У застарілому коді бізнес-логіка може бути прихована у великих процедурах. Агенти можуть допомогти, пропонуючи модульні тести: наприклад, попросивши АІ-агента запропонувати приклади входу-виходу для застарілої функції. Інструменти та фреймворки (наприклад, сучасні засоби запуску тестів COBOL або PL/SQL) можуть виконувати застарілий код проти цих тестів.
- Інтеграційні тести: Перевіряють, чи коректно взаємодіють модулі. Наприклад, якщо ваш новий накладний шар записує дані в базу даних ERP, інтеграційний тест гарантує, що наскрізний потік (введення в інтерфейсі користувача до оновлення в ERP) все ще працює. Агенти можуть допомогти, автоматично генеруючи запити на основі інтерпретації визначень інтерфейсів.
- Наскрізні (E2E) тести: Імітують повні робочі процеси користувача. Перед міграцією ви встановлюєте золоті послідовності операцій (вхід, створення рахунку-фактури тощо). Краулери або фреймворки, такі як Cypress/Playwright, можуть автоматизувати виклики GUI або API для цих потоків. Це надзвичайно важливо: це виявляє проблеми, які не може виявити жоден модульний тест.
- Регресійні тести: Страховка – кожного разу, коли ви рефакторингуєте або перемикаєте функцію, запустіть весь свій набір, щоб переконатися, що нічого іншого не зламалося. Характеристичні тести (класична застаріла техніка) особливо корисні: вони записують поточні вихідні дані застарілого коду для заданих вхідних даних і стверджують, що новий код відповідає цій поведінці (eden-technologies.eu). Іншими словами, тести фіксують те, що код насправді робить, тож вам не потрібно знати, чому він це робить.
Експерти наголошують, що регресійне тестування є найважливішим шаром (polcode.com). Перед будь-якими змінами переконайтеся, що у вас є тести, які охоплюють основну функціональність. Почніть з захисту критично важливих потоків: замовлення, рахунки, затвердження – все, що безпосередньо пов'язано з доходом або відповідністю вимогам (teamvoy.com). Потім розширте тести на крихкі або часто змінювані області (модулі з багатьма попередніми помилками). Вам не потрібно робити все одразу; створюйте свій набір ітеративно. Наприклад, коли тестувальник знаходить помилку, напишіть новий тест для цього сценарію. Протягом місяців послідовних зусиль навіть скелетний набір може вирости настільки, щоб виявляти серйозні регресії (polcode.com) (eden-technologies.eu).
ШІ також може автоматизувати аспекти тестування. Наприклад, АІ-тестові платформи (як деякі інструменти CI/CD) можуть генерувати наскрізні тести на основі намірів з специфікацій природною мовою (polcode.com). Агент може сканувати застарілий код та документацію, а потім пропонувати тестові випадки. У модернізації SAP інструменти Capgemini обіцяють автоматизувати генерацію тестових сценаріїв зі зменшенням зусиль приблизно на 40% (www.sap.com). А галузевий аналіз Naitive показав, що написання тестів все ще часто займає 40–50% застарілого проєкту, але ШІ може різко скоротити цей показник (blog.naitive.cloud). Концептуально, ви могли б подати журнал завдань COBOL або застарілий потік інтерфейсу користувача в LLM, щоб отримати зразкову послідовність дій для тестування. Незалежно від цього, людина повинна перевіряти пропозиції ШІ; метою є впевненість, що новий код відповідає старій поведінці перед реінтеграцією.
Походження даних та контроль ризиків
Модернізація застарілих систем — це не лише про код — дані також повинні переміщуватися або залишатися послідовними. Походження даних означає відстеження того, звідки походить кожен елемент даних і як він перетворюється. Без чіткого походження майже неможливо забезпечити точність і відповідність мігрованої системи. Наприклад, коли дані мейнфреймів (часто у форматі EBCDIC) переміщуються на сучасну платформу, підприємства вимагають судової хеш-мапінгу та процесів ланцюжка зберігання (www.solix.com) (www.solix.com). На практиці це означає обчислення криптографічних хешів даних на кожному етапі, щоб ви могли довести, що вони не були змінені. Це також означає логування кожного кроку ETL: кожен витяг, перетворення або завантаження підлягає аудиту. Без цього аудитори або регулятори можуть не довіряти вашій новій системі.
Якість даних — це величезна зона ризику. Сучасний посібник попереджає, що більшість невдалих міграцій застарілих даних відбулися не через технології, а через «брудні» дані, скопійовані безпосередньо (www.taleofdata.com). Дублікати записів, приховані пропуски полів або непослідовні формати, які потрапили в стару систему, можуть отруїти нову, якщо їх не вирішити. Важливо виконати профілювання та очищення даних перед міграцією, а не просто покладатися на інструмент ETL для переміщення байтів. Команди повинні запитати: Чи ми ідентифікували дублікати записів клієнтів і вирішили, як їх об'єднати? Чи буде кожне «важливе» поле (навіть рідко використовувані) відображатися в нову схему? Чи існує чіткий план відкату, якщо ми пізніше виявимо помилки міграції? (www.taleofdata.com).
Контроль ризиків починається з перевірки даних на кожному кроці. Мігруйте контрольованими партіями: наприклад, спочатку перемістіть історію транзакцій за п'ять років, перевірте точність звітів, а потім продовжуйте з рештою. Використовуйте сценарії узгодження: після кожної партії перевіряйте, чи збігаються кількість рядків та контрольні суми. Якщо з'являються розбіжності, зробіть паузу та очистіть дані, а не рухайтеся далі. Зберігайте резервну копію (або журнал транзакцій) вихідних даних, щоб ви могли відновити будь-яку невдалу партію без повторного запуску всієї міграції. У випадках високих ставок ви можете навіть запускати вихідну та цільову системи паралельно протягом деякого часу (подвійний запис), щоб усі нові оновлення надходили до обох систем, доки нова не буде повністю підтверджена. По суті, створюйте захисні бар'єри, як у виробничому середовищі: моніторинг, оповіщення та швидкі тригери відкату (www.solix.com) (www.taleofdata.com).
Стратегії відкату
Незважаючи на ретельне планування, міграції можуть зіткнутися з проблемами. Чітка стратегія відкату є обов’язковою для обмеження впливу. Точний підхід залежить від вашої толерантності до ризику та часового вікна простою. Ось поширені варіанти:
- Безпечна реплікація: Підтримуйте синхронізацію старої бази даних з новою системою. Наприклад, використовуйте захоплення змін даних (CDC) в обох напрямках. Після переключення продовжуйте реплікацію з нової системи назад до старої. Якщо щось піде не так, ви можете миттєво перезапустити стару систему без втрати записів (www.cockroachlabs.com). Це використовується при хмарних міграціях (наприклад, AWS DMS, CockroachDB failback).
- Подвійний запис або паралельний запуск: Модифікуйте код програми (або використовуйте інтеграційне проміжне програмне забезпечення), щоб записувати кожну транзакцію в застарілу та нову системи протягом пробного періоду (www.cockroachlabs.com). Тоді, якщо нова система вийде з ладу, просто перенаправте клієнтів назад до застарілого середовища. Подвійний запис означає, що при відкаті не втрачаються нові дані, але це подвоює накладні витрати на запис і складність.
- Ручне переключення + знімок: Для випадків дуже низького ризику зробіть остаточний знімок застарілої бази даних, переключіть користувачів на нову систему та покладайтеся на ручне узгодження даних, якщо виникнуть проблеми. Це прийнятно лише, якщо ви можете миритися з деякими потенційними невідповідностями та маєте час для їх виправлення.
- Прапорці функцій / часткове переключення: У підході «душителя» контролюйте, що надходить до нового та старого, за допомогою конфігурації. Якщо виникає проблема в новому компоненті, ви можете вимкнути його (перенаправляючи запити назад до застарілої системи) без відкату коду. Це схоже на дуже детальний відкат на рівні API.
Незалежно від методу, заздалегідь визначте критерії відкату та керівництва з експлуатації (www.cockroachlabs.com). Наприклад: Якщо показник помилок перевищує X, або критичні дані не проходять перевірку, ініціюйте кроки відкату. Недавній огляд підкреслює відповідність складності відкату вашим потребам: Якщо критично важливо уникнути втрати даних, впровадьте двосторонню реплікацію або подвійний запис; якщо допустима незначна втрата, то може бути достатнім ручний відкат (www.cockroachlabs.com). Важливо: протестуйте свої процедури відкату перед великим переключенням, щоб команда знала, як їх виконувати під тиском.
Рентабельність інвестицій (ROI) модернізації
Природно турбуватися про вартість модернізації. Однак реальні випадки показують, що ROI може бути дуже високим. Застарілі системи часто споживають 60–80% ІТ-бюджету лише на підтримку старого коду (blog.naitive.cloud) (blog.naitive.cloud). Порівняно з цими поточними витратами, одноразове оновлення може швидко окупитися. Галузевий аналіз припускає, що модернізація за допомогою ШІ може скоротити витрати проєкту приблизно на 70–80%. Наприклад, ручне перетворення програми на 50 000 рядків може коштувати 240 тис. доларів; за допомогою інструментів ШІ вона може впасти до 57 тис. доларів (приблизно 76% зниження) (blog.naitive.cloud) (blog.naitive.cloud). Цей розрахунок включає робочу силу, забезпечення якості та вартість інструментів. На практиці багато фірм повідомляють про 5-річну ROI в 200–400%, часто досягаючи беззбитковості за 1–2 роки (blog.naitive.cloud) (blog.naitive.cloud).
Конкретних історій успіху безліч. Deloitte описує штат США, який уникнув переписування системи підтримки дітей COBOL вартістю 200 мільйонів доларів та тривалістю 10 років, використовуючи автоматизований рефакторинг у Java на хмарі (www2.deloitte.com). Вони завершили це за 18 місяців, звільнивши бюджет для сучасних сервісів. Нідерландський страховик (NN Group) перетворив понад 10 мільйонів рядків COBOL на Java та скоротив витрати на ІТ-платформу на 80%, окупивши інвестиції менш ніж за три роки (blog.naitive.cloud). Навіть у менших масштабах помічники ШІ можуть прискорити виявлення та кодування: один бенчмарк посилався на міграцію застарілої системи, яка скоротилася з 8–11 місяців до приблизно 2 місяців за допомогою агентів, при цьому витрати на робочу силу впали приблизно на 183 тис. доларів для кодової бази на 50 тис. рядків (blog.naitive.cloud) (blog.naitive.cloud).
Звичайно, ROI залежить від таких факторів, як постійна економія на обслуговуванні, зменшення простоїв та «альтернативна вартість» нових функцій. Автоматизуючи рутинну роботу, АІ-агенти звільняють кваліфікованих розробників для створення нових продуктів, а не для нагляду за старими системами. Вони також зменшують ризик талантів: менше фірм потребують експертів з COBOL або VB6, якщо ШІ може обробляти застарілу логіку. Загалом, організації вважають модернізацію повного стека більш доступною та швидкою, ніж будь-коли, особливо якщо вона виконується поступово.
Підводні камені та винесені уроки
Хоча ШІ та патерни приносять переваги, є й застереження. По-перше, галюцинації та помилки ШІ реальні: генеративні інструменти можуть винаходити код або документацію, що виглядає правдоподібно, але є невірною. Рішення Fujitsu вирішує цю проблему, використовуючи пропрієтарний накладений граф знань, який зменшує галюцинації під час генерації дизайн-документів (global.fujitsu). У вашому проєкті завжди перевіряйте вихідні дані ШІ на відповідність відомим посиланням або прикладним запускам.
По-друге, тестування залишається вузьким місцем. Навіть якщо конвертація коду швидка, тестування часто все ще займає 40–50% графіку (blog.naitive.cloud). Багато команд недооцінюють це. Ви повинні приділяти час надійним конвеєрам CI та, можливо, генерації тестів за допомогою ШІ. Не економте на покритті тестів. Застарілий код за своєю природою крихкий, а недостатні тести є поширеною причиною невдач.
По-третє, проблеми з даними часто зривають проєкти. Як зазначалося, успіх технічної міграції безглуздий, якщо якість даних низька. Нездатність профілювати та очищати дані призвела до того, що багато міграцій генерували нову зламану систему (www.taleofdata.com) (www.taleofdata.com). Інвестуйте в контрольний список даних: дедуплікація, мапування кожного поля та залучення бізнес-стейкхолдерів для визначення того, що означають «чисті» дані (www.taleofdata.com). Створюйте звіти про узгодження до запуску, щоб виявляти помилки на ранніх етапах.
По-четверте, розширення обсягу та невідповідність функцій можуть здивувати команди. Застарілі системи часто мають приховану бізнес-логіку та вбудовані хаки. Не припускайте, що поведінка старої системи повністю зрозуміла. Використовуйте характеристичні тести (як описано раніше), щоб фіксувати поточну поведінку, та залучайте доменних експертів для пояснення незвичайних випадків. При міграції інтерфейсу користувача або API плануйте запасний варіант, коли старий інтерфейс залишається, доки новий не буде доведений як еквівалентний.
Нарешті, зміни людей та процесів мають значення. Патерни, такі як «Душитель», вимагають організаційного схвалення: команди повинні прийняти нові гнучкі практики або командні структури, щоб старе і нове співіснували під час переходу (martinfowler.com). Примусити бізнес-підрозділи прийняти поетапні розгортання, а тестувальників – вивчити нові інструменти, так само важливо, як і сам код. Як зазначає Фаулер, без культурних змін нова система може виявитися такою ж заплутаною, як і стара (martinfowler.com).
Початок роботи: Перші кроки
Для читачів, які прагнуть спробувати модернізацію ШІ самостійно, ось практичний спосіб почати:
- Проінвентаризуйте невеликий модуль. Виберіть обмежену функціональність (наприклад, окрему програму COBOL, функціональну групу ABAP або форму VB6). Зберіть її вихідний код та будь-які приклади вхідних даних.
- Дозвольте ШІ пояснити це. Використовуйте інструмент, як ChatGPT або помічник з кодування на основі ШІ. Вставте код (або ключові витяги) і попросіть короткий опис або псевдокод. Наприклад: «Поясніть бізнес-логіку цього коду COBOL:…». Агент виділить цикли, обчислення та використання даних простою мовою. Це поєднує людське розуміння з застарілим синтаксисом.
- Згенеруйте тест або документ. Попросіть агента створити тестовий випадок для цього коду. Або попросіть його вивести діаграму чи схему API того, що робить цей модуль. Ви можете безкоштовно отримати початковий модульний тест або дизайн-документ.
- Створіть тестовий стенд. Навіть простий скрипт, який викликає старий код з тестовими вхідними даними та перевіряє вихідні дані, встановлює базовий рівень. Якщо агент надав вихідні дані, перевірте, чи вони відповідають фактичній програмі (ця перевірка також навчить вас помічати помилки ШІ).
- Сплануйте новий інтерфейс. Вирішіть, як ця функціональність житиме в новій архітектурі. Чи стане вона мікросервісом REST? Хмарною функцією? Намалюйте контракти даних (ви можете запитати агента: «Перетворіть цей застарілий вихідний формат у поля JSON»).
- Використовуйте інструмент для зразкової міграції. Наприклад, репозиторій Microsoft Legacy-Modernization-Agents містить демонстраційні агенти для COBOL. Або спробуйте пробну версію інструмента, такого як PhoenixCode (який підтримує Delphi, PowerBuilder, VB6 тощо), щоб побачити автоматизовані перетворення для вашої мови.
- Залучіть свою команду. Поділіться вихідними даними ШІ з колегами або бізнес-аналітиками. Перевірте з доменним експертом: «Чи цей переклад правильний?» Продовжуйте ітерувати.
Перший наступний крок – це просто експеримент. Виберіть некритичну частину застарілого коду та запустіть її через інструмент ШІ. Пограйте з підказками, доки не отримаєте значущу конвертацію або пояснення. Цей малоризиковий експеримент дає уявлення як про обіцянки, так і про особливості цих агентів. Звідти ви можете перейти до офіційної фази «душителя»: визначити першу функцію, яку потрібно «задушити», та написати необхідний код адаптера.
Висновок: Модернізація застарілих систем більше не означає читання 40-річного COBOL за допомогою ліхтарика або наймання дефіцитних експертів. АІ-агенти для кодування та розумні архітектурні патерни відкрили двері навіть для новачків, щоб досягти прогресу. Використовуючи інкрементальні методи (фасади API/накладки та міграція «Душителя»), створюючи надійні автоматизовані тести (включаючи характеристичні тести) та плануючи перевірку даних і відкат, організації можуть безпечно трансформувати старі стеки. ROI може бути значним, оскільки дослідження показують скорочення витрат вдвічі або більше. Ключовим є дотримання дисципліни: перевірка вихідних даних ШІ, залучення бізнес-користувачів для визначення правильності та не пропускання «сантехніки», як-от тести та логування. Почніть з малого, ітеруйте та вчіться з кожного модернізованого фрагмента. Завдяки цим інструментам і практикам 30-річна система може еволюціонувати в щось гнучке та готове до майбутнього – і наступна людина зможе впевнено поєднати вашу нову модернізовану систему.
Auto