Bagaimana perangkat lunak yang digunakan dalam sistem kritis hidup atau mati diuji?

51

Sebuah pesawat terbang, berlawanan dengan, misalnya, situs web, adalah sistem di mana setiap kegagalan dalam sistem tertentu sama sekali tidak dapat diterima, karena kesalahan dalam pemantauan penerbangan misalnya dapat menyebabkan autopilot tidak berfungsi dan melakukan penyelaman. Jelas, ini tidak terjadi karena para insinyur brilian di Boeing dan Airbus melakukan pengecekan dalam autopilot untuk memastikan tidak tiba-tiba memutuskan bahwa penyelaman adalah manuver yang dapat diterima dan aman. Atau mungkin komputer crash, dan pilot di pesawat fly-by-wire yang lebih baru tidak bisa lagi benar-benar menerbangkan pesawat. Tentu saja, ada berbagai prosedur keselamatan dan redudansi yang dibangun ke dalam sistem ini untuk mencegah kecelakaan (baik dari perangkat lunak dan pesawat terbang).

Namun, di sisi lain, cukup jelas bahwa perangkat lunak tidak sempurna - baik perangkat lunak open source dan tertutup melakukan crash secara teratur, dan hanya program "Hello World" yang paling sederhana tidak gagal. Bagaimana para insinyur yang merancang sistem perangkat lunak di industri penerbangan, medis, dan kehidupan atau mati lainnya dapat menguji perangkat lunak mereka sehingga tidak gagal (dan jika gagal, setidaknya gagal dengan anggun)?

Saya sangat berharap bahwa Anda tidak semua akan pergi: "Oh, saya bekerja untuk Boeing / Airbus / (beberapa perusahaan lain) dan tidak! Bersenang-senang dengan penerbangan / kunjungan rumah sakit berikutnya."

waiwai933
sumber
8
Mempertimbangkan kasus Therac25 dan baterai Patriot yang tidak terlibat, jelas tidak cukup baik.
Loren Pechtel
@ Loren Yah, saya tidak ragu bahwa tidak ada pengecualian. Di sisi lain, saya belum pernah membaca tentang Airbus A320 (pesawat terbang dengan kawat) yang pernah mengalami kesalahan perangkat lunak yang signifikan yang mengakibatkan cedera / cedera / kematian hampir, dan ada lebih dari 4.000 dibuat.
waiwai933
3
"Hello World" mungkin juga gagal. lol
xandy
1
@ Wanwai - sebenarnya, itu memang terjadi sekitar setahun yang lalu - sebuah sensor yang salah mengindikasikan bahwa pesawat itu mendaki terlalu curam dan akan berhenti. Upaya komputer untuk kembali ke level penerbangan sebenarnya adalah penyelaman. Tidak ada tabrakan, tetapi ada cedera / kerusakan dari penumpang dan benda-benda longgar yang terlempar ke sekitar kabin.
Tom Clarkson
6
Tidakkah mereka menggunakan tahanan terpidana mati dengan lisensi pilot?
JeffO

Jawaban:

29

Saya telah melakukan banyak pekerjaan dalam kontrol industri. Tidak harus dalam industri yang mulia seperti dirgantara. Hampir setiap mesin industri memiliki energi potensial yang cukup untuk menyebabkan cedera serius atau kematian. Saya telah ada ketika orang terluka. Jika Anda menghabiskan sebagian besar waktu Anda di meja di kantor, Anda mungkin akan terkejut melihat betapa berbahayanya pekerjaan pabrik (dan tentu saja sampai saat ini). Sekarang kami memiliki metode pengamanan mesin yang lebih baik. Begini cara kerjanya dalam praktik (meskipun bervariasi dari yurisdiksi ke yurisdiksi):

