Steven
Steven6 min čítania

Anatómia dodania softvéru do dokonalosti: ako code review zachytilo to, čo testy nedokázali

Naprieč celou sériou GeekBye v2 sa opakuje to isté: oprava prejde každým testom na stroji vývojára a potom code review dokáže, že by zlyhala takmer u každého. Toto je pracovný postup za deviatimi vydaniami — brána review, záchyty vo fáze opravy a disciplína „otestuj pred odoslaním", ktorá mení „u mňa to funguje" na „funguje to".

Inžinierstvo
Proces
Revízia kódu
Vydania GeekBye
Anatómia dodania softvéru do dokonalosti: ako code review zachytilo to, čo testy nedokázali

Za pár týždňov GeekBye vydalo deväť vydaní — od v2.0.0 po v2.0.11 — a táto séria vyrozprávala príbeh každého z nich. Prečítajte si ich spolu a vynorí sa vzorec zaujímavejší než ktorákoľvek jednotlivá chyba: znova a znova oprava prešla každým testom na stroji vývojára a code review dokázalo, že by zlyhala takmer u všetkých ostatných.

Táto medzera — medzi „u mňa to funguje" a „funguje to" — je miesto, kde spoľahlivosť naozaj žije. Toto je pracovný postup, ktorý ju zatvára, a register každého vydania, ktoré vyprodukoval.

Vzorec: zelené testy, nesprávna odpoveď

Tu sú tri najjasnejšie prípady zo série, pretože robia abstraktné konkrétnym.

  • Pri oprave zachytávania na viacerých monitoroch (v2.0.10) prvá implementácia ukotvila zachytávanie obrazovky na okno prekrytia aplikácie. Prešla testovaním — na vývojárskom stroji s jedným monitorom. Revízia uvážila, kde toto prekrytie v skutočnosti žije (na primárnom displeji, vždy, pokiaľ ho fyzicky nepresuniete) a dokázala, že „oprava" by sa rozlíšila rovno späť na nesprávny monitor takmer u každého reálneho používateľa. Správna kotva — kurzor — vzišla z tejto argumentácie, nie z behu testu.
  • Pri vydaní so záložným kanálom pri blokovaní WebSocket (v2.0.8) revízia zistila, že práve ten 403, ktorý vracia blokujúce proxy, bol klasifikovaný ako fatálna chyba autentifikácie — takže záložný kanál, kvôli spusteniu ktorého funkcia vôbec existovala, sa nikdy nemohol spustiť. Funkcia by sa odoslala, prešla testami šťastnej cesty a neurobila nič pre svoje skutočné publikum.
  • Pri oprave časového limitu nečinnosti (v2.0.9) prvá verzia pečiatkovala hodiny „stále nažive" vnútri cesty kódu, ktorú časť prepisov legitímne preskakuje — repliky druhého rečníka. Revízia zachytila, že budúca zmena by mohla ticho znova zaviesť presne tú chybu, ktorá sa opravovala, a značka sa presunula na bezpodmienečné miesto, s testom, ktorý ju tam udrží.

Ani jednu z nich nezachytilo spustenie kódu. Všetky zachytil recenzent uvažujúci o tom, prečo kód funguje — a nachádzajúci prípad, kde nefunguje.

Tri časti brány

Pracovný postup za sériou nie je komplikovaný. Sú to tri návyky uplatňované bez výnimky.

1. Revízia uvažuje o správnosti, nielen spúšťa kód. Prechádzajúci test dokazuje, že kód funguje pre prípad, na ktorý ste mysleli. Revízia je druhý, protichodný model systému pýtajúci sa na aký prípad ste nemysleli? — druhý monitor, firemné proxy, prepis, ktorý preskočí vetvu, klient o jednu verziu pozadu. Krok revízie v tejto sérii bol často nezávislý recenzent-agent poverený vyvrátiť opravu, nie ju požehnať. V tomto rámci je celá pointa: recenzent snažiaci sa zlomiť vašu argumentáciu nájde dieru, popri ktorej recenzent snažiaci sa ju schváliť len prekĺzne pohľadom.

2. Každá oprava správania sa dodáva s testom, ktorý pribíja presné zlyhanie. Nie testom, že funkcia funguje — testom, že táto konkrétna chyba je mŕtva. 403 zo zablokovaného proxy musí prepadnúť do záložného kanála; skutočný 403 autentifikácie nesmie. Hodiny aktivity musia opečiatkovať prepis, ktorý preskakuje atribúciu. Tieto testy existujú, aby sa chyba nemohla ticho vrátiť o pol roka, keď bude niekto refaktorovať vedľa — zlyhanie je pribité o podlahu.

3. Build sa notarizuje a overí pred odoslaním. Niekoľko z týchto opráv prešlo od diagnózy k podpísanému, notarizovanému, automaticky sa aktualizujúcemu vydaniu za jeden deň. Táto rýchlosť je bezpečná len preto, že brána je disciplinovaná: diagnostika dokazuje koreňovú príčinu (vydanie s povolením mikrofónu odoslalo svoju diagnostiku ako prvú), test pribíja opravu, revízia vyvracia argumentáciu a až potom vychádza skutočný notarizovaný build. Prísnosť je to, čo robí rýchlosť bezpečnou, nie to, čo sa s ňou vymieňa.

Prečo na tom pre AI aplikáciu záleží viac

