Egység 3 / 12

Kódolás és páros programozás AI-val

Nyereség:

  • Képes funkciókat, osztályokat és modulokat írni az AI-ba világos bemeneti-kimeneti és kényszerdefiníciókkal
  • Képes mesterséges intelligencia páros programozási partnerként használni, és lépésről lépésre haladni, kis, ellenőrizhető darabokban
  • Az AI által generált kód összeállításával és kis példákkal való futtatásával képes a logikai és az éles esetek hibáinak észlelésére

A páros programozás az, amikor két fejlesztő dolgozik ugyanazon a problémán, az egyik írással, a másik pedig felülvizsgálja. A mesterséges intelligencia segítségével történő kódolás ennek a kapcsolatnak a digitális változata: Ön határozza meg az irányt, a korlátokat és az elfogadási kritériumokat; Az AI gyors huzatot produkál; Minden lépést a fordítással és teszteléssel ellenőrizhet. A legnagyobb csapda itt az, ha azt mondjuk az AI-nak, hogy „írja meg nekem ezt az alkalmazást az elejétől a végéig”, és vakon elfogad egy 200 soros blokkot. A jó páros programozás kis lépésekben történik: minden lépésnek érthetőnek, tesztelhetőnek és visszafordíthatónak kell lennie.

Ebben az egységben megtanulhatja, hogyan nyomtathat funkciókat, osztályokat és modulokat egyértelmű bemeneti-kimeneti szerződéssel; Hogyan irányítsuk az AI-t lépésről lépésre; és meglátjuk, hogyan lehet elkapni a logikai és az éles esethibákat az általa előállított kód futtatásával kis példákkal. A cél nem a sebesség, hanem az ellenőrzött sebesség.

Fogalmak: Bemeneti-kimeneti szerződés: Egyértelmű definíció, hogy egy függvény milyen bemenetet vesz igénybe, és milyen kimeneti és hibaviselkedést ígér. Éles eset: Nem közönséges, de ténylegesen előforduló bemenet (üres, nulla, negatív, nagyon nagy, nulla). Inkrementális fejlesztés: Folytassa a kis, munkadarabokkal és minden lépést érvényesítsen.

Kód nyomtatása Net szerződéssel

A minőségi kódex alapja, hogy a munka megkezdése előtt pontosan meghatározza, "mit szeretne". Amikor egy függvényt ír az AI-ba, adjon meg neki öt dolgot: nyelv és verzió, bemeneti típusok és jelentések, kimenet, hibafeltételek és megszorítások (teljesítmény, külső könyvtár tiltása, stílus). Ez megakadályozza, hogy az AI találgasson.

  1. Írd meg a szerződést. Bemenet, kimenet, hiba, kényszer.
  2. Kérjen egy kis egységet. Egy funkció egyetlen felelősséggel; Ez nem egy nagy modul.
  3. Kérjen tesztblokkot. Adjon hozzá néhány mintafuttatást/tesztet a kód mellé.
  4. Fordítsa le és futtassa. Próbáld ki éles tokkal, szemmel ellenőrizd a kimenetet.
  5. Lépjen a következő lépésre. Miután megerősített egy darabot, építsen rá.

Szerződéses függvényprompt: "Függvény írása TypeScript 5-höz. Cél: a bevásárlókosárban lévő cikkek teljes mennyiségének kiszámítása. Bevitel: { ár: szám, mennyiség: szám }[] tömb. Kimenet: szám (összesen). Szabályok: dobás Hiba, ha a mennyiség vagy az ár negatív; 0-t ad vissza az üres tömbhöz; kerekítse az összeget 2 tizedesjegyre a tizedesvesszőhöz. Ne adjon hozzá negatív, 5-ös teszt függvényt, üres függvényt. tizedes ár, egyetlen tétel).

Irányító AI párként

A páros programozás jó előrehaladása inkább párbeszéd, mint egyetlen nagy kérés. Először kérje le a csontvázat, és futtassa; majd adjunk hozzá egy élállapotot; majd javíts ki egy hibát. Ezzel a megközelítéssel a kód érthető marad, és minden lépésben az Ön kezébe kerül az irányítás.

Inkrementális előrehaladás: "Írunk egy olvasót, amely beolvas egy CSV-fájlt, és a sorokat objektummá alakítja. Lépésről lépésre lépjünk tovább a következő lépésre anélkül, hogy minden lépést megerősítenék. 1. lépés: csak írja be a vázat, amely sorokra bontja a fájlt, és elválasztja a fejlécsort. Ne adjon hozzá típuskonverziót vagy hibakezelést. Még ne írja le röviden, magyarázza el."

Magyarázza el és indokolja meg a kódpromptot: "Ne soronként, hanem döntésenként magyarázza el az imént írt függvényt: melyik tervezési döntést hozta meg és miért, melyik élesetet kezelte és hogyan, mely eseteket zárta ki szándékosan? Soroljon fel 3 olyan feltevést a kódban, amit nem szabad kihagynom."

Tipp: Ne fogadja el az AI által generált kódot anélkül, hogy megértette volna. – Magyarázd meg nekem, milyen feltevésekkel éltél? A kérdés rejtett hibákat is feltár, és lehetővé teszi a kód védelmét, mivel a kód az Ön felelőssége marad. A nem értett kód gyártásba helyezése olyan, mint egy szerződés aláírása nélkül kiküldeni.

Gyenge felszólítás / Erős felszólítás

