Dobički:
- Sposobnost razlikovanja, kje umetna inteligenca zagotavlja resnično hitrost v življenjskem ciklu razvoja programske opreme in kje odločitev in odgovornost ostajata v rokah inženirja
- Sposobnost uporabe triplastne inženirske discipline, ki preverja vsako kodo in zasnovo, izdelano s kompilacijo, testiranjem in pregledom.
- Navadite se čiščenja konteksta, da izkoristite AI, ne da bi delili zaupno izvorno kodo, poverilnice in podatke o strankah
Ko pogledate dan računalniškega inženirja, je slika v večini timov podobna: razumevanje poslovne zahteve, oblikovanje, pisanje kode, branje kode nekoga drugega, razhroščevanje (postopek ugotavljanja, zakaj program ne deluje pravilno in popravljanje), pisanje testov, priprava dokumentacije, pregledovanje kode in udeležba na sestankih. Z drugimi besedami, čas, namenjen pravi "inženirski presoji", to je, ali je rešitev pravilna, varna in trajnostna, se zdrobi zaradi ponavljajočega se dela. Tukaj nastopi umetna inteligenca (na kratko AI; programska oprema, ki deluje na besedilu in kodi z velikim jezikovnim modelom). AI ne sprejema odločitev namesto vas; Pripravi vas na odločitev, izdela okostje kode, zoži napako in pred vas postavi izdelan osnutek. V tem modulu ne bomo pozicionirali umetne inteligence kot »samodejnega programerja«, ampak kot discipliniranega programskega partnerja v paru, katerega rezultat se vsakič prevede, preizkusi in pregleda.
V tej prvi enoti pojasnjujemo tri stvari: Na katerih stopnjah življenjskega cikla razvoja programske opreme (faze, skozi katere gre programska oprema od ideje do proizvodnje: analiza, načrtovanje, kodiranje, testiranje, uvajanje, vzdrževanje) dodaja AI resnično vrednost; katere odločitve naj strogo ostanejo v rokah inženirja; in kakšna je disciplina preverjanja in zaupnosti, ki se je morate pri tem držati. Brez pravilno nameščene strehe lahko tehnike na naslednjih enotah postanejo nevarne; Ker napaka v programski opremi hkrati doseže milijone uporabnikov in se lahko spremeni v varnostno ranljivost.
Koncepti: Halucinacija: prepričljiva izdelava AI metode, knjižnice, API-ja ali vedenja, ki dejansko ne obstaja. Kontekst: vnos, ki ga posredujete AI (koda, sporočilo o napaki, zahteva, omejitve). Preverjanje: Preverjanje izhoda na neodvisen način (prevajanje, testiranje, dokumentacija). Ti trije koncepti so hrbtenica celotnega modula.
V katerih podjetjih je AI Accelerator in v katerih podjetjih je tvegan?
Delovna mesta na področju programske opreme so v smislu rezultatov dvosmerna. Na enem koncu so reverzibilna pripravljalna dela z nizkim tveganjem; Na drugi strani pa so naloge, ki jih je težko vrniti, ki vstopijo v produkcijsko okolje in lahko povzročijo izgubo podatkov, varnostne ranljivosti ali prekinitve. Vrednost AI se razlikuje glede na to, kje na tem spektru stojite.
poslovni tip
Prispevek AI
Vloga inženirja
Okostje kode / predloga
Hitro ustvarjanje ponavljajoče se strukture
Logika in nadzor stanja robov
odpravljanje napak
Seznam hipotez in možnih vzrokov
Razmnoževanje in potrditev vzroka
pisanje testov
Preizkusite ustvarjanje osnutka in scenarija
Smiselna trditev in preverjanje obsega
refactoring
Predlog za preoblikovanje
Ohranjanje vedenja s testiranjem
Dokumentacija
Prvi osnutek in struktura
Preverjanje pravilnosti glede na kodo
Arhitekturna/varnostna odločitev
Seznam možnosti ter prednosti in slabosti
Končna odločitev in odgovornost
Pravilo je preprosto: tveganje izhoda umetne inteligence je enako škodi, ki jo bo povzročil, če ta izhod povzroči napako. Nepravilno predlaganje imena spremenljivke je neškodljivo; Nepravilna avtentikacija (preverjanje, ali je uporabnik res tisti, za katerega se predstavlja) naredi celoten sistem ranljiv. Zato je prvo vprašanje, ki si ga morate zastaviti pred uporabo izhoda: "Kaj se zgodi, če je to narobe in kdo to opazi in kdaj?"
Pozor: umetna inteligenca ustvari tekočo in samozavestno kodo. Tekočnost ni zagotovilo za točnost. Jezikovni model lahko verodostojno ustvari ime funkcije, ki dejansko ne obstaja, nepravilno zaporedje parametrov ali celo nevaren vzorec. Pri programski opremi to ne ostane na papirju; Prevaja, izvaja in eksplodira v proizvodnji.
Odločitve, ki jih je treba prepustiti inženirju
Nekatere odločitve nikoli ne bi smele biti popolnoma avtomatizirane; nosi tehnična, pravna in etična tveganja:
- Odobritev za proizvodnjo: Sprostitev kode v proizvodnjo in odgovornost za to.
- Varnost in arhitektura: drage odločitve, kot so avtentikacija, avtorizacija, šifriranje in podatkovni model.
- Licenca in avtorske pravice: Uporabnost izdelane kode v komercialnem izdelku in skladnost z licenco.
- Delo z zaupnimi podatki: Transakcije s podatki o strankah, skrivnosti izvorne kode in podatki o identiteti.
Opozorilo: Tudi če umetna inteligenca pravi, da je "ta koda varna in pripravljena za proizvodnjo", je sprejemanje tega brez varnostnega testiranja, pregleda kode in validacije pod dejansko obremenitvijo nesprejemljivo. Pri delu, ki je kritično za varnost, rezultat umetne inteligence ni nikoli nadomestilo za odobritev pristojnega inženirja; Vsak rezultat, ki vodi do odločitve, mora pred izvedbo neodvisno preveriti in odobriti pooblaščeni inženir.
Disciplina preverjanja: Triplastna kontrola
Uporabite tri nivoje nadzora za uporabo izhoda umetne inteligence kot višji pregledovalec in ne na slepo. To je osnovni refleks, ki ga bomo ponavljali skozi ves modul.
- Prevajanje in statično preverjanje: Ali se koda dejansko prevede/zažene? Ali obstajajo tipske napake, neuporabljene spremenljivke, neobstoječi API-ji? Kaj pravi orodje za statično analizo (orodje, ki pregleda kodo, ne da bi jo zagnalo)?
- Neodvisna reprodukcija (testiranje): Zaženite kodo z majhnimi, znanimi vhodi in preverite, ali dobite pričakovani rezultat. Preizkusite robne primere (nič, nič, negativno, ogromno).
- Preverjanje vira: Vsak API, različico knjižnice in jezikovno funkcijo, ki jo uporablja AI, je treba preveriti iz uradne dokumentacije.
Poziv za preverjanje (poenostavi preverjanje izhoda): "Navedite VSE zunanje knjižnice, metode in jezikovne funkcije, ki jih uporabljate v svoji kodi. Za vsako navedite, v kateri različici je na voljo, in jo označite z 'mora biti preverjeno iz dokumentacije'. Ne izmišljujte si nobenih API-jev, za katere niste prepričani; če niste prepričani, jasno napišite 'nisem prepričan'. Na ločenem seznamu navedite tudi vse robne primere, ki jih niste obravnavali."
Kritizirajte lastno kodo: "Kritično poglejte kodo, ki ste jo pravkar napisali, kot višji inženir, ki vas je najel. Navedite konkretne postavke pod temi tremi naslovi: (1) logične/robne napake, (2) varnostna tveganja, (3) težave z zmogljivostjo ali berljivostjo. Za vsako postavko napišite "zakaj je težava" in "predlagana rešitev". Če ni težave, recite "Nisem našel težave"; ne poskušajte da ga olepšamo."
Šibek poziv / močan poziv
WEAK:»Napišite mi funkcijo za preverjanje pristnosti uporabnika.«(Rezultat: nejasno, kateri jezik, katero pravilo, katero vedenje napak; generična koda, pogosto nezanesljiva ali izven konteksta.)MOČNO:»Napišite funkcijo preverjanja e-pošte za Python 3.11. Vnos: niz. Izhod: True, če je veljaven, False drugače. Pravila: prazen niz False; Skladnost z RFC ni potrebna, zadostuje osnovna oblika. NE UPORABLJAJTE zunanjega formata. knjižnica. Preizkus s 5 vzorci pod blokom za dodajanje funkcij: veljaven, prazen, brez '@', dvojni '@', ki vsebuje samo presledke."
Razlika je v kontekstu. Močan poziv; Vključuje jezik, različico, vhodno-izhodno pogodbo, omejitve in testna pričakovanja. Ta enotna disciplina močno zmanjša tveganje za halucinacije in nevarno kodo.
Mini etuiji
Primer 1 – Izmišljena metoda. Razvijalec od umetne inteligence izve, da obstaja metoda, imenovana date.addBusinessDays(5), v knjižnici datumov, in je razložena na samozavesten način. Ko pogleda dokumentacijo, vidi, da take metode ni, pravilna pot je ročna zanka. Halucinacija je ujeta, preden gre v proizvodnjo z 10-minutnim preverjanjem.
Primer 2 – Izguba robnega stanja. AI ustvari funkcijo "izračunaj povprečje"; Deluje pri testiranju s 1000 vrsticami podatkov. Vendar, ko je seznam prazen, daje napako pri deljenju z nič. Ker je inženir dodal prazen vhodni test, vidi in odpravi napako, preden se objavi. En sam preizkus stanja roba prepreči alarm za proizvodnjo ob 3. uri zjutraj.
Primer 3 – tveganje zasebnosti. Strokovnjak bo prilepil datoteko z dejanskim povezovalnim nizom baze podatkov in ključem API-ja v javno orodje. Zapomni si politiko ustanove; Skrivnosti zamenja z <REDIGOVANO>, zmanjša kodo na reprezentativen primer in jo zahteva. Tako dobi pomoč v 5 minutah, vendar podatki o njegovi identiteti ne izidejo.
Načelo dela s tajno kodo in podatki o identiteti
Najbolj občutljiv del programske opreme; skrivnosti izvorne kode, informacije o identiteti (ključ API, geslo, žeton) in podatki o stranki/osebni podatki. Osnovno načelo: počistite pred delitvijo, vprašajte le bistvo problema z reprezentativnim primerom, če je mogoče.
Anonimiziran vzorec poziva: "V naslednji funkciji je napaka. Zamenjal sem dejansko poslovno logiko in skrite konstante z reprezentativnimi vrednostmi (ključ API, imena tabel, generična imena polj). Težava: dobim napako Y v vnosu X. Samo poiščite logično napako v tej reprezentativni kodi in razložite popravljeno različico. [reprezentativna koda]"
Namig: Če ste v dvomih, opravite ta test: "Ali bi imela moja organizacija težave, če bi to javno napisal na forumu?" Tudi če je odgovor nejasen, ga najprej pojasnite. Ponastavitev je vedno cenejša kot kasnejše iskanje uhajanja.
Pogoste napake
- Uporaba izhoda brez prevajanja/testiranja. "AI je napisal" ni utemeljitev; Vsak kos kode se preveri z zagonom.
- Postavljanje zahtev brez konteksta. Če jezik, različica, vhodno-izhodni podatki in omejitve niso podani, koda postane generična in pogosto nevarna.
- Deljenje zaupnih informacij brez razmišljanja. Ključa API-ja, gesla in podatkov o strankah ne smete izdati, ne da bi bili izbrisani.
- Mešanje natančnega jezika z natančnostjo. Bolj ko umetna inteligenca govori samozavestno, bolj previdni morate biti; Samozavesten ton ni dokaz.
- Prenos odločitve na AI. Odločitev o uvedbi v proizvodnjo, varnost in arhitekturo ostaja v rokah inženirja; AI proizvaja samo materiale.
Če povzamem
Umetna inteligenca pospeši ponavljajoče se in zamudne dele dela s programsko opremo: okvirno kodo, pripravo testov, odpravljanje hroščev, dokumentacijo. Vendar odločitev in odgovornost ostaja na strani inženirja. Vsak izhod mora prestati tri nivoje nadzora (prevajanje/statika, testiranje, izvor). Pisanje pozivov s kontekstom in brisanje skritih informacij sta dve ključni navadi, ki ju bomo ponovili v vsaki enoti tega modula. Ko AI uporabljate disciplinirano, pridobite hitrost; ko ga uporabljate brez discipline, prenesete napake in ranljivosti v proizvodnjo.
Aplikacijska naloga
Izberite majhno nalogo kodiranja iz svojega lastnega dela ali iz namišljenega projekta (npr. funkcija preverjanja). Najprej napišite šibek poziv in pridobite izhod. Nato uporabite močan vzorec poziva iz te enote: dodajte jezik/različico, vhodno-izhodno pogodbo, omejitve in preskusno pričakovanje. Dva izpisa položite enega poleg drugega in napišite razliko. Nato sestavite robusten izhod in ga preizkusite z vsaj tremi robnimi primeri (nič, nič/negativna, nepričakovana oblika) in zabeležite, kaj najdete v katerem testu.
kontrolni seznam
- [ ] V poziv sem dodal jezik, različico in vhodno-izhodno pogodbo.
- [ ] Napisal sem "Ne izmišljuj si, povej mi, če nisi prepričan" in omejitev obsega.
- [ ] Prevedel/pognal sem kodo, preveril statična opozorila.
- [ ] Preizkusil sem z vsaj tremi robnimi primeri.
- [ ] Uporabljene API-je sem preveril v uradni dokumentaciji.
- [ ] Izbrisal sem vse skrivne kode/poverilnice ali uporabil orodje za podjetja.
- [ ] Potrdil sem, da odločitev o začetku proizvodnje in varnosti ostaja v rokah človeka.