• Megjelenési dátum
    November 26, 2024
  • Megosztás

A jól megtervezett és helyes kód létrehozása minden fejlesztő célja. Az egyik módszertan, amely kiemelkedik ennek elérésében, a tesztvezérelt fejlesztés (TDD). Bár a TDD nem tervezi meg vagy írja meg helyetted a kódot, ez egy olyan szoftverfejlesztési módszer, amely lehetővé teszi, hogy gyors visszajelzést kapjon a tervezési döntésekről egy iteratív fejlesztési ciklus során. 

A fejlesztő döntésétől függ, hogy a kódolás előtti vagy utáni egységteszteket, vagy soha nem írunk-e teszteket. Nyilvánvalóan, ha soha semmilyen tesztet nem írunk, akkor ez kritikus helyzeteket okoz a termelésben, ha a fejlesztő szerencséje van, a manuális tesztek szakaszában hibákat fedez fel. 

A kód kitöltése után teszteket írni jobb, mint a teszt nélkül. A legtöbb fejlesztő, köztük mi is, először a kódot alkalmazza, és csak ezután ír teszteket. Ennek ellenére az írott kód sem jobb. Néhány funkcionális hiba jelen lesz, ha elfelejtjük a tesztesetet. Sokkal jobb, ha minden kódrészletre sikertelen teszteseteket ír, majd hozzáadja a kódot, hogy a teszt sikeres legyen a TDD ciklust követve.

Jelenleg arról vitatkozunk, hogy miként tehetjük munkánkat automatizáltabbá a Generatív AI segítségével. Ebben a munkában egy új kísérletet vezetünk be, amelyet a Allen Helton blogja. Több tesztesetet írunk a projekthez, majd megkérjük a ChatGPT-t, hogy hozza létre a teszthez kapcsolódó kódot. 

Generatív mesterséges intelligencia teszt-első fejlesztéshez 

Tekintettel a kézi tesztelés során előforduló emberi hibák lehetőségére, felmerül a kérdés: Miért nem automatizálják a TDD-t a Generatív AI segítségével? A generatív AI átalakító szerepet játszhat a TDD-ben az egységtesztek és a megfelelő kód létrehozásának automatizálásával. Íme egy javasolt munkafolyamat:

  1. Fejlesztők által írt tesztek: A fejlesztők a kezdeti egységtesztek megírásával kezdik, és meghatározzák a kódjuk kívánt eredményét.
  2. AI által generált kód: A generatív AI beolvassa ezeket az egységteszteket, és elkészíti a szükséges kódot az átadásukhoz. Ha a kód sikeresen lefut, a rendszer a lemezre menti. Ha nem, a mesterséges intelligencia hibajelentést generál, és megpróbálja újra előállítani a megfelelő kódot, létrehozva egy hurkot, amíg a tesztek át nem mennek. A mesterséges intelligencia ilyen módon történő beépítésével a fejlesztők biztosíthatják, hogy kódjukat alaposan teszteljék és validálják, így minimálisra csökken a hibák kockázata.
Ekran Resmi 2024-11-04 13.29.43.png

A generatív mesterséges intelligencia használatának előnyei a TDD-ben

A kódgenerálási és tesztelési folyamat automatizálása jelentősen felgyorsíthatja a fejlesztési ciklusokat. Emellett csökkenti az emberi hibák lehetőségét a tesztesetekben és a kódírásban. Ennek során gondoskodni kell arról, hogy az összes tesztet átfogóan és következetesen lefedjék, és könnyen skálázható a fejlesztési folyamat a kézi munkaterhelés növelése nélkül.

Lehetséges kihívások és megoldások

Bár a Generative AI integrálása a TDD-be számos előnnyel jár, nem mentes a kihívásoktól. Az AI-rendszerek kezdeti beállítása a TDD-hez néha bonyolult és időigényes lehet. A fejlesztőknek képzésre lehet szükségük ahhoz, hogy hatékonyan használják az AI-eszközöket, és megbízzanak benne. De még ha a fejlesztők készek is kezelni, a mesterséges intelligencia megküzdhet olyan egyedi vagy éles esetekkel, amelyek nem szerepelnek megfelelően a betanítási adatokban, így ez összezavarhatja a feltett forgatókönyveket. A generatív AI tisztességes kóddal válaszol, de nem ez a nagyszerű és legjobb választás. Mert a kód mégsem alkalmaz semmilyen visszacsatolási mechanizmust. A nagyszerű kód előállításához olyan visszacsatolási mechanizmusokat kell alkalmaznunk az AI-ra, mint a fejlesztők kódellenőrzési megközelítése. Kombinálhatjuk a mesterséges intelligenciát az emberi felügyelettel, hogy bonyolult forgatókönyveket kezeljünk, legalábbis egyelőre... :)

