Steven
Steven7 min de lectura

L''anatomia d''enviar programari a la perfecció: com la revisió de codi va detectar allò que les proves no podien

Al llarg de la sèrie GeekBye v2, passa sempre el mateix: una correcció supera totes les proves a la màquina del desenvolupador i, tot seguit, la revisió de codi demostra que hauria fallat per a gairebé tothom. Aquest és el flux de treball darrere de nou llançaments: la porta de revisió, les deteccions primer-la-correcció i la disciplina de provar-abans-d'enviar que converteix "a mi em funciona" en "funciona".

Enginyeria
Procés
Revisió de codi
Llançaments de GeekBye
L''anatomia d''enviar programari a la perfecció: com la revisió de codi va detectar allò que les proves no podien

Al llarg d'un parell de setmanes, GeekBye va enviar nou llançaments — de v2.0.0 fins a v2.0.11 — i aquesta sèrie va explicar la història de cadascun. Llegiu-los junts i emergeix un patró més interessant que qualsevol error individual: una vegada i una altra, una correcció superava totes les proves a la màquina del desenvolupador, i la revisió de codi demostrava que hauria fallat per a gairebé tothom.

Aquest buit — entre "a mi em funciona" i "funciona" — és on viu realment la fiabilitat. Aquest és el flux de treball que el tanca, i l'índex de cada llançament que va produir.

El patró: proves en verd, resposta equivocada

Aquí hi ha tres dels casos més clars de la sèrie, perquè fan concret allò abstracte.

  • A la correcció de captura multi-monitor (v2.0.10), la primera implementació ancorava la captura de pantalla a la finestra de superposició de l'aplicació. Va superar les proves — en una màquina de desenvolupament d'un sol monitor. La revisió va raonar sobre on viu realment aquesta superposició (la pantalla principal, sempre, tret que la moguis físicament) i va demostrar que la "correcció" s'hauria resolt de nou al monitor equivocat per a gairebé cada usuari real. L'àncora correcta — el cursor — va sortir d'aquell argument, no d'una execució de proves.
  • A el llançament de recanvi WebSocket (v2.0.8), la revisió va trobar que el 403 exacte que retorna un proxy que bloqueja es classificava com un error d'autenticació fatal — de manera que el recanvi que la funció existia per activar no es podia disparar mai. La funció s'hauria enviat, hauria superat les seves proves de camí feliç, i no hauria fet res per al seu públic real.
  • A la correcció del temps d'espera per inactivitat (v2.0.9), la primera versió estampava el rellotge de "encara viu" dins d'un camí de codi que un subconjunt de transcripcions legítimament omet — el de l'altre interlocutor. La revisió va detectar que un canvi futur podria reintroduir en silenci l'error exacte que s'estava corregint, i la marca es va traslladar a un lloc incondicional, amb una prova per mantenir-la allà.

Cap d'aquests es va detectar executant el codi. Tots es van detectar per un revisor que raonava sobre per què el codi funciona — i que trobava un cas en què no ho fa.

Les tres parts de la porta

El flux de treball darrere de la sèrie no és elaborat. Són tres hàbits aplicats sense excepció.

1. La revisió raona sobre la correcció, no només executa el codi. Una prova superada demostra que el codi funciona per al cas que vas pensar. La revisió és un segon model, adversarial, del sistema que pregunta en quin cas no vas pensar? — el segon monitor, el proxy corporatiu, la transcripció que omet la branca, el client que va una versió endarrerit. El pas de revisió d'aquesta sèrie sovint era un revisor agent independent instruït per refutar la correcció, no beneir-la. Aquest enfocament és tot el sentit: un revisor que intenta trencar el teu raonament troba el forat que un revisor que intenta aprovar-lo passa per alt.

2. Cada correcció de comportament s'envia amb una prova que fixa l'error exacte. No una prova que la funció funciona — una prova que aquest error específic està mort. El 403 de proxy bloquejat ha de caure cap al recanvi; un 403 d'autenticació real no. El rellotge d'activitat ha d'estampar en una transcripció que omet l'atribució. Aquestes proves existeixen perquè l'error no pugui tornar silenciosament d'aquí a sis mesos quan algú refactoritzi a prop — el error queda clavat a terra.

3. La compilació es notaritza i es verifica abans d'enviar-se. Diverses d'aquestes correccions van passar del diagnòstic a un llançament signat, notaritzat i amb actualització automàtica en un dia. Aquesta velocitat només és segura perquè la porta és disciplinada: el diagnòstic demostra la causa arrel (el llançament de permís de micròfon va enviar el seu diagnòstic primer), la prova fixa la correcció, la revisió refuta el raonament, i només llavors surt una compilació notaritzada real. El rigor és el que fa que la velocitat sigui segura, no allò que s'hi contraposa.

Per què això importa més per a una aplicació d'IA

