Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Teknologi Industri

10 Aturan Pengkodean NASA untuk Menulis Program Penting Keselamatan

Proyek perangkat lunak yang besar dan kompleks menggunakan berbagai standar dan pedoman pengkodean. Pedoman ini menetapkan aturan dasar yang harus diikuti saat menulis perangkat lunak. Biasanya, mereka menentukan:

a) Bagaimana seharusnya kode disusun?
b) Fitur bahasa mana yang harus atau tidak boleh digunakan?

Agar efektif, kumpulan aturan harus kecil dan harus cukup spesifik sehingga dapat dengan mudah dipahami dan diingat.

Pemrogram top dunia yang bekerja di NASA mengikuti serangkaian pedoman untuk mengembangkan kode kritis keselamatan. Faktanya, banyak agensi, termasuk Jet Propulsion Laboratory (JPL) NASA, berfokus pada kode yang ditulis dalam bahasa pemrograman C. Ini karena ada dukungan alat yang luas untuk bahasa ini, seperti ekstraktor model logika, debugger, kompiler stabil, penganalisis kode sumber yang kuat, dan alat metrik.

Dalam kasus-kasus kritis, menjadi perlu untuk menerapkan aturan-aturan ini, terutama di mana kehidupan manusia mungkin bergantung pada kebenaran dan efisiensinya. Misalnya, program perangkat lunak yang digunakan untuk mengontrol pesawat terbang, pesawat ruang angkasa, atau pembangkit listrik tenaga nuklir.

Tapi tahukah Anda standar apa yang digunakan badan antariksa untuk mengoperasikan mesin mereka? Di bawah ini, kami telah membuat daftar 10 aturan pengkodean NASA yang dibuat oleh ilmuwan utama JPL Gerard J. Holzmann. Semuanya berfokus pada parameter keamanan, dan Anda juga dapat menerapkannya ke bahasa pemrograman lain.

Aturan No. 1 – Alur Kontrol Sederhana

Tulis program dengan konstruksi aliran kontrol yang sangat sederhana – Jangan gunakan setjmp atau longjmp konstruksi, goto pernyataan, dan langsung atau tidak langsung rekursi .

Alasan: Aliran kontrol yang sederhana menghasilkan kejelasan kode yang lebih baik dan kemampuan verifikasi yang lebih kuat. Tanpa rekursi, tidak akan ada grafik pemanggilan fungsi siklik. Jadi, semua eksekusi yang seharusnya dibatasi tetap benar-benar terikat.

Aturan No. 2 – Batas Atas Tetap untuk Perulangan

Semua loop harus memiliki batas atas yang tetap. Seharusnya alat verifikasi dapat membuktikan secara statis bahwa batas atas preset pada jumlah iterasi perulangan tidak dapat dilampaui.

Aturan dianggap dilanggar jika loop-bound tidak dapat dibuktikan secara statis.

Alasan:  Kehadiran batas loop dan tidak adanya rekursi mencegah kode pelarian. Namun, aturan tidak berlaku untuk iterasi yang dimaksudkan untuk tidak dihentikan (misalnya, penjadwal proses). Dalam kasus seperti itu, aturan sebaliknya diterapkan – Harus dapat dibuktikan secara statis bahwa iterasi tidak dapat dihentikan.

Aturan No. 3 – Tidak Ada Alokasi Memori Dinamis

Jangan gunakan alokasi memori dinamis setelah inisialisasi.

Alasan: Pengalokasi memori seperti malloc , dan pengumpul sampah sering kali memiliki perilaku tak terduga yang dapat sangat memengaruhi kinerja. Selain itu, kesalahan memori juga dapat terjadi karena kesalahan programmer, yang meliputi

Memaksa semua modul untuk hidup dalam area penyimpanan tetap yang telah dialokasikan sebelumnya dapat menghilangkan masalah ini dan mempermudah verifikasi penggunaan memori.