Visszajelzés Alkalmazott generatív mesterséges intelligencia a TDD-ben

Ekran Resmi 2024-11-04 13.31.52.png

Visszacsatolási mechanizmus

A folyamat további finomítása érdekében visszacsatolási mechanizmust lehet bevezetni. A fejlesztők írják az egységteszteket, és egy fejlesztői ügynök generálja a kódot. Új ellenőrzési szinttel egészül ki egy kódellenőrző ügynök, amely áttekinti a kódot, és visszajelzést ad a fejlesztői ügynöknek.

Iteratív fejlesztés

A fejlesztői ügynök az ellenőrző ügynök visszajelzései alapján felülvizsgálja a kódot, és újra elküldi azt felülvizsgálatra. Ez az iteratív folyamat mindaddig folytatódik, amíg a kód sikeresen át nem megy.

Végső tesztelés

Miután a kódot az ellenőrző ügynök jóváhagyta, lefutnak az egységtesztek. Ha átmennek, a kód mentésre kerül. Ha meghiúsulnak, hibajelentés készül, és a folyamat visszatér a kódgeneráláshoz.

Lényegében a munkafolyamat a következő lenne:

  1. A fejlesztő megírja az egységteszteket.ev
  2. Az AI beolvassa ezeket a teszteket, és előállítja a szükséges kódot.
  3. Ha a tesztek sikeresen futnak, a kód mentésre kerül. Ha nem, akkor hibajelentés készül, és az AI ciklusban megpróbálja kijavítani a kódot.
  4. Ez a kezdeti automatizálás olyan kódot állíthat elő, amely hajlamos a hibákra, és itt lép működésbe a visszacsatolási mechanizmus.
  5. A fejlesztők megírják az egységteszteket, a fejlesztői ügynök pedig előállítja a szükséges kódot és metódusokat.
  6. A kódellenőrző ügynök ellenőrzi a kódot, és visszajelzést küld a fejlesztői ügynöknek.
  7. A fejlesztői ügynök a visszajelzések alapján finomítja a kódot, és újra elküldi felülvizsgálatra.
  8. Ez a ciklus addig folytatódik, amíg a kódellenőrző ügynök jóvá nem hagyja a kódot.
  9. A jóváhagyás után az egységtesztek lefutnak. Ha sikeres, a kód mentésre kerül; ha nem, hibajelentés jön létre, és a ciklus folytatódik.

A visszacsatolási mechanizmus beépítésével a generált kód minősége jelentősen javul, biztosítva, hogy megfeleljen a szükséges szabványoknak és minden teszten megbízhatóan megfeleljen.

Összegzés

A Generatív AI integrálása a tesztvezérelt fejlesztésbe (TDD) forradalmasíthatja a szoftverfejlesztést. Az egységtesztek és a megfelelő kód generálásának automatizálásával a fejlesztők magasabb kódminőséget biztosíthatnak, csökkenthetik a hibákat, és egyszerűsíthetik munkafolyamatukat. Bár vannak leküzdendő kihívások, az előnyök messze meghaladják a kezdeti akadályokat, így ez ígéretes megközelítés a kódolás jövője szempontjából. Megnézheti nálunk Kódoló AI projektet, ha érdeklődik a generatív AI segítségével történő programozás támogatása iránt. 

Jövőbeli irányok

Három elemet tervezünk erre a megközelítésre építeni:

  • A nyelvi támogatás kiterjesztése: Miközben a Java-ra összpontosítottunk, ez a módszertan kiterjeszthető más nyelvekre, például a Pythonra, a JavaScriptre és még sok másra.

  • Automatizált tesztgenerálás: A Generative AI-t arra kérhetjük, hogy a teszteket a fejlesztők által biztosított magas szintű követelmények alapján írja meg a manuálisan írt tesztek helyett. 

  • Az Agentic AI csapat kiterjesztése: Az egyszerű kódellenőrzőn túl speciálisabb ügynököket is bevezethetnénk, például minőségbiztosítási ügynököt az éles esetek tesztelésére, teljesítményügynököt a kód teljesítményének optimalizálására stb.

Azt javasoljuk, hogy minden szoftverfejlesztő töltse idejét robusztusabb és pontosabb tesztesetek megírásával, majd használja ki a Generative AI erejét a kiváló minőségű kódok előállításához.