• Дата на публикуване
    Ноември 26, 2024
  • Сподели

Създаването на добре проектиран и правилен код е целта на всеки разработчик. Една методология, която се откроява в постигането на това, е разработката, управлявана от тестове (TDD). Докато TDD не проектира вашия код или не го пише вместо вас, това е методология в разработката на софтуер, която ви позволява да получавате бърза обратна връзка относно дизайнерските решения в итеративен цикъл на разработка. 

Дали да се пишат модулни тестове преди или след кодиране или никога да не се пишат тестове, зависи от избора на разработчика. Очевидно никога не писането на никакви тестове причинява критични ситуации в производството, ако разработчикът има късмет, той ще открие грешки по време на етапа на ръчни тестове. 

Писането на тестове след завършване на кода е по-добро от липсата на тестове. Повечето разработчици, включително и ние, прилагат директно подхода на кода, след което пишат тестове. Въпреки това, писменият код не е по-добър. Ще има някои функционални грешки, ако забравим тестовия случай. Писането на неуспешни тестови случаи преди за всяко парче код, след което добавянето на кода, за да направи този тест да премине, като следвате цикъла на TDD, е много по-добро.

В момента обсъждаме как можем да използваме Generative AI, за да направим работата си по-автоматизирана. В тази работа представяме нов експеримент, вдъхновен от Блогът на Алън Хелтън. Пишем няколко тестови случая за проекта и след това молим ChatGPT да генерира кода, свързан с теста. 

Генеративен AI за първо тестово развитие 

Като се има предвид потенциалът за човешка грешка при ръчно тестване, възниква въпросът: Защо да не автоматизирате TDD с помощта на Generative AI? Generative AI може да играе трансформираща роля в TDD чрез автоматизиране на създаването на единици тестове и съответния код. Ето предложен работен процес:

  1. Тестове, написани от разработчици: Разработчиците започват с написването на първоначалните модулни тестове, като посочват желаните резултати за своя код.
  2. Код, генериран от AI: Generative AI чете тези модулни тестове и произвежда необходимия код, за да ги премине. Ако кодът се изпълнява успешно, той се записва на диска. Ако не, AI генерира доклад за грешка и се опитва да създаде правилния код отново, създавайки цикъл, докато тестовете преминат. Чрез включването на AI по този начин, разработчиците могат да гарантират, че техният код е щателно тестван и валидиран, свеждайки до минимум риска от грешки.
Ekran Resmi 2024-11-04 13.29.43.png

Ползи от използването на генериращ AI в TDD

Автоматизирането на процеса на генериране на код и тестване може значително да ускори циклите на разработка. Също така, намаляване на потенциала за човешка грешка в тестови случаи и писане на код. Докато правите това, като гарантирате, че всички тестове са покрити изчерпателно и последователно и лесно мащабирате процеса на разработка, без да увеличавате ръчното натоварване.

Потенциални предизвикателства и решения

Въпреки че интегрирането на Generative AI в TDD предлага множество предимства, то не е без предизвикателства. Първоначалната настройка на AI системи за TDD понякога може да бъде сложна и отнема много време. Разработчиците може да се нуждаят от обучение, за да използват ефективно и да се доверят на AI инструментите. Но дори ако разработчиците са готови да се справят с това, AI може да се бори с уникални или крайни случаи, които не са добре представени в данните за обучение, така че това може да обърка зададените сценарии. Generative AI отговаря с приличен код, но не е страхотният и най-добрият избор. Тъй като все още кодът не прилага никакъв механизъм за обратна връзка. За да създадем страхотен код, трябва да приложим механизми за обратна връзка към AI като подхода на разработчиците за преглед на кода. Можем да комбинираме AI с човешки надзор, за да се справим със сложни сценарии, поне засега.. :)

Обратна връзка Приложен генериращ AI в TDD

Ekran Resmi 2024-11-04 13.31.52.png

Механизъм за обратна връзка

За допълнително усъвършенстване на процеса може да се въведе механизъм за обратна връзка. Разработчиците пишат модулните тестове, а агентът на разработчиците генерира кода. Добавя се нов слой на контрол с агент за проверка на кода, който преглежда кода и предоставя обратна връзка на агента за разработчици.

Итеративно подобрение

Разработчикът преразглежда кода въз основа на обратната връзка на проверяващия агент и го изпраща отново за преглед. Този итеративен процес продължава, докато кодът премине успешно прегледа.

Окончателно тестване

След като кодът бъде одобрен от рецензента, се изпълняват тестове на единици. Ако те преминат, кодът се запазва. Ако не успеят, се генерира отчет за грешка и процесът се връща към генериране на код.

По същество работният процес ще бъде както следва:

  1. Разработчикът пише unit tests.ev
  2. AI чете тези тестове и генерира необходимия код.
  3. Ако тестовете преминат успешно, кодът се запазва. Ако не, се генерира отчет за грешка и AI се опитва да коригира кода в цикъл.
  4. Тази първоначална автоматизация може да създаде код, който е предразположен към грешки, което е мястото, където механизмът за обратна връзка влиза в действие.
  5. Разработчиците пишат модулните тестове, а агентът на разработчиците генерира необходимия код и методи.
  6. Агент за проверка на кода преглежда кода и изпраща обратна връзка на агента за разработчици.
  7. Агентът на програмиста усъвършенства кода въз основа на обратната връзка и го изпраща отново за преглед.
  8. Този цикъл продължава, докато агентът, проверяващ кода, одобри кода.
  9. След като бъдат одобрени, тестовете на модула се изпълняват. При успех кодът се запазва; ако не, се генерира отчет за грешка и цикълът продължава.

Чрез включването на механизъм за обратна връзка качеството на генерирания код се подобрява значително, като се гарантира, че отговаря на необходимите стандарти и надеждно преминава всички тестове.

Заключение

Интегрирането на Generative AI в Test-Driven Development (TDD) има потенциала да революционизира разработката на софтуер. Чрез автоматизиране на генерирането на модулни тестове и съответния код, разработчиците могат да осигурят по-високо качество на кода, да намалят грешките и да оптимизират своя работен процес. Въпреки че има предизвикателства за преодоляване, ползите далеч надхвърлят първоначалните препятствия, което прави това обещаващ подход за бъдещето на кодирането. Можете да проверите нашите Кодер AI проект, ако се интересувате от поддръжка на програмиране с помощта на генериращ AI. 

бъдещи насоки

Има три елемента, които планираме да надградим върху този подход:

  • Разширяване на езиковата поддръжка: Въпреки че се фокусирахме върху Java, тази методология може да бъде разширена до други езици като Python, JavaScript и др.

  • Автоматизирано генериране на тестове: Можем да подканим Generative AI да напише тестовете въз основа на изискванията на високо ниво, предоставени от разработчиците, вместо да имаме ръчно написани тестове. 

  • Разширяване на екипа на Agentic AI: Освен прост преглед на код, бихме могли да въведем по-специализирани агенти, като QA агент за тестване на крайни случаи, агент за ефективност за оптимизиране на производителността на кода и т.н.

Препоръчваме на всеки разработчик на софтуер да отдели времето си за писане на по-стабилни и точни тестови случаи и след това да се възползва от силата на Generative AI за създаване на висококачествен код.