Створення добре розробленого та правильного коду є метою кожного розробника. Однією з методологій, яка виділяється в досягненні цього, є тестова розробка (TDD). Хоча TDD не розробляє ваш код і не пише його для вас, це методологія розробки програмного забезпечення, яка дозволяє вам швидко отримувати зворотний зв’язок щодо проектних рішень під час ітераційного циклу розробки.
Писати модульні тести до чи після кодування чи ніколи не писати тести залежить від вибору розробника. Очевидно, що жодне написання тестів не викликає критичних ситуацій у виробництві, якщо розробнику пощастить, він виявить помилки на етапі тестування вручну.
Написання тестів після завершення коду краще, ніж без тестів. Більшість розробників, включно з нами, застосовують спочатку підхід коду, а потім пишуть тести. Тим не менш, написаний код не є кращим. Деякі функціональні помилки будуть присутні, якщо ми забудемо тестовий приклад. Набагато краще писати невдалі тестові випадки для кожного фрагмента коду, а потім додавати код, щоб цей тест пройшов, дотримуючись циклу TDD.
Наразі ми обговорюємо, як ми можемо використовувати Generative AI, щоб зробити нашу роботу більш автоматизованою. У цій роботі ми представляємо новий експеримент, натхненний Блог Аллена Хелтона. Ми пишемо кілька тестів для проекту, а потім просимо ChatGPT згенерувати пов’язаний з тестом код.
Генеративний ШІ для тестової розробки
Враховуючи потенціал людської помилки під час ручного тестування, виникає запитання: чому б не автоматизувати TDD за допомогою Generative AI? Generative AI може відігравати трансформаційну роль у TDD, автоматизуючи створення модульних тестів і відповідного коду. Ось запропонований робочий процес:
- Тести, написані розробниками: розробники починають із написання початкових модульних тестів, вказуючи бажані результати для свого коду.
- Код, створений штучним інтелектом: Generative AI читає ці модульні тести та створює необхідний код для їх проходження. Якщо код виконується успішно, він зберігається на диску. Якщо ні, штучний інтелект створює звіт про помилку та намагається створити правильний код знову, створюючи цикл, доки тести не пройдуть. Використовуючи штучний інтелект таким чином, розробники можуть гарантувати, що їхній код ретельно протестований і підтверджений, мінімізуючи ризик помилок.

Переваги використання генеративного ШІ в TDD
Автоматизація процесу генерації коду та тестування може значно прискорити цикли розробки. Крім того, зменшується ймовірність людської помилки під час тестування та написання коду. Роблячи це, гарантуючи, що всі тести охоплюються всебічно та послідовно та легко масштабують процес розробки без збільшення ручного навантаження.
Потенційні виклики та рішення
Хоча інтеграція Generative AI у TDD пропонує численні переваги, це не без проблем. Початкове налаштування систем AI для TDD іноді може бути складним і трудомістким. Розробникам може знадобитися навчання, щоб ефективно використовувати інструменти ШІ та довіряти їм. Але навіть якщо розробники готові впоратися з цим, штучний інтелект може мати проблеми з унікальними або граничними випадками, які недостатньо представлені в навчальних даних, тому це може заплутати задані сценарії. Generative AI відповідає гідним кодом, але це не чудовий і найкращий вибір. Тому що код ще не застосовує механізм зворотного зв’язку. Щоб створити чудовий код, ми повинні застосувати механізми зворотного зв’язку до штучного інтелекту, наприклад підхід розробників до перегляду коду. Ми можемо поєднати штучний інтелект із людським наглядом для обробки складних сценаріїв, принаймні на даний момент.. :)
Застосований генеративний штучний інтелект у TDD

Механізм зворотного зв'язку
Для подальшого вдосконалення процесу можна запровадити механізм зворотного зв’язку. Розробники пишуть модульні тести, а агент розробника генерує код. Додано новий рівень перевірки за допомогою агента рецензента коду, який перевіряє код і надає відгук агенту розробника.
Ітеративне вдосконалення
Агент розробника переглядає код на основі відгуків рецензента та надсилає його на перевірку. Цей ітеративний процес триває, доки код успішно не пройде перевірку.
Підсумкове тестування
Після схвалення коду рецензентом запускаються модульні тести. Якщо вони проходять, код зберігається. Якщо вони виходять з ладу, створюється звіт про помилку, і процес повертається до генерації коду.
По суті, робочий процес буде таким:
- Розробник пише unit tests.ev
- AI зчитує ці тести та генерує необхідний код.
- У разі успішного виконання тестів код зберігається. Якщо ні, створюється звіт про помилку, і ШІ намагається виправити код у циклі.
- Ця початкова автоматизація може створювати код, який схильний до помилок, і тут починає діяти механізм зворотного зв’язку.
- Розробники пишуть модульні тести, а агент розробника генерує необхідний код і методи.
- Агент рецензента коду переглядає код і надсилає відгук агенту розробника.
- Агент розробника вдосконалює код на основі відгуків і повторно надсилає його на перевірку.
- Цей цикл триває, доки агент перевірки коду не затвердить код.
- Після схвалення запускаються модульні тести. У разі успіху код зберігається; якщо ні, створюється звіт про помилку, і цикл продовжується.
Завдяки включенню механізму зворотного зв’язку якість створеного коду значно покращується, гарантуючи, що він відповідає необхідним стандартам і надійно проходить усі тести.
Висновок
Інтеграція Generative AI в Test-Driven Development (TDD) має потенціал для революції в розробці програмного забезпечення. Автоматизуючи створення модульних тестів і відповідного коду, розробники можуть забезпечити вищу якість коду, зменшити кількість помилок і оптимізувати робочий процес. Хоча є труднощі, які потрібно подолати, переваги значно переважують початкові перешкоди, що робить цей підхід перспективним для майбутнього програмування. Ви можете перевірити наш Кодер ШІ проекту, якщо ви зацікавлені в підтримці програмування за допомогою генеративного ШІ.
майбутні напрямки
На основі цього підходу ми плануємо створити три елементи:
Розширення підтримки мови: хоча ми зосереджувалися на Java, цю методологію можна поширити на інші мови, такі як Python, JavaScript тощо.
Автоматизована генерація тестів: ми можемо запропонувати Generative AI написати тести на основі вимог високого рівня, наданих розробниками, замість написання тестів вручну.
Розширення команди Agentic AI: окрім простого рецензента коду, ми могли б представити більш спеціалізовані агенти, такі як агент контролю якості для тестування крайніх випадків, агент продуктивності для оптимізації продуктивності коду тощо.
Ми рекомендуємо кожному розробнику програмного забезпечення витратити свій час на написання більш надійних і точних тестів, а потім скористатися потужністю Generative AI для створення високоякісного коду.