in Yazılım

Test Yazmak Neden Önemlidir?

test güdümlü geliştirmeÜniversite yıllarımda bir çok kez  test yazmanın öneminden bahseden yazılara rastlıyordum. O zamanlar testlerin neden önemli olduğunu çok iyi kavrayamamıştım. Hele bir de önce testlerin, sonra da kodların yazılması gerektiğine dair bir şeyler duyduğumda ya da okuduğumda bunun nasıl yapılacağı bir türlü kafama yatmıyordu. Olmayan bir şeyin testini nasıl yazacaktım ki?

TDD (Test Driven Development) metodolojisini ilk kez iş yerinde yeni başlatılan projede kullanmaya karar verdik. Bu vesileyle şu an kesinlikle vazgeçemeyeceğim bu metodolojiyle haşır neşir olmaya başladım.

TDD ilk başta kod yazma hızınızı azaltacaktır çünkü bir parça kod için belki kodun kendisinden çok daha uzun olan testler yazmanız gerekecektir. TDD’nin bu yönü, yöneticileri projenin zamanında yetişmeyeceği konusunda korkutmaktadır. Bu nedenle ülkemizde TDD metodolojisi çok fazla kullanılmamaktadır ve zaman kaybı olarak görülmektedir. Şahsen benim arkadaşlarım arasında projeyi TDD ile geliştiren kişi sayısı neredeyse yok denecek kadar az.

Test yazmak zaman kaybı olarak görülmemelidir

Test yazmak kesinlikle zaman kaybı olarak görülmemelidir. Bir sınıfın kodlarını yazarken onun her bir metodunun çalıştığını birim (unit) testler  ile doğrulamış olursunuz. Böylece sınıfınızın kodlarını yazıp bitirdiğinizde elinizde tümüyle test edilmiş bir kod bulunacaktır. Tabi ki bu noktada testleri hakkıyla yazmış olmak çok önemlidir. Testlerde kodu çok iyi zorlamanız her türlü durumu göz önünde bulundurarak test yazmanız gerekmektedir. Bir kodun belli bir durumda Exception fırlatması bekleniyorsa bu bile test edilmelidir. Bütün kodlarınızı bu anlayışla yazdığınızda, nihayetinde elinizde tümüyle test edilmiş, temiz kodlar bulunacaktır. Böylece bir yazılımcı olarak çok daha mutlu olacaksınız.

Testler refactor sürecini kolaylaştırır

Projeler büyüdükçe kodlarda değişiklik yapmak her zaman sıkıntılı bir iş haline dönüşmektedir. Herhangi bir şey değiştirdiğinizde yaptığınız değişikliklerin başka yerleri etkileyerek, bozmadığından emin olmanız gerekir. Testlerin yazılmadığı bir projede yaptığınız değişikliklerden sonra diğer yerleri etkilemediğinden emin olmak neredeyse imkansızdır. TDD metodolojisiyle yazılmış bir projede ise yazılımcı bir değişiklik yaptıktan sonra yapması gereken tek şey tüm testleri çalıştırarak testlerin çalıştığını doğrulamaktır. Eğer yapılan değişiklikler bir yerleri bozmuş ise yazılımcı anında nereleri bozduğunun bilgisine ulaşır ve nokta atışı yaparak ilgili yerleri düzeltir. Daha sonra testleri tekrar çalıştırarak her şeyin doğru çalıştığından emin olur ve gece başını yastığa daha huzurlu bir şekilde koyar. İşte bu noktada test yazmanın gerçekten zaman kaybı olmadığı ve proje büyüdükçe ne kadar önemli olduğu anlaşılmaktadır.

Bir kodun önce testini yazabiliyorsanız, bu ne yapmak istediğinizi biliyorsunuz demektir

Testlerinizi kodunuzdan önce yazmanız aslında kodunuzu daha iyi kurgulamanız açısından önemlidir. Siz daha ortada bir kod yokken onun testini yazabiliyorsanız yapacağınız şeyi kafanızda gerçek anlamda anlamış ve kurgulamışsınızdır. Hangi metodun hangi değeri alacağını buna karşılık hangi değeri döndüreceğini veya hangi işi yapacağına karar vermeden testlerinizi yazamazsınız. Bu nedenle kod yazmaya başlamadan önce kodunuzu en ince ayrıntısına kadar planlayıp, daha sonra testlerinizi ona göre hazırlayıp nihayetinde kod yazmaya başlarsınız. Böylece kodlarınızı çok daha sağlam bir şekilde yazmış olursunuz.

Şirket yöneticileri test yazmayı zaman kaybı olarak görmeyi bırakıp, aksine yazılımcıları test yazma konusunda teşvik etmeli ve bunu bir şirket standardı haline getirmelidirler, çünkü şirket bünyesine yeni bir yazılımcı kattığında, bu yazılımcının daha önce yazılmış on binlerce satır kodu cesur bir şekilde değiştirebilmesi ancak bu şekilde mümkün olur.

Test yazarak uzun vadede karlı çıkarsınz

Projeyi TDD metodolojisi ile yazmak bir yatırım olarak görülebilir. İlk başta zaman kaybedersiniz ancak daha sonra emeklerinizin karşılığını almaya başlarsınız ve test yazmanın ne kadar isabetli bir karar olduğunu anlamaya başlarsınız. Aşağıdaki grafikte geleneksel yöntem ile ve TDD yöntemi ile yazılan iki projenin zaman ilerledikçe değişiklik yapma maliyeti arasındaki fark gösterilmiştir. Sanırsam bu grafik her şeyi daha açık bir şekilde ortaya koymaktadır.

test yazmanın önemi

  • Emrah

    Uzun soluklu ve büyük projelerde test yazmanın önemini bir kere daha anlamış olduk. Paylaşım için teşekkürler.