@emrahday, hocam biliyorum bahsettiğiniz konuları ama kastettiğim farklı bir şey.
Şimdi diyelim yeni bir X feature'ı geliştiriyorum, bunu geliştirirken de varolan bir A fonksiyonunu değiştirmem gerekti. Bu A fonksiyonu, Y,Z,T gibi bir sürü diğer feature'u da etkiliyor olsun.
A fonksiyonunu değiştirdiğim için testler patlayacak, testleri de değiştirmem lazım. Üstüne sadece yeni geliştirdiğim X'i değil, Y,Z,T feature'larının da nasıl çalıştığını ve yeni testlerin sadece X'i değil, Y,Z ve T'yi de kontrol ettiğinden emin olmam lazım.
Bu şekilde kod yazmak hem development'ı yavaşlatıyor, hem de bir developer'ın bilmesi gereken business miktarını çok artırıyor. Yeterince büyük bir projede geliştirme yapmak zamanla imkansız hale geliyor bu yüzden.
Peki alternatif nedir? A yazıldıktan sonra onu çok zorunda kalmadıkça değiştirmemek. Onun yerine bir B fonksiyonu yazıp, A'yı extend etmek. Bunu yaparsam sadece B'ye test yazıp geçebilirim. Bunu yapmıyorsam, önceden A'ya yazılan testler anlamsız hale geliyor, çünkü kod değişti. Her değişiklikle birlikte bir sürü başka testi değiştirmem gerekiyorsa bu da maliyeti inanılmaz artırıyor ve mimaride bir sorun var demek oluyor. SOLID'in O'su bundan bahsediyor aslında.
Yani demek istediğim test yazmayın değil. Ama mimari düzgün değilse, iyi kod yazılmıyorsa test anlamsız bir hale geliyor. Sadece test olması kodun iyi olduğunu garanti etmiyor. Test yazarak yeni çıkan 100 bug'ın 80'ini yakalayabiliyorsun, güzel, ama elde 20 bug var. Mimari düzgün olsa 10 bug çıkacaktı, overall'da daha iyi durumda olacaktık. Demek istediğim şey bu.
0