首頁 系統教程 Linux 成為頂尖程式設計師的十項指南,幫助你寫類似NASA的程式碼!

成為頂尖程式設計師的十項指南,幫助你寫類似NASA的程式碼!

Jan 06, 2024 pm 07:02 PM
linux 紅帽

導讀 引言: 你知道 NASA 頂級程式設計師如何寫關鍵任務程式碼麼?為了確保代碼更清楚、更安全、且更容易理解,NASA  的噴射推進實驗室制定了 10 項編碼規則。

十条准则帮助你像 NASA 顶级程序员一样编程!

#NASA的開發者工作是程式設計界中最具挑戰性的之一。他們的主要關注是編寫程式碼和開發安全的關鍵任務應用程式。為此,遵守嚴格的編碼規則變得至關重要。這些規則涵蓋了軟體開發的多個方面,包括編碼風格、語言特性的使用等。儘管很難就一個合適的編碼標準達成共識,但NASA的噴射推進實驗室(JPL)遵循著一套名為《十的次方:開發安全的關鍵代碼的規則》的編碼規則。

這些規則主要是為了針對C語言所寫的程式而設立的,因為JPL長期以來一直使用C語言。然而,這些規則也可以輕鬆地應用於其他程式語言。這些編碼規則由JPL的首席科學家Gerard J. Holzmann制定,主要是為了確保安全性。

NASA 的 10 條寫關鍵任務程式碼的規則:

  1. 限制所有程式碼為極為簡單的控制流結構 — 不用 goto 語句、setjmp 或 longjmp 結構,且不用間接或直接的遞歸呼叫。
  2. 所有循環必須有一個固定的上限值。必須可以被某個偵測工具靜態證實,該迴圈不能達到預置的迭代上限值。如果該上限值不能被靜態證實,那麼可以認為違反該原則。
  3. 在初始化後不要使用動態記憶體分配。
  4. 如果一個語句一行、一個宣告一行的標準格式來參考,那麼函數的長度不應該比超過一張紙。通常這意味著每個函數的程式碼行不能超過 60。
  5. 程式碼中斷言的密度平均低至每個函數 2 個斷言。斷言被用來偵測那些在實際執行上不可能發生的情況。斷言必須沒有副作用,並且應該定義為布林測試。當一個斷言失敗時,應該執行一個明確的恢復動作,例如,把錯誤情況傳回給執行該斷言失敗的函數呼叫者。對於靜態工具來說,任何能被靜態工具證實其永遠不會失敗或永遠不能觸發的斷言違反了該規則(例如,通過增加無用的assert(true)語句是不可能滿足這個規則的)。
  6. 必須在最小的範圍內宣告資料物件。
  7. 非 void 函數的回傳值在每次函數呼叫時都必須檢查,且在每個函數內其參數的有效性必須進行檢查。
  8. 預處理器的使用僅限制於包含頭檔和簡單的巨集定義。符號拼接、可變參數清單(省略號)和遞歸巨集呼叫都是不允許的。所有的巨集必須能夠擴展為完整的語法單元。條件編譯指令的使用通常是晦澀的,但也不總是能夠避免。這意味著即使在一個大型的軟體開發中超過一兩個條件編譯指令也要有充足的理由,這超出了避免多次包含頭檔的標準做法。每次在程式碼中這樣做的時候必須有基於工具的檢查器進行標記,並有充足的理由。
  9. 應該限制指標的使用。特別是不應該有超過一級的解除指標引用。解除指標參考操作不可以隱含在巨集定義或型別聲明中。還有,不允許使用函數指標。
  10. 從開發的第一天起,必須在編譯器開啟最高等級警告選項的條件下對程式碼進行編譯。在此設定之下,程式碼必須零警告編譯通過。程式碼必須利用原始碼靜態分析工具每天至少檢查一次或更多次,且零警告通過。

關於這些規則,NASA 是這麼評價的:

這些規則就像汽車中的安全帶一樣,剛開始你可能感到有一點不適,但是一段時間後就會養成習慣,你會無法想像不使用它們的日子。

 


作者簡介:

Adarsh Verma 是 Fossbytes 的共同創辦人,他是一位令人尊敬的企業家,他一直對開源、技術突破和完全保持密切關注。可以透過郵件聯絡他 — [email protected]


以上是成為頂尖程式設計師的十項指南,幫助你寫類似NASA的程式碼!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
Linux體系結構:揭示5個基本組件 Linux體系結構:揭示5個基本組件 Apr 20, 2025 am 12:04 AM

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

git怎麼查看倉庫地址 git怎麼查看倉庫地址 Apr 17, 2025 pm 01:54 PM

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

vscode上一步下一步快捷鍵 vscode上一步下一步快捷鍵 Apr 15, 2025 pm 10:51 PM

VS Code 一步/下一步快捷鍵的使用方法:一步(向後):Windows/Linux:Ctrl ←;macOS:Cmd ←下一步(向前):Windows/Linux:Ctrl →;macOS:Cmd →

notepad怎麼運行java代碼 notepad怎麼運行java代碼 Apr 16, 2025 pm 07:39 PM

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

sublime寫好代碼後如何運行 sublime寫好代碼後如何運行 Apr 16, 2025 am 08:51 AM

在 Sublime 中運行代碼的方法有六種:通過熱鍵、菜單、構建系統、命令行、設置默認構建系統和自定義構建命令,並可通過右鍵單擊項目/文件運行單個文件/項目,構建系統可用性取決於 Sublime Text 的安裝情況。

laravel安裝代碼 laravel安裝代碼 Apr 18, 2025 pm 12:30 PM

要安裝 Laravel,需依序進行以下步驟:安裝 Composer(適用於 macOS/Linux 和 Windows)安裝 Laravel 安裝器創建新項目啟動服務訪問應用程序(網址:http://127.0.0.1:8000)設置數據庫連接(如果需要)

Linux的主要目的是什麼? Linux的主要目的是什麼? Apr 16, 2025 am 12:19 AM

Linux的主要用途包括:1.服務器操作系統,2.嵌入式系統,3.桌面操作系統,4.開發和測試環境。 Linux在這些領域表現出色,提供了穩定性、安全性和高效的開發工具。

git軟件安裝 git軟件安裝 Apr 17, 2025 am 11:57 AM

安裝 Git 軟件包括以下步驟:下載安裝包運行安裝包驗證安裝配置 Git安裝 Git Bash(僅限 Windows)

See all articles