Перейти до вмісту
Ця стаття була перекладена з японської мови за допомогою ШІ
Читати японською
Ця стаття знаходиться в суспільному надбанні (CC0). Ви можете вільно використовувати її. CC0 1.0 Universal

Розробка, керована розвитком, та тестування, кероване рефакторингом

Розробка – це постійне створення чогось нового та корисного.

Коли ми чуємо «розробка», на думку часто спадає розробка нових продуктів. Це відрізняється від виробництва окремих продуктів; це означає створення, так би мовити, креслень або форм продукту.

Отже, проєкти та форми, створені в процесі розробки нового продукту, багаторазово використовуються на фабриках для масового виробництва ідентичних продуктів.

Існують також такі варіанти використання слова «розвиток», як розвиток індивідуальних здібностей або розвиток суспільства та нації. Це означає не просто збільшення того, що є у власності, а радше здатність багаторазово використовувати розвинені здібності та отримувати від них користь.

Хоча економічна потужність окремих осіб та суспільств може коливатися залежно від економічних умов, розвинені здібності, як правило, є постійними.

Навіть якщо вони зменшуються, це розглядається як занепад, а не як коливання, подібне до економічного процвітання.

Крім того, існує розвиток технологій та знань. На відміну від здібностей окремих осіб або конкретних суспільств, вони мають властивість легко поширюватися.

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

Шляхом розробки таких корисних результатів розширюється сфера розробки, а також підвищуються ефективність та якість.

Розробка програмного забезпечення, керована ШІ

Загалом, розробка вимагала значного часу та зусиль. Особливо в міру розвитку суспільства та ускладнення різних речей, створення нового стає все важчим.

Однак, з появою генеративного ШІ, ця ситуація змінюється. Нині розробка програмного забезпечення переживає драматичні перетворення, виграючи від високих можливостей генеративного ШІ у програмуванні.

Бачення майбутнього, де автономні агенти на базі генеративного ШІ стануть центральними в розробці програмного забезпечення як програмні інженери, вже стає реальністю.

Зараз ми перебуваємо в перехідному періоді. Хоча ми не можемо повністю довірити розробку генеративному ШІ, вправне використання генеративного ШІ може потужно прискорити розробку програмного забезпечення.

Це називається розробкою програмного забезпечення, керованою ШІ.

Розробка, керована розвитком

Коли генеративний ШІ оптимізує розробку програмного забезпечення, він може не тільки підвищити ефективність розробки кінцевого цільового програмного забезпечення, а й розробку самого програмного забезпечення, яке сприяє розробці.

Як зазначалося раніше, результати, що сприяють розвитку, розширюють сферу розробки та сприяють підвищенню ефективності та якості. Більше того, якщо їх ефективно створити, вони можуть бути повторно використані в інших проєктах розробки.

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

Традиційно, розробка такого програмного забезпечення, що сприяє розвитку, була звичайною практикою в галузі, але вона вимагала власного часу та зусиль на розробку, що вимагало ретельної оцінки та цілеспрямованої реалізації.

Використовуючи генеративний ШІ, можна швидко створювати просте програмне забезпечення для автоматизації невеликих, імпровізованих завдань. Для завдань з чіткими процесами генеративний ШІ може генерувати точні програми майже без помилок.

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

І після більш глибокого осмислення з'являється стиль розробки, коли корисні інструменти постійно розробляються під час процесу розробки, тим самим трансформуючи сам метод розробки.

Ми назвемо це Розробкою, керованою розвитком.

Щоб практикувати Розробку, керовану розвитком, потрібна звичка об'єктивно спостерігати за власною розробкою програмного забезпечення, щоб обміркувати, які частини можна делегувати програмному забезпеченню, а які — лише людям, а також навичка розробляти таке програмне забезпечення, що сприяє розвитку.

Крім того, генеративний ШІ може бути інтегрований у ці програмні інструменти. Вбудовуючи його в програмне забезпечення, на відміну від автономного генеративного агента ШІ, можна певною мірою звузити обсяг обробки та визначити чіткий шлях.

Хоча агенти ШІ можуть досягти подібних результатів за допомогою підказок, програмне забезпечення, що інтегрує генеративний ШІ, може легше підвищити точність, поєднуючи як програми, так і підказки.

Якщо можна практикувати Розробку, керовану розвитком, другий проєкт покаже покращення як якості, так і вартості порівняно з першим. Крім того, з кожним наступним проєктом — третім, четвертим тощо — покращення продовжуватимуть накопичуватися.

Це повністю відрізняється від простої розробки програмного забезпечення за допомогою генеративного ШІ. З часом виникне значний розрив між командами, які просто освоюють інструменти генеративного ШІ, та командами, які практикують Розробку, керовану розвитком.

Тестування, кероване рефакторингом

Існує концепція під назвою «розробка, керована тестами» (TDD), яка передбачає спочатку розробку тестів на основі специфікацій, а потім розробку програмного забезпечення для проходження цих тестів.

Спочатку я також вважав, що з генеративним ШІ, який полегшує розробку тестових програм для автоматизованого тестування, розробка, керована тестами, може бути практичною.

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

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

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

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

Також була частина з низькою ефективністю використання пам'яті, що вимагало повного перегляду обробки.

Саме на цих етапах рефакторингу тестування вперше стає свідомим міркуванням.

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

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

Тому ідея створення тестових програм у той момент, коли розробка досягла певного рівня, а рефакторинг стає необхідним, є непоганою.

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

Це можна назвати тестуванням, керованим рефакторингом.

Висновок

Генеративний ШІ кардинально змінює розробку програмного забезпечення.

У попередніх статтях я писав про важливість прагнення стати всебічним інженером, який може вийти за межі традиційної ролі full-stack інженера, щоб розробляти всебічні системи, що поєднують різні домени, інфраструктуру та середовища виконання.

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

Розробка, керована розвитком, та тестування, кероване рефакторингом, є саме тими підходами, які приведуть нас до цих нових горизонтів у розробці програмного забезпечення.