Jednotka 4 / 12

Preskúmanie kódexu, refaktoring a technický dlh

zisky:

  • Schopnosť používať AI ako druhé oko pri kontrole kódu pre čitateľnosť, logiku a bezpečnosť
  • Schopnosť plánovať kroky refaktoringu s podporou AI bez narušenia komplexného správania kódu
  • Schopnosť overiť kontrolu AI a upraviť odporúčania pomocou testovania a porovnania kontroly verzií

V softvérovom inžinierstve sa kód oveľa viac číta ako píše. Riadok kódu je napísaný raz, ale v priebehu mesiacov sa číta, upravuje a stavia na ňom desiatky krát. To je dôvod, prečo kontrola kódu (kontrola kódu niekoho iného alebo vášho vlastného kódu z hľadiska logiky, čitateľnosti a bezpečnosti) a refaktoring (zlepšenie štruktúry kódu bez zmeny jeho správania) sú jadrom inžinierstva. Umelá inteligencia sa pri týchto dvoch úlohách stáva silným „druhým okom“: rýchlo navrhuje čitateľnosť, poukazuje na prehliadnuté logické a bezpečnostné problémy a rozdeľuje veľkú refaktorizáciu na menšie bezpečné kroky. Existuje však zásadné pravidlo: refaktoring by nemal zmeniť správanie a jediná vec, ktorá to zaručuje, je testovanie.

V tejto časti uvidíme, ako používať AI štruktúrovaným spôsobom na kontrolu kódu, ako opraviť zložitý kód bez narušenia jeho správania a ako spravovať technický dlh (rýchle, ale nákladné rozhodnutia o kóde).

Koncepty: Technická zadlženosť: Rozhodnutia o kóde prijaté dnes pre rýchlosť, ktoré sťažujú údržbu v budúcnosti. Vôňa kódu: Vzory, ktoré samy o sebe nie sú chybami, ale indikujú problémy (príliš dlhé funkcie, opakujúci sa kód). Regresia: Keď zmena naruší niečo, čo predtým fungovalo.

Používanie AI pri kontrole štruktúrovaného kódu

Keď je čas obmedzený, je potrebné zamerať sa na najrizikovejšie problémy. Automatický formátovač rieši problémy s formátovaním, ako je odsadenie a medzery; Ľudskú pozornosť musíte venovať logike, bezpečnosti a správaniu okrajových prípadov. Pri kontrole AI si vyžiadajte zoznam priorít, nie obyčajnú záplavu recenzií.

  1. Dajte rozsah. Aký kód, čo robiť, v akom kontexte funguje.
  2. Zadajte prioritnú os. Na prvom mieste presnosť a bezpečnosť, na druhom mieste čitateľnosť.
  3. Požiadajte o konkrétnu opravu. „Prečo problém“ a „odporúčaná oprava“ pre každý nález.
  4. Overíte si zistenia. AI tiež vytvára falošné poplachy; Overte každé zistenie pomocou kódu a testovania.

Výzva k štruktúrovanej kontrole: „Preskúmajte nasledujúcu funkciu ako starší inžinier. Uveďte zistenia v poradí podľa dôležitosti a označte ich týmito značkami: [KRITICKÉ] logika/zabezpečenie, [STREDNÉ] okrajový prípad/výkon, [NÍZKA] čitateľnosť/názov. Pre každé zistenie: prečo sa pýtať, konkrétny návrh opravy. NEPREKÁVAJTE problémy s formátovaním/odsadením, automatický nástroj kódu [kód to zvládne]“.

Výzva na kontrolu zameranú na bezpečnosť: "Skontrolujte tento kód len z bezpečnostných dôvodov: chýbajúce overenie vstupu, riziko vloženia, nedostatok kontroly autorizácie, únik dôverných informácií, nezabezpečené predvolené nastavenia. Ku každému nálezu pridajte príklad scenára útoku. Ak neexistuje žiadny problém so zabezpečením, jasne uveďte "Nenašiel som žiadne kritické problémy so zabezpečením". Kód: [kód]"

Upozornenie: To, že AI hovorí „žiadny problém“, nie je dôkazom, že problém neexistuje. AI môže produkovať falošne negatívne výsledky; môže obísť skutočný bezpečnostný problém. Kontrola AI dopĺňa, nie nahrádza, kontrolu človekom a testovanie bezpečnosti. V kóde kritickom pre bezpečnosť má posledné slovo kompetentný inžinier.

Test-preserved Refactoring

Zlaté pravidlo refaktoringu: najprv otestujte, neskôr zmeňte. Pred opravou kódu by mali existovať testy, ktoré uzamknú aktuálne správanie, aby ste okamžite vedeli, či zmena niečo pokazí. Neporušujte objednávku pri refaktorovaní AI.

  1. Otestujte súčasné správanie. V opačnom prípade nechajte AI vytvoriť „test charakterizácie“ (test, ktorý zachytáva aktuálne správanie také, aké je).
  2. Opravte to malými krokmi. Testovanie musí zostať zelené na každom kroku.
  3. Spustite ho po každom kroku. Zachyťte regresiu včas.

Výzva k plánu bezpečného refaktorovania: "Nasledujúca 60-riadková funkcia robí príliš veľa a je ťažko čitateľná. Chcem ju refaktorovať BEZ zmeny jej správania. Najprv: uveďte, aké testovacie prípady potrebujem na uzamknutie aktuálneho správania. Potom: rozdeľte refaktoring na malé kroky, z ktorých každý môže byť vykonaný, kým sú testy zelené. Kód zatiaľ nepíšte, dajte najprv plán: [kód]."

