
Tarkvara täiuslikuna tarnimise anatoomia: kuidas koodiülevaatus tabas selle, mida testid ei suutnud
Kogu GeekBye v2 sarja vältel kordub üks ja seesama: parandus läbib arendaja masinas iga testi ning siis tõestab koodiülevaatus, et peaaegu kõigi teiste jaoks oleks see läbi kukkunud. See on üheksa väljalaske taga olev töövoog — ülevaatuse värav, esmalt-parandus tabamised ja testi-enne-tarnimist distsipliin, mis muudab "minu masinas töötab" fraasiks "see töötab".
Paari nädala jooksul tarnis GeekBye üheksa väljalaset — v2.0.0 kuni v2.0.11 — ja see sari jutustas igaühe loo. Loe neid koos ja välja hüppab muster, mis on huvitavam kui ükski üksik viga: ikka ja jälle läbis parandus arendaja masinas iga testi ning koodiülevaatus tõestas, et peaaegu kõigi teiste jaoks oleks see läbi kukkunud.
Just see lõhe — "minu masinas töötab" ja "see töötab" vahel — ongi koht, kus usaldusväärsus tegelikult elab. See on töövoog, mis selle sulgeb, ja register iga väljalaske kohta, mille ta tootis.
Muster: rohelised testid, vale vastus
Siin on kolm selgeimat juhtumit sarjast, sest need muudavad abstraktse konkreetseks.
- Mitme monitori tveerimise paranduses (v2.0.10) sidus esimene teostus ekraani tveerimise rakenduse ülekattelava akna külge. See läbis testimise — ühe monitoriga arendaja masinas. Ülevaatus arutles selle üle, kus see ülekattelava tegelikult asub (alati esmasel kuval, kui sa seda füüsiliselt lohistama ei hakka), ja tõestas, et "parandus" oleks peaaegu iga reaalse kasutaja jaoks lahenenud tagasi valele monitorile. Õige ankur — kursor — tuli sellest arutelust, mitte testijooksust.
- WebSocketi varulahenduse väljalaskes (v2.0.8) leidis ülevaatus, et täpselt see
403, mille blokeeriv puhverserver tagastab, liigitati fataalseks autentimisveaks — nii et varulahendus, mille käivitamiseks funktsioon üldse eksisteeris, ei saanud kunagi rakenduda. Funktsioon oleks tarnitud, läbinud oma õnneliku-tee testid ja teinud oma tegeliku sihtrühma heaks mitte midagi. - Jõudeoleku aegumise paranduses (v2.0.9) tembeldas esimene versioon "veel elus" kella koodiharus, mille osa transkripte õiguspäraselt vahele jätab — teise kõneleja omad. Ülevaatus tabas, et tulevane muudatus võiks vaikselt uuesti sisse tuua täpselt selle vea, mida parandati, ning tempel viidi millegi tingimusteta juurde, koos testiga, mis hoiab seda seal.
Mitte ühtki neist ei tabatud koodi jooksutades. Kõik need tabas ülevaataja, kes arutles selle üle, miks kood töötab — ja leidis juhtumi, kus ei tööta.
Värava kolm osa
Sarja taga olev töövoog ei ole keeruline. See on kolm harjumust, mida rakendatakse eranditeta.
1. Ülevaatus arutleb korrektsuse üle, mitte lihtsalt ei jooksuta koodi. Läbitud test tõestab, et kood töötab juhtumi puhul, mille peale sa mõtlesid. Ülevaatus on teine, võistlev süsteemi mudel, mis küsib: millise juhtumi peale sa ei mõelnud? — teine monitor, korporatiivne puhverserver, transkript, mis haru vahele jätab, klient, mis on ühe versiooni maha jäänud. Ülevaatuse samm oli selles sarjas sageli sõltumatu agent-ülevaataja, kellel paluti parandust ümber lükata, mitte seda õnnistada. Just selles raamistuses ongi kogu mõte: ülevaataja, kes püüab su arutluskäiku murda, leiab augu, millest ülevaataja, kes püüab seda heaks kiita, mööda libiseb.
2. Iga käitumisparandus tarnitakse testiga, mis naelutab täpse tõrke. Mitte test, et funktsioon töötab — test, et see konkreetne viga on surnud. Blokeeritud puhverserveri 403 peab kukkuma läbi varulahendusele; päris autentimise 403 ei tohi. Aktiivsuse kell peab tembeldama transkripti, mis omistamise vahele jätab. Need testid eksisteerivad selleks, et viga ei saaks poole aasta pärast vaikselt tagasi tulla, kui keegi läheduses refaktoorib — tõrge on põranda külge naelutatud.
3. Ehitis notariseeritakse ja kontrollitakse enne tarnimist. Mitmed neist parandustest jõudsid diagnoosist allkirjastatud, notariseeritud, automaatselt uuenevani väljalaskeni ühe päeva jooksul. See kiirus on turvaline ainult seetõttu, et värav on distsiplineeritud: diagnostika tõestab algpõhjuse (mikrofoni loa väljalase tarnis oma diagnostika esimesena), test naelutab paranduse, ülevaatus lükkab arutluskäigu ümber, ja alles siis läheb välja päris notariseeritud ehitis. Rangus on see, mis muudab kiiruse turvaliseks, mitte see, mis sellega kaupleb.
Miks see loeb AI-rakenduse jaoks rohkem
On põhjus, miks see distsipliin on just sellise tööriista nagu GeekBye jaoks vaieldamatu. Mitmed sarja pahurimatest vigadest olid vaikselt-valed, mitte valjult-kokkukukkuvad: ekraanipilt, mis söötis AI-le vale monitori (v2.0.10), transkripsioon, mis oli kaldu prügiterminite poole, nii et "rääkida" tuli välja nimena (v2.0.11), assistent, mis vastas vales režiimis ilma võimaluseta seda näha (v2.0.3 + v2.0.5). Kui su rakendus söödab mudelile konteksti, tekitab vale sisend enesekindlalt vale väljundi ja mitte kusagil ühtki viga. Tõrgetest, mis erindit ei viska, ei saa end välja testida. Neist tuleb end välja arutleda — ja just selleks ülevaatuse värav ongi.
Sari, järjekorras
Iga neist on omaette juhtumiuuring ühest väljalaskest. Algusest lõpuni loetuna on need anatoomia sellest, kuidas viia toode "töötab" olekust "usaldusväärne" olekusse.
- Mida teise versiooni tegemine tegelikult nõuab: 206 commit'i ausaid olekuid — v2.0.0. Vundament: ära kunagi näita olekut, mis ei ole tõsi.
- Päev, mil meie rakendus DDoS-is iseennast — v2.0.1 + v2.0.4. Käivitusaegne üleslaadimiste kuhi, mis rünnas meie enda taustsüsteemi, ja elujõulisuse redel, mille see peale sundis.
- Rahulik tarkvara: värelemise parandus ja vastuserežiimi žetoon — v2.0.3 + v2.0.5. Ilma-funktsioonita väljalasked, mis ostsid usaldust ühe detaili kaupa.
- Sinu Mac-i rakendus unustab mikrofoni ligipääsu igal käivitusel — v2.0.6. macOS App Translocation ja diagnostika tarnimine enne parandust.
- Üks CSS-muutuja, viis ülevaatusvooru ja Swift-i tööriistakomplekt, mis valetas — v2.0.7. Ühtlane läbipaistvus ja binaarfail, mis muutis suurust, sest dokumentatsioon ei ühtinud jõustamisskriptiga.
- Otsetranskripsioon, kui tulemüür blokeerib WebSocketi — v2.0.8. Puhtalt HTTPS-i varulahendus ja
403, mis oleks selle tema enda eest ära peitnud. - Miks sinu AI-märkmetegija lõpetab salvestamise keset koosolekut — v2.0.9. Jõudeoleku taimer, mis kuulis ainult sind, ja krahh, mis võis su töölaua lukku panna.
- Miks ekraanisalvestus tabab vale monitori — v2.0.10. Vale-kuva viga ja parandus, mis läbis ühe monitoriga ja oleks kahega läbi kukkunud.
- Miks AI-transkripsioon kuuleb tehnilisi termineid valesti — v2.0.11. Kõne kallutamine sinu sõnavara poole — ja regressioon, mis tegi selle halvemaks enne, kui tegi paremaks.
Kokkuvõte
Täiuslikkus ei ole olek, milleni jõuad; see on värav, mida hoiad. Üheksa väljalaset ja igaühe juures samad kolm küsimust: millise juhtumi peale sa ei mõelnud, kas täpne tõrge on testiga naelutatud ja kas päris allkirjastatud ehitis tegelikult välja läks? Miski sellest ei ole glamuurne. Just see kõik ongi põhjus, miks GeekBye v2 tundub rahulik. Kui sa ehitad tarkvara — AI-d või muud — pole ülekantav osa ükski üksik parandus. See on harjumus kohelda rohelist testikomplekti kui argumendi algust, mitte selle lõppu.
Iga ülalmainitud väljalase on automaatse uuenduse kaudu saadaval. Toote kohta, milleks need parandused kokku liidetuna kujunevad, vaata mis on uut GeekBye v2-s.