Ada standar OSHA di AS, dan pedoman serupa (biasanya lebih ketat) di UE. Ini biasanya dimulai dengan mengharuskan Anda untuk melakukan analisis risiko. Ini berarti Anda membuat daftar semua bahaya dan kemudian mengkategorikan bahaya itu, dengan mempertimbangkan hal-hal seperti seberapa sering seseorang akan terpapar risiko, seberapa mudahnya untuk menghindari risiko (tergantung pada kecepatan, dll.), Dan apa adalah tingkat keparahan hasilnya (potong, amputasi, kematian, dll.).

Banyak analisis terkait dengan menjaga bahaya. Jika Anda meletakkan sangkar besar di sekitar mesin dan mengencangkannya dengan ketat, maka mesin Anda dianggap aman jika komponen mesin tidak dapat menembus pelindung. Jika Anda membutuhkan alat untuk masuk, itu dianggap sebagai tugas pemeliharaan, dan orang pemeliharaan seharusnya dilatih tentang cara bekerja dengan aman pada mesin. Namun pada kenyataannya, sebagian besar alat berat memerlukan interaksi teratur dengan operator sehingga kami harus meletakkan pintu akses di pelindung, atau gorden ringan, dll. Pintu dan gorden ringan itu perlu dipantau dan kekuatan terhadap bahaya yang dipaparkan oleh operator kepada diri mereka sendiri. harus dimatikan dengan cara "control reliable".

Berdasarkan analisis itu, risiko dimasukkan ke dalam berbagai kategori. Skala klasifikasi umum adalah Kategori 1 hingga Kategori 4 (berdasarkan standar EN 954-1). Berdasarkan kategori-kategori tersebut, Anda diharuskan secara hukum untuk memberikan tingkat perlindungan dan keamanan alat berat tertentu.

Kategori 4, misalnya, mensyaratkan bahwa:

Kesalahan tunggal di masing-masing bagian ini tidak menyebabkan hilangnya fungsi keselamatan.

Kesalahan tunggal terdeteksi dengan atau sebelum permintaan berikutnya ke fungsi keselamatan, atau jika ini tidak mungkin, akumulasi kesalahan mungkin tidak menyebabkan hilangnya fungsi keselamatan.

Ini bisa sulit untuk dicapai dalam praktiknya, tetapi dibuat lebih sederhana dengan ketersediaan komponen standar yang disertifikasi untuk Kategori 4. Misalnya, satu komponen umum dalam sistem ini adalah Relay Keselamatan. Ini lebih dari sekadar relay mekanis:

  • Mereka dirancang untuk memonitor saluran input redundan ganda, jadi jika Anda memiliki sensor yang mendeteksi kondisi gangguan (seperti pintu pengaman terbuka), biasanya memiliki dua kontak dengan sirkuit redundan. Relai memantau kedua saluran, dan jika salah satu terbuka, daya turun ke aktuator Anda, tetapi jika keduanya tidak putus pada saat yang sama, maka ia memasuki kondisi gangguan dan mesin tidak dapat dinyalakan kembali sampai diperbaiki .
  • Relai juga menggunakan pulsa listrik pada saluran-saluran tersebut dan menggunakan sinyal-sinyal itu untuk memantau kabel yang bersilangan atau terpendek, sehingga dapat mendeteksi kesalahan kabel.
  • Di sisi output, ia menggunakan satu set sirkuit ganda untuk menggerakkan kumparan output, jadi jika salah satu kesalahan ke dalam kondisi "on", yang lain harus mencegah output menjadi tidak berenergi. Selain itu, ini dipantau dan jika kesalahan terdeteksi, itu mencegah operasi. Kumparan itu sendiri sebenarnya adalah relai dua arah yang dipandu yang berarti relai fisik yang berlebihan pada output, ditambah jaminan bahwa kontak pada setiap relai tunggal secara fisik dihubungkan bersama sehingga satu kontak dari, katakanlah 4, tidak dapat terjebak dengan sendirinya. Ini juga dipantau.
  • Ini juga mencakup input untuk memantau kontak bantu yang biasanya tertutup dari beban yang Anda kendalikan. Jika mematikan output, itu harus melihat kontak yang biasanya tertutup terlibat yang berarti memvalidasi bahwa mematikan kontaktor motor, atau apa pun itu, sebelum diizinkan untuk beroperasi ke dalam kondisi hidup lagi.

