Yazılım; elektronik bir donanımın, belirli görevleri yerine getirmesi için derlenmiş komutların bütünüdür. Yazılım sadece bilgisayarımızda kullandığımız programlar değil, hayatımızda kullandığımız neredeyse tüm sistemlerde var olan komutlardır. Sağlık, ticaret, güvenlik, lojistik, elektronik, otomotiv, savunma sanayi gibi pek çok alanda yazılımlar kullanılmaktadır. Artık bakkalların bile mobil uygulama üzerinden sipariş alıp teslim ettiği günümüz dünyasında artık yazılımın kullanılmadığı sektör yok denebilecek kadar azdır. Dolayısıyla dünyanın en büyük endüstrilerinden biri hiç şüphesiz yazılım endüstrisidir.
Yazılım; işleri kolaylaştıran, zamandan ve maliyetlerden tasarruf sağlamaya yarayan muhteşem bir araçtır. Ancak hatasız kul olmadığı gibi hatasız yazılım da olmaz. Her sistemin bir hatası olabilir. Tabi ki her geliştirici ekibi yazılımlarını kusursuz bir şekilde üretmek için çaba harcar kuşkusuz. Ancak insan yapısı gereği hata yapmaya meyilli bir varlıktır. Yazılımlarda meydana gelen hata nedenleri aşağıdaki gibi sıralanabilir.
- Yazılım gereksinimlerinin hatalı planlanması
- Ekipler arası iletişim eksikliği
- Mantıksal tasarım hataları
- Standartlara ve dokümantasyona uymayan kodlamalar
- Test sürecinin eksiklikleri
Yazılımlarda meydana gelen hataların bazılarının telafisi çok kolay olurken bazılarıysa çok büyük bedellere neden olur. Finansal, siyasi bedelleri olabileceği gibi, itibar kaybı hatta can kaybına bile yol açabilir.
Bu yazımda tarihteki bilinen, en kötü sonuçları doğuran yazılımsal hataları tanıyacağız, bu hatalardan nasıl dersler çıkarmalıyız onu tartışmaya açacağız.
Toyota Prius Hatası
2010 yılı içerisinde Toyota Hibrit modeli olan Prius araçlarında kullanılan kontrol yazılımında ortaya çıkan bir hatadan dolayı beklenmedik şekilde yanan farlar ve motorun durmasıyla ilgili olarak 160.000 aracını piyasadan çektiğini açıkladı.
Denver Havalimanı Otomatik Bagaj Sistemi Hatası
Amerika Birleşik Devletlerinin Denver kentindeki uluslararası havaalanındaki uçuşlardaki beklemeleri azaltmak, daha az maliyetle daha hızlı bagaj hizmeti sunmak için otomatik bagaj sistemi yazılımı geliştirildi. Nisan 1994’te otomatik bagaj sisteminin ilk testini izlemeleri için basın mensupları havalimanına davet edildi. Gazeteciler ve muhabirler test sırasında, sistem raylarının altına dağılan kıyafetleri ve kişisel eşyaları fark etti. Bagajın kayıştan kayışa geçmesini sağlayan aktüatörlerin hata sonucu bagajı sistemden attığını gözlemlediler. (Aktüatör: bir mekanizmayı veya sistemi kontrol eden veya hareket ettiren bir tür motordur.) Bu hataların basında yer alması sonrası Denver Belediye başkanı Wellington Webb planlanan 15 Mayıs açılışını iptal etti.
Meydana gelen bu yazılım hataları nedeniyle sistem, 28 Şubat 1995 tarihinde hizmete girdi. Bu gecikmenin maliyetinin günlük 1 milyon dolara yakın olduğu ve gecikme nedeniyle oluşan toplam zararın 340 milyon doları bulduğu hesaplanıyor. Nihayetinde 70 milyon dolarlık yedek bir proje devreye sokuldu. O zamandan beri çeşitli sorunlarla çalıştırılan bu yazılımın da 2005 yılında artık iş göremeyeceği belirlenerek yenilenme kararı alındı.
Arienne 5 Füzesi Hatası
Arienne 5 Füzesi’nin yazılımdan kaynaklanan bir hatadan dolayı infilak etmesi yazılım hatalarında dramatik bir örnektir. Avrupa Uzay Ajansı ve Havacılık Dairesi 1996 yılında uydu taşıma amaçlı 7 milyar Euro maliyetle Arianne 5 isimli bir roket geliştirdi. 4 Temmuz 1996 günü Arienne 5 füzesi, fırlatıldıktan 37 saniye sonra roket kontrol yazılımındaki hatadan dolayı havada infilak etti.
Arienne 5 füzesinde kullanılan bazı yazılımlar Arienne 4 füzesindeki bazı kodların yeniden kullanılmasıyla geliştirilmişti. Modül bazında testler gerçekleştirilmesine rağmen, her zaman olduğu gibi genel sistem testleri zaman sıkışıklığından dolayı tam olarak gerçekleştirilemeden kullanılmış ve bu yapılırken Arienne 5 füzesinin uçuş profili Arienne 4’ten farklı olduğu ve bu açıdan yazılımda değişikliğin yapılması unutulmuştu. Kalkıştan kısa bir süre sonra 16 bit/64 bit çevrimi sırasında bir değişkendeki taşma hatası(stack overflow) sonucu, kontrol sistemi devre dışı kalarak 500 milyon dolarlık kayba sebep olan bu hata tarihteki en pahalı yazılım felaketleri arasında yerini almıştır.
Körfez Savaşında Hedefi Iskalayan Füze Sistemi
25 Şubat 1991 tarihinde 1. Körfez Savaşı sürerken Amerika’nın Suudi Arabistan’a yerleştirdiği Patriot füze savunma sistemi çatışmalar boyunca büyük ölçüde başarılı bir iş çıkarmıştı. Ancak Patriot sistemindeki bir hata, Irak tarafından gönderilen Scud füzesini ıskalamasına ve füzenin Amerika kışlasını vurması neticesinde 28 Amerikan askerinin ölümüne yol açmıştır.
Yaşanan bu olaydan sonra yapılan incelemede Patriot füzelerinde zaman hesaplamasında kullanılan yazılımda 24 bitlik değişkende oluşan hatanın neden olduğu; 100 saat açık kalan füze sistemindeki zaman hatasının 0.34 saniyeyi bulduğu ve bunun da füzenin 600 metrelik bir sapma yapmasına neden olduğu anlaşılmıştır.
Therac 25 Tedavi Sistemi Hatası
Therac 25, radyoterapide hastalara belirli dozlarda radyasyon uygulayarak tümörlerin yok edilmesinde kullanılan bir cihazdır. Bu cihaz, 1985-1987 yılları arasında farklı Amerikan hastanelerinde toplam altı kişinin ölümüne neden olmuştur. Cihaz “düşük güç modu” ve “yüksek güç modu” olmak üzere iki temel modda çalışabilmekteydi. Cihazın temel çalışma prensibinde “düşük güç modunda” düşük seviyedeki elektron ışını hastaya direkt olarak uygulanmakta; “yüksek güç modunda” ise otomatik olarak hastayla cihaz arasına metal bir plaka konulmaktaydı. Bu cihazın kullanımı sırasında operatörün cihaza önce yanlışlıkla “yüksek güç moduna geç” komutu vermesi ve ardından bunu iptal edip “düşük güç moduna” alması sonucu cihaz hem işlemin iptal edildiği yönde bir hata mesajı verir hem de işlem iptal etmeyerek farkında olunmadan yüksek güçlü radyasyon hastalara metal koruma kullanmaksızın uygulanmıştır. Hata mesajından dolayı operatörlerin işlemi birkaç kere tekrar etmesiyle de hasta çok büyük oranda radyasyona maruz kalmıştır. Bu sebeple hastalara normalden 100 kat fazla doz verilmiştir. Aynı cihazda ikinci bir yazılım hatasına rastlanmıştır. Bu hataya göre bazı durumlarda 255. denemeden sonra tampon bellek taşması sebebiyle ve hastalara ölümcül dozda ışının verilmesine sıfırdan başlanmıştır.
Sleipner A Sondaj Platformu Hatası
Simülasyon yazılımında meydana gelen yazılım hatasından dolayı Sleipner A adlı petrol platformunun dört beton sütunu kırılarak 200 metre derinliğe gömülmüştür. Olayın sebebi simülasyon hesaplama programı Nastran’daki bir yazılım hatasından dolayı yerçekimini olması gerekenden % 47 az hesapladığı için inşa sırasında 700 milyon dolarlık sondaj adasının beton duvarları gerekenden ince yapıldığı anlaşılmıştır.
Y2K Hatası
2000 yılı problemi (Y2K problemi, milenyum hatası diye de bilinir) 1 Ocak 2000 yılından sonra eski bilgisayar ve yazılımlarında görülen ve tarih ve zamanla ilgili işlemlerde hatalı sonuçlara yol açan bir yazılım hatasıdır. Bazı eski yazılım dilleri geliştirilirken öngörüsüz davranılmış ve tarih değerlerinde yıl ibaresi 2 basamak ile ifade edilmiş, yani 1950 yılı 50, 1985 yılı 85 olarak tanımlanmış. Bu basit tasarım hatası 2000 yılına girildiğinde, o yılın 1900 gibi algılanmasına neden olmuştur.
Hata, bazı kurum ve kuruluşlarda (örneğin bankamatiklerde) ve devlet bilgisayarlarındaki çeşitli işlevlerin 31 Aralık 1999 tarihini müteakip 1 Ocak 2000 gecesi kesilmesi şeklinde ortaya çıkmıştır.
Çıkarılacak Dersler
- Gereksinimlerin doğru bir şekilde planlanması ve aktarılması gerekmektedir. Analiz sırasında yapılan hatalar en büyük maliyete neden olan hatalardır.
- Projeye başlarken gereksinimlerin değişebileceği hesaba katılmalı ve planlamalar buna uygun olarak gerçekleştirilmedi.
- Yazılımı talep edenler, analiz edenler, geliştiriciler ve test edenler arasındaki iletişim projenin başlangıcından teslimine kadar çok sağlıklı yürütülmelidir.
- Yazılım testleri çok önemlidir. Sistemdeki her öğenin kendi işlevini yerine getirdiği ve sistemin bütünleşik olarak kusursuz çalıştığundan emin olunmalıdır. Yazılım test mühendisliği başlı başına burada özetleyebileceğimden çok daha geniş kapsama sahiptir.
- Yazılımlar geliştirilirken uzun ömürlü olacak şekilde planlanmalı.
- Zaman baskısı, kritik işlemlerin es geçilmesine engel olmamalı.
- Yazılım öncesinde ve sırasında kontrol listeleri titiz bir şekilde hazırlanmalı ve daha titiz bir şekilde tüm şartları sağladığı denetlenmeli.
Umarım bu yazı sizin için faydalı olmuştur.
Sorularınız ve yorumlarınız için bu içeriğe yorum yazabilir ya da bana iletişim sayfasındaki linklerden ulaşabilirsiniz.
Esen kalın.
Kaynakça:
- TSE Standard Dergisi – Eylül 2011 Sayısı
https://statik.tse.org.tr/upload/tr/dosya/icerikyonetimi/987/05112014100314-1.pdf - https://tr.wikipedia.org/wiki/Y2K_problemi
- https://en.wikipedia.org/wiki/2009%E2%80%9311_Toyota_vehicle_recalls
- https://en.wikipedia.org/wiki/Denver_International_Airport
- Yazılım Mühendislğinde Modern Yaklaşımlar, Dr. Fatih Yücalar ve Dr. Emin Borandağ
- İş Analiz Rehberi, Kadir Çamoğlu