Dobici:
- Mogućnost korištenja umjetne inteligencije kao drugog oka u pregledu koda za čitljivost, logiku i sigurnost
- Sposobnost planiranja koraka refaktoriranja uz podršku umjetne inteligencije bez ometanja složenog ponašanja koda
- Sposobnost provjere AI-jevog pregleda i preporuka za uređivanje s testiranjem i usporedbom kontrole verzija
U softverskom inženjerstvu kod se puno više čita nego što se piše. Redak koda napisan je jednom, ali se čita, mijenja i nadograđuje nekoliko desetaka puta tijekom mjeseci. Zato su pregled koda (pregled tuđeg ili vlastitog koda radi logike, čitljivosti i sigurnosti) i refaktoriranje (poboljšanje strukture koda bez promjene njegovog ponašanja) u središtu inženjeringa. AI postaje moćno "drugo oko" za ova dva zadatka: brzo sugerira čitljivost, ukazuje na zanemarena logika i sigurnosna pitanja i razbija veliko refaktoriranje na manje sigurne korake. Ali postoji ključno pravilo: refaktoriranje ne bi trebalo mijenjati ponašanje, a jedino što to jamči je testiranje.
U ovoj jedinici vidjet ćemo kako koristiti AI na strukturiran način za pregled koda, kako popraviti složeni kod bez kvara na njegovom ponašanju i kako upravljati tehničkim dugom (brze, ali skupe odluke koda).
Koncepti: Tehnički dug: Šifrirajte odluke donesene danas za brzinu koje otežavaju održavanje u budućnosti. Miris koda: Uzorci koji sami po sebi nisu pogreške, ali ukazuju na probleme (preduge funkcije, kod koji se ponavlja). Regresija: Kada promjena pokvari nešto što je prije funkcioniralo.
Korištenje umjetne inteligencije u pregledu strukturiranog koda
Kada je vrijeme ograničeno, potrebno je usredotočiti se na probleme s najvećim rizikom. Automatski formater rješava probleme oblikovanja kao što su uvlake i razmaci; Morate posvetiti ljudsku pozornost logici, sigurnosti i ponašanju u rubnim slučajevima. Kada imate AI recenziju, tražite popis prioriteta, a ne običnu gomilu recenzija.
- Dajte opseg. Koji kod, što učiniti, u kojem kontekstu radi.
- Odredite os prioriteta. Točnost i sigurnost na prvom mjestu, čitljivost na drugom mjestu.
- Tražite konkretnu korekciju. "Zašto problem" i "preporučeno rješenje" za svaki nalaz.
- Vi provjerite nalaze. AI također proizvodi lažne rezultate; Provjerite svaki nalaz prema kodu i testiranju.
Uputa za strukturirani pregled: "Proučite sljedeću funkciju kao viši inženjer. Navedite nalaze po redu važnosti i označite ih ovim oznakama: [KRITIČNO] logika/sigurnost, [SREDNJE] rubni slučaj/performanse, [NISKA] čitljivost/naziv. Za svaki nalaz: zašto pitati, konkretan prijedlog popravka. NEMOJTE PRESKOČITI probleme s formatiranjem/uvlačenjem, automatizirani alat će to riješiti. Šifra: [kod]"
Upit za pregled usmjeren na sigurnost: "Pregledajte ovaj kôd samo u sigurnosne svrhe: nedostatak provjere valjanosti unosa, rizik od ubacivanja, nedostatak kontrole autorizacije, curenje povjerljivih informacija, nesigurne zadane postavke. Dodajte primjer scenarija napada svakom nalazu. Ako nema sigurnosnih problema, jasno navedite 'Nisam pronašao kritične sigurnosne probleme'. Šifra: [kod]"
Oprez: Samo zato što AI kaže "nema problema" nije dokaz da nema problema. AI može proizvesti lažne negative; može zaobići pravi sigurnosni problem. AI pregled nadopunjuje, ne zamjenjuje ljudski pregled i sigurnosno testiranje. U sigurnosno kritičnom kodu, kompetentni inženjer ima posljednju riječ.
Test-preserved refactoring
Zlatno pravilo refaktoriranja: prvo testirajte, kasnije promijenite. Prije popravljanja koda trebali bi postojati testovi koji zaključavaju trenutno ponašanje kako biste odmah znali kvari li promjena nešto. Nemojte kršiti redoslijed kada provodite AI refactoring.
- Stavite trenutno ponašanje na test. U suprotnom, neka AI napravi "test karakterizacije" (test koji bilježi trenutno ponašanje kakvo jest).
- Popravite to malim koracima. Testiranje mora ostati zeleno na svakom koraku.
- Pokrenite ga nakon svakog koraka. Rano uhvatite regresiju.
Uputa plana sigurnog refaktoriranja: "Sljedeća funkcija od 60 redaka radi previše i teško ga je čitati. Želim je refaktorirati BEZ promjene ponašanja. Prvo: navedite koje testne slučajeve trebam da zaključam trenutno ponašanje. Zatim: podijelite refaktoriranje na male korake, od kojih se svaki može izvršiti dok su testovi zeleni. Nemojte još pisati kod, prvo dajte plan. Šifra: [kod]"
Slab upit / Jak upit
SLABO: "Učinite ovaj kôd boljim." (Rezultat: nejasno što poboljšati; AI radi proizvoljne promjene, može tiho promijeniti ponašanje.) SNAŽNO: "Refakturirajte ovu funkciju izračuna plaćanja za čitljivost. OGRANIČENJE: ponašanje mora ostati potpuno isto, povratne vrijednosti se ne smiju mijenjati. Podijelite dugu funkciju na značajne funkcije korisnosti, povećavajući magične brojeve do imenovanih konstanti. Navedite promjene stavku po stavku i objasnite ZAŠTO svaka stavka ne mijenja ponašanje. Kod: [kod]"
Snažni prompt jasno navodi ograničenje "ponašanje mora ostati potpuno isto" i što treba poboljšati. Bez ovog ograničenja, AI može promijeniti logiku u ime "poboljšanja" i proizvesti tihu regresiju.
Upravljanje tehničkim dugom
pristup
U kratkom roku
dugoročno gledano
ignorirajući dug
brz napredak
Paraliza održavanja, tim usporava
prepisati sve
Razvoj stalnih značajki
Neizvjestan povrat, visok rizik
Mjereno, testiranjem zaštićeno refaktoriranje
manje usporavanje
Održiva brzina
Najzdraviji način je treći: učinite dug vidljivim (pratite ga na popisu), počnite tamo gdje najviše boli i testirajte svaki popravak. AI je dobra pomoć u identificiranju i prioritizaciji stavki duga, ali koji dug platiti poslovna je odluka.
Mini kućišta
Slučaj 1 — Tiha regresija. Programer govori AI da "pojednostavi ovu funkciju"; AI netočno prevodi uvjet i izračun povrata je pokvaren. Budući da nema testiranja, greška se javlja nakon 3 tjedna prigovorom kupca. Tim radi isti posao tako što prvo napiše karakterizacijski test i hvata pogrešku crvenim testom pri prvom izvođenju.
Slučaj 2 — Korisno drugo oko. U pregledu koda, AI shvaća da se autorizacija korisnika provjerava samo u sučelju, a ne na poslužitelju. Ovo je ranjivost neovlaštenog pristupa. Inženjer dodaje provjeru autorizacije na strani poslužitelja; AI inspekcija sprječava stvarni sigurnosni incident.
Slučaj 3 — Lažno pozitivno. AI kaže "ova se varijabla nikada ne koristi, izbrišite je"; Međutim, koristi se neizravno kroz mehanizam promjenjive refleksije. Ako inženjer nije provjerio sugestiju u odnosu na test, ona bi bila izbrisana i dogodila bi se pogreška vremena izvođenja. Svaki nalaz umjetne inteligencije mora biti potvrđen prije implementacije.
Uobičajene greške
- Refactoring bez testiranja. Ne postoji ništa što bi osiguralo očuvanje ponašanja.
- Primjena nalaza umjetne inteligencije bez njihove validacije. Događaju se i lažno pozitivni i lažno negativni rezultati.
- Gubljenje ljudskog vremena na probleme s formatom. Usredotočenost na zadatke koji se mogu riješiti automatiziranim alatima zasjenjuje stvarne rizike.
- Uzimajući odgovor "Nema problema" kao jamstvo. AI može zaobići ranjivost; potreban je ljudski pregled.
- Pokušavajući otplatiti cijeli dug odjednom. Veća prepisivanja su riskantna; Poželjni su koraci koji su izmjereni i zaštićeni testiranjem.
Ukratko
Pregled koda i refaktoriranje određuju dugovječnost koda. AI je moćno drugo oko i generator planova: pruža prioritetne nalaze, sigurnosne scenarije i planove refaktoriranja u malim koracima. No refaktoriranje ne bi trebalo promijeniti ponašanje, a to jamči samo testiranje. Potvrdite svaki nalaz umjetne inteligencije prema kodu i testiranju; Ne uzimajte odgovor "nema problema" kao dokaz. Učinite tehnički dug vidljivim i otplatite ga u odmjerenim koracima zaštićenim testom.
Zadatak aplikacije
Uzmite liniju od 40-70, nešto složeniju funkciju koju imate (ili neka AI generira). Najprije slijedite upute za strukturirani pregled i poredajte nalaze kao [KRITIČNO]/[SREDNJE]/[NISKO]; Ručno provjerite barem jedan nalaz prema kodu. Zatim, uz upit plana sigurnog refaktoriranja, prvo generirajte i pokrenite testove karakterizacije, a zatim primijenite refaktoring u malim koracima i provjerite ostaju li testovi zeleni u svakom koraku.
popis za provjeru
- [ ] Pregled sam strukturirao s oznakama prioriteta (kritičan/srednji/nizak).
- [ ] Provjerio sam najmanje jedan nalaz umjetne inteligencije u odnosu na kod/test.
- [ ] Testirao sam trenutno ponašanje prije refaktoriranja.
- [ ] Promjene sam napravio u malim koracima i izvodio testove u svakom koraku.
- [ ] Specificirao sam ograničenje "Ponašanje mora ostati isto" u upitu.
- [ ] Potvrdio sam da sigurnosni nalazi zahtijevaju ljudsku potvrdu.