Seperti yang Anda tahu, ini adalah perangkat yang rumit. Biaya tipikal dalam kisaran $ 200 hingga $ 600 untuk setiap relay keselamatan. Jelas ada perangkat lunak di perangkat ini. Untuk mendapatkan relay keselamatan Anda, Anda biasanya harus mengikuti desain seperti ini:

  • Dua prosesor yang berlebihan, biasanya bersumber dari vendor yang berbeda, berdasarkan desain yang berbeda.
  • Kode yang berjalan pada setiap prosesor harus dikembangkan oleh dua tim yang bekerja dalam kondisi yang terisolasi. Ini mencegah bug perangkat lunak tunggal menjadi titik kegagalan tunggal.
  • Output dari kedua prosesor harus menyetujui atau kesalahan relai keselamatan.

Setelah Anda merancang sistem keselamatan untuk alat berat Anda, menggunakan komponen yang diberi peringkat keselamatan, maka Anda harus meninjau desainnya dan dicap oleh Insinyur Profesional. Maka Anda membangun mesin. Lalu P.Eng. akan meninjau konstruksi mesin memastikan itu dibangun dengan desain. Mereka akan mendokumentasikannya, dan akan melakukan beberapa tes untuk memastikannya berfungsi seperti yang diharapkan. Ini disebut tinjauan pra-mulai (PSR) dan tidak dilakukan di setiap yurisdiksi. Setelah PSR berlalu, Anda diizinkan memiliki operator yang menjalankan mesin.

Dalam beberapa tahun terakhir telah terjadi beberapa revolusi dalam sistem keselamatan. Untuk sementara waktu tidak ada yang memercayai pengiriman data keselamatan melalui jaringan, jadi apa yang biasanya disebut "sistem I / O terdistribusi" seperti DeviceNET dan EtherCAT tidak diizinkan di bagian keamanan sistem. Namun, protokol terbaru sekarang memungkinkan perangkat keselamatan untuk menjalankan jaringan industri ini. Protokol menggunakan pesan yang dicap waktu, dan pemrosesan ganda berlebih pada kedua ujung koneksi.

Relai keselamatan perlahan menuju burung dodo, digantikan oleh PLC Keselamatan yang lebih rumit, yang seperti cara untuk membangun logika keselamatan dalam bahasa diagram blok fungsi. Sekali lagi, PLC keselamatan ini menggunakan semuanya yang berlebihan. Saat program disetujui, sebelum mesin dioperasikan, P.Eng. akan mencap program dan program / PLC akan dikunci dengan kata sandi. Ini juga membutuhkan hash dari program dan hash itu dicatat dalam dokumentasi (itulah yang P.Eng benar-benar cap).

Sekarang setelah Anda merancang sistem keselamatan Anda, logika yang Anda tulis untuk mengendalikan mesin itu sendiri bisa sangat nyaman. Pemrogram sering kali membuat crash mesin yang menyebabkan ribuan dolar kerusakan, tetapi setidaknya tidak ada yang terluka.

Scott Whitlock
sumber
20

Ada langkah serius menuju verifikasi formal daripada pengujian fungsional acak.

Instansi pemerintah seperti NASA dan beberapa organisasi pertahanan semakin banyak menghabiskan uang untuk teknologi ini.

Mereka masih PITA untuk programmer rata-rata, tetapi mereka sering lebih efektif dalam menguji sistem kritis.

Ada juga kecenderungan untuk mencoba lebih banyak teknik dari akademisi, untuk hal-hal seperti memvalidasi kode multithreaded.

