SODOO. El Kitabı

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ığı.

Kime: geliştirici, sistem yöneticisiOkuma: 13 dk

Üç seviye doğrulama

SeviyeNe ölçerNerede koşar
Saf testlerVeritabanı gerektirmeyen mantıkYerel
ORM testleriModeller, kısıtlar, iş akışıÜretim kopyası (bench)
Tarayıcı denetimleriGerç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.

Ders

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

Ders

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

  1. Değişikliği kendi dalında yap, testleri koş.

  2. Depoya gönder.

  3. Üretimde depoyu güncelle ve dosyaların gerçekten değiştiğini doğrula (özet karşılaştırması).

  4. Servisi durdur, modülü yükselt, servisi başlat.

  5. Yükseltme günlüğünde hata olup olmadığına bak.

  6. Arayüz değiştiyse derlenmiş paketleri temizleyip yeniden üret.

  7. Canlıda, yayımlanmış dosyanın içinde yeni kodun bulunduğunu doğrula.

  8. 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.

Ders

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.
Ders

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ı.

Ders

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?