Jednotka 4 / 12

Kontrola kódu, Refaktoring a technický dluh

zisky:

  • Schopnost používat AI jako druhé oko při kontrole kódu pro čitelnost, logiku a bezpečnost
  • Schopnost plánovat kroky refaktoringu s podporou AI bez narušení složitého chování kódu
  • Schopnost ověřit recenze AI a upravit doporučení pomocí testování a porovnání kontroly verzí

V softwarovém inženýrství se kód mnohem více čte, než zapisuje. Řádek kódu je napsán jednou, ale je čten, upravován a sestavován desítkykrát v průběhu měsíců. To je důvod, proč kontrola kódu (kontrola kódu někoho jiného nebo vašeho vlastního kódu z hlediska logiky, čitelnosti a bezpečnosti) a refaktoring (zlepšení struktury kódu bez změny jeho chování) jsou jádrem inženýrství. Umělá inteligence se pro tyto dva úkoly stává mocným „druhým okem“: rychle navrhuje čitelnost, upozorňuje na přehlížené logické a bezpečnostní problémy a rozbíjí velkou refaktorizaci na menší bezpečné kroky. Existuje však zásadní pravidlo: refaktoring by neměl změnit chování a jediná věc, která to zaručuje, je testování.

V této jednotce uvidíme, jak používat AI strukturovaným způsobem pro kontrolu kódu, jak opravit složitý kód bez porušení jeho chování a jak spravovat technický dluh (rychlá, ale nákladná rozhodnutí o kódu).

Koncepce: Technická zadluženost: Dnešní rozhodnutí o rychlosti, která znesnadňují údržbu v budoucnu. Zápach kódu: Vzory, které samy o sobě nejsou chybami, ale indikují problémy (příliš dlouhé funkce, opakující se kód). Regrese: Když změna naruší něco, co dříve fungovalo.

Použití AI při kontrole strukturovaného kódu

Když je čas omezený, je nutné se zaměřit na nejrizikovější problémy. Automatický formátovač řeší problémy s formátováním, jako je odsazení a mezery; Lidskou pozornost musíte věnovat logice, bezpečnosti a chování hraničních případů. Při kontrole umělé inteligence požádejte o prioritní seznam, ne o prostý příval recenzí.

  1. Dejte rozsah. Jaký kód, co dělat, v jakém kontextu funguje.
  2. Určete prioritní osu. Přesnost a bezpečnost na prvním místě, čitelnost na druhém místě.
  3. Požádejte o konkrétní opravu. „Proč problém“ a „doporučená oprava“ u každého nálezu.
  4. Ověřujete zjištění. AI také produkuje falešné poplachy; Ověřte každý nález proti kódu a testování.

Výzva ke strukturované kontrole: "Prozkoumejte následující funkci jako vedoucí technik. Seřaďte zjištění v pořadí důležitosti a označte je těmito značkami: [KRITICKÉ] logika/zabezpečení, [STŘEDNÍ] okrajový případ/výkon, [NÍZKÁ] čitelnost/název. Pro každé zjištění: proč se ptát, konkrétní návrh opravy. NEPŘESKOČUJTE problémy s formátováním/odsazením, automatizovaný nástroj kódu [kód] to zvládne."

Výzva ke kontrole zaměřené na zabezpečení: "Zkontrolujte tento kód pouze z bezpečnostních důvodů: chybějící ověření vstupu, riziko vložení, nedostatečná kontrola autorizace, únik důvěrných informací, nezabezpečené výchozí nastavení. Ke každému nálezu přidejte příklad scénáře útoku. Pokud neexistuje žádný problém se zabezpečením, jasně uveďte 'Nenašel jsem žádné kritické problémy se zabezpečením'. Kód: [kód]"

Upozornění: To, že AI říká „žádný problém“, není důkazem, že problém neexistuje. AI může produkovat falešné negativy; může obejít skutečný bezpečnostní problém. Kontrola AI doplňuje, nikoli nahrazuje, kontrolu člověkem a bezpečnostní testování. V kódu kritickém pro bezpečnost má poslední slovo kompetentní inženýr.

Zkušební konzervovaný Refaktoring

Zlaté pravidlo refaktoringu: nejprve test, později změna. Před opravou kódu by měly existovat testy, které uzamknou aktuální chování, abyste okamžitě věděli, zda změna něco pokazí. Neporušujte objednávku při refaktorování AI.

  1. Otestujte současné chování. V opačném případě nechte AI vytvořit „test vlastností“ (test, který zachycuje aktuální chování takové, jaké je).
  2. Opravte to po malých krocích. Testování musí zůstat zelené na každém kroku.
  3. Spusťte jej po každém kroku. Zachyťte regresi brzy.

Výzva plánu bezpečného refaktorování: "Následující 60řádková funkce dělá příliš mnoho a je těžké ji číst. Chci ji přefaktorovat, AŽ BYCH MĚNIL její chování. Nejprve: uveďte, jaké testovací případy potřebuji k uzamčení aktuálního chování. Potom: rozdělte refaktoring na malé kroky, z nichž každý lze provést, dokud jsou testy zelené. Kód zatím nepište, dejte plán jako první."

