
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".
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ý".
- Čo v skutočnosti stojí verzia 2: 206 commitov úprimných stavov — v2.0.0. Základ: nikdy neukazuj stav, ktorý nie je pravdivý.
- 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.
- 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.
- 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.
- 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.
- Ž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. - 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.
- 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.
- 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.