NASA 頂級程式設計師是如何程式設計的?這裡有十大準則

2021-08-10 19:44:53 字數 1553 閱讀 2414

美國國家航空航天局(nasa)開發人員的工作是程式設計界最具挑戰性的工作之一。 他們編寫**並開發關鍵任務應用程式,安全是他們主要關注的重點。

在這種情況下,制定嚴謹的編碼準則並遵循,對於他們來說十分重要。這些規則涵蓋了軟體開發的各個方面,如應該如何編寫軟體,應該使用哪些語言特性等等。

儘管很難就乙個編碼標準達成共識,nasa 的 jpl 首席科學家 gerard j. holzmann 還是制定了一套名為「發展安全關鍵**的十大規則」的**準則,由所有工作人員共同遵循。

由於 jpl 的工作內容與 c 語言相關,因此本指南主要關注用 c 程式語言編寫的**。但也可以靈活運用到其他語言上。

1、簡化控制流程:使用盡可能精簡的控制流程構造編寫程式 – 不要使用 setjmp 或 longjmp 構造、goto 語句,以及直接或間接的遞迴呼叫。

2、為迴圈使用固定次數上限:所有的迴圈必須有乙個固定的上限。 必須可以被某個檢測工具靜態證實,該迴圈不能達到預置的迭代上限值。如果該上限值不能被靜態證實,那麼可以認為違背該原則。

3、不要在初始化完成後進行動態記憶體分配。

4、不使用冗長的函式:如果標準格式為乙個語句一行、乙個宣告一行,那麼函式的長度應在一張紙的範圍內,即每個函式的**行不能超過 60。

5、低斷言密度:**中斷言的密度平均低至每個函式 2 個斷言。斷言被用於檢測在實際執行中的異常情況。斷言必須沒有***,並應該定義為布林測試。當乙個斷言失敗時,應該執行乙個明確的恢復操作,例如,把錯誤情況返回給執行該斷言失敗的函式呼叫者。對於靜態工具來說,任何能被靜態工具證實其永遠不會失敗或永遠不能觸發的斷言違反了該規則(例如,通過增加無用的 assert(true) 語句是不可能滿足這個規則的)。

6、以最小範圍級別宣告資料物件:該原則同時也是資料隱蔽(data hiding)的基本原則。所有資料物件均必須以盡可能最小的範圍級別進行宣告。

7、檢查引數和返回值:應在每次呼叫函式後檢查非空函式的返回值,並在每個函式內部檢查引數的有效性。

8、限制預處理程式的使用:預處理器的使用僅受包含標頭檔案和簡單的巨集定義的限制。符號拼接、可變引數列表(省略號)和遞迴巨集呼叫不被允許。所有的巨集必須擴充套件為完整的語法單元。通常不建議使用條件編譯指令,但也不總是能夠避免每次在**中這樣做的時候必須有基於工具的檢查器進行標記,並有充足的理由。

9、限制指標的使用:具體來說,不允許有超過一級的解除指標引用。解除指標引用操作不可隱藏在巨集定義或型別宣告中。不允許使用函式指標。

10、編譯所有**:從開發工作第一天開始時,在編譯器開啟最高端別警告選項的條件下對**進行編譯。在此設定之下,**必須零警告編譯通過。**必須通過源**靜態分析工具,每天檢查一次以上,且零警告通過。

關於這些準則,nasa 這樣評價到:

這些準則就像要求你坐車的時候必須系上安全帶一樣,剛開始可能會讓你覺得不舒服,但之後你就會慢慢習慣,並開始無法接受沒有它的日子。

程式設計師是如何喝酒的

大家喝的是啤酒。這時你入座了。你給自己倒了杯可樂,這叫低配置。你給自已倒了杯啤酒,這叫標準配置。你給自己倒了杯茶水,這茶的顏色還跟啤酒一樣,這叫木馬。你給自己倒了杯可樂,還滴了幾滴醋,不僅顏色跟啤酒一樣,而且不冒熱氣還有泡泡,這叫超級木馬。你的同事給你倒了杯白酒,這叫推薦配置。人到齊了,酒席開始了。...

程式設計師是如何喝酒的

程式設計師是如何喝酒的 大家喝的是啤酒。這時你入座了。你給自己倒了杯可樂,這叫低配置。你給自已倒了杯啤酒,這叫標準配置。你給自己倒了杯茶水,這茶的顏色還跟啤酒一樣,這叫木馬。你給自己倒了杯可樂,還滴了幾滴醋,不僅顏色跟啤酒一樣,而且不冒熱氣還有泡泡,這叫超級木馬。你的同事給你倒了杯白酒,這叫推薦配置...

程式設計師是如何喝酒的

大家喝的是啤酒.這時你入座了.你給自己倒了杯可樂,這叫低配置.你給自已倒了杯啤酒,這叫標準配置.你給自己倒了杯茶水,這茶的顏色還跟啤酒一樣,這叫木馬.你給自己倒了杯可樂,還滴了幾滴醋,不僅顏色跟啤酒一樣,而且不冒熱氣還有泡泡,這叫超級木馬.你的同事給你倒了杯白酒,這叫推薦配置.人到齊了,酒席開始了....