Uri
sumber
6
Setelah menulis perangkat lunak pendukung darat untuk kontrol misi NASA, dan melihat potongan kode penerbangan lama dan baru, tidak ada penekanan seperti itu. Ok, karena peningkatan kuantitas, mungkin NASA membelanjakan lebih banyak pada QC daripada sebelumnya, tetapi perhatian yang terfokus pada setiap aplikasi jauh lebih rendah daripada ketika program luar angkasa masih muda. Masih ada beberapa perhatian yang dicurahkan pada hal-hal yang kritis tentang keselamatan, tetapi misi kritis hanya membutuhkan rangkaian uji yang kurang komprehensif, dan bahkan verifikasi kritis keselamatan tampaknya telah menurun dari waktu ke waktu.
Ben Voigt
7
Harap dicatat bahwa saya tidak setuju bahwa verifikasi formal bisa sangat efektif dan sangat penting untuk menghasilkan tingkat keandalan tertinggi. Hanya saja para manajer telah belajar berapa biayanya dan, dihadapkan dengan perangkat lunak yang semakin kompleks, alasan mereka tidak dapat menghabiskan sebanyak itu per persyaratan dan per baris kode lagi. Pendekatan yang tepat adalah dengan mempartisi sistem dan menjaga bagian-bagian penting tetap kecil, tetapi saya tidak melihat itu dilakukan secara efektif, dengan hasil bahwa manajemen menyatakan seluruh proses verifikasi formal sangat mahal.
Ben Voigt
2
@ Ben Voight: Jika saya seorang astronot, saya akan sangat terkejut dengan laporan Anda.
Orbling
1
@Orbling: Para astronot mungkin harus mempertimbangkan masalah ini, tetapi mereka awalnya adalah kelompok pengambil risiko yang ekstrem. Ada titik di mana Anda telah mengurangi risiko yang dapat Anda kontrol ke urutan besarnya kurang dari yang Anda tidak bisa, dan itu tidak terlalu efektif untuk terus menghabiskan uang, dan masih bisa diperdebatkan apakah metode yang saya lihat digunakan bisa sampai ke situ titik. Beberapa manajer yang ditempatkan sangat yakin bahwa mereka melakukannya.
Ben Voigt
1
Dan sangat menyedihkan untuk berpikir bahwa tidak banyak orang mendengarkan Dijkstra yang telah melakukan verifikasi formal sejak 1960-an. Seperti yang dikatakan Nietzsche, "Beberapa pria dilahirkan secara anumerta."
veryfoolish
12

Tergantung pada apa perangkat lunaknya. Sebagai contoh, di pesawat biasanya ada pemrosesan dual-redundan untuk sistem kritis; dalam kasus ekstrem dapat ada 2 desain perangkat keras yang berbeda yang digunakan, dan dua potong s / w yang dikembangkan secara independen, masing-masing untuk dijalankan. Keduanya menghitung dan mengecek satu sama lain. Ini tidak mudah dan sangat mahal.

Ketika datang ke hal-hal seperti pengujian sistem pesawat, ada serangkaian tes dilakukan - pengujian sistem terkait penerbangan membutuhkan waktu berbulan-bulan, dan jika Anda membuat perubahan sama sekali seluruh rangkaian tes ulang diperlukan untuk dijalankan. Ini biasanya dilakukan dalam simulator, yang mungkin sebenarnya penuh dengan bagian-bagian pesawat nyata (misalnya kokpit) dengan mengatakan mesin simulasi atau sejenisnya. Seperti yang Anda bayangkan, ini juga sangat mahal untuk dibangun. Perubahan dievaluasi terhadap program pengujian formal, dan kemudian dijalankan di pesawat terbang nyata dalam penerbangan uji. Sepanjang jalan hal-hal seperti tes "fungsional terganggu" dijalankan, ini adalah di mana item yang diubah diizinkan untuk melakukan hal-hal normal dan semuanya diperiksa / diuji untuk melihat bahwa tidak ada efek yang merusak. Ini juga menghabiskan banyak uang dan bisa memakan waktu berminggu-minggu.

Saya tahu satu contoh di mana perubahan yang sangat sederhana untuk sistem penerbangan diperlukan - begitu sederhana Anda akan terpana pada seberapa kecil. Namun pengujian ulang ini akan memakan waktu> 3 bulan dan biaya sekitar $ 1 juta.

