首頁  >  文章  >  系統教程  >  NASA優秀程式設計師的十項程式設計原則

NASA優秀程式設計師的十項程式設計原則

WBOY
WBOY轉載
2024-01-15 16:03:32815瀏覽

NASA優秀程式設計師的十項程式設計原則

#NASA 的開發者是程式設計界最具挑戰性的工作之一。他們編寫程式碼並將開發安全的關鍵任務應用程式作為其主要關注點。

在這種情況下,遵守一些嚴格的編碼規則是重要的。這些規則涵蓋軟體開發的多個方面,例如軟體應該如何編碼、應該使用哪些語言特性等。

儘管很難就一個好的編碼標準達成共識,NASA 的噴射推進實驗室(JPL)遵守一個編碼規則,其名為「十的次方:開發安全的關鍵代碼的規則」。

由於 JPL 長期使用 C 語言,這個規則主要是針對於 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中文網其他相關文章!

陳述:
本文轉載於:linuxprobe.com。如有侵權,請聯絡admin@php.cn刪除