Steven
Steven5 dk okuma

Yazılımı Kusursuzluğa Ulaştırmanın Anatomisi: Kod İncelemesi, Testlerin Yakalayamadığını Nasıl Yakaladı

GeekBye v2 serisi boyunca aynı şey tekrar tekrar yaşandı: bir düzeltme geliştiricinin makinesinde her testi geçti, ardından kod incelemesi neredeyse herkes için başarısız olacağını kanıtladı. Bu, dokuz sürümün arkasındaki çalışma akışı — inceleme kapısı, önce düzeltmeyi yakalayan kontroller ve "bende çalışıyor"u "çalışıyor"a dönüştüren, göndermeden önce test etme disiplini.

Mühendislik
Süreç
Kod İncelemesi
GeekBye Sürümleri
Yazılımı Kusursuzluğa Ulaştırmanın Anatomisi: Kod İncelemesi, Testlerin Yakalayamadığını Nasıl Yakaladı

Birkaç hafta boyunca GeekBye dokuz sürüm gönderdi — v2.0.0''dan v2.0.11''e kadar — ve bu seri her birinin hikayesini anlattı. Bunları birlikte okuyun ve herhangi bir tek hatadan daha ilginç bir desen göze çarpar: defalarca, bir düzeltme geliştiricinin makinesinde her testi geçti ve kod incelemesi neredeyse herkes için başarısız olacağını kanıtladı.

O boşluk — "bende çalışıyor" ile "çalışıyor" arasındaki — güvenilirliğin gerçekte yaşadığı yerdir. İşte bu boşluğu kapatan çalışma akışı ve ürettiği her sürümün dizini.

Desen: yeşil testler, yanlış cevap

Serideki en net üç vakayı burada anlatıyorum, çünkü soyutu somuta çeviriyorlar.

  • Çoklu-monitör yakalama düzeltmesinde (v2.0.10), ilk uygulama ekran yakalamayı uygulamanın kaplama penceresine çıpalıyordu. Testi geçti — tek monitörlü bir geliştirici makinesinde. İnceleme, o kaplamanın gerçekte nerede bulunduğu üzerine akıl yürüttü (her zaman birincil ekran, ta ki onu fiziksel olarak sürükleyene dek) ve "düzeltmenin" neredeyse her gerçek kullanıcı için tam da yanlış monitöre geri çözümleneceğini kanıtladı. Doğru çıpa — imleç — bir test çalıştırmasından değil, o tartışmadan çıktı.
  • WebSocket-yedeği sürümünde (v2.0.8), inceleme, engelleyen bir proxy''nin döndürdüğü tam 403''ün bir ölümcül kimlik doğrulama hatası olarak sınıflandırıldığını buldu — böylece özelliğin tetiklemek için var olduğu yedek asla devreye giremezdi. Özellik gönderilir, mutlu-yol testlerini geçer ve gerçek hedef kitlesi için hiçbir şey yapmazdı.
  • Boşta-zaman-aşımı düzeltmesinde (v2.0.9), ilk sürüm "hâlâ hayatta" saatini, transkriptlerin bir alt kümesinin meşru olarak atladığı bir kod yolunun içine damgalıyordu — karşıdaki konuşmacınınkini. İnceleme, gelecekteki bir değişikliğin düzeltilen tam hatayı sessizce yeniden ortaya çıkarabileceğini yakaladı ve damga koşulsuz bir yere taşındı, orada kalmasını sağlayan bir testle birlikte.

Bunların hiçbiri kodu çalıştırarak yakalanmadı. Hepsi, kodun neden çalıştığı üzerine akıl yürüten ve çalışmadığı bir durum bulan bir inceleyici tarafından yakalandı.

Kapının üç parçası

Serinin arkasındaki çalışma akışı ayrıntılı değil. İstisnasız uygulanan üç alışkanlık.

1. İnceleme, sadece kodu çalıştırmaz, doğruluk üzerine akıl yürütür. Geçen bir test, kodun düşündüğünüz durum için çalıştığını kanıtlar. İnceleme, sistemin ikinci, düşmanca bir modelidir ve şunu sorar: düşünmediğiniz durum neydi? — ikinci monitör, kurumsal proxy, dalı atlayan transkript, bir sürüm geride olan istemci. Bu serideki inceleme adımı sıklıkla, düzeltmeyi kutsamak değil çürütmek için yönlendirilmiş bağımsız bir ajan inceleyiciydi. Bu çerçeveleme işin bütün özü: akıl yürütmenizi kırmaya çalışan bir inceleyici, onaylamaya çalışan bir inceleyicinin gözden kaçırdığı deliği bulur.

2. Her davranış düzeltmesi, tam olarak arızayı sabitleyen bir testle gönderilir. Özelliğin çalıştığını gösteren bir test değil — bu belirli hatanın öldüğünü gösteren bir test. Engellenen-proxy 403''ü yedeğe düşmeli; gerçek bir kimlik doğrulama 403''ü ise düşmemeli. Etkinlik saati, atıf yapmayı atlayan bir transkriptte damgalamalı. Bu testler var ki, altı ay sonra biri yakında bir refactor yaptığında hata sessizce geri dönemesin — arıza yere çakılı.

