Bir uygulamadan duyacağınız en güzel cümledir “İşleminiz BaÅŸarıyla Tamamlanmıştır” cümlesi fakat bu güzel cümle bazen sizi çok kötü biçimde aldatıyor olabilir.Geçen hafta başıma bu tip bir olay geldi ve ben de sizlerle paylaÅŸmak istedim.
Geliştirmekle sorumlu olduğum modülün düzgün bir şekilde çalışıp çalışmadığını anlamak için öncelikle farklı tablolardan bazı verileri alıp bir look-up table oluşturmam gerekiyordu. (Select sorgusundan istediğim kritelere uygun verileri çekip look-up tabloma ekleyecektim.) Bunun için de verileri alacağım tabloları uygun verilerle doldurmam gerekti. Ben de tablo doldurma işini SQL cümleleriyle değil de o tablolara kayıt ekleyen ekranları kullanarak yapmaya karar verdim. Hem böylelikle arkadaşlarımın yaptığı ekranları da test etmiş olacaktım. (Ayrıca tablolar arasında PK-FK ilişkisi olduğundan veritabanı bütünlüğünün bozulmaması için verileri bu şekilde girmek daha sağlıklı olacaktır diye düşündüm)
Öğle aramı bu iÅŸ için ayırıp 58 tane kayıt girdim. (Yani en azından ben öyle sanıyordum.) Sonra bir güzel ADS ‘yi (Aqua Data Studio) açıp master tabloya select count … diyerekten sorgumu yolladım ve gördüm ki ben 58 tane kayıt girmek için öğle aramı heba etmeme raÄŸmen tabloda sadece 22 tane kayıt vardı. (Bir an yorgunluktan kaydet butonuna basmadığımdan bile şüphelendim) Sonra 10 tane daha kayıt girdim ve gördüm ki kayıt sayısı 27 olmuÅŸ. O zaman anladım ki bir yerlerde “insert” yerine “update” yapılıyordu. Olmayan bir kaydın neyini update ediyordu peki? Cevap basit kaydı aradığımız kriter yanlıştı ve ne ilginçtir ki tabloda o yanlış kritere uyan kayıtlar vardı.
Ufak bir debug operasyonundan sonra hatayı bulup düzelttik. (Tesadüfen bulduk ama olsun) Yine ne ilginçtir ki bu ekranın testi de yapılmıştı. Yani Test-Case ‘leri “genelde “Kullanıcı saçma sapan birÅŸeyler yapınca ne olur” ÅŸeklinde olduÄŸundan bu hata gözden kaçmıştı.
Sanırım bu yanılgıya çoÄŸu uygulama geliÅŸtirici (ben de dahil olmak üzere) düşüyor. Yani yeterince Exception-handling yaptıysak ve kendimize de birazcık güveniyorsak “İşleminiz BaÅŸarıyla Tamamlanmıştır” mesajına hemen kanı veriyoruz. Bu yapımızdan ötürü de bu tip SİNSİ hatalar gözümüzden kaçıveriyor.
Okuldaki projeler sırasında da bu tip hatalar başıma geldiğinden veritabanına kayıt atarken mutlaka attığım kayıtları kontrol ederim. Hem ekran ile veritabanındaki tablolar arasındaki boyut kısıtlamalarının uyumunu kontrol etmek hem de beklediğim kayıtların gerçekten BAŞARIYLA kaydedildiğini görmek için. Aksi halde uygulamayı geliştirdiğiniz sırada yapmış oladuğunuz mantık hatalarını kolay kolay görmeniz mümkün olmuyor. Hem bu tip hatalarda bir hata mesajı yada anormallik olmadığından Production ortamında da o modülü kullanan son kullanıcının bir şikayeti olmuyor. (Taaki bir gün kaydettiği verileri görmesi gerekinceye kadar)
Öğle arama mal olan bu olaydan en azından testler sırasında daha dikkatli olunması gerektiÄŸini öğrenmiÅŸ oldum. (Normal ÅŸartlarda testlerin , görevi yazılım test etmek olan kiÅŸilerce yapılması gerekir??) GeliÅŸtirdiÄŸiniz uygulamaları test ederken “Umarım bir hata mesajı almam da bir an evvel yemeÄŸe giderim” mantığından uzak durmanızı tavsiye ediyorum aksi halde ilerliyen zamanlarda uzun süre aç kalabilirsiniz. Åžimdilik benden bu kadar. SaÄŸlıcakla kalın…
Geçen hafta cumartesi günü e-posta ile gönderilen Microsoft Download Notifications aracılığı ile haberdar olduğum 
Blogumdaki SQL Server 2005 ile ilgili önceki yazılarımda SQL Server Storage Engine ‘in biraz sorunlu olduÄŸundan bahsetmiÅŸtim. Hal böyle olunca verilerimizi SQL Server üzerinde tutarken daha da dikkatli olmamız gerekiyor. Ben de bu konuda dikkat etmeniz gereken noktalardan bir kaçına deÄŸinmeye karar verdim.
Recent Comments