NASAが最小限のエラーで数百万行のコードを記述できるようにする10のルール

画像

マーガレット・ハミルトンは、彼女によって書かれたアポロ搭載コンピューターのソースコードの隣に立っています







ジェット推進研究所は、米国のほとんどの無人宇宙船を担当するNASAの研究センターです。 彼らはそこにたくさんのコードを書いており、普通のプログラマーよりもエラーを起こす権利が​​ずっと少ない。







JPLはCで記述されており、そのWebサイトには、組織内の厳しいコーディング標準を説明する「 JPL Institutional Coding Standard 」というドキュメントがあります。 リソースが限られている組み込みシステムやリアルタイムシステムのプログラミングルールに似ています。 しかし、ルールの多くは優れたプログラミングの原則にすぎません。 複雑さの制限、後続のコード読み取りおよびデバッグの最大限の単純化、副作用なし。 ヘクスレットでは、 ウェビナーで、そしてもちろんコース自体で常にこのことについて話します。 これらのトピックをできるだけ早く取り上げることが非常に重要であると考えているため、初心者向けに設計された最初のコースであるプログラミングの基礎で機能と副作用について話し始めます。 ちなみに、これは無料のコースであり、JavaScriptの練習があります。







重要な修正と追加をしてくれたポルチーニhabrayuzerに感謝します。

2006年、ジェラルドホルツマンとチームは、ドキュメント「 The Power of 10:Safety-Critical Codeを開発するためのルール 」でJPLの10の基本ルールを策定しました。 これらは、MISRA Cおよびその他の追加とともに、現在の標準の基礎を形成しました。 ウィキペディアの記事







これがこのリストの翻訳です。







  1. 分岐と条件を厳しく制限する必要があります。 goto、setjmp、longjmpは使用しないでください。直接または間接の再帰は使用しないでください。







  2. すべてのサイクルには制限が必要です。 検証プログラムは、特定の反復回数を超えることができないことを簡単に証明できる必要があります。 制限を静的に証明できない場合、ルールは違反していると見なされます。







  3. 初期化後に動的メモリ割り当てを使用しないでください。







  4. すべての関数は、1枚の標準用紙、1行ごとに1式、1定義ごとに1行に収まる必要があります。 これは通常、関数が60行を超えてはならないことを意味します。







  5. 関数ごとに2つ以上のアサーションはありません。 アサーションは、実際の起動時に発生しない異常な状態をチェックするために使用されます。 アセットには副作用を含めないでください。また、ブールテストとしてフォーマットする必要があります。 アサーションが落ちると、たとえば、呼び出し関数にフォール条件を戻すなど、特別な回復アクションを開始する必要があります。 検証プログラムが、アサートが決して失敗しない、または決して満たされないことを証明した場合、ルールは違反していると見なされます。 (このルールは、意味のない「アサート(true)」ではバイパスできません)。







  6. データを持つオブジェクトは、スコープの最も低い(可能な)レベルで宣言する必要があります。







  7. 非void関数の戻り値は、呼び出し元の関数で確認する必要があります。 パラメーターの有効性は、各関数内で確認する必要があります。







  8. プリプロセッサは、ヘッダーファイルと単純なマクロ定義を含めるためにのみ使用できます。 トークンの貼り付け、変数関数、および再帰的なマクロ呼び出しは禁止されています。 条件付きコンパイルディレクティブの使用は望ましくありませんが、避けられない場合があります。 これは、大規模なプロジェクトであっても、コンパイルディレクティブで1つまたは2つ以上の条件を使用することが適切なのは、まれな場合のみであることを意味します。







  9. ポインターの使用は制限する必要があります。 複数の逆参照レベルは許可されません。 参照解除演算子は、マクロ定義またはtypedef内で非表示にしないでください。 関数ポインターは使用できません。







  10. 開発の最初の日から最も細心の注意を払ったコンパイラ設定で、すべてのコードをすべての警告をオンにしてコンパイルする必要があります。 すべてのコードは、警告なしでこのような設定でコンパイルする必要があります。 すべてのコードは、今日利用可能な最高の静的コードアナライザーを使用して毎日(少なくとも1日に1回、できればより頻繁に)チェックする必要があり、警告なしで分析する必要があります。



All Articles