Enhed 4 / 12

Kodegennemgang, refactoring og teknisk gæld

Gevinster:

  • Evne til at bruge AI som et andet øje i kodegennemgang for læsbarhed, logik og sikkerhed
  • Evne til at planlægge refactoring-trin med AI-understøttelse uden at forstyrre kompleks kodeadfærd
  • Evne til at verificere AI's gennemgang og redigere anbefalinger med test og versionskontrol sammenligning

I software engineering læses kode meget mere, end det er skrevet. En kodelinje skrives én gang, men læses, ændres og bygges på snesevis af gange i løbet af måneder. Det er derfor, kodegennemgang (gennemgang af en andens eller din egen kode for logik, læsbarhed og sikkerhed) og refactoring (forbedring af kodens struktur uden at ændre dens adfærd) er kernen i teknikken. AI bliver et kraftfuldt "andet øje" for disse to opgaver: det foreslår hurtigt læsbarhed, påpeger oversete logik- og sikkerhedsproblemer og opdeler en stor refaktorering i mindre sikre trin. Men der er en kritisk regel: Refaktorering bør ikke ændre adfærd, og det eneste, der garanterer dette, er test.

I denne enhed vil vi se, hvordan man bruger AI på en struktureret måde til kodegennemgang, hvordan man reparerer kompleks kode uden at bryde dens adfærd, og hvordan man håndterer teknisk gæld (hurtige, men dyre kodebeslutninger).

Koncepter: Teknisk gæld: Kode beslutninger, der er truffet i dag for hastighed, der gør vedligeholdelse vanskelig i fremtiden. Kode lugt: Mønstre, der ikke er fejl i sig selv, men indikerer problemer (for lange funktioner, gentagen kode). Regression: Når en forandring bryder noget, der tidligere virkede.

Brug af AI i Structured Code Review

Når tiden er begrænset, er det nødvendigt at fokusere på de højeste risikoproblemer. Den automatiske formatering håndterer formateringsproblemer såsom indrykning og mellemrum; Du skal vie menneskelig opmærksomhed til logik, sikkerhed og kantsagsadfærd. Når du har AI-gennemgangen, skal du bede om en prioriteret liste, ikke en almindelig byge af anmeldelser.

  1. Giv omfanget. Hvilken kode, hvad skal man gøre, i hvilken sammenhæng virker det.
  2. Angiv prioritetsaksen. Nøjagtighed og sikkerhed først, læsbarhed for det andet.
  3. Bed om konkret rettelse. "Hvorfor problemet" og "anbefalet løsning" for hvert fund.
  4. Du verificerer resultaterne. AI producerer også falske positiver; Bekræft hvert fund i forhold til kode og test.

Struktureret gennemgangsprompt: "Undersøg følgende funktion som en senioringeniør. List resultaterne i rækkefølge efter vigtighed, og marker dem med disse tags: [KRITISK] logik/sikkerhed, [MIDDEL] edge case/performance, [LOW] læsbarhed/navn. For hvert fund: hvorfor spørge, konkrete forslag til rettelse. SKIP IKKE OVER formatering/indrykning, det vil håndtere problemer med formatering/indrykning].

Sikkerhedsfokuseret gennemgangsprompt: "Gennemgå denne kode kun af sikkerhedsmæssige årsager: manglende inputvalidering, risiko for indsprøjtning, manglende autorisationskontrol, læk af fortrolige oplysninger, usikre standardindstillinger. Tilføj et eksempel på angrebsscenario til hvert fund. Hvis der ikke er noget sikkerhedsproblem, skal du tydeligt angive "Jeg fandt ikke nogen kritiske sikkerhedsproblemer". Kode: [kode]"

Forsigtig: Bare fordi AI siger "intet problem", er det ikke et bevis på, at der ikke er noget problem. AI kan producere falske negativer; kan omgå et reelt sikkerhedsproblem. AI-gennemgang supplerer, ikke erstatter, menneskelig gennemgang og sikkerhedstest. I sikkerhedskritisk kode har den kompetente ingeniør det sidste ord.

Testkonserveret Refactoring

Den gyldne regel for refactoring: test først, skift senere. Inden koden rettes, bør der være tests, der låser den aktuelle adfærd, så du med det samme ved, om ændringen bryder noget. Bryd ikke rækkefølgen, når du har AI-refaktorering.

  1. Sæt den nuværende adfærd på prøve. Ellers skal du få AI til at producere en "karakteriseringstest" (test, der fanger den aktuelle adfærd, som den er).
  2. Løs det i små trin. Test skal forblive grønt ved hvert trin.
  3. Kør det efter hvert trin. Fang regression tidligt.

Sikker refactoring plan prompt: "Den følgende 60-linjers funktion gør for meget og er svær at læse. Jeg vil omfaktorere den UDEN at ændre dens adfærd. Først: liste hvilke testcases jeg har brug for for at låse ned den aktuelle adfærd. Derefter: opdel refactoring i små trin, som hver enkelt kan udføres, mens testene er grønne. Giv ikke [skrive planen] koden først, kode endnu.

