Runtuhnya sistem kendali lalu lintas udara Inggris
(jameshaydon.github.io)- Pada 28 Agustus 2023, gangguan pada FPRSA-R milik operator kendali lalu lintas udara Inggris NATS menyebabkan lebih dari 2.000 penerbangan dibatalkan, dengan biaya diperkirakan melebihi 100 juta pound
- Rencana penerbangan yang memicu kekacauan adalah rencana yang valid dan telah diterima oleh Eurocontrol IFPS, sementara sistem NATS mencoba mencocokkan data ADEXP dan rute ICAO4444 untuk mengekstrak segmen wilayah udara Inggris
- Penyebab langsungnya adalah dua waypoint yang berbeda secara geografis memiliki identifier yang sama, sehingga FPRSA-R salah mencocokkan identifier duplikat sebagai titik keluar dan gagal membentuk segmen Inggris yang valid
- Sistem utama dan sistem cadangan memproses rencana penerbangan yang sama dengan logika yang sama, lalu masing-masing memunculkan critical exception dan masuk ke maintenance mode dalam 20 detik, sehingga pemrosesan otomatis berhenti
- Pesawat tetap dikendalikan dengan aman, tetapi mode kegagalan yang membuat satu rencana penerbangan menghentikan seluruh sistem pemrosesan otomatis, kurangnya pengujian, dan prosedur pemulihan yang bergantung pada log tingkat rendah tetap menjadi masalah
Skala gangguan NATS pada 28 Agustus 2023
- Operator kendali lalu lintas udara Inggris NATS mengalami gangguan teknis besar pada 28 Agustus 2023
- Menurut BBC, lebih dari 2.000 penerbangan dibatalkan, dengan biaya diperkirakan melebihi 100 juta pound
- Gangguan ini kemungkinan memengaruhi ratusan ribu orang
- Laporan media awal membahas kemungkinan “rencana penerbangan yang salah” atau “kesalahan maskapai Prancis”, tetapi rencana penerbangan yang menyebabkan masalah sebenarnya adalah rencana penerbangan yang mematuhi ICAO4444 dan telah diterima oleh Eurocontrol IFPS
- Penerbangan sebenarnya yang kemudian diidentifikasi sebagai pemicu gangguan adalah French Bee FBU731, penerbangan dari LAX/KLAX ke ORY/LFPO
Alur rencana penerbangan hingga mencapai NATS
- Maskapai mengirimkan rencana penerbangan ke IFPS milik Eurocontrol
- Jika IFPS menerima rencana penerbangan, pesawat dapat lepas landas setelah mendapat persetujuan ATC bandara keberangkatan
- Pada tahap ini tidak diperlukan input dari NATS
- IFPS meneruskan rencana penerbangan ke penyedia layanan navigasi udara terkait
- NATS harus menerima rencana penerbangan setidaknya 4 jam sebelum pesawat memasuki wilayah udara Inggris
- Jeda 4 jam ini berfungsi sebagai buffer untuk menyelesaikan masalah pemrosesan
- Dalam operasi En-route NATS di Swanwick Centre, data diteruskan ke FPRSA-R
- FPRSA-R mengubah data format ADEXP yang diterima dari IFPS menjadi format yang kompatibel dengan UK National Airspace System, yaitu NAS
- NAS adalah sistem pemrosesan data penerbangan yang memuat informasi wilayah udara dan rute terkait
Perbedaan antara ICAO4444 dan ADEXP
- Rencana penerbangan ICAO4444 adalah format yang dapat dibaca mesin dan, bila perlu, juga dapat dibaca manusia
- Bagian rute mencakup kecepatan, ketinggian, waypoint, nama rute, dan penanda penerbangan langsung seperti
DCT - Misalnya
N0440berarti 440 knot, danF310berarti Flight Level 310
- Bagian rute mencakup kecepatan, ketinggian, waypoint, nama rute, dan penanda penerbangan langsung seperti
- IFPS mengonversi rencana penerbangan ICAO4444 ke format ADEXP lalu meneruskannya
- ADEXP memuat rencana penerbangan ICAO4444 asli beserta waypoint geografis tambahan untuk rute wilayah Eropa
- Untuk penerbangan yang tidak mendarat di Inggris tetapi melintas wilayah udara Inggris, waypoint yang dibutuhkan untuk sisa perjalanan di luar Inggris juga bisa disertakan
RTEPTSdalam ADEXP memuat ketinggian dan perkiraan waktu lintas setiap waypoint secara lebih rinci- Rute ICAO mungkin memiliki 9 waypoint, tetapi daftar ekspansi ADEXP dapat memuat 21 waypoint
- Titik berangkat dan tujuan pada rute ICAO berada di field terpisah, sehingga tidak disertakan lagi dalam daftar rute
Waypoint duplikat yang menyebabkan gangguan
- Daftar waypoint ADEXP yang bermasalah memuat dua waypoint yang berbeda secara geografis tetapi memiliki designator yang sama
- ICAO dan organisasi lain telah berupaya menghapus nama waypoint yang tidak unik, tetapi nama duplikat masih ada di seluruh dunia
- Standar terbaru menetapkan bahwa waypoint dengan identifier yang sama harus terpisah jauh secara geografis
- Dalam insiden ini, kedua waypoint sama-sama berada di luar Inggris, satu di awal rute dan satu lagi di akhir rute, dengan jarak sekitar 4.000 mil laut
- Pada rencana penerbangan yang diperluas untuk penerbangan FBU731 yang benar-benar teridentifikasi, waypoint DVL muncul dua kali
- Satu adalah Devil’s Lake di Wisconsin, Amerika Serikat
- Yang lain adalah Deauville di Normandy, Prancis
- Yang terakhir dijelaskan muncul pada bagian akhir penerbangan selama proses ekspansi rute
UN859
Prosedur pemrosesan FPRSA-R dan titik kegagalan
- FPRSA-R mencari titik masuk wilayah udara Inggris dari awal data waypoint ADEXP
- Lalu sistem mencari titik keluar wilayah udara Inggris, kemudian mencoba menemukan segmen yang sesuai dalam bagian ICAO4444
- Rute ICAO tidak wajib memuat titik keluar wilayah udara
- Perangkat lunak dirancang agar jika titik keluar tidak ada di rute ICAO, sistem akan mencari lagi menggunakan titik terdekat berikutnya dari file ADEXP
- Dalam insiden ini, perangkat lunak menelusuri waypoint berikutnya dalam ADEXP dan menemukan identifier duplikat yang memang ada di rute ICAO
- Namun identifier itu bukan waypoint nyata setelah keluar dari wilayah udara Inggris, melainkan waypoint geografis lain yang berada di awal rute
- Akibatnya urutan atau segmen titik masuk dan titik keluar menjadi tidak valid, sehingga segmen ICAO yang sesuai dengan wilayah udara Inggris tidak dapat diekstrak
- Laporan NATS menyebut titik ini sebagai root cause insiden dan menyimpulkan bahwa kontribusi terkait siber dapat dikesampingkan
Mengapa sistem utama dan sistem cadangan berhenti bersamaan
- Perangkat lunak yang kritis bagi keselamatan dirancang untuk berpindah ke kondisi yang memerlukan intervensi manual bila tidak dapat melanjutkan dengan aman
- Sistem utama FPRSA-R menilai bahwa sistem tidak dapat menjamin data rencana penerbangan yang benar, lalu memunculkan critical exception
- Menulis file log ke system log
- Masuk ke maintenance mode
- Sistem C&M mendeteksi bahwa sistem utama tidak lagi tersedia
- Sistem cadangan dirancang untuk mengambil alih pemrosesan saat sistem utama gagal
- Berada pada hardware terpisah, catu daya terpisah, dan data feed terpisah
- Namun sistem ini menerapkan logika yang sama pada rencana penerbangan yang sama dan menghasilkan critical exception yang sama
- Dari penerimaan pesan ADEXP hingga sistem utama dan sistem cadangan sama-sama masuk maintenance mode, waktu yang dibutuhkan kurang dari 20 detik
- Pada pukul 08:32 pemrosesan otomatis rencana penerbangan berhenti, dan setelah itu diperlukan input manual rencana penerbangan dalam buffer waktu 4 jam tersebut
Prosedur pemulihan dan dampak operasional
- Tim dukungan 1st Line menyadari gangguan melalui sistem C&M khusus, sistem C&M pusat, dan umpan balik dari tim operasi
- Respons awal adalah prosedur pemulihan standar berupa restart subsistem dari sistem C&M pusat
- Beberapa upaya pemulihan gagal
- Tim engineering 2nd Line dikerahkan untuk mendukung engineer di lokasi melalui video link jarak jauh
- Setelah 1st Line dan 2nd Line gagal memulihkan layanan atau mengidentifikasi penyebab yang tepat, tim Technical Design dan dukungan dari vendor subsistem diminta membantu
- Vendor mengidentifikasi rencana penerbangan yang tampaknya menyebabkan gangguan melalui analisis log perangkat lunak tingkat rendah
- Setelah memahami rencana penerbangan tersebut, vendor memberikan prosedur yang tepat untuk memulihkan sistem dengan cara yang terkendali dan aman
- Saat terjadi gangguan, prosedur input manual dan koordinasi manual antar sektor memang tersedia, tetapi beralih ke prosedur manual berarti pembatasan ATC harus diterapkan untuk mengurangi arus lalu lintas Inggris
Frequentis AG dan FPRSA-R
- Subsistem FPRSA telah lama ada di NATS, dan pada 2018 sistem lama diganti dengan hardware dan software baru dari Frequentis AG
- Frequentis AG adalah perusahaan Austria dan salah satu pemasok sistem kendali lalu lintas udara
- Produk ATC vendor tersebut diketahui beroperasi di sekitar 150 negara, dan dianggap memiliki posisi global dalam bidang manajemen informasi aeronautika dan sistem pemrosesan pesan
- Pada halaman lowongan Frequentis AG,
Ada,C++,Java,Pythonmuncul terkait sistem kendali lalu lintas udara, danJavatampak paling sering muncul
Bug perangkat lunak dan masalah pengujian
- FPRSA-R gagal mengekstrak segmen ICAO yang sesuai dengan wilayah udara Inggris dari rencana penerbangan valid yang telah diterima IFPS
- Identifier waypoint tidak unik secara global, dan ini adalah masalah yang sudah diketahui
- Jika waypoint duplikat terpisah sangat jauh, rencana penerbangan normal masih bisa tetap tidak ambigu
- Namun perangkat lunak seharusnya menangani kondisi ini dengan andal
- NATS menyatakan dapat meninjau, melalui pemerintah Inggris, cara menghapus sejumlah kecil nama waypoint duplikat dalam dataset global yang dikelola ICAO dan terkait dengan insiden ini
- CEO NATS Martin Rolfe mengatakan kepada BBC bahwa insiden ini memiliki kemungkinan “1 banding 15 juta”
- Ia mengatakan sistem tersebut diperkenalkan pada 2018 dan telah memproses 15 juta rencana penerbangan sejak saat itu
- Untuk sistem yang kritis bagi keselamatan, tahap pemrosesan rencana penerbangan, khususnya tahap penting seperti ekstraksi segmen Inggris, seharusnya diuji
- Pengujian yang tidak mempertimbangkan nama waypoint duplikat mungkin gagal mengungkap bug ini
- Fuzzing dengan memasukkan rencana penerbangan acak dalam jumlah besar mungkin dapat membantu menemukan input yang membuat sistem masuk ke mode kegagalan yang buruk
Masalah pada mode kegagalan
- Satu rencana penerbangan menghentikan seluruh sistem pemrosesan otomatis FPRSA-R, sehingga tidak ada rencana penerbangan apa pun yang dapat diproses secara otomatis
- Mode kegagalan yang lebih baik adalah mengirim satu rencana penerbangan yang bermasalah ke antrean lambat terpisah agar diproses manual oleh manusia
- NATS menyatakan bahwa sebagai langkah yang sudah berjalan atau telah selesai, mereka akan menambahkan filter pesan tertentu pada aliran data antara IFPS dan FPRSA-R untuk menyaring rencana penerbangan yang sesuai dengan kondisi penyebab insiden
- Saat FPRSA-R berhenti, rencana penerbangan terkait baru dapat diidentifikasi dari log perangkat lunak tingkat rendah
- Jika kesalahan pemrosesan rencana penerbangan tertentu dalam sistem pemrosesan rencana penerbangan menghentikan seluruh sistem, akan lebih tepat bila peringatan yang menyertakan rencana penerbangan tersebut langsung dikirim ke tim pemantauan
- NATS menyatakan telah menyiapkan panduan operasional agar FPRSA-R dapat dipulihkan dengan cepat jika situasi yang sama terulang, dan operator teknis telah dilatih untuk menjalankan prosedur baru
- Pemantauan yang diperkuat dan tambahan personel engineering spesialis juga akan mengawasi operasi
Kemungkinan verifikasi formal
- Tidak ada indikasi yang jelas bahwa verifikasi formal digunakan pada tahap dan sistem yang terlibat dalam insiden ini, dan laporan juga tidak menyebutkannya
- Verifikasi formal atau model checking mungkin dapat membantu mengurangi bug jenis ini
- Namun verifikasi formal end-to-end untuk sistem berskala besar masih berada pada tahap awal, dan bahkan bila sebagian verifikasi formal digunakan, kemungkinan kode cacat masuk ke lingkungan operasional tetap ada
- Hasil investigasi akhir masih diperlukan untuk mengetahui lebih jauh metode verifikasi apa yang sebenarnya digunakan
Keselamatan dan laporan terbuka
- Pesawat di langit Inggris tetap aman sepanjang insiden
- Pengendali lalu lintas udara yang berpengalaman memantau pesawat melalui rencana penerbangan yang diketahui, radio, radar, dan pengamatan visual
- Hasilnya bukan risiko terhadap nyawa, melainkan situasi di mana jauh lebih sedikit penerbangan dapat lepas landas atau harus memutar untuk menghindari wilayah udara Inggris
- NATS mengambil langkah pengurangan jumlah penerbangan untuk menjaga keselamatan
- Laporan yang dipublikasikan cukup transparan dan rinci, dan pelaporan seperti ini penting untuk infrastruktur kritis
- Michael O’Leary dari Ryanair mengkritik laporan tersebut sebagai “rubbish” dan mengatakan laporan itu mengecilkan dampaknya terhadap industri penerbangan, tetapi ada juga penilaian bahwa cakupan laporan awal itu memang bukan untuk menganalisis sejauh mana kegagalan NATS
Arah implementasi yang lebih tangguh
- Masalahnya adalah menangani dua urutan waypoint
- ADEXP: daftar waypoint lengkap
- ICAO: subsekuens dari waypoint ADEXP
- Karena rencana ICAO tidak wajib memuat titik masuk/keluar wilayah udara, mencari segmen kontinu terkecil dalam ICAO yang sesuai dengan wilayah udara Inggris bukanlah tugas sederhana
- Masalah algoritme yang keliru adalah manipulasi pointer yang merujuk sekaligus ke data ICAO dan data ADEXP, sementara invariant yang tidak jelas dibiarkan berada di luar kode
- Pendekatan yang diusulkan adalah terlebih dahulu merekonsiliasi data ICAO dan ADEXP ke dalam satu struktur rencana penerbangan Combined, lalu mengekstrak segmen Inggris setelahnya
- Menghitung semua reconciliation yang mungkin untuk mendeteksi kasus ambigu
- Jika reconciliation berjumlah 0, berarti ICAO dan ADEXP tidak dapat dicocokkan
- Jika ada lebih dari satu, berarti ambigu dan dapat dijadikan target pemrosesan manual
- Implementasi contoh dalam Haskell secara eksplisit menangani error
NonUkPlan,CannotReconcileIcaoAdexp,AmbiguousReconciliationsOfIcaoAdexp - Dalam contoh tersebut, meskipun daftar ADEXP memiliki identifier duplikat
Q, sistem tetap mengembalikan segmen Inggris yang benar jika data ICAO dan ADEXP dapat dicocokkan tanpa ambigu - Kode lengkap tersedia di uk-portion-of-ICAO
1 komentar
Opini Hacker News
Intinya, mereka lupa memasukkan batasan cakupan yang terpisah secara geografis dalam kueri rencana penerbangan. Dulu saat membuat sistem navigasi penerbangan, saya sudah tahu bug ini, pernah melihatnya langsung, dan pernah mengikuti spesifikasi yang meminta penambahan geofence untuk menghindari bug ini
Bagian “sistem cadangan menerapkan logika yang sama pada rencana penerbangan dan menghasilkan hasil yang sama” itulah masalahnya. Dalam perangkat lunak, sistem cadangan seharusnya memakai logika yang berbeda
Dulu saat saya menangani sistem trim stabilizer 757 di Boeing, ada dua komputer avionik yang terhubung ke kabel yang menggerakkan trim, dan keduanya tersambung melalui komparator. Jika kedua kotak itu tidak sepakat, keduanya kehilangan otoritas
Kedua kotak itu dirancang dengan algoritme berbeda, bahasa pemrograman berbeda, CPU berbeda, dan kode dari tim berbeda yang dipisahkan firewall, dengan tujuan agar bug di satu sisi tidak merusak sisi lain dengan cara yang sama
Sistem kendali lalu lintas udara setidaknya harus berupa 2oo3[1], yaitu struktur di mana 2 dari 3 sistem yang dikembangkan secara independen harus selalu sepakat. Dengan begitu, meski satu sistem gagal, dua lainnya tetap beroperasi dan tidak memengaruhi ketersediaan industri penerbangan
Menjadikan manusia sebagai cadangan tidak mungkin karena kebutuhan personel dan kompleksitas. Sistem kendali lalu lintas udara harus mampu menyediakan layanan separasi dalam kondisi IFR[2] dan CVFR[3]
[1] https://en.wikipedia.org/wiki/Triple_modular_redundancy
[2] https://en.wikipedia.org/wiki/Instrument_flight_rules#Separa...
[3] https://en.wikipedia.org/wiki/Visual_flight_rules#Controlled...
J. Gall
Saya ingat pernah ada masalah lain di NATS yang menghasilkan efek yang sama. Sistem utama tumbang lalu dialihkan ke sistem sekunder, tetapi sistem sekunder juga tumbang karena alasan yang persis sama
Failover sepertinya hanya boleh dilakukan ketika diketahui bahwa masalahnya ada pada sistem utama itu sendiri, bukan pada perangkat lunaknya. Cara yang sekadar beralih begitu saja hanya memperkuat kesan bahwa tidak cukup informasi yang diekspos untuk menilai apa yang sebenarnya harus dilakukan
Bagian yang lebih membuat tidak nyaman adalah tidak adanya metode seperti “ValidateFlightPlan”, sehingga jika tidak bisa di-parse karena alasan apa pun, sistem melempar error, dan tidak ada jalur untuk menangani error itu dengan sangat sederhana. Saya jadi bertanya-tanya, adakah programmer yang melihat pemroses input eksternal tanpa berpikir, “kalau input buruk yang merusak datang, apa yang harus dilakukan?”
Fitur keselamatan yang sebenarnya adalah jeda waktu 4 jam sebelum pemrosesan manual diperlukan
Dalam penerbangan, kontrol keselamatan inti lebih dekat ke “apa yang harus dilakukan jika ini rusak karena alasan apa pun” daripada “bagaimana caranya agar ini tidak rusak sejak awal”
Gaya pemrogramannya sangat imperatif, dan dari penjelasannya saja terdengar seolah prosedurnya menangani representasi teks dari rencana penerbangan secara langsung, bukan struktur data yang di-parse dari file teks. Jika memang begitu, itu cukup mengkhawatirkan, meski bisa juga hanya karena cara penjelasannya
Jika penjelasan ini akurat, saya tidak akan heran kalau strukturnya hanya menjalankan regex atau pencocokan substring pada teks, tanpa class, object, atau struktur data. Kita juga harus mempertimbangkan kemungkinan bahwa ini adalah kode C berusia puluhan tahun yang menjadi tumpuan seluruh penerbangan Inggris dan tidak bisa ditulis ulang atau diganti
Sistem utama gagal karena integer overflow, dan sistem sekunder yang identik juga ikut overflow. Sudut serang meningkat, booster terlepas, lalu roket meledak
[1] https://en.wikipedia.org/wiki/Ariane_flight_V88
Saya tidak mengerti mengapa hanya rencana penerbangan yang gagal yang dimasukkan ke antrean tinjauan manusia, sementara penerbangan lainnya tidak bisa terus diproses. Fakta bahwa “fitur” itu tidak ada adalah bagian yang paling sulit dipahami
Jika terjadi kesalahan “sama sekali tidak boleh terjadi”, sistem tidak bisa tahu apa yang salah, serta seberapa besar dan luas dampaknya. Seperti kasus ini, mungkin saja aman untuk terus berjalan, tetapi bisa juga ada bug baru yang fatal di perangkat lunak yang diam-diam mencemari semua rencana penerbangan lain dan menewaskan orang. Jika tidak tahu apakah aman untuk lanjut, sistem harus berhenti
Jika pesawat tertentu yang bermasalah bisa dicegah lepas landas, menjalankan sistem terus mungkin tidak apa-apa, tetapi ceritanya berbeda jika pesawat itu sudah mengudara
Penilaian “ada pesawat yang sedang dalam rute menuju wilayah udara Inggris, tetapi kita tidak tahu kapan dan di mana akan masuk. Hentikan rencana penerbangan tambahan sampai posisi pesawat itu diketahui” tidak sepenuhnya tidak masuk akal
Jika rencana penerbangannya benar-benar tidak bisa diproses, solusi seperti mengalihkan pesawat tersebut untuk mendarat sebelum mencapai Inggris mungkin masuk akal, tetapi hal seperti itu pada akhirnya harus menunggu intervensi manual
Semua sistem bisa mengalami malfungsi, jadi yang penting adalah malfungsi dengan cara yang baik dan para penanggung jawab siap menghadapi situasi itu
Satu rencana penerbangan menimbulkan masalah, lalu seluruh sistem FPRSA-R mati sehingga tidak ada rencana penerbangan yang diproses sama sekali. Jika satu rencana penerbangan bermasalah, seharusnya dipindahkan ke antrean lambat terpisah untuk ditangani manual oleh manusia. NATS juga mengakui dalam “tindakan yang sudah dilakukan atau sedang berjalan” bahwa mereka akan menambahkan filter pesan pada aliran data antara IFPS dan FPRSA-R untuk menyaring rencana penerbangan dengan kondisi tersebut
Pernyataan bahwa ini seharusnya ditangani sebagai kesalahan yang sudah dikenal memang valid, tetapi secara luas itu mirip dengan mengatakan “seharusnya menulis kode tanpa bug”. Bahkan jika sudah diparsing menjadi struktur, ini bisa seperti kode yang berasumsi ada kunci pilihan lalu tiba-tiba memunculkan KeyError
Analisis pascainsiden dan perbaikan untuk hal seperti ini harus berangkat dari asumsi bahwa kesalahan tidak diketahui yang tak tertangani dan tak bisa diprediksi suatu saat akan terjadi, lalu membahas bagaimana menanganinya dengan lebih baik saat itu terjadi. Solusi untuk bug adalah memperbaiki bug, tetapi penyebab gangguan besar ini adalah rencana pemulihan bencana yang tidak bisa dijalankan dalam waktu yang wajar. Apa pun praktik, gaya, bahasa, atau alat pemrograman yang dipakai, insiden pada tingkat serupa dengan probabilitas 1 akan terjadi lagi suatu saat, bahkan pada developer terbaik sekalipun
Jika dari sudut pandang kode hal itu tampak seperti kegagalan integritas pada basis data waypoint navigasi yang mendasarinya, keputusan untuk menghentikan pemrosesan rencana penerbangan jauh lebih bisa dipahami
Misalnya, jika kode bertanya kepada penyimpanan waypoint dan rute, “carikan waypoint pada rute ini yang keluar dari wilayah udara Inggris”, lalu menemukan segmen rute yang berisi waypoint itu, kemudian menegaskan bahwa segmen tersebut melewati wilayah udara Inggris tetapi penegasan itu gagal, maka ini bisa tampak bukan sebagai masalah rencana penerbangan, melainkan sebagai asumsi yang tertanam dalam data rute yang telah rusak
Dalam arti tertentu, ini sebenarnya juga bisa jadi bug fatal. Insiden ini menunjukkan bahwa asumsi yang dibuat algoritma terhadap data ternyata salah dan berpotensi mengembalikan jawaban yang keliru
Tulisan terkait
Sistem ATC Inggris tertipu karena nama waypoint yang kebetulan sama - https://news.ycombinator.com/item?id=37430384 - September 2023, 64 komentar
Data rencana penerbangan yang buruk menyebabkan gangguan ATC Inggris - https://news.ycombinator.com/item?id=37402766 - September 2023, 20 komentar
Laporan insiden ATC NATS mengungkap akar penyebab dan solusinya secara rinci - https://news.ycombinator.com/item?id=37401864 - September 2023, 19 komentar
Gangguan jaringan ATC Inggris - https://news.ycombinator.com/item?id=37292406 - Agustus 2023, 23 komentar
Fakta bahwa mereka menyalahkan rencana penerbangan Prancis yang sudah diterima Eurocontrol adalah bukti bahwa mereka tidak benar-benar memahami cara kerja perangkat lunaknya. Dan perusahaan Austria itu juga harus memikul sebagian tanggung jawab atas kurangnya pengujian intensif
Tulisan yang bagus. Setelah dibaca, menurut saya intinya begini
Nama waypoint yang dipakai di seluruh dunia tidak unik, dan sebagai semacam tambalan untuk menghindari kebingungan, standar terbaru menyarankan agar identifier yang sama ditempatkan cukup jauh secara geografis. Meski begitu, dalam satu rute penerbangan, nama waypoint yang sama masih bisa merujuk ke lokasi yang berbeda
Perangkat lunaknya tidak memperhitungkan kemungkinan itu, perhitungan rute gagal, lalu melempar “fatal exception” dan masuk ke “maintenance mode”. Dengan kata lain, mati
Sistem cadangan mengambil alih, tetapi dengan data yang sama terkena bug yang sama dan akhirnya juga mati; staf dukungan pun kerepotan. Pada akhirnya, baru setelah menghubungi pemasok perangkat lunak, mereka menemukan log level rendah yang mengungkap penyebabnya
Teman saya, pensiunan pilot Angkatan Udara, lulus dari Cranfield University, salah satu institusi pascasarjana teknik dirgantara terkemuka di Inggris yang juga memiliki bandara sendiri untuk pendidikan dan riset[1]. Teman itu bilang ia belajar sistem operasi di Cranfield, dan sekarang saya baru mengerti alasannya
Dari komentar lain, tampaknya standar namespace sebenarnya sudah ada, tetapi NATS/ATC tidak menggunakannya. Semoga kejadian ini membuat mereka akhirnya mulai memakainya. Komentar teratas menyebut bug geofencing, tetapi kalau NATS/ATC memakai namespace yang benar, geofencing kemungkinan besar tidak diperlukan sejak awal
[1] Cranfield University:
https://en.wikipedia.org/wiki/Cranfield_University
“Dari penjelasannya saja, prosedurnya terdengar seperti langsung menangani representasi teks dari flight plan, bukan struktur data yang diparse dari file teks. Kalau memang begitu, itu cukup mengkhawatirkan, meski bisa juga hanya karena cara penjelasannya”
Dalam pekerjaan di industri penerbangan, cara seperti ini umum. Kalau Anda bertanya kepada programmer tentang domain model atau parsing, mereka sering hanya menatap kosong. Mereka suka kode validasi, dan kalau validasi gagal, mereka suka langsung menyerah. Semuanya pipeline data bodoh, dan sama sekali tidak ada kode yang memodelkan aktivitas yang terjadi di dunia nyata
Di sistem mana pun tidak ada tipe “flight plan” yang punya perilaku, atau kumpulan tipe waypoint. Kalaupun ada tipe, itu adalah struct string dari sudut pandang C, dan setiap kali anggota struct itu diakses, ia diparse lagi—bukan sekali, melainkan setiap kali. Seperti yang disebutkan dalam tulisan, “gaya pemrogramannya tampak sangat imperatif” memang benar
Mati karena input buruk memang salah, tetapi mencoba menafsirkan data yang belum divalidasi tanpa spesifikasi mudah memicu ketidaksesuaian pemahaman di kemudian hari, masalah kompatibilitas, dan kondisi batas yang tak terduga. Tidak ada yang mau membayar untuk sistem yang menangani semua kasus yang telah diuji sepenuhnya, alat simulasi input salah, serta verifikasi formal untuk parser dan semua kode yang memakai hasil parser
Sudah banyak masalah akibat pengirim data yang tidak patuh, legacy, atau bug, serta semantik antarmuka dan kompleksitas timing. Jika mencoba menangani data yang format atau encoding-nya salah secara “pintar”, risikonya jadi lebih besar
Membuat sistem yang bekerja sesuai spesifikasi saja sudah sulit dan mahal. Variasi halus yang lebih toleran terhadap perilaku yang tidak dispesifikasikan sama saja meminta bug, atau membuat sistem yang lebih mahal dan tidak lolos kriteria harga pembelian
“Pengendalian lalu lintas udara Inggris: menyelidiki apakah kesalahan Prancis menyebabkan gangguan”
Tentu saja tidak. Ini sistem Inggris; bagaimana bisa menjadi kesalahan maskapai Prancis? Sistem seperti ini seharusnya punya arsitektur tahan-kesalahan dengan redundansi
Mungkin cukup dengan menolak satu entri yang buruk lalu terus berjalan
Itu hari yang tidak ingin saya ingat. Perjalanan ke tujuan yang biasanya hanya 2 jam memakan waktu 15 jam
Saya naik kereta, bus, lalu kereta lagi, dan 30 menit setelah saya memesan tiket, semua tiket untuk dua hari berikutnya habis terjual