Steven
Steven6 minit bacaan

Anatomi Menghantar Perisian ke Tahap Sempurna: Bagaimana Semakan Kod Menangkap Apa yang Ujian Tidak Mampu

Sepanjang siri GeekBye v2, perkara yang sama terus berlaku: satu pembaikan lulus setiap ujian pada mesin pembangun, dan kemudian semakan kod membuktikan ia akan gagal untuk hampir semua orang. Inilah aliran kerja di sebalik sembilan keluaran — pintu semakan, tangkapan pembaikan-dahulu, dan disiplin uji-sebelum-hantar yang menukar "ia berfungsi untuk saya" kepada "ia berfungsi".

Kejuruteraan
Proses
Semakan Kod
Keluaran GeekBye
Anatomi Menghantar Perisian ke Tahap Sempurna: Bagaimana Semakan Kod Menangkap Apa yang Ujian Tidak Mampu

Dalam masa beberapa minggu, GeekBye menghantar sembilan keluaran — v2.0.0 hingga v2.0.11 — dan siri ini menceritakan kisah setiap satu. Baca kesemuanya bersama-sama dan satu corak terserlah yang lebih menarik daripada mana-mana pepijat tunggal: berulang kali, satu pembaikan lulus setiap ujian pada mesin pembangun, dan semakan kod membuktikan ia akan gagal untuk hampir semua orang lain.

Jurang itu — antara "ia berfungsi untuk saya" dan "ia berfungsi" — adalah di mana kebolehpercayaan sebenarnya hidup. Inilah aliran kerja yang merapatkannya, dan indeks kepada setiap keluaran yang dihasilkannya.

Corak itu: ujian hijau, jawapan salah

Berikut ialah tiga daripada kes paling jelas dalam siri ini, kerana ia menjadikan yang abstrak itu konkrit.

  • Dalam pembaikan tangkapan pelbagai-monitor (v2.0.10), pelaksanaan pertama menambat tangkapan skrin pada tetingkap tindanan aplikasi. Ia lulus ujian — pada mesin pembangun bermonitor tunggal. Semakan menaakul di mana tindanan itu sebenarnya berada (paparan utama, sentiasa, melainkan anda secara fizikal menyeretnya) dan membuktikan "pembaikan" itu akan terleraikan kembali ke monitor yang salah untuk hampir setiap pengguna sebenar. Penambat yang betul — kursor — muncul daripada hujah itu, bukan daripada larian ujian.
  • Dalam keluaran fallback-WebSocket (v2.0.8), semakan mendapati bahawa 403 tepat yang dikembalikan oleh proksi penyekat telah dikelaskan sebagai ralat pengesahan maut — jadi fallback yang menjadi sebab kewujudan ciri itu tidak akan pernah dapat tercetus. Ciri itu akan dihantar, lulus ujian laluan-gembiranya, dan tidak melakukan apa-apa untuk khalayak sebenarnya.
  • Dalam pembaikan tamat-masa-melahu (v2.0.9), versi pertama mengecap jam "masih hidup" di dalam laluan kod yang sesetengah transkrip memang melangkaunya secara sah — transkrip penutur lain. Semakan menangkap bahawa perubahan masa depan boleh secara senyap memperkenalkan semula pepijat tepat yang sedang dibaiki, dan cap itu dipindahkan ke tempat tanpa syarat, dengan ujian untuk mengekalkannya di situ.

Tiada satu pun daripada ini ditangkap dengan menjalankan kod. Kesemuanya ditangkap oleh penyemak yang menaakul mengapa kod itu berfungsi — dan menemui kes di mana ia tidak.

Tiga bahagian pintu itu

Aliran kerja di sebalik siri ini tidaklah rumit. Ia tiga tabiat yang diterapkan tanpa pengecualian.