Slabá výzva / Silná výzva

SLABÝ: "Vylepšete tento kód." (Výsledek: není jasné, co zlepšit; AI provádí svévolné změny, může změnit chování tiše.) SILNÝ: "Refaktorujte tuto funkci výpočtu platby, aby byla čitelná. OMEZENÍ: chování musí zůstat přesně stejné, návratové hodnoty se nesmí měnit. Rozdělte dlouhou funkci na smysluplné užitkové funkce, zvýšení magických čísel na pojmenované konstanty. Uveďte změny položky po položce a vysvětlete, PROČ se každá položka nemění chování]." Kód: [kód]."

Výkonná výzva jasně říká, že „chování musí zůstat přesně stejné“ a co je třeba zlepšit. Bez tohoto omezení může umělá inteligence změnit logiku ve jménu „zlepšení“ a vytvořit tichou regresi.

Správa technického dluhu

Přístup

Krátkodobě

v dlouhodobém horizontu

ignorování dluhů

rychlý pokrok

Údržbová paralýza, tým zpomaluje

všechno přepsat

Vývoj stálých funkcí

Nejistý výnos, vysoké riziko

Měřený, testem chráněný refaktoring

menší zpomalení

Udržitelná rychlost

Nejzdravější způsob je třetí: zviditelnit dluh (sledovat jej v seznamu), začít tam, kde to bolí nejvíce, a každou opravu otestovat. AI je dobrým pomocníkem při identifikaci a upřednostňování dluhových položek, ale který dluh zaplatit, je obchodní rozhodnutí.

Mini pouzdra

Případ 1 – Tichá regrese. Vývojář říká AI, aby „zjednodušila tuto funkci“; AI ​​přeloží podmínku nesprávně a výpočet návratnosti je přerušen. Protože neprobíhá žádné testování, chyba se objeví po 3 týdnech se stížností zákazníka. Tým udělá stejnou práci tak, že nejprve napíše charakterizační test a chybu zachytí červeným testem při prvním spuštění.

Případ 2 – Užitečné druhé oko. Při kontrole kódu si AI uvědomí, že autorizace uživatele se kontroluje pouze v rozhraní, nikoli na serveru. Toto je chyba zabezpečení neoprávněného přístupu. Engineer přidává kontrolu autorizace na straně serveru; Inspekce AI zabraňuje skutečnému bezpečnostnímu incidentu.

Případ 3 – Falešně pozitivní. AI říká "tato proměnná se nikdy nepoužívá, smažte ji"; Používá se však nepřímo prostřednictvím mechanismu proměnného odrazu. Pokud by inženýr neověřil návrh proti testu, byl by odstraněn a došlo by k chybě za běhu. Každý nález AI musí být před implementací potvrzen.

Časté chyby

  • Refaktoring bez testování. Nezbývá nic, co by zajistilo zachování chování.
  • Použití zjištění AI bez jejich ověření. Vyskytují se falešně pozitivní i falešně negativní výsledky.
  • Plýtvání lidským časem problémy s formátem. Zaměření na úkoly, které lze řešit pomocí automatizovaných nástrojů, zastiňuje skutečná rizika.
  • Berte odpověď „Žádný problém“ jako záruku. AI může obejít zranitelnost; je nutná lidská kontrola.
  • Snaží se splatit celý dluh najednou. Velké přepisy jsou riskantní; Preferovány jsou kroky, které jsou měřeny a chráněny testováním.

V souhrnu

Kontrola a refaktorování kódu určuje životnost kódu. Umělá inteligence je výkonný generátor druhého oka a plánů: poskytuje prioritní zjištění, bezpečnostní scénáře a plány refaktoringu v malých krocích. Ale refaktoring by neměl změnit chování a to zaručuje pouze testování. Ověřte každý nález AI proti kódu a testování; Neberte odpověď „žádný problém“ jako důkaz. Zviditelněte technický dluh a splaťte jej v měřených a testem chráněných krocích.

Aplikační úkol

Vezměte 40-70 řádek, poněkud složitou funkci, kterou máte (nebo nechte vygenerovat AI). Nejprve postupujte podle výzvy ke strukturované kontrole a seřaďte zjištění jako [KRITICKÉ]/[STŘEDNÍ]/[NÍZKÉ]; Ručně ověřte alespoň jeden nález proti kódu. Poté s výzvou plánu bezpečného refaktorování nejprve vygenerujte a spusťte charakterizační testy, poté aplikujte refaktoring v malých krocích a ověřte, že testy zůstávají v každém kroku zelené.

kontrolní seznam

  • [ ] Strukturoval jsem recenzi pomocí značek priority (kritické/střední/nízké).
  • [ ] Ověřil jsem alespoň jeden nález AI proti kódu/testu.
  • [ ] Testoval jsem aktuální chování před refaktorováním.
  • [ ] Prováděl jsem změny v malých krocích a testoval jsem každý krok.
  • [ ] Ve výzvě jsem zadal omezení "Chování musí zůstat stejné".
  • [ ] Potvrdil jsem, že bezpečnostní nálezy vyžadují lidské potvrzení.