Svag prompt / stærk prompt

SWAG: "Gør denne kode bedre." (Resultat: uklart, hvad der skal forbedres; AI foretager vilkårlige ændringer, kan ændre adfærd lydløst.) STÆRK: "Refaktorer denne betalingsberegningsfunktion for læsbarhed. BEGRÆNSNING: adfærd skal forblive nøjagtig den samme, returværdier må ikke ændres. Opdel den lange funktion i meningsfulde hjælpefunktioner, øge de magiske tal til navngivne konstanter. Liste ændrer vare for hver vare og forklarer ikke, HVIL ændrer adfærd"

Den kraftfulde prompt siger klart, at "adfærden skal forblive nøjagtig den samme" begrænsning, og hvad der skal forbedres. Uden denne begrænsning kan AI ændre logik i navnet "forbedring" og producere en stille regression.

Håndtering af teknisk gæld

tilgang

På kort sigt

på længere sigt

ignorerer gæld

hurtige fremskridt

Vedligeholdelseslammelse, holdet bremser

omskrive alt

Udvikling af stående funktioner

Usikkert afkast, høj risiko

Målt, testbeskyttet refactoring

mindre opbremsning

Bæredygtig hastighed

Den sundeste måde er den tredje: Gør gælden synlig (spor den på en liste), start hvor det gør mest ondt, og test-bevis hver rettelse. AI er en god hjælp til at identificere og prioritere gældsposter, men hvilken gæld der skal betales er en forretningsbeslutning.

Mini sager

Case 1 - Silent regression. En udvikler fortæller AI for at "forenkle denne funktion"; AI'en oversætter en betingelse forkert, og afkastberegningen er brudt. Da der ikke er nogen test, opstår fejlen efter 3 uger med en kundeklage. Holdet udfører det samme arbejde ved først at skrive en karakteriseringstest og fanger fejlen med en rød test ved første kørsel.

Tilfælde 2 — Nyttigt andet øje. I en kodegennemgang indser AI, at brugerautorisation kun kontrolleres i grænsefladen og ikke på serveren. Dette er en uautoriseret adgangssårbarhed. Ingeniør tilføjer godkendelseskontrol på serversiden; AI-inspektion forhindrer en egentlig sikkerhedshændelse.

Tilfælde 3 — Falsk positiv. AI siger "denne variabel bliver aldrig brugt, slet den"; Det bruges dog indirekte gennem en variabel reflektionsmekanisme. Hvis teknikeren ikke bekræftede forslaget i forhold til testen, ville det blive slettet, og der ville opstå en runtime-fejl. Alle AI-fund skal bekræftes før implementering.

Almindelige fejl

  • Refaktorering uden test. Der er intet tilbage for at sikre, at adfærden bevares.
  • Anvendelse af AI-resultater uden at validere dem. Både falske positive og falske negative ting sker.
  • At spilde menneskelig tid på formatproblemer. Fokus på opgaver, der kan løses med automatiserede værktøjer, overskygger de reelle risici.
  • Tager svaret "Intet problem" som en garanti. AI kan omgå sårbarhed; menneskelig gennemgang er påkrævet.
  • Forsøger at betale hele gælden på én gang. Store omskrivninger er risikable; Trin, der er målt og beskyttet ved test, foretrækkes.

Sammenfattende

Kodegennemgang og refactoring bestemmer kodens levetid. AI er en kraftfuld generator af andet øje og plan: leverer prioriterede resultater, sikkerhedsscenarier og små-trins refactoring-planer. Men refactoring bør ikke ændre adfærd, og kun test garanterer dette. Valider alle AI-fund i forhold til kode og test; Tag ikke svaret "ingen problem" som bevis. Gør teknisk gæld synlig og betal den af ​​i afmålte, testbeskyttede trin.

Ansøgningsopgave

Tag en 40-70 linje, noget kompleks funktion du har (eller har AI til at generere). Følg først den strukturerede gennemgangsprompt og sorter resultaterne som [KRITISK]/[MIDDEL]/[LAV]; Bekræft manuelt mindst ét ​​fund i forhold til koden. Derefter, med prompten for sikker refactoring plan, skal du først generere og køre karakteriseringstestene, derefter anvende refactoring i små trin og kontrollere, at testene forbliver grønne ved hvert trin.

tjekliste

  • [ ] Jeg strukturerede anmeldelsen med prioriterede tags (kritisk/medium/lav).
  • [ ] Jeg har verificeret mindst ét ​​AI-fund i forhold til koden/testen.
  • [ ] Jeg testede den nuværende adfærd før refaktorisering.
  • [ ] Jeg lavede ændringerne i små trin og kørte test ved hvert trin.
  • [ ] Jeg specificerede "Adfærd skal forblive den samme"-begrænsningen i prompten.
  • [ ] Jeg har bekræftet, at sikkerhedsfund kræver menneskelig bekræftelse.