Merhabalar sevgili yazılımperver dostlar. Farklı bir yazı ile tekrar birlikteyiz. Aslında bu yazı, kendi içerisinde bir çok hikayeyi barındırmakta 🙂
Eminim çoğunuz, özellikle de gömülü ve aviyonik sistemler için yazılım geliştirenler, daha önceki sistemlerde, yazılımdaki hatalardan (gerek hatalı kodlama gerekse yaklaşım) ötürü ortaya çıkan kaza ve üzücü olayları duymuşsunuzdur. Bunlar genelde ilgili konular anlatılırken, ör. “Priority Inversion” konusu geçince Mars keşif aracı pathfinder’da yaşanan taskların önceliklerinden kaynaklan hata, gibi tek tük verilerek geçilir. Bu yazımdaki amacım bu tarz durumları bir araya getirerek sizlere sunmak ve ilerisi için bir başvuru kaynağı haline getirmek. Elbette burada sizlere sunduğum olayların dışında da bir çok olay ve durum yaşanmış olabilir, bunları da iletmeniz durumunda bu başlık altında toplayıp, kim bilir belki de ileride ayrı bir sayfaya taşırım.
Uzunca bir süre, hava platformları için yazılımlar geliştirdim ve eğer bu platformlar için yazılım geliştiriyorsanız, birinci önceliğiniz, her ne kadar geliştirdiğiniz uygulamaya göre değişse de, emniyetli kritik yazılım geliştirmektir. DO-178 ve DO-254 gibi bir çok standartlar, sizlere bu tarz emniyet kritik yazılımlar geliştirmeniz için oldukça sağlam ve sistematik bir yol göstermekte. Bakmayın siz yol gösterme dediğime, her ne kadar yol göstermekte desek de, eğer Amerika hava sahası (ve tabi Avrupa için de benzer standartlar var) içerisinde uçacak, sivil bir uçak için yazılım geliştirecekseniz, FAA, nam-ı diğer Federal Aviation Administration’ı (Avrupa için de EASA), bu standarda uygun bir şekilde yazılım geliştirdiğiniz konusunda ikna etmeniz gerekmekte. Tabi bu tek başınıza da olmuyor, DER’lerden yardım alıyorsunuz. DER’ler nedire girmeden, ki bu hususlar bambaşka bir yazının konusu olabilir, girizgahımı burada sonlandırıp, ilgili olaylara geçmeden önce son bir noktaya parmak basmak istiyorum. O da:
Bu geçmişte kalmış olaylar neden önemli?
Evet, bence bu tarz konuları ya da kazaları okumadan önce sormamız gereken soru, bunlar neden önemli?
Arkadaşlar aslında bunun için çok güzel bir özdeyiş var o da “Tarihten ders almayanlar için tarih tekerrür eder”. Ne kadar güzel bir söz. Aslında havacalık ve bir çok alanında gelişmesi aslında tam olarak bu şekilde olmuş. Yaşanan her bir kaza, her bir sıkıntı, insanları yeni önlemler almaya, yeni yaklaşımlar geliştirmeye itmiş. Bu konuda daha farklı örnekler okumak isteyenleri de Matthew Syed’in Karakutu Düşünme Modeli kitabını en az bir kere okumaya davet ediyorum. Gerçekten pişman olmayacaksınız. İşte biz de bu tarz hataların nelerden kaynaklandığını öğrenerek, ne kadar küçük hataların, ne kadar büyük problemlere yol açabileceğini, gözden geçirmelerin önemini, kullandığınız sistemler hakkında bilgi sahip olmanın ne kadar önemli olduğunu daha iyi görmüş olacağız. Bu noktada, sevgili yazar, ben çok ta kritik bir yazılım geliştirmiyorum bana ne de diyebilirsiniz fakat ben yine de her yazılım geliştiricinin bunlardan haberdar olmasının faydalı olacağı inancındayım 🙂
Aşağıdaki kazaların ve durumların bir kısmını emniyet ile ilgili sayfalardan edindim, fakat buraya özellikle yazılım ile ilgili olanları koymaya çalıştım. Bu sebeple, emniyet ile ilgili diğer yazılar için kaynaklara başvurabilirsiniz.
Öne çıkan bazı olayların kronolojik sırası ve ilgili kaynaklar:
- 1985-1987: Therac 25 (Summary video | Wikipedia | Paper)
- 1992: Patriot Missile Timekeeping (Wikipedia | Report)
- 1996: Ariane 5 flight 501 (Summary video | Wikipedia | Report)
- 1997: Mars Pathfinder (“What Really Happened on Mars”)
- 1999: Mars Climate Orbiter (Wikipedia | Report)
- 2002-2010: Toyota UA (Slides | Full Video | Wikipedia)
- 2004: Spirit Mars Rover file system (Wikipedia)
- 2007: F-22 Date Line Bug (Summary video | News | Wikipedia)
- 2009: Air France Flight 447 (Wikipedia | Report)
- 2010: Stuxnet (security) (Wired | Wikipedia)
- 2011: Wenzhou Train Crash (News | Wikipedia)
- 2015: Seville A400M Crash (News | Wikipedia)
- 2015: Ukraine Power Outage (security) (News | CERT)
- 2016: Schiaparelli Mars Lander crash (Wikipedia)
- 2017: USS John S. McCain (Propublica | NTSB)
- 2018: Uber Testing Fatality (News | NTSB)
- 2019: Boeing 737 Max (News | US House Prelim Findings)
- AM A320 runway overrun accident, Sao Paolo Congonhas airport, Brazil, July 2007
- B737-800/Embraer Legacy midair collision, Amazon jungle, Brazil, September 2006
- B777, anomalous flight behavior and partial Loss of Control, off Perth, W. Australia, August 2005
- A320, runway overrun on landing, Taipei-Sungshan airport, Taiwan, October 2004
- Unknown FBW aircraft type, Byzantine failures in Flight Control System (FCS), n.d.
- A320, braking problem on touchdown. Cardiff, August 2003
- British Mediterranean Airways, A320, false navigation data on non-precision approach. Addis Ababa, March 2003
- Singapore Airlines, B747-400, Primary Flight Display information loss, January 2003
- B717, in-flight engine shutdown due to electronic fault, Launceston, Australia, October 2002
- Tu154m and B757, Midair Collision, Überlingen, Lake Constance, Germany, July 2002
- B717, dual electronic Flight Management System failure, nr. Launceston, Australia, December 2001
- American Airlines Flight 587, In-Flight Break-Up, New York City, November 2001
- Air Transat Flight 236: The Azores Glider, August 2001
- A330, landing difficulties, Melbourne, Australia, August 2001
- A320 cross-wired sidestick incident, Frankfurt am Main, March 2001
- Comair, Embraer Brasilia turboprop, Primary Flight Display information loss, 19 March 2001
- Iberia A320, hard landing, Bilbao, Spain, February 2001
- Beech 300, CFIT, Blumberg near Donaueschingen, Germany, October 2000
- Air France Concorde SST, Fire and Loss of Control, Paris, France, July 2000
- Air New Zealand Flight 60, B767, false glideslope capture, Faleola, Samoa, July 2000
- A340/A330 airprox under RVSM, North Atlantic Track E, October 2000
- Various aircraft; airprox caused by TCAS RA manoeuvring, Trasadingen, September 2000
- British Airways/Korean Air near miss, Chinese airspace, 28 June 1999
- High-Intensity Electromagnetic Radiated Fields; TWA 800, and Swissair 111 (1996 and 1998)
- Air UK Leisure A320 braking problem and runway overrun, Ibiza, May 1998
- Philippine Airlines A320 braking problem and runway overrun, Bacolod, Philippines, March 1998
- News on the China Airlines A300 Accident, Taipei, February 1998
- The Korean Air Lines B747 CFIT Accident in Guam, August 1997
- The FedEx MD11 Accident on Landing at Newark, July 1997
- The Aeroperu B757 Accident, October 1996
- The Ariane 5 Failure, June 1996
- Reports on the Martinair B767 EFIS-loss incident near Boston, MA, May 1996
- The T-43A Accident near Dubrovnik, April 1996
- The Birgen Air B757 Accident near Puerto Plata, Dominican Republic, February 1996
- The American Airlines B757 Accident in Cali, December 1995
- The A320 Maintenance Incident at Gatwick, February 1995
- The A330 Flight-Test Accident in Toulouse, June 1994
- The Tokyo-London A340 FMGS Problem, June 1994
- The A300 Crash in Nagoya, April 1994
- The A320 Accident in Warsaw, September 1993
- The Air Inter A320 CFIT Accident near Strasbourg, January 1992
- The Sydney A320/DC10 Incident, August 1991
- The Lauda Air B767 Accident, May 1991
- British Midland B737-400 at Kegworth, January 1989
- A 1985 B747 Upset Incident, February 1985
- The Eastern Airlines L1011 Common Mode Engine Failure, May 1983
- A Space Shuttle Control Incident, 1981
- The American Airlines DC10 Takeoff Accident in Chicago, May 1979
Kaynaklar kısmında da verdim ama arabalar ile ilgili kazalara da aşağıdaki bağlantıdan ulaşabilirsiniz:
https://betterembsw.blogspot.com/2018/09/potentially-deadly-automotive-software.html
Ara sıra buradaki kaynaklara bir göz atmakta fayda va diye düşünüyorum. Ufak hataların ne tür sonuçlara sebep olduğunu görmek, bizleri yazılımlarımız geliştiriken daha dikkatli olmaya teşvik edecektir. Bu arada, tam anlamıyla yukarıdaki listelere konumlandıramadığım ama burada da vermeden geçmek istemediğim kaynakları da aşağıdaki bölüme ekliyorum. Özellikle, emniyet konusunda çalışacak arkadaşlar için de faydalı kaynakların olduğunu söyleyebilirim.
Bir sonraki yazımda görüşmek üzere kendinize iyi bakın sevgili yazılımperver dostlarım, sağlıkla kalın.
Kaynaklar
- Benzeri kazaların, oluştuğu alanlara göre gruplandırılmış hali => https://en.wikipedia.org/wiki/List_of_software_bugs
- Barr group case study webinar video: Therac 25, Ariane Flight 501, Patriot Missile, Mars Climate Orbiter Webinar video:
- Gömülü yazılım geliştirme, emniyet, güvenlik ve kod kalitesi ile ilgili ders sayfası
- Emniyet ile ilgili düzenlenen konferanslar: SafeComp annual conferences
- Safety Critical Systems Club
- Engineering a Safer World kitabı (Leveson; Bedava PDF halini indirmek için)
- Emniyetli sistem ve yazılımlar geliştirmeye ilişkin bazı sayfalar:
- Better Embedded System Software Blog, bu sayfada özellikle emniyet kritik yazılım geliştirme ile ilgili çok güzel makaleler var ve ayrıca arabalar ile ilgili bir takım kazaların listelendiği bir makale 😉
- Safe Autonomy Blog, isminden de anlaşılacağı üzere daha çok otonom araçlar ve benzeri konulara odaklanmış bir sayfa,
- Bilgisayar ve benzeri sistemlerin oluşturduğu risklere ilişkin dergi serisi: RISKS Digest