Ketika Anda masuk ke dunia medis, ada serangkaian rintangan peraturan yang harus dilewati terkait tidak hanya dengan pengujian tetapi juga dengan proses pengembangan dan dokumentasi.

Semua bidang ini adalah langkah besar dari tempat yang menghapus sedikit kode PHP untuk situs web. Ini lambat, melelahkan, sulit, membosankan, membosankan, teliti, dan sangat mahal. Ambil biaya pengembangan / pengujian normal Anda dan kalikan dengan sekitar 100 dan Anda semakin mendekati sasaran.

dengan cepat_now
sumber
Contoh "2 desain perangkat keras yang berbeda digunakan, dan dua buah s / w yang dikembangkan secara independen, satu untuk dijalankan pada masing-masing" akan menarik. Bukan tidak setuju, hanya ingin tahu.
Brian Carlton
1
@Brian: Contoh umum untuk 2 HW berbeda, 2 SW yang dikembangkan secara independen dapat ditemukan misalnya dalam pengontrol sistem rem anti-penguncian. Lihat misalnya infineon.com/cms/jp/product/applications/automotive/safety/… yang menggunakan dua arsitektur CPU yang berbeda (8-bit dan 16-bit) pada satu IC.
Schedler
4
Tiga bahkan lebih baik. Dengan dua, Anda hanya tahu salah satunya salah. Dengan tiga, Anda dapat memilih. AFAIK, Airbus A380 memiliki tiga komputer penerbangan dari dua pabrikan.
Jörg W Mittag
Bertahun-tahun yang lalu saya menemukan beberapa tampilan kepala militer yang dirancang dengan cara ini. TAMU saya adalah karena biaya banyak teknik ini tidak digunakan sebanyak dulu.
cepat,
7

Untuk perangkat lunak luar angkasa NASA, baca They Write the Right Stuff . Untuk FDA (Badan Pengawas Obat dan Makanan AS) baca baca ini

Brian Carlton
sumber
3

Karena Anda sudah mendapat jawaban yang cukup bagus dan informatif, inilah pilihan saya.

Sederhana - tes pertama selalu dilakukan pada programmer itu sendiri. Itu cenderung menjaga jumlah bug rendah, dan memastikan bahwa hanya programmer yang berkualitas yang tetap dalam daftar gaji.

Domchi
sumber
3

Perangkat lunak yang kritis terhadap kehidupan tidak diuji ke standar apa pun selain yang "tampaknya berfungsi" , seperti yang dilakukan di semua tempat.

Semua investasi masuk ke apa yang tampaknya bekerja sebelum atau untuk proyek untuk memungkinkan non-programmer untuk menghasilkan perangkat lunak yang lebih baik .

ps Tidak ada komentar pada yang pertama -1, tapi saya akan dengan senang hati mengambil -1untuk setiap referensi yang bertentangan dengan pernyataan saya.

Dapatkah saya mengambil +1 untuk setiap referensi yang saya temukan untuk perangkat lunak kritis yang tidak dirancang atau diuji dengan baik? Simson Garfinkel mendokumentasikan sepuluh kasus dalam sebuah artikel di WIRED.

Apalala
sumber
Sayangnya, ini terlalu akurat.
Ben Voigt
Tentu, saya menerima tawaran itu untuk -1.
Brian Carlton
@ Brian Carlton Anda tidak memberikan referensi ...
Apalala
Bagaimana dengan DO-178, MOPS untuk GPS ... Setidaknya saya bekerja, pengujian bisa memakan waktu lebih dari setahun. Perhatikan bahwa pengujian tidak memastikan bahwa kode bebas bug dan sesuai dengan spesifikasi dalam setiap kasus yang memungkinkan.
jinawee
2

Tidak ada satu jawaban untuk semua kasus. Terserah produsen individu untuk memutuskan bagaimana merancang dan menguji perangkat lunak mereka. Tetapi seluruh proses pengembangan perangkat lunak harus memenuhi spesifikasi formal.

