Dün gece, kendi başıma geliştirdiğim küçük platform oyunumun yeni sürümünü hazırlarken, patch notlarını yazmaya oturdum. "Hadi bakalım, bu sürümde neler yaptık?" diye düşünüyordum. Meğerse yaptığım tek şey, bug fix'miş! Listeyi yazdıkça yazdım, kafayı yiyecektim. Yeni özellik? Neredeyse yok gibi bir şey. Meğerse son iki haftam, farkında olmadan, oyunun içine serpiştirilmiş saçma sapan hataları temizlemekle geçmiş.
Mesela, oyuncu karakterinin zıplaması... Unity'de Rigidbody2D ile çalışıyorum. "Zıplama basit, `AddForce` ile hallederiz" demiştim. Meğerse karakter bazen duvara yapışıp kalıyor, bazen de havada ikinci bir zıplama yapabiliyordu. Debug ederken gördüm ki, yere değme kontrolüm (`OnCollisionEnter2D`) ile fizik hareketi senkron değil. Şaka gibi ama, çözüm için iki gün uğraştım.
C#:
if (isGrounded && Input.GetKeyDown(KeyCode.Space))
{
rb.AddForce(Vector2.up jumpForce, ForceMode2D.Impulse);
isGrounded = false; // Bunu unutmuşum!
}
Listede "Seviye 3'teki görünmez engel kaldırıldı" yazıyorum. Bu ne demek? Demek ki bir collider'ın scale'ini yanlış vermişim, karakter o bölgede sanki görünmez bir jöleye takılıyor gibi yavaşlıyordu. Bir de "Düşman AI'sı bazen haritanın dışına çıkıp kayboluyordu" maddesi var. NavMeshAgent'ın sahasını doğru tanımlamamışım, düşman dostumuz sınırları aşıp sonsuzluğa yürüyormuş.
Patch notlarını okudukça, aslında oyunu oynanabilir yapan şeyin, yepyeni mekaniklerden çok, bu ufak tefek rahatsız edici hataları temizlemek olduğunu fark ettim. O an farkına vardığım şey şu: Geliştirme sırasında "tamam bu çalışıyor" deyip geçtiğim onlarca nokta, aslında düzgün çalışmıyormuş. Test etmek, gerçekten her köşeyi kurcalamak şart.
Bu deneyim bana, artık her küçük değişiklikten sonra daha sistematik testler yapmam gerektiğini öğretti. Belki basit bir unit test çerçevesi kurmalıyım. Ama itiraf ediyorum, bazen "çalışıyor işte" deyip, bu sıkıcı görünen test aşamasını atlamak çok cazip geliyor. Patch notları ise bana yaptığım hatayı yüzüme vuran bir ayna oldu.
Siz de kendi projelerinizde, "birkaç bug fix" diye başlayıp, sonunda devasa bir liste ile karşılaştığınız oldu mu? Bu kadar çok hatayı gözden kaçırmamak için neler yapıyorsunuz? Test konusunda tavsiyeleriniz var mı?