
Programinės įrangos tobulinimo anatomija: kaip kodo peržiūra pagavo tai, ko testai negalėjo
Per visą GeekBye v2 seriją kartojasi tas pats: pataisa praeina kiekvieną testą kūrėjo kompiuteryje, o paskui kodo peržiūra įrodo, kad ji būtų sugedusi beveik visiems. Tai devynių leidimų darbo eiga — peržiūros vartai, pagavimai pataisos etape ir „patikrink prieš išsiuntimą" disciplina, kuri „man veikia" paverčia „veikia".
Per porą savaičių GeekBye išleido devynis leidimus — nuo v2.0.0 iki v2.0.11 — ir ši serija papasakojo kiekvieno iš jų istoriją. Perskaitykite juos kartu, ir išryškėja modelis, įdomesnis už bet kurią atskirą klaidą: vėl ir vėl pataisa praeidavo kiekvieną testą kūrėjo kompiuteryje, o kodo peržiūra įrodydavo, kad ji būtų sugedusi beveik visiems kitiems.
Šis tarpas — tarp „man veikia" ir „veikia" — yra ta vieta, kur iš tikrųjų gyvena patikimumas. Tai darbo eiga, kuri jį uždaro, ir kiekvieno jos sukurto leidimo rodyklė.
Modelis: žali testai, neteisingas atsakymas
Štai trys aiškiausi serijos atvejai, nes jie abstraktų paverčia konkrečiu.
- Kelių monitorių fiksavimo pataisoje (v2.0.10) pirmoji realizacija pririšo ekrano fiksavimą prie programos perdangos lango. Ji praėjo testavimą — kūrėjo kompiuteryje su vienu monitoriumi. Peržiūra apsvarstė, kur ta perdanga iš tikrųjų gyvena (visada pagrindiniame ekrane, nebent fiziškai ją nutemptumėte) ir įrodė, kad „pataisa" atsidurtų atgal ne tame monitoriuje beveik kiekvienam realiam vartotojui. Teisingas inkaras — žymeklis — kilo iš šio samprotavimo, o ne iš testo paleidimo.
- Atsarginio WebSocket kanalo leidime (v2.0.8) peržiūra pastebėjo, kad būtent tas
403, kurį grąžina blokuojantis tarpinis serveris, buvo klasifikuojamas kaip lemtinga autentifikavimo klaida — taigi atsarginis kanalas, dėl kurio paleidimo funkcija apskritai egzistavo, niekada negalėjo suveikti. Funkcija būtų išsiųsta, praėjusi laimingo kelio testus, ir nepadariusi nieko savo tikrajai auditorijai. - Neveiklumo laiko limito pataisoje (v2.0.9) pirmoji versija žymėjo „vis dar gyvas" laikrodį kodo kelyje, kurį dalis transkripcijų teisėtai praleidžia — kito kalbėtojo. Peržiūra pagavo, kad būsimas pakeitimas galėtų tyliai vėl įvesti būtent tą taisomą klaidą, ir žyma buvo perkelta į besąlyginę vietą, su testu, kuris ją ten išlaikys.
Nė vienos iš jų nepagavo kodo paleidimas. Visas jas pagavo recenzentas, samprotaujantis apie tai, kodėl kodas veikia — ir randantis atvejį, kur jis neveikia.
Trys vartų dalys
Už serijos slypinti darbo eiga nėra sudėtinga. Tai trys įpročiai, taikomi be išimties.
1. Peržiūra samprotauja apie teisingumą, o ne tik paleidžia kodą. Praeinantis testas įrodo, kad kodas veikia tam atvejui, apie kurį pagalvojote. Peržiūra — tai antras, priešiškas sistemos modelis, klausiantis apie kokį atvejį nepagalvojote? — antras monitorius, įmonės tarpinis serveris, transkripcija, praleidžianti šaką, klientas viena versija atsilikęs. Peržiūros žingsnis šioje serijoje dažnai buvo nepriklausomas recenzentas-agentas, paragintas paneigti pataisą, o ne ją palaiminti. Visa esmė šiame kadre: recenzentas, bandantis palaužti jūsų samprotavimą, randa skylę, pro kurią recenzentas, bandantis ją patvirtinti, tik prasprūsta žvilgsniu.
2. Kiekviena elgsenos pataisa išsiunčiama su testu, prikalančiu tikslų gedimą. Ne testu, kad funkcija veikia — testu, kad ši konkreti klaida negyva. Užblokuoto tarpinio serverio 403 turi pereiti į atsarginį kanalą; tikras autentifikavimo 403 — ne. Veiklos laikrodis turi pažymėti transkripciją, kuri praleidžia priskyrimą. Šie testai egzistuoja, kad klaida negalėtų tyliai grįžti po pusmečio, kai kas nors refaktorins šalia — gedimas prikaltas prie grindų.
3. Build'as notarizuojamas ir patikrinamas prieš išsiuntimą. Kelios iš šių pataisų nuo diagnozės iki pasirašyto, notarizuoto, automatiškai atsinaujinančio leidimo perėjo per vieną dieną. Šis greitis saugus tik todėl, kad vartai drausmingi: diagnostika įrodo šakninę priežastį (mikrofono leidimo leidimas savo diagnostiką išsiuntė pirmą), testas prikala pataisą, peržiūra paneigia samprotavimą, ir tik tada išeina tikras notarizuotas build'as. Griežtumas yra tai, kas greitį daro saugų, o ne tai, kuo dėl jo aukojama.
Kodėl AI programai tai svarbiau
Yra priežastis, kodėl ši disciplina neaptariama būtent tokiam įrankiui kaip GeekBye. Kelios bjauriausios serijos klaidos buvo tyliai neteisingos, o ne garsiai lūžtančios: ekrano nuotrauka, kuri AI pateikė ne tą monitorių (v2.0.10), transkripcija, pakrypusi šiukšlinių terminų link, taigi „speak" išėjo kaip vardas (v2.0.11), asistentas, atsakantis netinkamu režimu be jokio būdo tai pamatyti (v2.0.3 + v2.0.5). Kai jūsų programa pateikia modeliui kontekstą, neteisinga įvestis pateikia užtikrintai neteisingą išvestį ir niekur jokios klaidos. Iš gedimų, kurie nemeta išimties, išsitestuoti neįmanoma. Iš jų reikia išsisamprotauti — o būtent tam ir yra peržiūros vartai.
Serija, iš eilės
Kiekvienas iš jų — savarankiškas vieno leidimo atvejo tyrimas. Perskaityti nuo pradžios iki pabaigos, jie yra produkto kelio nuo „veikia" iki „patikimas" anatomija.
- Ko iš tikrųjų reikalauja 2 versija: 206 sąžiningų būsenų commit'ų — v2.0.0. Pamatas: niekada nerodyk būsenos, kuri netiesa.
- Diena, kai mūsų programa pati save užDDoSino — v2.0.1 + v2.0.4. Paleidimo įkėlimų sangrūda, trypianti mūsų pačių backend'ą, ir gyvybingumo laiptai, kuriuos ji privertė.
- Rami programinė įranga: mirgėjimo pataisa ir atsakymo režimo ženkliukas — v2.0.3 + v2.0.5. Leidimai be funkcijų, pirkę pasitikėjimą po vieną detalę.
- Jūsų Mac programa kiekvieno paleidimo metu pamiršta mikrofono prieigą — v2.0.6. macOS App Translocation ir diagnostikos išsiuntimas prieš pataisą.
- Vienas CSS kintamasis, penki peržiūros raundai ir Swift įrankių grandinė, kuri melavo — v2.0.7. Vienodas peršviečiamumas ir dvejetainis failas, pakeitęs dydį, nes dokumentacija nesutapo su vykdymo skriptu.
- Tiesioginė transkripcija, kai užkarda blokuoja WebSocket — v2.0.8. Gryno HTTPS atsarginis kanalas ir
403, kuris būtų paslėpęs jį nuo jo paties. - Kodėl jūsų AI užrašų kūrėjas nustoja įrašinėti vidury susitikimo — v2.0.9. Neveiklumo laikmatis, girdėjęs tik jus, ir lūžis, galėjęs užrakinti jūsų darbalaukį.
- Kodėl ekrano įrašymas fiksuoja ne tą monitorių — v2.0.10. Ne to ekrano klaida ir pataisa, kuri praėjo viename monitoriuje ir būtų sugedusi dviejuose.
- Kodėl AI transkripcija neteisingai išgirsta techninius terminus — v2.0.11. Kalbos kreipimas jūsų žodyno link — ir regresija, kuri pablogino, kol pagerino.
Išvada
Tobulumas — ne būsena, kurią pasieki; tai vartai, kuriuos išlaikai. Devyni leidimai ir tie patys trys klausimai prie kiekvieno: apie kokį atvejį nepagalvojai, ar tikslus gedimas prikaltas testu ir ar tikras pasirašytas build'as tikrai išėjo? Nieko iš to nėra prašmatnaus. Visa tai — priežastis, kodėl GeekBye v2 jaučiasi ramiai. Jei kuri programinę įrangą — AI ar kitokią — perkeliama dalis nėra nė viena atskira pataisa. Tai įprotis žalią testų rinkinį laikyti argumento pradžia, o ne jo pabaiga.
Kiekvienas aukščiau esantis leidimas pasiekiamas per automatinį atnaujinimą. Apie produktą, į kurį šios pataisos susideda, žiūrėkite kas naujo GeekBye v2.