Salah satu cara untuk mengklaim memori secara dinamis tanpa adanya alokasi memori dari heap adalah dengan menggunakan memori tumpukan.

Aturan No. 4 – Tidak Ada Fungsi Besar

Tidak ada fungsi yang boleh lebih panjang dari yang dapat dicetak pada selembar kertas dalam format referensi standar dengan satu baris per deklarasi dan satu baris per pernyataan. Artinya, suatu fungsi tidak boleh memiliki lebih dari 60 baris kode.

Alasan: Fungsi yang terlalu panjang seringkali merupakan tanda struktur yang buruk. Setiap fungsi harus menjadi unit logis yang dapat dipahami serta dapat diverifikasi. Cukup sulit untuk memahami unit logis yang mencakup beberapa layar di layar komputer.

Aturan No. 5 – Kepadatan Pernyataan Rendah

Kepadatan pernyataan program harus rata-rata minimal dua pernyataan per fungsi. Asersi digunakan untuk memeriksa kondisi abnormal yang seharusnya tidak pernah terjadi dalam eksekusi kehidupan nyata. Mereka harus didefinisikan sebagai tes Boolean. Saat pernyataan gagal, tindakan pemulihan eksplisit harus diambil.

Jika alat pemeriksaan statis membuktikan bahwa pernyataan tidak akan pernah gagal atau tidak pernah berlaku, aturan dianggap dilanggar.

Alasan: Menurut statistik upaya pengkodean industri, pengujian unit menangkap setidaknya satu cacat per 10 hingga 100 baris kode. Kemungkinan mencegat cacat meningkat dengan kepadatan pernyataan.

Penggunaan asersi juga penting karena merupakan bagian dari strategi pengkodean defensif yang kuat. Mereka digunakan untuk memverifikasi kondisi sebelum dan sesudah suatu fungsi, parameter, dan nilai kembalian dari suatu fungsi dan loop-invarian. Pernyataan dapat dinonaktifkan secara selektif setelah menguji kode kinerja penting.

Aturan No. 6 – Deklarasikan Objek Data pada Tingkat Cakupan Terkecil

Yang ini mendukung prinsip dasar penyembunyian data. Semua objek data harus dideklarasikan pada tingkat cakupan sekecil mungkin.

Alasan: Jika suatu objek tidak dalam ruang lingkup, nilainya tidak dapat direferensikan atau rusak. Aturan ini melarang penggunaan kembali variabel untuk beberapa tujuan yang tidak kompatibel yang dapat memperumit diagnosis kesalahan.

Baca: 20 Pemrogram Komputer Terhebat Sepanjang Masa

Aturan No. 7 – Periksa Parameter dan Nilai Kembali

Nilai kembalian fungsi non-void harus diperiksa oleh setiap fungsi pemanggil, dan validitas parameter harus diperiksa di dalam setiap fungsi.

Dalam bentuknya yang paling ketat, aturan ini berarti bahkan nilai kembalian printf pernyataan dan file tutup pernyataan harus diperiksa.

Alasan: Jika respons terhadap kesalahan tidak berbeda dengan respons terhadap keberhasilan, seseorang harus secara eksplisit memeriksa nilai kembalian. Ini biasanya terjadi pada panggilan ke close dan printf . Dapat diterima untuk secara eksplisit mentransmisikan nilai pengembalian fungsi ke void –  menunjukkan bahwa pembuat kode secara eksplisit (tidak sengaja) memutuskan untuk mengabaikan nilai yang dikembalikan.

Aturan No. 8 – Penggunaan Praprosesor Terbatas

Penggunaan preprocessor harus dibatasi pada penyertaan file header dan definisi makro. Panggilan makro rekursif, tempel token, dan daftar argumen variabel tidak diizinkan.