3. Derleme, göndermeden önce noter onaylı ve doğrulanmış. Bu düzeltmelerin birçoğu teşhisten imzalı, noter onaylı, otomatik güncellenen bir sürüme bir gün içinde ulaştı. Bu hız yalnızca kapı disiplinli olduğu için güvenli: teşhis kök nedeni kanıtlar (mikrofon-izni sürümü teşhisini önce gönderdi), test düzeltmeyi sabitler, inceleme akıl yürütmeyi çürütür ve ancak o zaman gerçek bir noter onaylı derleme çıkar. Titizlik, hızı güvenli kılan şeydir, ona karşı takas edilen şey değil.

Bir yapay zeka uygulaması için bunun neden daha önemli olduğu

Bu disiplinin özellikle GeekBye gibi bir araç için pazarlıksız olmasının bir nedeni var. Serideki en kötü hataların birkaçı çökme-gürültülü değil, sessiz-yanlış''tı: yapay zekaya yanlış monitörü besleyen bir ekran görüntüsü (v2.0.10), önemsiz terimlere doğru yanlı bir transkripsiyon nedeniyle "speak"''in bir isim olarak çıkması (v2.0.11), bunu görmenin hiçbir yolu olmadan yanlış modda cevap veren bir asistan (v2.0.3 + v2.0.5). Uygulamanız bir modele bağlam beslediğinde, yanlış bir girdi kendinden emin biçimde yanlış bir çıktı üretir ve hiçbir yerde bir hata olmaz. Fırlatılmayan arızalardan test yoluyla çıkamazsınız. Akıl yürüterek çıkmanız gerekir — ki inceleme kapısı tam da bunun içindir.

Seri, sırayla

Bunların her biri tek bir sürümde kendi başına yeten bir vaka çalışması. Baştan sona okunduğunda, bir ürünü "çalışıyor"dan "güvenilir"e taşımanın anatomisidirler.

  1. Bir versiyon 2 gerçekte neye mal olur: 206 commitlik dürüst durumlar — v2.0.0. Temel: asla doğru olmayan bir durumu gösterme.
  2. Uygulamamızın kendini DDoS''ladığı gün — v2.0.1 + v2.0.4. Kendi arka ucumuzu ezen bir başlangıç yükleme birikimi ve zorladığı canlılık merdiveni.
  3. Sakin yazılım: titreme düzeltmesi ve cevap-modu rozeti — v2.0.3 + v2.0.5. Güveni her seferinde tek bir ayrıntıyla satın alan özelliksiz sürümler.
  4. Mac uygulamanız her açılışta mikrofon erişimini unutuyor — v2.0.6. macOS Uygulama Yer Değiştirmesi ve düzeltmeden önce teşhisi göndermek.
  5. Tek bir CSS değişkeni, beş inceleme turu ve yalan söyleyen bir Swift araç zinciri — v2.0.7. Tek tip yarı saydamlık ve dokümanlar zorlama betiğiyle çeliştiği için boyutu değişen bir ikili.
  6. Güvenlik duvarı WebSocket''leri engellediğinde canlı transkripsiyon — v2.0.8. Saf-HTTPS bir yedek ve onu kendisinden gizleyecek olan 403.
  7. Yapay zeka not alıcınız neden toplantı ortasında kaydı durduruyor — v2.0.9. Yalnızca sizi duyabilen bir boşta sayacı ve masaüstünüzü kilitleyebilen bir çökme.
  8. Ekran kaydı neden yanlış monitörü yakalıyor — v2.0.10. Yanlış-ekran hatası ve tek monitörde geçip iki monitörde başarısız olacak düzeltme.
  9. Yapay zeka transkripsiyonu teknik terimleri neden yanlış duyar — v2.0.11. Konuşmayı kelime dağarcığınıza doğru yanlandırmak — ve daha iyi hale getirmeden önce daha kötü hale getiren regresyon.

Çıkarım

Kusursuzluk ulaştığınız bir durum değil; koruduğunuz bir kapıdır. Dokuz sürüm ve her birinde aynı üç soru: düşünmediğiniz durum neydi, tam arıza bir testle sabitlendi mi ve gerçek bir imzalı derleme gerçekten çıktı mı? Bunların hiçbiri gösterişli değil. Hepsi, GeekBye v2''nin neden sakin hissettirdiğidir. Yazılım geliştiriyorsanız — yapay zeka ya da başka türlü — aktarılabilir kısım herhangi bir tek düzeltme değil. Aktarılabilir kısım, yeşil bir test paketini tartışmanın sonu değil başlangıcı olarak görme alışkanlığıdır.

Yukarıdaki her sürüm otomatik güncelleme yoluyla yayında. Bu düzeltmelerin toplamda oluşturduğu ürün için GeekBye v2''de yeni neler var sayfasına bakın.