1962 yılında uzay yarışı tüm hızıyla devam ediyordu. ABD, gezegenler arası ilk görevlerinden birini gerçekleştirmeye hazırlanıyordu. Hedef, Venus’ün yakınından geçerek bilimsel veri toplayacak insansız bir uzay aracı göndermekti.

Bu görev için geliştirilen araç Mariner 1 idi ve proje NASA tarafından yürütülüyordu.

Ancak bu görev, yazılım mühendisliği tarihinin en ünlü hatalarından biriyle sonuçlanacaktı.

Press enter or click to view image in full size


Fırlatma Gecesi

Mariner 1’in fırlatılması 21 Temmuz 1962 sabahı planlanmıştı. Ancak menzil güvenlik sistemlerinde yaşanan teknik sorunlar nedeniyle geri sayım birkaç kez durduruldu.

  • Geri sayım 23:33'te yeniden başlatıldı
  • Fırlatmadan 79 dakika önce bir sigorta attı
  • Fırlatma iptal edildi ve süreç tekrar başlatıldı

Bir gün süren gecikmelerden sonra roket nihayet 22 Temmuz 1962 saat 09:21:23’te Cape Canaveral Launch Complex 12’den havalandı.

İlk dakikalar tamamen planlandığı gibi ilerledi.

Ancak birkaç dakika sonra işler ters gitmeye başladı.


Roketin Rotadan Sapması

Roket, Atlas-Agena taşıyıcı sistemiyle fırlatılmıştı.


İtici roket aşaması tamamlandıktan sonra yönlendirme sistemi garip davranmaya başladı:

  • Roket sağa sola savrulmaya başladı
  • Uçuş yolu planlanan rotadan aşağı ve sola kaydı
  • Atlantik üzerindeki yoğun gemi trafiği için risk oluştu

Saat 09:26:16’da, ikinci aşamanın ayrılmasına yalnızca 6 saniye kala, menzil güvenlik görevlisi kritik kararı verdi.

Roket kendi kendini imha etti.


Sorunun Araştırılması

Roketin patlatılmasının ardından mühendisler hemen soruşturmaya başladı.

Başlangıçta sorun donanım arızası gibi görünüyordu.

Ancak Jet Propulsion Laboratory mühendisleri yalnızca 5 gün içinde gerçek nedeni ortaya çıkardı:

Bir yazılım mantık hatası.


Hatanın Teknik Sebebi

Atlas roketi uçuş sırasında iki farklı veri kaynağı kullanıyordu:

  1. Yer radarlarından gelen verile
  2. Roket üzerindeki hız sensörleri

Sistem normalde radar sinyalinde kısa süreli kesinti olursa şu şekilde davranmalıydı:

  • Radar verisini geçici olarak yok saymak
  • Önceden hesaplanmış uçuş yoluna devam etmek

Bunu sağlayan şey uçuş algoritmasındaki bir işaretti:

R-bar

Bu işaret, verinin filtrelenmesini sağlıyordu.

Fakat yazılım programa aktarılırken bu karakter yanlışlıkla silindi.

Sonuç:

Radar verisindeki küçük gürültüler gerçek yön değişimi sanıldı.

Roket sürekli yanlış düzeltmeler yapmaya başladı.


Bu durum giderek büyüyen bir kontrol kaybına yol açtı.



Farazi Kod Örneği

Gerçek uçuş yazılımı çok daha karmaşık olsa da mantık şu şekilde özetlenebilir.

Doğru Mantık

velocity = radar_measurement()
# R-bar filtresi (veri gürültüsünü filtreler)
filtered_velocity = smooth(velocity)

if guidance_lock_lost:
    ignore(filtered_velocity)
else:
    course_correction(filtered_velocity)

Bu durumda radar verisi filtrelenir ve sistem stabil çalışır.



Hatalı Mantık (Mariner 1)

Filtreyi temsil eden karakter yanlışlıkla silinince sistem şu hale geldi:


velocity = radar_measurement()
# filtre yok!
filtered_velocity = velocity
if guidance_lock_lost:
    ignore(filtered_velocity)
else:
    course_correction(filtered_velocity)


Radar sinyalindeki küçük dalgalanmalar bile gerçek yön değişimi gibi algılandı.

Sonuç:

küçük gürültü -> yanlış düzeltme
yanlış düzeltme -> yeni hata
yeni hata -> daha büyük düzeltme

Bu geri besleme döngüsü roketin giderek kararsız hareket etmesine neden oldu.


Tarihin En Pahalı Karakterlerinden Biri

Bu küçük hata Amerika’nın ilk gezegenler arası görevini yok etti.

Toplam maliyet:

  • 18.5 milyon dolar (1962)
  • Günümüz değeriyle yaklaşık 196 milyon dolar

Bilim kurgu yazarı Arthur C. Clarke bu olay için şu ifadeyi kullandı:

“Tarihin en pahalı tire işareti.”


Aslında eksik karakter bir R-bar olsa da bu olay yıllarca böyle anıldı.

Press enter or click to view image in full size


Arthur C. Clarke



İlginç Bir Tesadüf

Bu tür bir yazılım hatası daha sonra tekrar yaşandı.


1988 yılında Sovyet uzay aracı Phobos 1 de yanlış yazılmış bir komut yüzünden kontrolünü kaybetti.

Yani uzay görevlerinde yazılım hatalarının etkisi çok uzun süre hissedildi.

Press enter or click to view image in full size


Phobos 1



Mariner Programının Devamı

Neyse ki görev tamamen iptal edilmedi.


Mariner 1’in kardeş aracı Mariner 2 hazırdı.

  • 27 Ağustos 1962’de fırlatıldı
  • 14 Aralık 1962’de Venüs’ün yakınından geçen ilk uzay aracı oldu
  • Dünya’ya önemli bilimsel veriler gönderdi



Yazılım Mühendisliği İçin Çıkarılan Dersler

Mariner 1 kazası yazılım mühendisliğinde önemli değişikliklere yol açtı.

Bu olaydan sonra:

  • Kritik yazılımlar için çok katmanlı doğrulama
  • bağımsız kod incelemesi
  • simülasyon tabanlı test
  • fail-safe yazılım tasarımı

gibi yöntemler standart hale geldi.

Bu prosedürler daha sonra Apollo Program görevlerinde de kullanıldı ve Ay inişlerinin güvenli bir şekilde gerçekleşmesine katkı sağladı.