Yazılım Testlerinde Temiz Data Yanılgısı
Hatırlayanlar veya yaşayanlar bilir, 28 Ağustos 2023 tarihinde, Birleşik Krallık(UK) Sivil havacılık sisteminde bir arıza yaşanmış, binlerce uçuş iptal edilmiş veya ertelenmişti. Böyle bir sistemde nasıl bir hata çıkmıştı peki? Bunu araştırırken, @Umut Pisken’in bu linkte (https://www.emniyetkritikyazilim.com/post/uk-air-traffic-control-incident) detaylı bir şekilde anlattığı makaleye denk geldim. Olayın özeti şu: Uçuş planlama sırasında, uçuşa söz konusu olan hava alanlarından birinin ismi başka bir havaalanı ile aynı olmasından dolayı kritik hata oluşmuş ve sistem çökmüş. Peki, Yazılım Testleri açısından bundan nasıl bir ders çıkarmalıyız?
Yazılım Test sürecinde, test senaryolarının en kritik noktalardan birisi Test verisidir. Ayrıca, 7 test prensibinden biri olan Bağışıklık(Pesticide) Paradoksu da Test Verisi ile ilgilidir. Testlerde doğru veriyi kullanmak, test başarımı için önemli bir noktadır. Test verisi ile ilgili bir nokta da, söz konusu havacılık sisteminin çökmesine sebep olan, “Gelen verinin temiz olması varsayımıdır”.
Özellikle farklı sistemler arası entegrasyonlarda, sistem tasarlandığı zaman, girdi verisi(input data) çoğu zaman “şu şekilde olacağına söz verilir” şeklinde kabul edilir ve hedef sistemde ekstra bir doğrulama yapılmıyor. Çalıştığım birçok projede de gördüğüm üzere, sistemler bu şekilde tasarlanmıştı.
Biraz insan psikolojisi, biraz yönetim konseptleri gereği olacak ki, özellikle hedef sistem tarafında bu kontroller eksik bırakılıyor. Evet, “genelde” gelen veri temiz oluyor ama sistem değişiklik yönetimi eksik olduğu zaman bu “varsayımsal” protokoller boşa düşüyor.
Çözüm nedir: girdi doğrulaması(input validation), hem fonksiyonel tarafta hem de fonksiyonel olmayan tarafta(güvenlik, performans) en kritik adım olması itibarıyla, bunların yazılıma eklenmesi ve detaylı bir şekilde test edilmesidir. Özellikle, “varsayımsal” senaryolarda, “beklenmedik” şekilde gelmesi durumunda sistemin nasıl davrandığı test edilmelidir.
Bu “varsayımsal” durum ile ilgili olarak API tarafının(ve haliyle testlerin) önemine dair başka bir yazıyı da yakında paylaşacağım.
Böceksiz günler dileğiyle 🙂