X · Geliştirme · Bölüm 35
Test, bench ve canlıya alma
Testin nasıl koşturulduğu, üretim kopyası üzerinde ölçüm, dağıtım zinciri ve bir yükseltmenin gerçekten çalıştığının nasıl kanıtlandığı.
Üç seviye doğrulama
| Seviye | Ne ölçer | Nerede koşar |
|---|---|---|
| Saf testler | Veritabanı gerektirmeyen mantık | Yerel |
| ORM testleri | Modeller, kısıtlar, iş akışı | Üretim kopyası (bench) |
| Tarayıcı denetimleri | Gerçek ekranda gerçek davranış | Üretim kopyası |
Bench: üretim kopyası
Testler üretimde koşmaz. Üretim veritabanının bayt kopyası üzerinde ayrı bir kurulum (bench) ayağa kaldırılır ve ölçümler orada yapılır. Gerçek veriyle koşmak, sentetik veriyle görülemeyecek şeyleri görünür kılar.
Temel kol
Bir ölçümün anlamı, karşılaştırıldığı şeyle belirlenir. Bu yüzden testler iki kolda koşulur: değişikliğin bulunduğu kol ve değiştirilmemiş temel kol.
Düşen test benim mi, zaten mi düşüyordu
- Belirti
- Yeni bir değişiklikten sonra 17 test kırmızıydı. Değişiklik geri alındığında da aynı 17 test kırmızıydı.
- Kök neden
- O testler zaten kırıktı ve bu bilinmiyordu. Değişikliği suçlamak, iki gün kaybettirirdi.
- Ders
- Her ölçüm bir temel kolla eşleştirilir. "17 hata" bir sonuç değildir; "temel kolla birebir aynı 17 hata" bir sonuçtur.
Testler gerçekten koştu mu
Hiç test toplamayan bir koşu, geçmiş gibi görünür
- Belirti
- Test komutu sıfır hata ile bitiyordu; hiçbir test koşmamıştı.
- Kök neden
- Komut, hangi testlerin koşacağını söyleyen parametreyi almadan çalıştırıldığında hiçbir test toplamıyor ve başarıyla çıkıyordu. Ayrıca çıktıda aranan başarısızlık deseni artık üretilmiyordu.
- Ders
- Bir test koşusu kaç test topladığını raporlamalı. Sıfır toplanan bir koşu, geçiş değil, hatadır.
Dağıtım zinciri
Değişikliği kendi dalında yap, testleri koş.
Depoya gönder.
Üretimde depoyu güncelle ve dosyaların gerçekten değiştiğini doğrula (özet karşılaştırması).
Servisi durdur, modülü yükselt, servisi başlat.
Yükseltme günlüğünde hata olup olmadığına bak.
Arayüz değiştiyse derlenmiş paketleri temizleyip yeniden üret.
Canlıda, yayımlanmış dosyanın içinde yeni kodun bulunduğunu doğrula.
Gerçek bir işlemi uçtan uca dene.
Üçüncü ve yedinci adımlar en çok atlanan ve en çok yanıltan adımlardır.
Dağıtım commit'i gönderir, çalışma ağacını değil
- Belirti
- Üretimdeki dosya özetleri beklenenle eşleşiyordu; buna rağmen davranış eski kalmıştı.
- Kök neden
- Gönderilen şey commit edilmiş hâldi; yapılan son düzenleme henüz commit edilmemişti. Özet karşılaştırması "yeşil" diyordu çünkü karşılaştırılan iki taraf da eski hâldi.
- Ders
- Dağıtımdan önce çalışma ağacının temiz olduğu kontrol edilir. Yeşil bir karşılaştırma, karşılaştırılan şeyin doğru şey olduğunu kanıtlamaz.
Paylaşılan bir modülün dağıtımı başkasının işini yayımlayabilir
- Belirti
- Bir modül güncellendi; ilgisiz bir özellik canlıya çıktı.
- Kök neden
- Aynı modül üzerinde başka bir çalışma sürüyordu ve üretim, o çalışmanın dalını koşuyordu. Üretim bazen ana daldan geride, bazen ileride olabilir.
- Ders
- Dağıtımdan önce üretimin hangi dalda ve hangi commit'te olduğu ölçülür; kendi değişikliğinizle üretimin hâlinin melezi kurulur ve o test edilir.
Tarayıcı denetimleri
Bazı kusurlar yalnız gerçek bir tarayıcıda görünür: bir düğmenin gerçekten tıklanabilir olması, bir rengin gerçekten hesaplanması, bir panelin gerçekten açılması.
Denetim, komşu bir yüzeyi ölçebilir
- Belirti
- Bir denetim her şeyin doğru olduğunu söylüyordu; kullanıcı tersini görüyordu.
- Kök neden
- Denetim, ölçmek istediği şeyi değil yanındakini okuyordu — örneğin bir öğenin stilini ölçmek için önce onu silmesi, böylece kapsayıcının yerleşimini bozması. Bu sınıf üretimde defalarca görüldü.
- Ders
- Bir denetim yazıldığında ilk soru "bu gerçekten kullanıcının gördüğü şeyi mi ölçüyor" olmalı. Denetimin kendisi de bir yazılımdır ve kusurlu olabilir.
Canlıya almadan önce son üç soru
- Bu değişiklik geri alınabilir mi? Alınamıyorsa yedek var mı?
- Bu değişikliği kullanıcı nasıl fark edecek? Fark etmeyecekse neden yapıyoruz?
- Bir şey ters giderse hangi ölçüm bunu bize söyleyecek?