Misalnya ketika membuat perangkat lunak untuk perangkat medis Anda harus mengikuti standar IEC 62304 untuk perangkat lunak untuk perangkat medis. (Sayangnya saya hanya dapat menautkan ke wikipedia karena tidak gratis). Hampir setiap negara di dunia mensyaratkan bahwa standar ini telah diikuti.

Seberapa ketat persyaratan ini tergantung pada risiko bahaya. Misalnya perangkat pendukung kehidupan akan memiliki risiko bahaya terbesar (kematian tertentu jika sistem gagal), sedangkan sistem yang bekerja dengan diagnostik penyakit memiliki risiko lebih rendah (kemungkinan kematian jika penyakit terminal tidak didiagnosis dengan benar jika sistem gagal).

Tetapi apa yang dikatakan pada dasarnya adalah bahwa harus ada keterlacakan dari persyaratan ke perangkat lunak. Anda harus melakukan verifikasi unit perangkat lunak. Itu tidak menentukan apa verifikasi itu. Dapat berupa unit test, bisa berupa review kode. Untuk perangkat yang berisiko lebih tinggi, Anda harus meninjau secara manual antarmuka antar unit perangkat lunak (sejauh yang saya mengerti dan ingat). Dan tentu saja banyak aturan lainnya. Oh, dan Anda harus menulis banyak dokumentasi untuk mendokumentasikan pekerjaan Anda.

Standar tidak melarang pengembangan lincah, meskipun ketika membacanya sepertinya itu ditulis dengan pengembangan air terjun dalam pikiran.

Saya tidak tahu tentang bidang pengembangan perangkat lunak lain, seperti penerbangan, kereta api, mobil, dll. Tapi saya berasumsi bahwa ada pedoman formal serupa lainnya.

Pete
sumber
1

Banyak teknik yang digunakan, termasuk tetapi tidak terbatas pada:

  • desain dan / atau validasi formal
  • standar pengkodean yang ketat menghindari pemrograman mewah seperti alokasi memori yang dinamis
  • insinyur berkualitas sangat menuntut
  • banyak teknik analisis statis seperti ulasan kode, pohon kesalahan, FMECA, ...

Tetapi teknik nomor satu adalah:

  • PENGUJIAN

Perangkat lunak pesawat ruang angkasa membutuhkan lebih banyak upaya untuk menguji daripada mendesain dan kode di tempat pertama.

Pesawat mengalami beberapa tahun tes penerbangan di mana pesawat dibawa ke situasi yang ekstrem. Ini menguji tidak hanya struktur fisik tetapi juga perangkat lunak.

mouviciel
sumber
1

Ada artikel "Perangkat lunak sempurna" oleh Jack Ganssle on EETimes tanggal 3/1/2009 12:00 EST. Beberapa poin dari sana:

  • "Secara teoritis, Perangkat Lunak adalah satu-satunya komponen yang bisa sempurna, dan ini harus selalu menjadi titik awal kita." - Itu dikatakan oleh Jesse Poore. Setelah halaman web-nya, Anda akan mengetahui bagaimana perangkat lunak sempurna dapat dibuat tanpa biaya lebih banyak daripada perangkat lunak normal.
  • Ada penyedia industri OS yang sangat andal. Artikel itu menyebutkan Mircrium dan Green Hills. Berikut halaman web Micrium, ada daftar standar untuk sertifikasi. Itu harus menjadi proses dan aturan yang diikuti industri. Itu didasarkan pada validasi formal, tetapi banyak dialihkan dari teori.

Menariknya, mengenai perangkat lunak komersial, data yang dikumpulkan oleh Capers Jones menunjukkan bahwa "perangkat lunak pada umumnya memiliki efisiensi penghilangan cacat (persentase bug yang dihapus sebelum pengiriman) sebesar 87%. Firmware mendapat skor 94% yang jauh lebih baik." Bagi saya, tidak ada yang mendekati sempurna. Artikel yang disebutkan penjawab sebelumnya menunjukkan bahwa tim pesawat ulang-alik NASA mencapai tingkat penghilangan bug 99%, tetapi biayanya 35 juta per tahun untuk sekitar 400 ribu baris kode.

