Bir hobi oyunu için 1000'den fazla test – israf mı?
Projemizde artık bin küsurdan fazla otomatik test var: sunucu tarafında yaklaşık 990, Unity istemcisinde yaklaşık 120. Bir aile projesi için bu abartı gibi geliyor. Aslında tam tersi; işte nedeni.
Testler ikinci geliştiricimiz. Tek kişilik bir projede kod incelemesinde “Dur, bu üretimi bozuyor” diyecek kimse yok. Testler o meslektaş. Her oyun mekaniği (tarifler, oksijen, açlık, yaratık davranışı, dünya parolaları) her değişiklikte çalışan testlere sahip. Korkmadan yeniden düzenleme yapabilmek asıl kazanç.
Sinir bozmayacak kadar hızlı. Çeyrek saat süren testleri kimse çalıştırmaz. Bu yüzden CI kapımız iki aşamalı: pull request denetimi hızlı testlerle iyi bir üç dakikada çalışıyor; tam, yavaş paket sonrasında çalışıyor. Bu, kapsamı kaybetmeden geliştirme döngüsünü seri tutuyor.
Unity'yi test etmek başlı başına bir konu. İstemci mantığını çalışan bir motorun içinde test etmek zor. Bizim hilemiz: istemcinin çekirdek mantığı Unity olmadan çalışan kendi kütüphanesinde duruyor; onu sıradan kod gibi başsız (headless) test ediyoruz. Yalnızca gerçekten motora ihtiyaç duyan şey EditMode/PlayMode testi olarak çalışıyor.
Uyarılar hatadır. CI'ımız “warnaserror” ile derliyor: her derleyici uyarısı yapıyı bozuyor. Bir titizlik gibi geliyor, ama o tek önemli uyarının sonunda içinde boğulduğu uyarı mezarlığını önlüyor.
Dürüst sonuç: test yazmak geliştirme süresinin belki beşte birine mal oluyor. Ama düzeltilen her özellik düzelmiş kalıyor; ve akşamları işten sonra hayat bulan bir proje için, hafta sonu özelliğinin salı özelliğini mahvetmediğinden emin olmaktan daha değerli bir şey yok.
Yorumlar