Birim testleri ne işe yarar?

Kötü yazılmış bir kodun bizi nasıl yavaşlattığını anlatmama gerek yok sanırım. Ama şu sebepten ama bu sebepten hepimiz sonradan düzeltirim yalanına sığınarak özensiz kodlar yazdık. Dönüp düzeltme zamanı geldiğinde ise olanı bozmak korkusuyla öylece bıraktık. Ama bıldır yediğimiz hurmalar bizi durma noktasına getirdi.

Bu kötü gidişatı durdurmanın, tersine çevirmenin yolu etrafı temizlemekten geçiyor. Peki bir şeyleri bozma korkusunu nasıl yeneceğiz? Üzerinde çalıştığımız sistemi uçtan uca test edebilseydik, bir şekilde yaptığımız her değişiklikten sonra sistemi bozmadığımızın geri bildirimini hızlıca alabilseydik? Onlarca else altına bir else de biz eklemez; gerekli düzeltmeleri yapar, mutfağı temiz bırakırdık. İyi bir test setinin varlığı bize kodu temiz ve kaliteli tutmak için gerekli olan güven ortamını veriyor. Ve nihayetinde kaliteyi arttırarak değişiklik yapmanın maliyetini kontrol altında tutmamızı sağlıyor.

Geleneksel usülde testler, yazılım geliştirme bittikten sonra işi test olan insanlar tarafından yapılır. Bu yöntem kaliteyi denetleyen, ölçen bir yaklaşım. Biz ise kaliteyi ürüne yedirmek, onun bir parçası haline getirmek istiyoruz. Geliştirme sonrası, başkaları tarafından yapılan testlerin verdiği geri bildirim bizim amacımız için çok geç gelen bir geri bildirim. Bu aşamada çoktan bir şeyleri bozma korkusuna yenik düşmüş; bulunan her hatayı bir yama ile düzeltme eğiliminde olacağız.

Bize lazım olan yazılım geliştirme döngüsünde çok daha erken koşabileceğimiz bir test türü – birim testleri. Birim testlerinin tanımına gelin Unit Testing Principles, Practices, and Patterns kitabından bakalım:

Bir geliştiricinin, yaptığı geliştirmenin beklediği gibi çalıştığından emin olmak amacıyla yazdığı aşağıdaki özelliklere sahip test türüdür:

  • Otomatik çalıştırılabilir
  • Kodun küçük bir parçasını (birim olarak da bilinir) doğrular
  • Hızlı çalışır
  • İzole çalışır

Bu tanımı irdelemeyi ileriye bırakıp, bu yazıyı testlerin önemi hakkında sevdiğim bir tespit ile bitireyim:

Testleri kullanarak canlı koda ulaşmak kolaydır, ancak bunun tersi zor olacaktır. Bu durum testler hakkında bize şaşırtıcı bir şey söyler: Testler, bir sistemdeki en önemli bileşendir. Canlı koddan daha önemlidirler.

Robert C. Martin

Comments

Leave a comment