Harus ada pembenaran untuk lebih dari satu atau dua arahan kompilasi bersyarat bahkan dalam upaya pengembangan aplikasi besar, di luar boilerplate standar, yang menghindari banyak penyertaan file header yang sama. Setiap penggunaan tersebut harus ditandai oleh pemeriksa berbasis alat dan dibenarkan dalam kode.

Alasan: Praprosesor C adalah alat yang kuat dan ambigu yang dapat merusak kejelasan kode dan membingungkan banyak pemeriksa berbasis teks. Efek konstruksi dalam kode praprosesor yang tidak terikat bisa sangat sulit untuk diuraikan, bahkan dengan definisi bahasa formal yang ada.

Kehati-hatian terhadap kompilasi bersyarat sama pentingnya – hanya dengan 10 arahan kompilasi bersyarat, mungkin ada 1024 versi yang memungkinkan (2^10) dari kode, yang akan meningkatkan upaya pengujian yang diperlukan.

Baca:9 Bahasa Pemrograman Baru Untuk Dipelajari Tahun Ini

Aturan No. 9 – Penggunaan Pointer Terbatas

Penggunaan pointer harus dibatasi. Tidak lebih dari satu tingkat dereferensi diizinkan. Operasi dereferensi penunjuk tidak boleh disembunyikan di dalam typedef deklarasi atau definisi makro.

Pointer fungsi juga tidak diperbolehkan.

Alasan: Pointer mudah disalahgunakan, bahkan oleh para ahli. Mereka menyulitkan untuk mengikuti atau menganalisis aliran data dalam suatu program, terutama oleh penganalisis statis berbasis alat.

Pointer fungsi juga membatasi jenis pemeriksaan yang dilakukan oleh penganalisis statis. Dengan demikian, mereka hanya boleh digunakan jika ada pembenaran yang kuat untuk implementasinya. Jika penunjuk fungsi digunakan, hampir tidak mungkin bagi alat untuk membuktikan tidak adanya rekursi, sehingga metode alternatif harus disediakan untuk menebus hilangnya kemampuan analitis ini.

Baca: 14 Software Pemrograman Terbaik Untuk Menulis Kode

Aturan No. 10 – Kompilasi semua Kode

Semua kode harus dikompilasi dari hari pertama pengembangan. Peringatan compiler harus diaktifkan pada pengaturan compiler yang paling tepat. Kode harus dikompilasi dengan pengaturan ini tanpa peringatan apa pun.

Semua kode harus diperiksa setiap hari dengan setidaknya satu (sebaiknya lebih dari satu) penganalisis kode sumber statis canggih dan harus lulus proses analisis tanpa peringatan.

Alasan :Ada banyak penganalisis kode sumber yang efektif yang tersedia di pasar; beberapa di antaranya adalah alat freeware. Sama sekali tidak ada alasan bagi pembuat kode untuk tidak menggunakan teknologi yang tersedia ini. Jika kompilator atau penganalisis statis menjadi bingung, kode yang menyebabkan kebingungan/kesalahan tersebut harus ditulis ulang sehingga menjadi lebih valid.

Baca:30 Penemuan Menakjubkan NASA yang Kita Gunakan Dalam Kehidupan Sehari-hari

Apa Kata NASA Tentang Aturan Ini?


Teknologi Industri

  1. Suhu Kritis untuk Superkonduktor
  2. Aturan untuk Derivatif
  3. Aturan untuk Antiturunan
  4. BigStitcher:Peta Google untuk Jaringan
  5. Mengembangkan Era Baru untuk Keamanan Pangan yang Lebih Cerdas
  6. Kasus untuk Mengupgrade Truk yang Sudah Tua
  7. Pengkodean untuk Proyek Otomasi Lebih dari sekadar Menulis Kode
  8. 3 Aturan Utama yang Perlu Diketahui untuk Kepatuhan UID
  9. Pemeliharaan:4 tips untuk menulis daftar periksa
  10. Buat prosedur keselamatan untuk pekerja dan teknisi