Slabá výzva / silná výzva

SLABÝ: "Vylepšite tento kód." (Výsledok: nie je jasné, čo treba zlepšiť; AI robí ľubovoľné zmeny, môže meniť správanie potichu.) STRONG: "Refaktorujte túto funkciu výpočtu platby kvôli čitateľnosti. OBMEDZENIE: správanie musí zostať úplne rovnaké, návratové hodnoty sa nesmú meniť. Rozdeľte dlhú funkciu na zmysluplné úžitkové funkcie, čím sa magické čísla zvýšia na pomenované konštanty. Uveďte zmeny položky po položke a vysvetlite, PREČO každá položka nemení správanie]." Kód: [kód]."

Výkonná výzva jasne hovorí, že „správanie musí zostať úplne rovnaké“ a čo je potrebné zlepšiť. Bez tohto obmedzenia môže AI zmeniť logiku v mene „zlepšenia“ a vytvoriť tichú regresiu.

Správa technického dlhu

Prístup

V krátkodobom horizonte

z dlhodobého hľadiska

ignorovanie dlhu

rýchly pokrok

Udržiavacia paralýza, tím spomaľuje

všetko prepísať

Vývoj stálych funkcií

Neistý výnos, vysoké riziko

Merané, testom chránené refaktorovanie

menšie spomalenie

Udržateľná rýchlosť

Najzdravší spôsob je tretí: zviditeľnite dlh (sledujte ho v zozname), začnite tam, kde to bolí najviac, a vyskúšajte každú opravu. AI je dobrým pomocníkom pri identifikácii a uprednostňovaní dlhových položiek, ale ktorý dlh zaplatiť, je obchodné rozhodnutie.

Mini kufríky

Prípad 1 – Tichá regresia. Vývojár povie AI, aby „zjednodušila túto funkciu“; AI ​​preloží podmienku nesprávne a výpočet návratnosti je prerušený. Keďže neprebieha žiadne testovanie, chyba nastane po 3 týždňoch s reklamáciou zákazníka. Tím urobí rovnakú prácu tak, že najprv napíše charakterizačný test a pri prvom spustení zachytí chybu červeným testom.

Prípad 2 – Užitočné druhé oko. Pri kontrole kódu si AI uvedomí, že autorizácia používateľa sa kontroluje iba v rozhraní a nie na serveri. Toto je chyba zabezpečenia neoprávneného prístupu. Engineer pridáva kontrolu autorizácie na strane servera; Inšpekcia AI zabraňuje skutočnému bezpečnostnému incidentu.

Prípad 3 – Falošne pozitívny. AI hovorí „táto premenná sa nikdy nepoužije, odstráňte ju“; Používa sa však nepriamo prostredníctvom mechanizmu premenlivého odrazu. Ak inžinier neoverí návrh v porovnaní s testom, bude vymazaný a dôjde k chybe behu. Každý nález AI musí byť pred implementáciou potvrdený.

Časté chyby

  • Refaktoring bez testovania. Nezostáva nič, čo by zabezpečilo zachovanie správania.
  • Aplikácia zistení AI bez ich overenia. Vyskytujú sa falošne pozitívne aj falošne negatívne výsledky.
  • Strácanie ľudského času problémami s formátom. Zameranie sa na úlohy, ktoré je možné vyriešiť pomocou automatizovaných nástrojov, zatieňuje skutočné riziká.
  • Odpoveď „žiadny problém“ berieme ako záruku. AI dokáže obísť zraniteľnosť; je potrebná ľudská kontrola.
  • Pokúste sa splatiť celý dlh naraz. Veľké prepisy sú riskantné; Uprednostňujú sa kroky, ktoré sú merané a chránené testovaním.

V súhrne

Kontrola a refaktorovanie kódu určuje životnosť kódu. Umelá inteligencia je výkonný generátor druhého oka a plánov: poskytuje prioritné zistenia, bezpečnostné scenáre a plány refaktorovania v malých krokoch. Ale refaktoring by nemal zmeniť správanie a iba testovanie to zaručuje. Overte každý nález AI oproti kódu a testovaniu; Neberte odpoveď „žiadny problém“ ako dôkaz. Zviditeľnite technický dlh a splácajte ho v meraných, testom chránených krokoch.

Aplikačná úloha

Vezmite 40-70 riadok, trochu zložitú funkciu, ktorú máte (alebo nechajte vygenerovať AI). Najprv postupujte podľa výzvy k štruktúrovanej kontrole a zoraďte zistenia ako [KRITICKÉ]/[STREDNÉ]/[NÍZKE]; Ručne overte aspoň jeden nález oproti kódu. Potom s výzvou plánu bezpečného refaktorovania najskôr vygenerujte a spustite charakterizačné testy, potom použite refaktoring v malých krokoch a overte, či testy ostávajú v každom kroku zelené.

kontrolný zoznam

  • [ ] Štruktúroval som recenziu s prioritnými značkami (kritická/stredná/nízka).
  • [ ] Overil som aspoň jeden nález AI oproti kódu/testu.
  • [ ] Testoval som súčasné správanie pred refaktorovaním.
  • [ ] Urobil som zmeny v malých krokoch a testoval som každý krok.
  • [ ] Vo výzve som zadal obmedzenie „Správanie musí zostať rovnaké“.
  • [ ] Potvrdil som, že bezpečnostné zistenia vyžadujú potvrdenie človekom.