Hi ha una raó per la qual aquesta disciplina és innegociable per a una eina com GeekBye en concret. Diversos dels errors més desagradables de la sèrie eren silenciosos-i-erronis, no sorollosos-per-fallada: una captura de pantalla que alimentava el monitor equivocat a la IA (v2.0.10), una transcripció esbiaixada cap a termes escombraria de manera que "speak" sortia com un nom (v2.0.11), un assistent responent en el mode equivocat sense cap manera de veure-ho (v2.0.3 + v2.0.5). Quan la teva aplicació alimenta context a un model, una entrada equivocada produeix una sortida confiadament equivocada i cap error enlloc. No pots sortir amb proves de fallades que no llancen res. Has de sortir-ne raonant — que és exactament per a què serveix la porta de revisió.

La sèrie, en ordre

Cadascun d'aquests és un cas d'estudi autònom d'un llançament. Llegits de principi a fi, són l'anatomia de portar un producte de "funciona" a "de confiança".

  1. Què cal realment per a una versió 2: 206 commits d'estats honestos — v2.0.0. La base: mai mostrar un estat que no sigui cert.
  2. El dia que la nostra aplicació es va fer DDoS a ella mateixa — v2.0.1 + v2.0.4. Un endarreriment de pujades a l'inici que estampidava contra el nostre propi backend, i l'escala de vitalitat que va forçar.
  3. Programari tranquil: la correcció del parpelleig i el distintiu de mode de resposta — v2.0.3 + v2.0.5. Llançaments sense funcions noves que van comprar confiança un detall alhora.
  4. La teva aplicació de Mac oblida l'accés al micròfon a cada arrencada — v2.0.6. App Translocation de macOS, i enviar el diagnòstic abans de la correcció.
  5. Una variable CSS, cinc rondes de revisió, i una cadena d'eines Swift que mentia — v2.0.7. Translucidesa uniforme, i un binari que canviava de mida perquè la documentació no coincidia amb l'script d'aplicació.
  6. Transcripció en directe quan el tallafoc bloqueja els WebSockets — v2.0.8. Un recanvi de HTTPS pur, i el 403 que l'hauria amagat d'ella mateixa.
  7. Per què el teu prenedor de notes amb IA deixa de gravar a mitja reunió — v2.0.9. Un temporitzador d'inactivitat que només et podia sentir a tu, i un error que podia bloquejar el teu escriptori.
  8. Per què la gravació de pantalla captura el monitor equivocat — v2.0.10. L'error de pantalla equivocada, i la correcció que passava en un monitor i hauria fallat en dos.
  9. Per què la transcripció amb IA confon termes tècnics — v2.0.11. Esbiaixar la parla cap al teu vocabulari — i la regressió que ho va empitjorar abans de millorar-ho.

La conclusió

La perfecció no és un estat que assoleixes; és una porta que mantens. Nou llançaments, i les mateixes tres preguntes a cadascun: en quin cas no vas pensar, està l'error exacte fixat per una prova, i va sortir realment una compilació signada? Res d'això és glamurós. Tot això és per què GeekBye v2 se sent tranquil. Si construeixes programari — d'IA o d'una altra mena — la part transferible no és cap correcció individual. És l'hàbit de tractar una bateria de proves en verd com l'inici de l'argument, no el final.

Cada llançament de dalt està en directe via actualització automàtica. Per al producte que sumen aquestes correccions, mira què hi ha de nou a GeekBye v2.

Articles Relacionats

Una variable CSS, cinc rondes de revisió i una cadena d'eines de Swift que va mentir
Steven
Steven8 min de lectura

Una variable CSS, cinc rondes de revisió i una cadena d'eines de Swift que va mentir

GeekBye v2.0.7 va fer que tota la superposició fos translúcida de manera ajustable — cosa que sona com un canvi de CSS d'una línia i que en absolut ho va ser. La història de veritat és el que va detectar la revisió de codi: dues superfícies que es negaven a esvair-se, una barra de gravació que es veia malament amb la mateixa opacitat i un binari compilat que va oscil·lar 672 bytes perquè la nostra pròpia documentació va indicar a un revisor la versió de Swift equivocada.

Enginyeria
Disseny
Build
Transcripció en directe quan el tallafocs bloqueja els WebSockets
Steven
Steven5 min de lectura

Transcripció en directe quan el tallafocs bloqueja els WebSockets

A les xarxes corporatives els encanta permetre HTTPS i matar en silenci les actualitzacions de WebSocket. Això trenca silenciosament la transcripció en temps real. GeekBye v2.0.8 recorre automàticament a un transport purament HTTPS — i publicar-ho va destapar un bug que hauria fet inútil tota la funció.

Transcripció
Xarxes
Enginyeria
Per què la gravació de pantalla captura el monitor equivocat (i com ho vam corregir)
Steven
Steven5 min de lectura

Per què la gravació de pantalla captura el monitor equivocat (i com ho vam corregir)

En una configuració de dos monitors, GeekBye gravava i feia captures de la pantalla principal sense importar en quina pantalla treballaves. La correcció era una petita funció — però la primera versió era errònia, i la revisió de codi va trobar per què.

Gravació de pantalla
Multi-pantalla
Enginyeria