Existuje dôvod, prečo je táto disciplína nespochybniteľná práve pre nástroj ako GeekBye. Niekoľko najškaredších chýb v sérii bolo ticho-nesprávnych, nie hlučne padajúcich: snímka obrazovky, ktorá kŕmila AI nesprávnym monitorom (v2.0.10), prepis skreslený smerom k odpadovým výrazom, takže „speak" vyšlo ako meno (v2.0.11), asistent odpovedajúci v nesprávnom režime bez spôsobu, ako to vidieť (v2.0.3 + v2.0.5). Keď vaša aplikácia kŕmi kontextom model, nesprávny vstup vyprodukuje sebavedomo nesprávny výstup a nikde žiadnu chybu. Zo zlyhaní, ktoré nevyhodia výnimku, sa nedá vytestovať von. Musíte sa z nich vyargumentovať — a presne na to je brána revízie.

Séria, po poradí

Každý z nich je samostatná prípadová štúdia jedného vydania. Prečítané od začiatku do konca sú anatómiou premeny produktu z „funguje" na „dôveryhodný".

  1. Čo v skutočnosti stojí verzia 2: 206 commitov úprimných stavov — v2.0.0. Základ: nikdy neukazuj stav, ktorý nie je pravdivý.
  2. Deň, keď naša aplikácia zaDDoSovala samú seba — v2.0.1 + v2.0.4. Štartovací nával nahrávaní dupajúci po našom vlastnom backende a rebrík živosti, ktorý si vynútil.
  3. Pokojný softvér: oprava blikania a čip režimu odpovede — v2.0.3 + v2.0.5. Vydania bez funkcií, ktoré kupovali dôveru po jednom detaile.
  4. Vaša Mac aplikácia zabúda prístup k mikrofónu pri každom spustení — v2.0.6. macOS App Translocation a odoslanie diagnostiky pred opravou.
  5. Jedna CSS premenná, päť kôl revízie a Swift toolchain, ktorý klamal — v2.0.7. Rovnomerná priesvitnosť a binárka, ktorá zmenila veľkosť, pretože dokumentácia sa nezhodovala s vynucovacím skriptom.
  6. Živý prepis, keď firewall blokuje WebSockety — v2.0.8. Záložný kanál na čistom HTTPS a 403, ktorý by ho skryl pred ním samým.
  7. Prečo váš AI zapisovač prestane nahrávať uprostred stretnutia — v2.0.9. Časovač nečinnosti, ktorý počul len vás, a pád, ktorý mohol zamknúť vašu plochu.
  8. Prečo nahrávanie obrazovky zachytáva nesprávny monitor — v2.0.10. Chyba nesprávneho displeja a oprava, ktorá prešla na jednom monitore a zlyhala by na dvoch.
  9. Prečo AI prepis nesprávne počuje technické výrazy — v2.0.11. Skresľovanie reči smerom k vášmu slovníku — a regresia, ktorá to zhoršila, kým sa to zlepšilo.

Záver

Dokonalosť nie je stav, ktorý dosiahnete; je to brána, ktorú udržiavate. Deväť vydaní a tie isté tri otázky pri každom: na aký prípad si nemyslel, je presné zlyhanie pribité testom a vyšiel naozaj skutočný podpísaný build? Nič z toho nie je okázalé. Všetko z toho je dôvod, prečo GeekBye v2 pôsobí pokojne. Ak staviaš softvér — AI alebo iný — prenosná časť nie je v žiadnej jednotlivej oprave. Je v návyku brať zelenú sadu testov ako začiatok argumentu, nie jeho koniec.

Každé vydanie vyššie je dostupné cez automatickú aktualizáciu. O produkte, do ktorého sa tieto opravy skladajú, pozri čo je nové v GeekBye v2.

Súvisiace články

Vaša Mac aplikácia získa prístup k mikrofónu — a pri každom spustení naň zabudne
Steven
Steven5 min čítania

Vaša Mac aplikácia získa prístup k mikrofónu — a pri každom spustení naň zabudne

GeekBye požiadal o prístup k mikrofónu, udelili ste ho a fungovalo to. Ďalšie spustenie: preč. A aplikácia sa v Nastaveniach systému → Mikrofón vôbec neobjavila. Vinníkom bola bezpečnostná funkcia macOS, ktorá aplikáciu potichu spúšťala z cesty, čo zmizne — tu je diagnóza a náprava na jedno kliknutie.

macOS
Povolenia
Inžinierstvo
Jedna CSS premenná, päť kôl revízie a Swift toolchain, ktorý klamal
Steven
Steven6 min čítania

Jedna CSS premenná, päť kôl revízie a Swift toolchain, ktorý klamal

GeekBye v2.0.7 spravil celý overlay nastaviteľne priehľadným — čo znie ako jednoriadková zmena v CSS a rozhodne ňou nebolo. Skutočný príbeh je o tom, čo odhalila revízia kódu: dva povrchy, ktoré odmietali zmiznúť, nahrávacia lišta, ktorá vyzerala zle pri rovnakej nepriehľadnosti, a skompilovaná binárka, ktorá sa hompáľala o 672 bajtov, pretože naša vlastná dokumentácia povedala recenzentovi nesprávnu verziu Swift.

Inžinierstvo
Dizajn
Zostavenie
Bezpečnostná kontrola, ktorá spravila našu aplikáciu nezatvárateľnou
Steven
Steven5 min čítania

Bezpečnostná kontrola, ktorá spravila našu aplikáciu nezatvárateľnou

Automatická aktualizácia bola najťažšia funkcia, akú sme kedy vydali — šesť vydaní za štyri dni, aby prestala kaziť aplikáciu. Najhoršiu chybu sme spôsobili sami snahou byť opatrní: 500-milisekundová „bezpečnostná" kontrola, ktorá premenila neúspešnú aktualizáciu na proces, ktorý sa doslova nedal zatvoriť.

Inžinierstvo
Electron
Spoľahlivosť