Artikel yang lebih menarik "Perangkat lunak untuk sistem yang dapat diandalkan" oleh penulis yang sama pada 11/1/2009, tampaknya lebih relevan. Dapat diringkas seperti ini:

  • Adapun proses pengembangan, industri telah mengikuti DO-178B atau IEC61508. Itu menekankan pengujian dengan cakupan terbesar. Tetapi sedikit bukti yang dapat ditemukan tentang keefektifan ini.
  • Otoritas sertifikasi, Komite Sistem Perangkat Lunak yang Dapat Diandalkan, telah menerbitkan buku berjudul "Perangkat Lunak untuk Sistem yang Dapat Diandalkan - Bukti yang Cukup". Itu referensi yang bagus.
  • Buku ini, pada dasarnya menanyakan tiga hal: [1] Buat aturan eksplisit untuk tes ketergantungan. [2] Pengujian melanggar aturan, tetapi juga memastikan pengujian dapat dipahami oleh pelanggan normal atau regulator dengan waktu yang lebih singkat daripada yang dihabiskan oleh pengembang. [3] Pastikan para ahli dalam rekayasa perangkat lunak dan domain masalah melakukan pengembangan dan pengujian.
  • Pemasok perangkat lunak harus berkomitmen pada garansi atau solusi lain untuk setiap kegagalan perangkat lunak.
  • Gunakan bahasa yang aman, khususnya yang tidak disarankan C. SPARK.
  • Desain untuk pendekatan kontrak adalah salah satu kekuatan SPARK. Desain-untuk-kontrak adalah teknologi penting untuk menanamkan tes ke dalam setiap panggilan fungsi / metode, dan selalu menjalankannya saat runtime. Lebih dari sekadar penegasan sederhana () di masa lalu, kontrak juga dapat menyertakan pengujian terhadap niat struktural dan memastikan tidak ada pelanggaran yang dapat terjadi di kemudian hari dalam siklus pemeliharaan ketika pengembang asli sebagian besar telah pindah ke proyek lain. Ada bukti bahwa desain untuk kontrak telah menghasilkan produk perangkat lunak yang sangat andal. SPARK dan alat-alatnya dapat digunakan untuk membantu menghasilkan kasus uji sertifikasi untuk menyederhanakan proses sertifikasi.

Menurut ingatan saya, HP mempraktikkan desain-untuk-kontrak hampir satu dekade yang lalu. Dengan tim kecil, 500 ribu baris kode, hanya 2 bug yang dilaporkan setelah pengiriman. Sangat mengesankan.

Dalam pandangan saya, perangkat lunak yang dapat diandalkan atau sempurna hanya dapat dicapai jika biayanya tidak terlalu tinggi. Kerangka kerja atau otomatisasi adalah yang harus dimiliki.

Jinghua
sumber
0

Mereka biasanya memiliki interlock perangkat keras yang digunakan sebagai gagal-aman.

Misalnya desain kotak teks jahat standar untuk robot pembunuh selalu disertai dengan kill-switch: P

Malam gelap
sumber
0

Setiap industri memiliki serangkaian badan pengatur yang memiliki persyaratan pengujian dan dokumentasi untuk perangkat keras dan perangkat lunak terkait keselamatan. Pertimbangkan PDF ini dari Underwriters Laboratory (UL) yang memperkenalkan standar UL 1998: http://www.ul.com/global/documents/offerings/industries/hightech/software/UL_softwareconformityassessment.pdf

Ada referensi dalam dokumen itu untuk banyak yang terkait lainnya dari UL, CSA, dan IEC.

Biasanya, perangkat lunak yang terkait dengan keselamatan akan memiliki sirkuit perangkat keras yang berlebihan atau diharuskan memiliki fitur kontrol berlebihan lainnya untuk memastikan operasi yang aman dan mode kegagalan yang aman.

oosterwal
sumber