$ 500 juta per baris kode atau biaya kesalahan perangkat lunak dalam ruang
Beberapa bulan yang lalu di edx.org, kursus “Pengantar Teknologi Luar Angkasa: Astronautika dan Penerbangan Berawak (Berakhir pada Teknik Dirgantara: Astronautika dan Human Spaceflight)” berakhir. Kursus ini diajarkan oleh seorang astronot Amerika, saat ini profesor MIT - Jeffrey Alan Hoffman. Seperti namanya, kursus ini cukup sederhana dan umum, namun bagi saya itu agak menarik dan informatif.Di satu bagian saja, masalah keamanan dibahas, dan di antaranya, tentang keamanan perangkat lunak. Prof. Hoffman memberikan contoh menarik masalah dengan perangkat lunak untuk penerbangan dan astronotika. Dalam artikel ini, saya akan melihat lebih dekat contoh ruang angkasa dari kuliah Hoffmann.Pendarat kutub Mars
Mars Polar Lander (MPL) Sebuah pesawat ruang angkasa 290 kilogram diluncurkan oleh NASA pada 3 Januari 1999 untuk mempelajari tanah dan iklim di sekitar Kutub Selatan Mars. Pada 3 Desember 1999, selama pendaratan, pusat kendali tidak dapat melanjutkan komunikasi dengan perangkat.
MPL di NASA LabDengan tiang pendaratan terbuka dan panel surya, MPL tingginya 1,06 m dan memiliki ukuran melintang 3,6 m. Tubuh dibuat berdasarkan struktur aluminium honeycomb yang diikat dengan panel grafit-epoksi. Saat mendarat, tiga penyangga aluminium dibuka dari posisi transportasi dan memadamkan energi pendaratan dengan bantuan sisipan aluminium yang dapat dirusak yang dibuat dalam bentuk sarang lebah.Kursus pendaratan yang direncanakan
MPL memasuki atmosfer Mars pada ketinggian lebih dari 100 km dengan kecepatan ~ 7 km / s. Dalam 3 menit perangkat turun ke ketinggian 8,8 km dan melambat ke kecepatan 0,5 km / s, setelah itu memberikan sinyal untuk membuka parasut, yang mengikuti segera setelah perisai panas dipisahkan (perisai panas). Ketika kecepatan perangkat dikurangi menjadi 85 m / s dengan parasut, radar mulai bekerja, yang memantau fitur permukaan untuk menentukan kemungkinan lokasi pendaratan.
Diagram tahap penerbangan MPL1 menit setelah parasut dibuka pada ketinggian 1,3 km, ketika kecepatan turun 80 m / s, kendaraan turun dipisahkan dari casing luar dengan parasut (backshell) dan mulai mendarat di mesin rem. Waktu penurunan yang diharapkan, dengan mesin berjalan, adalah sekitar 1 menit, di mana waktu perangkat menurun hingga ketinggian 12 m. Kemudian mesin mati dan perangkat membuat penurunan yang direncanakan ke permukaan. 5 menit setelah menyentuh permukaan, perangkat mulai menyebarkan panel surya dan orientasi antena, yang akan membuat koneksi dengan Bumi. Kemudian mulailah sesi transfer data, menandakan bahwa pendaratan berhasil.Jalannya acara
Pada 3 Desember, pendarat dilepas dari panggung pelayaran dan, sampai pendaratan selesai, beralih ke mode diam radio yang direncanakan. Pada pukul 20:04:00 UTC, 6 menit sebelum memasuki atmosfir, operasi mesin yang diprogram memperbaiki posisi peralatan, mengarahkan layar panas. MPL memasuki atmosfer Mars pada kecepatan 6,9 km / dt pada 20:10:00 UTC. Dimulainya kembali komunikasi diharapkan pada 20:39:00 UTC setelah mendarat. Tetapi koneksi tidak pernah dibuat, dan perangkat dinyatakan hilang.Alasan pasti untuk hilangnya komunikasi tidak diketahui, tetapi laporan investigasi kecelakaan berisi kesimpulan bahwa kemungkinan penyebab kecelakaan adalah kesalahan perangkat lunak yang salah menghitung getaran selama pembukaan dukungan sebagai getaran dari pendaratan. Akibatnya, perangkat mematikan mesin rem pada ketinggian 40 m, meskipun faktanya diketahui bahwa pengungkapan pendukung dapat menyebabkan positif palsu. Tugas teknis untuk perangkat lunak tidak menyediakan untuk kasus ini.Kutipan dari laporan:“Sensor magnetik yang dipasang pada masing-masing dari tiga pendaratan pendaratan berfungsi untuk menentukan momen kontak dengan tanah dan mematikan mesin pendaratan. Data yang diperoleh selama beberapa tes menunjukkan bahwa di sensor pendaratan (sensor Hall) alarm palsu terjadi selama pengungkapan dukungan (pada saat ini perangkat turun dengan parasut). Logika program menerima data dari sensor sebagai sinyal pickup jika perjalanan terjadi dalam dua pembacaan berurutan. Pengujian telah menunjukkan bahwa sinyal jangka pendek yang terjadi ketika dukungan dibuka sebenarnya cukup lama untuk menyebabkan false positive. Hampir selalu, salah satu dari tiga pilar menghasilkan sinyal palsu, yang oleh program dianggap sebagai sinyal pendaratan.Perangkat lunak, yang seharusnya mengabaikan respons sensor sampai saat algoritma pendeteksian sentuhan darat diaktifkan, diatur secara tidak benar, dan tanggapan palsu disimpan dalam sistem. Segera setelah algoritma untuk menentukan sentuhan bumi dinyalakan pada ketinggian 40 m, program segera mengeluarkan perintah untuk mematikan mesin pendaratan.Pada ketinggian 40 m, laju penurunan kendaraan sekitar 13 m / s (47 km / jam), yang, tanpa dorongan mesin rem, meningkat menjadi 22 m / s (80 km / jam) di dekat permukaan di bawah pengaruh gravitasi Mars, perkiraan kecepatan penurunan adalah 2,4 m / s (9 km / jam). Pada kecepatan tabrakan dengan permukaan, perangkat tidak bisa bertahan. "Jika Anda melihat algoritme program, Anda dapat melihat bahwa satu baris pengaturan ulang variabel IndicatorState ke FALSE awal dapat menghemat perangkat, yang menelan biaya NASA $ 328 juta.Diagram alir perangkat lunak Ariane 5
Pada tanggal 4 Juni 1996, peluncuran pertama kendaraan peluncuran Ariane 5 baru yang dikembangkan oleh European Space Agency (ESA) dibuat. Peluncuran berakhir dengan kegagalan - roket jatuh pada detik ke-39 penerbangan karena operasi yang salah dari perangkat lunak on-board.
Peluncuran Ariane 5Ariane 5 pertama adalah kendaraan peluncuran Eropa keluarga Ariane. Peluncuran terjadi di Kourou Cosmodrome di Guyana Prancis. Pengembangan Ariane 5 memakan waktu 10 tahun, biaya $ 7 miliar dan dimaksudkan untuk menggantikan kendaraan peluncuran Ariane 4.Diluncurkan pada tahun 1996, kendaraan peluncuran dengan massa 720 ton akan meluncurkan empat satelit dengan massa masing-masing 1,2 ton. Berputar masing-masing dalam orbitnya, satelit ini membentuk tetrahedron, dan bekerja dalam kelompok, itu adalah proyek Cluster Eropa untuk mempelajari medan magnet Bumi (kemudian pada tahun 2000, empat satelit baru untuk program Cluster-II berhasil dimasukkan ke orbit oleh dua kendaraan peluncuran Soyuz) .Jalannya acara
Sebelum menggambarkan kejadian tersebut, perlu dicatat bahwa desain sistem navigasi (Inertial Reference System - SRI) untuk Ariane 5 hampir identik dengan desain untuk Ariane 4, khususnya yang berkaitan dengan perangkat lunak.Momen mulai dilambangkan oleh H0. Operasi sebelum permulaan terjadi dalam mode normal hingga saat H0 - 7 menit, ketika pelanggaran terhadap "kriteria visibilitas" direkam. Karena itu, permulaannya ditunda selama satu jam.Pada H0 = 12:33:59 UTC, peluncuran dilakukan, yang terjadi secara normal hingga H0 + 37 detik. Pada detik-detik berikutnya, penyimpangan tajam roket dari jalur yang diberikan terjadi, dan kemudian ledakan terjadi.
Ariane 5 ledakan saat peluncuran pertamaJadi: saat ini H0 + 39 dtk. setelah peluncuran, karena beban aerodinamis yang tinggi karena melebihi "angle of attack" dari nilai kritis, akselerator peluncuran roket dipisahkan dari tahap utamanya, yang berfungsi sebagai dasar untuk dimasukkannya sistem pengapian otomatis roket.Perubahan sudut serangan terjadi karena rotasi abnormal nozel penguat bahan bakar padat, seperti penyimpangan nosel akselerator menyebabkan perintah yang dikeluarkan oleh komputer on-board berdasarkan informasi dari sistem navigasi SRI 2. Beberapa informasi ini pada waktu itu tidak benar: apa yang ditafsirkan sebagai data penerbangan sebenarnya pada kenyataannya, itu adalah informasi diagnostik komputer built-in dari sistem SRI 2. Komputer built-in SRI 2 mentransmisikan data yang salah karena ia mendiagnosis situasi abnormal dengan "menangkap" pengecualian yang dilontarkan oleh salah satu modul perangkat lunak. Pada saat yang sama, komputer terpasang tidak dapat beralih ke sistem cadangan SRI 1, karena sudah berhenti berfungsi selama siklus sebelumnya (periode 72 ms.) Untuk alasan yang sama seperti SRI 2.Pengecualian "dilempar" oleh salah satu modul perangkat lunak SRI adalah hasil dari mengubah data dari format floating-point 64-bit ke integer bertanda 16-bit, yang menyebabkan Kesalahan Operand. Terjadi kesalahan pada komponen perangkat lunak yang dirancang hanya untuk melakukan "penyesuaian" platform inersia onboard. Selain itu - kedengarannya paradoks, tetapi modul program ini memberikan hasil yang signifikan hanya sampai roket lepas dari landasan peluncuran. Setelah roket lepas landas, modul ini tidak berpengaruh pada penerbangan. Tetapi fungsi penyesuaian, sesuai dengan persyaratan yang ditetapkan untuk itu, harus bertindak selama 50 detik. setelah inisiasi "mode penerbangan". Urutan ini didasarkan pada persyaratan untuk Ariane 4, tetapi tidak perlu untuk Ariane 5.Kesalahan "Operand Error" terjadi karena kemiringan horizontal besar BH (Horizontal Bias). Nilai BH ternyata jauh lebih tinggi dari yang diharapkan, karena jalur penerbangan Ariane 5 secara signifikan berbeda dari jalur penerbangan Ariane 4. Tindakan terakhir, yang memiliki konsekuensi fatal, adalah mematikan komputer SPI bawaan - dengan demikian, seluruh sistem navigasi berhenti berfungsi. Secara teknis tidak mungkin untuk melanjutkan tindakannya. Seluruh rangkaian peristiwa ini direproduksi sepenuhnya menggunakan simulasi komputer. Hasil simulasi, serta bahan-bahan dari penelitian dan eksperimen lain, memungkinkan para ahli untuk menyimpulkan bahwa penyebab dan keadaan bencana sepenuhnya diidentifikasi.
Ariane 5 pada landasan peluncuran sebelum peluncuran yang sukses, Guyana Prancis 2002.Anda dapat menemukan beberapa opsi untuk menghilangkan bug yang mengganggu dalam perangkat lunak Ariane 5 (opsi ini tercermin dalam hasil penyelidikan), tetapi dengan satu atau lain cara, baris kode ini menelan biaya ESA $ 500 juta (Biaya roket dengan kargo).Saya juga ingin mencatat bahwa dalam laporan ini tidak ada penekanan pada ketidakberdayaan sistem cadangan di Ariane 5 dalam insiden ini, meskipun dalam kuliah oleh Prof. Hoffman kecelakaan ini disebutkan hanya dalam konteks ini. Memiliki dua sistem duplikat identik SRI 1 dan SRI 2, mungkin kita dapat melindungi diri dari masalah dengan peralatan fisik di salah satu sistem, tetapi ketika sampai pada kesalahan perangkat lunak, duplikasi seperti itu sama sekali tidak berguna. Kemudian Hoffman berbicara tentang langkah selanjutnya: menggandakan perangkat lunak, membuatnya berbeda (perusahaan berbeda, pemrogram berbeda). Tampaknya dengan struktur seperti itu, kami melindungi diri dari kesalahan, tetapi tindakan seperti itu menyulitkan keseluruhan sistem dan menciptakan lebih banyak tempat di mana kesalahan dapat terjadi, dan kasus ketiga diberikan sebagai contoh.Pesawat ulang-alik
Pada 12 April 1981, pesawat ruang angkasa Columbia yang dapat digunakan kembali di bawah program Space Shuttle melakukan uji terbang pertamanya dari cosmodrome di Cape Canaveral.
Mempersiapkan misi STS-1 - penerbangan luar angkasa pertamaJalannya acara
Pada 10 April 1981, sekitar 20 menit sebelum peluncuran yang dijadwalkan, para astronot dan personel layanan antar-jemput mencoba meluncurkan sistem kontrol penerbangan cadangan, yang menduplikasi sistem empat komputer utama, tetapi gagal. Awal dibatalkan 16 menit sebelum perkiraan waktu dan ditunda selama dua hari.Bagaimana tidak untuk mengingat komik terkenal Kebetulan sistem kontrol penerbangan cadangan BFS (Backup Flight Control System) pada komputer on-board kelima tidak dapat disinkronkan dengan sistem kontrol penerbangan primer PASS (Primary Avionics Software System), yang sudah berjalan pada empat komputer on-board lainnya. Ada bug dalam perangkat lunak - kesalahan yang sangat kecil, hampir tidak dapat dipercaya, sangat canggih dan sangat tua dalam menginisialisasi PASS.Untuk membuat shuttle tersebut dapat diandalkan, semuanya digandakan di dalamnya: sensor, elektronik, sistem kontrol, komputer, perangkat lunak, bus data, catu daya. Bahkan, untuk memenuhi konsep "kegagalan - operasional, kegagalan - aman" "FO / FS" (Gagal - Operasional, Gagal - Aman) banyak komponen digandakan 4 kali: baik secara harfiah (4 set peralatan), atau setara (sirkuit bolak-balik) mengganti satu atau lebih dari empat blok yang diperlukan).Angka empat dipilih karena alasan logis dan intuitif: prinsip FO / FS mensyaratkan bahwa setelah kegagalan pertama peralatan tetap beroperasi penuh, dan setelah kegagalan kedua memastikan pengembalian yang aman. Suara minimum membutuhkan tiga suara, jadi pada tahap awal Anda harus memiliki 4 suara sehingga Anda dapat memilih setelah satu penolakan. Pesawat ulang-alik memiliki 5 komputer on-board, empat di antaranya memiliki perangkat lunak yang sama, dan bekerja pada semua tahap kritis penerbangan. Pendekatan ini ideal jika terjadi masalah dengan komputer atau peralatan lain (menurut perhitungan, kesalahan dalam sistem tiga komputer menyebabkan hilangnya perangkat dalam tiga kasus dari satu juta, dan sistem empat komputer mengurangi kesempatan ini menjadi empat dari satu miliar), tetapi tidak berhasil, mengingat kemungkinan kritisbug fatal dalam perangkat lunak. Dengan demikian, ide perangkat lunak alternatif muncul di komputer kelima, yang akan melakukan fungsi perangkat lunak minimum pada empat yang pertama.Pengembangan perangkat lunak untuk BFS mencakup spesifikasi yang sama, bahasa pemrograman yang sama, kompiler yang sama, dan perangkat keras yang sama di mana perangkat lunak ini diinstal. Tetapi itu dikembangkan oleh organisasi yang sama sekali berbeda (Rockwell International untuk BFS dan IBM, Divisi Sistem Federal untuk PASS) dan diinstal pada sistem operasi yang berbeda. OS untuk PASS adalah asinkron dan digerakkan oleh prioritas (dengan demikian, tugas yang paling penting adalah selalu langsung diberikan kontrol atas komputer). BFS, sebaliknya, lebih mirip sistem "interval waktu" yang sepenuhnya sinkron, di mana setiap proses diberikan waktu yang diberikan untuk menyelesaikan siklusnya.Sayangnya, sistem sinkron dan asinkron kurang digabungkan. Agar BFS melakukan sinkronisasi dengan PASS, PASS harus menjadi sinkron atau meniru ini untuk proses yang disinkronkan. Proses emulasi dipastikan dengan kerugian minimal dalam pengembangan. Segera setelah komputer pertama dihidupkan dan PASS dimulai, dia mencoba menyinkronkan awal semua proses dengan data telemetri kapal. Sinkronisasi ini dilakukan dengan membaca nilai waktu dari data telemetri dan menghitung fase telemetri sesuai dengan waktu pusat.Pada hari Jumat pagi, 10 April, menjadi jelas bahwa beberapa proses dalam PASS tidak diproses dalam fase mereka: satu siklus lebih awal dari sisa proses PASS dan BFS. Dengan asumsi menerima data "tercemar", BFS, seperti yang diperlukan, benar-benar berhenti "mendengarkan" informasi dari PASS, dan karena itu tidak dapat menyinkronkan dengan PASS. Untuk BFS, data yang masuk ke loop digunakan untuk menjadi "gangguan" yang tidak seimbang.Sudah di awal sore, setelah mengumpulkan semua ahli, NASA mampu mengklarifikasi sifat masalah. Kesalahan dalam pentahapan dapat diperbaiki dengan metode kakek yang lama: jika sesuatu tidak berhasil, matikan dan nyalakan lagi.
Tetapi pendekatan ini tidak bekerja untuk pesawat ruang angkasa yang penuh dan siap diluncurkan - komputer di kapal memainkan peran penting dalam memproses informasi yang datang "dari" dan "ke" sistem persiapan peluncuran ruang.Informasi yang dikumpulkan oleh para ahli dan fakta bahwa menyalakan kembali komputer on-board pada Jumat malam memperbaiki masalah memberi manajemen NASA informasi yang cukup untuk menjadwalkan peluncuran pada hari Minggu pagi. Tetapi penyebab sebenarnya dari kesalahan itu terungkap pada Minggu malam, 8 jam setelah peluncuran.Komputer on-board menggunakan antrian timer sistem operasi sebagai jam, catatan pertama adalah waktu mulai yang diinginkan dari proses selanjutnya, ketika ratusan proses dieksekusi setiap detik, catatan pertama selalu menunjukkan waktu saat ini yang cukup akurat (selalu terburu-buru, tetapi selalu cukup akurat). Waktu yang dihasilkan selalu sama persis untuk semua komputer on-board cadangan. Ketika komputer pertama dimulai - tidak ada komputasi aktif, ini adalah satu-satunya saat ketika antrian kosong. Dan karena tidak ada komputer lain yang berfungsi, yang pertama diizinkan menggunakan arlojinya untuk menentukan waktu.Tetapi saluran itu tidak kosong seperti yang dimaksudkan. Dua tahun sebelum peluncuran, ada perubahan dalam rutin inisialisasi bus data, yang dilakukan sebelum waktu mulai dihitung. Rutin ini memasukkan nilai penundaan ke dalam antrian timer. Perubahan ini tanpa disadari: pada akhirnya, bagaimana inisialisasi bus dikaitkan dengan penentuan fase untuk telemetri. Selain itu, waktu tunda ini cukup kecil untuk entri pertama dalam antrian dekat dengan saat ini. Tapi setahun kemudian (setahun sebelum peluncuran) perubahan lain dilakukan untuk memperbaiki kemungkinan kelebihan prosesor, waktu tunda sedikit meningkat. Dan ini cukup untuk probabilitas 1/67 bahwa, ketika Anda menghidupkan komputer on-board pertama, dalam perhitungan waktu mulai Anda,menggunakan antrian timer berjalan sedikit maju, dia bisa mendapatkan hasil ketika waktu mulai di masa lalu. Kemudian sistem operasi menunda awal proses untuk satu siklus (seperti yang terjadi dengan alarm, ketika diatur ke "masa lalu", ia melompati siklus 12 jam sehingga dapat berdering di "masa depan"), yang pada akhirnya mengarah pada kenyataan bahwa hampir semuanya proses berjalan terlambat dalam siklus.Pengujian dapat mendeteksi kesalahan ini, tetapi kemungkinan kesalahan hanya muncul pada tahap akhir pengujian, ketika seluruh sistem diuji, tetapi meskipun demikian, sebagian besar tes tidak memerlukan inisialisasi dari awal. Dan bahkan dalam tes di mana ini diperlukan, laboratorium dengan model PASS, BFS dan telemetri yang cukup akurat diperlukan. Dan bahkan jika semua kondisi di atas terpenuhi, ketika kesalahan terjadi, ada godaan untuk memulai kembali semuanya dan ... tidak pernah mengulangi kesalahan, dan tidak pernah yakin apakah ini merupakan masalah dalam pengaturan laboratorium. Mungkin inilah yang terjadi di salah satu laboratorium NASA sekitar 4 bulan sebelum penerbangan.Namun, pada hari ketika komputer on-board pertama dinyalakan, 30 jam sebelum peluncuran dijadwalkan, masalah membuat dirinya terasa.Semua informasi tentang bug pada pesawat ulang-alik ini diambil dari sebuah artikel oleh John Garman (wakil kepala departemen perangkat lunak luar angkasa di NASA). Di dalamnya, ia juga menulis: “Keandalan ideal tidak disediakan, karena proyek selalu harus menawar waktu dan biaya. Mempertahankan sistem perangkat lunak di tempat, mengumpulkan perubahan besar dan penambahan pada tahap pengembangan, dan mengkonfigurasi ulang perangkat lunak agar sesuai dengan mesin atau misi yang tidak pernah sepenuhnya identik adalah tantangan yang kita hadapi saat ini. Mudah untuk mengatakan, "Jangan melanggar aturan." Ini tidak mungkin tanpa membalik posisi relatif dari perangkat lunak dalam sistem embedded - dan ini salah! Perangkat lunak mungkin menjadi "jiwa" dari sistem yang paling kompleks, tetapi masih merupakan bagian dari cangkang pendukung, ... bagian yang sangat fleksibel. "
Pendaratan pesawat ulang-alik di permukaan Danau Rogers yang mengeringBiaya kesalahan ini dalam perangkat lunak adalah $ 0 (tentu saja, biaya transfer peluncuran mungkin besar, tetapi mengingat kecelakaan sebelumnya dipertimbangkan, ketika pesawat ruang angkasa benar-benar hilang sebelum menyelesaikan misi yang direncanakan, biaya untuk melatih kembali peluncuran I diabaikan, terutama karena saya tidak dapat menemukan data yang cocok).Tetapi saya ingin mencatat bahwa kesalahan ini menunda waktu peluncuran dua hari: dari 10 April hingga 12 April, dan, menurut pendapat saya, tidak mungkin untuk memilih tanggal yang lebih baik untuk peluncuran pertama pesawat ulang-alik, karena pada hari yang sama, tepatnya 20 tahun yang lalu Yuri Gagarin terbang ke luar angkasa. Bagaimana mungkin seseorang tidak mengingat kata-kata dari satu kura-kura bahwa "keacakan bukanlah kebetulan." Source: https://habr.com/ru/post/id381073/
All Articles