GYENGE:"Írjon rendezési függvényt." (Eredmény: melyik nyelv, mi van rendezve, stabil-e, mi a teljesítménykényszer, homályos és valószínűleg nem a követelményeknek megfelelő kód.)STRONG:"Java 17 esetén írjon egy metódust, amely először osztály szerint rendezi a List<Employee> objektumot (ábécé sorrendben), majd nullACE adja vissza az eredeti listát. Utolsóként magyarázza el a módszer összetettségét, adjon hozzá egy fő tesztblokkot 4 mintával.

Erőteljes felszólítás; Tartalmazza a rendezési kritériumot (kétszintű), a mellékhatás szabályt (az eredetit helyettesíti), a nulla viselkedést és a teszt elvárásait. E részletek nélkül a mesterséges intelligencia elfogadható, de helytelen megoldást ad; például megsértheti az eredeti listát, és ez máshol néma hibához vezet.

Érvényesítés Edge tokkal és kis mintákkal

A boldog forgatókönyvben működő kód nem a megfelelő kód. Tudatosan erőltessen minden egyes előállított függvényt:

Edge tok típusa

minta bemenet

elvárt viselkedés

üres bemenet

Üres tömb/karakterlánc

Nem hiba, logikai üres eredmény

Nulla/negatív

0, -1

Meghatározott és helyes viselkedés

nagy érték

Több millió rekord

Túlcsordulás/teljesítményszabályozás

null/undefined

hiányzó hely

Ellenőrzött hiba vagy alapértelmezett

Ismétlődő/szokatlan

ismétlődő, fordított sorrendben

helyes eredmény

Mini tokok

1. eset – Néma kerekítési hiba. Az AI egy függvényt ír, amely decimális (lebegő) típusú pénzt gyűjt; 0,1 + 0,2 0,30000000000000004. A hiba akkor oldódik meg, amikor a mérnök hozzáadja a "Kerekíts 2 számjegyre és használj teljes fillért" szabályt. Egy 3 soros szabály megakadályozza a több ezer fillér eltérést a havi egyeztetésben.

2. eset – Mellékhatás-csapda. Az AI olyan módszert ír, amely „rendbe rendezi” a listát, de a helyén módosítja az eredeti listát. Váratlan viselkedés történik, mert egy másik modul ugyanazt a listát használja. Ha az "eredeti módosítása" megszorítás szerepel a promptban, a hiba soha nem fordul elő; belekerül a kódellenőrzésbe, és megakadályozza a 2 órás hibakeresést.

3. eset – Bevétel lépésről lépésre. Egy fejlesztő egyszerre nyomtat egy 150 soros importmodult; Ha hibát talál, nem tudja, honnan ered. Egy másik fejlesztő ugyanazt a munkát 5 kis lépésre osztja, minden lépést 2 perc alatt tesztel, és a 3. lépésben azonnal észleli a hibát.

Gyakori hibák

  • Nagy blokkok nyomtatása egy kéréssel. Kockázatos, nehezen érthető és hibakereső kód születik.
  • Kód kérése szerződéskötés nélkül. Ha az input-output-error kétértelmű, az AI kitalálja, és téved.
  • Csak a boldog forgatókönyv tesztelése. Ha az üres, nulla, negatív és nagy bevitelt nem próbálja meg, a hiba a termelésre marad.
  • Megértés nélkül elfogadni. A kód, amelyet nem tesz közzé, olyan adósság, amelyet nem tud megvédeni.
  • Az olyan érzékeny típusok figyelmen kívül hagyása, mint a mellékhatások és a pénz/dátum. Az időtlen történelemmel rendelkező úszópénz klasszikus hibaforrás.

Összefoglalva

A kódírás mesterséges intelligencia segítségével fegyelmezett páros programozás: egyértelmű szerződés, kis lépések, építés és tesztelés minden lépésben. Az input-output-error-constraint kvartett kezdettől fogva megadása határozza meg a kód minőségét. Az általa előállított kód magyarázata és éles esetekkel való erőltetése felszínre hozza a boldog forgatókönyv alatt rejtőző hibákat. A sebesség forrása nem a vak elfogadás; gyors vázlat és gyors ellenőrzés.

Pályázati feladat

Válasszon egy kicsi, de valós függvényt (pl. kosár összege, dátumkülönbség, szövegelemzés). Nyomtatás a szerződéses funkció prompt használatával; Adjon hozzá legalább 5 tesztforgatókönyvet. Futtassa le a kódot, és próbáljon ki 5 éles esetet tudatosan, a táblázat segítségével. Keressen hibát legalább egy szélső esetben (ha nem, tervezzen új bemenetet a funkció kényszerítéséhez), javítsa ki az AI segítségével, és ellenőrizze újbóli teszteléssel, hogy a javítás működött.

ellenőrző lista

  • [ ] Írtam egy szerződést, amely tartalmazza a bemenetet, a kimenetet, a hibákat és a megszorításokat.
  • [ ] Egy nagy blokk helyett kis lépésekben generáltam a kódot.
  • [ ] A kód mellé tettem egy teszt/mintafutás blokkot.
  • [ ] Legalább 5 éleset tudatosan teszteltem.
  • [ ] Elmagyaráztam a kódot az AI-nak, és felülvizsgáltam a feltételezéseit.
  • [ ] Javítottam a talált hibát, és újbóli teszteléssel megerősítettem a javítást.