1. Semakan menaakul tentang ketepatan, bukan sekadar menjalankan kod. Ujian yang lulus membuktikan kod berfungsi untuk kes yang anda fikirkan. Semakan ialah model sistem kedua yang bersifat lawan, bertanya kes manakah yang anda tidak fikirkan? — monitor kedua, proksi korporat, transkrip yang melangkau cabang itu, klien yang ketinggalan satu versi. Langkah semakan dalam siri ini kerap kali ialah penyemak ejen bebas yang diarahkan untuk menyangkal pembaikan, bukan merestuinya. Rangka itulah keseluruhan intinya: penyemak yang cuba memecahkan penaakulan anda menemui lubang yang penyemak yang cuba meluluskannya terlepas pandang.

2. Setiap pembaikan tingkah laku dihantar dengan ujian yang memaku kegagalan tepat. Bukan ujian bahawa ciri itu berfungsi — ujian bahawa pepijat khusus ini telah mati. 403 proksi-tersekat mesti gugur ke fallback; 403 pengesahan sebenar mesti tidak. Jam aktiviti mesti mengecap pada transkrip yang melangkau atribusi. Ujian-ujian ini wujud supaya pepijat tidak boleh kembali dengan senyap enam bulan kemudian apabila seseorang merefaktor di sekitarnya — kegagalan itu dipaku ke lantai.

3. Binaan disahkan notari dan diperiksa sebelum ia dihantar. Beberapa daripada pembaikan ini bergerak daripada diagnosis kepada keluaran bertandatangan, disahkan notari, dengan kemas kini automatik dalam masa sehari. Kelajuan itu hanya selamat kerana pintu itu berdisiplin: diagnostik membuktikan punca akar (keluaran kebenaran mikrofon menghantar diagnostiknya dahulu), ujian memaku pembaikan, semakan menyangkal penaakulan, dan barulah binaan disahkan notari yang sebenar dikeluarkan. Ketelitian adalah apa yang menjadikan kelajuan selamat, bukan apa yang ditukar-ganti dengannya.

Mengapa ini lebih penting untuk aplikasi AI

Ada sebab mengapa disiplin ini tidak boleh dirunding untuk alat seperti GeekBye khususnya. Beberapa daripada pepijat paling teruk dalam siri ini ialah salah-senyap, bukan bising-ranap: tangkapan skrin yang menyuap monitor yang salah kepada AI (v2.0.10), transkripsi yang berat sebelah ke arah terma sampah sehingga "speak" keluar sebagai nama (v2.0.11), pembantu yang menjawab dalam mod yang salah tanpa cara untuk melihatnya (v2.0.3 + v2.0.5). Apabila aplikasi anda menyuap konteks kepada model, input yang salah menghasilkan output yang salah dengan penuh yakin dan tiada ralat di mana-mana. Anda tidak boleh menguji jalan keluar daripada kegagalan yang tidak melontar. Anda mesti menaakul jalan keluar — yang mana itulah tepat gunanya pintu semakan itu.

Siri itu, mengikut turutan

Setiap satu ini ialah kajian kes berdiri sendiri dalam satu keluaran. Baca dari mula hingga akhir, ia ialah anatomi membawa produk daripada "berfungsi" kepada "boleh dipercayai".

  1. Apa yang sebenarnya diperlukan untuk versi 2: 206 komit keadaan jujur — v2.0.0. Asasnya: jangan sekali-kali tunjuk keadaan yang tidak benar.
  2. Hari aplikasi kami DDoS dirinya sendiri — v2.0.1 + v2.0.4. Tunggakan muat naik permulaan yang merempuh backend kami sendiri, dan tangga kehidupan yang dipaksanya.
  3. Perisian tenang: pembaikan kelipan dan cip mod-jawapan — v2.0.3 + v2.0.5. Keluaran tanpa-ciri yang membeli kepercayaan satu butiran pada satu masa.
  4. Aplikasi Mac anda lupa akses mikrofon setiap kali dilancarkan — v2.0.6. App Translocation macOS, dan menghantar diagnostik sebelum pembaikan.
  5. Satu pemboleh ubah CSS, lima pusingan semakan, dan rantaian alat Swift yang menipu — v2.0.7. Kelutsinaran seragam, dan binari yang bertukar saiz kerana dokumentasi tidak sependapat dengan skrip penguatkuasaan.
  6. Transkripsi langsung apabila firewall menyekat WebSocket — v2.0.8. Fallback HTTPS-tulen, dan 403 yang akan menyembunyikannya daripada dirinya sendiri.
  7. Mengapa pencatat nota AI anda berhenti merakam di tengah mesyuarat — v2.0.9. Pemasa melahu yang hanya boleh mendengar anda, dan ranap yang boleh mengunci desktop anda.
  8. Mengapa rakaman skrin menangkap monitor yang salah — v2.0.10. Pepijat paparan-salah, dan pembaikan yang lulus pada satu monitor dan akan gagal pada dua.
  9. Mengapa transkripsi AI tersalah dengar terma teknikal — v2.0.11. Mencondongkan pertuturan ke arah perbendaharaan kata anda — dan regresi yang menjadikannya lebih teruk sebelum ia menjadi lebih baik.

