Steven
Steven5 min lugemist

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".

Inseneeria
Protsess
Koodiülevaatus
GeekBye väljalasked
Tarkvara täiuslikuna tarnimise anatoomia: kuidas koodiülevaatus tabas selle, mida testid ei suutnud

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.

  1. 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.
  2. 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.
  3. 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.
  4. Sinu Mac-i rakendus unustab mikrofoni ligipääsu igal käivitusel — v2.0.6. macOS App Translocation ja diagnostika tarnimine enne parandust.
  5. Ü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.
  6. Otsetranskripsioon, kui tulemüür blokeerib WebSocketi — v2.0.8. Puhtalt HTTPS-i varulahendus ja 403, mis oleks selle tema enda eest ära peitnud.
  7. 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.
  8. Miks ekraanisalvestus tabab vale monitori — v2.0.10. Vale-kuva viga ja parandus, mis läbis ühe monitoriga ja oleks kahega läbi kukkunud.
  9. 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.

Seotud artiklid

Üks CSS-i muutuja, viis ülevaatusringi ja Swifti tööriistakett, mis valetas
Steven
Steven6 min lugemist

Üks CSS-i muutuja, viis ülevaatusringi ja Swifti tööriistakett, mis valetas

GeekBye v2.0.7 muutis kogu overlay reguleeritavalt läbipaistvaks — mis kõlab nagu üherealine CSS-i muudatus ja seda kindlasti ei olnud. Tegelik lugu on selles, mida koodiülevaatus tabas: kaks pinda, mis keeldusid tuhmumast, salvestusriba, mis nägi sama läbipaistvuse juures vale välja, ja kompileeritud binaar, mis kõikus 672 baiti edasi-tagasi, sest meie enda dokumentatsioon ütles ülevaatajale vale Swifti versiooni.

Inseneeria
Disain
Ehitus
Turvakontroll, mis muutis meie rakenduse võimatuks sulgeda
Steven
Steven5 min lugemist

Turvakontroll, mis muutis meie rakenduse võimatuks sulgeda

Automaatne uuendus oli raskeim funktsioon, mille oleme kunagi välja lasknud — kuus väljalaset nelja päevaga, et takistada sel rakendust nurjata. Halvim viga oli see, mille tõime sisse ettevaatlikkusest: 500-millisekundiline "turva"-kontroll, mis muutis ebaõnnestunud uuenduse protsessiks, mida sa sõna otseses mõttes ei saanud sulgeda.

Inseneeria
Electron
Töökindlus
Sinu Maci rakendus annab mikrofonile loa — ja unustab selle iga käivitusega
Steven
Steven5 min lugemist

Sinu Maci rakendus annab mikrofonile loa — ja unustab selle iga käivitusega

GeekBye küsis mikrofoni luba, sina andsid selle ja kõik töötas. Järgmisel käivitusel: kadunud. Ja rakendust polnud üldse Süsteemiseadete → Mikrofoni loendis. Süüdlaseks osutus vaikselt töötav macOS-i turvafunktsioon, mis käivitas rakenduse asukohast, mis kaob — siin on diagnoos ja üheainsa dialoogiaknaga lahendus.

macOS
Load
Arendus