Intipatinya

Kesempurnaan bukanlah keadaan yang anda capai; ia ialah pintu yang anda jaga. Sembilan keluaran, dan tiga soalan yang sama pada setiap satu: kes manakah yang anda tidak fikirkan, adakah kegagalan tepat itu dipaku oleh ujian, dan adakah binaan bertandatangan yang sebenar benar-benar dikeluarkan? Tiada satu pun daripadanya menawan. Kesemuanya adalah sebab GeekBye v2 terasa tenang. Jika anda membina perisian — AI atau selainnya — bahagian yang boleh dipindahkan bukanlah mana-mana pembaikan tunggal. Ia ialah tabiat memperlakukan suite ujian hijau sebagai permulaan hujah, bukan pengakhirannya.

Setiap keluaran di atas adalah langsung melalui kemas kini automatik. Untuk produk yang dihasilkan oleh gabungan pembaikan ini, lihat apa yang baharu dalam GeekBye v2.

Artikel Berkaitan

Satu Pemboleh Ubah CSS, Lima Pusingan Semakan, dan Rantaian Alat Swift Yang Menipu
Steven
Steven7 minit bacaan

Satu Pemboleh Ubah CSS, Lima Pusingan Semakan, dan Rantaian Alat Swift Yang Menipu

GeekBye v2.0.7 menjadikan keseluruhan overlay lut sinar boleh laras — yang kedengaran seperti perubahan CSS satu baris tetapi sama sekali bukan. Kisah sebenarnya ialah apa yang ditangkap oleh semakan kod: dua permukaan yang enggan pudar, bar rakaman yang kelihatan salah pada opacity yang sama, dan binari terkompil yang berubah-ubah 672 bait kerana dokumentasi kami sendiri memberitahu penyemak versi Swift yang salah.

Kejuruteraan
Reka Bentuk
Binaan
Pepijat fon telinga: apabila orang yang bercakap lenyap daripada transkrip kami
Steven
Steven6 minit bacaan

Pepijat fon telinga: apabila orang yang bercakap lenyap daripada transkrip kami

Transkripsi dua saluran berfungsi dengan sempurna pada pembesar suara komputer riba dan fon kepala over-ear. Kemudian seseorang memasang fon telinga, dan orang yang mereka ajak bercakap begitu sahaja lenyap daripada transkrip — kerana Chromium senyap-senyap membisukan audio kami pada saat mereka bercakap. Sebelas pembaikan gagal. Yang kedua belas mengubah keseluruhan seni bina.

Kejuruteraan
Audio
Transkripsi
Transkripsi Langsung Apabila Tembok Api Menyekat WebSocket
Steven
Steven5 minit bacaan

Transkripsi Langsung Apabila Tembok Api Menyekat WebSocket

Rangkaian korporat gemar membenarkan HTTPS dan diam-diam mematikan naik taraf WebSocket. Itu secara senyap merosakkan transkripsi masa nyata. GeekBye v2.0.8 secara automatik berundur kepada pengangkutan HTTPS-tulen — dan mengeluarkannya mendedahkan satu pepijat yang akan menjadikan seluruh ciri ini tak berguna.

Transkripsi
Rangkaian
Kejuruteraan