###導入###
| はじめに: NASA のトッププログラマーがミッションクリティカルなコードをどのように書いているかご存知ですか?コードをより明瞭、安全、理解しやすいものにするために、NASA のジェット推進研究所は 10 のコーディング ルールを開発しました。
|
NASA での開発者の仕事は、プログラミングの世界で最も困難なものの 1 つです。彼らの主な焦点は、コードを記述し、安全でミッションクリティカルなアプリケーションを開発することです。このため、厳密なコーディング ルールに従うことが重要になります。これらのルールは、コーディング スタイル、言語機能の使用など、ソフトウェア開発の多くの側面をカバーしています。適切なコーディング標準について合意することは困難ですが、NASA のジェット推進研究所 (JPL) は、Powers of Ten: Rules for Developing Secure Critical Code と呼ばれる一連のコーディング ルールに従っています。
JPL は長い間 C を使用しているため、これらのルールは主に C で書かれたプログラムを対象としています。ただし、これらのルールは他のプログラミング言語にも簡単に適用できます。これらのコーディング ルールは、主にセキュリティを確保するために、JPL の主任科学者である Gerard J. Holzmann によって開発されました。
NASA のミッションクリティカルなコード作成に関する 10 のルール:
すべてのコードを非常に単純な制御フロー構造に制限します。goto ステートメント、setjmp または longjmp 構造、間接的または直接的な再帰呼び出しは禁止します。
- すべてのループには固定の上限が必要です。ループが事前に設定された反復上限に到達できないことを検出ツールによって静的に確認する必要があります。この上限が静的に証明できない場合は、この原則に違反していると見なすことができます。
- 初期化後に動的メモリ割り当てを使用しないでください。
- 1 行に 1 つのステートメントと 1 行に 1 つの宣言という標準形式を参照する場合、関数の長さは紙 1 枚を超えてはなりません。通常、これは関数あたりのコードが 60 行以下であることを意味します。
- コード内のアサーションの密度は、関数ごとに平均して 2 アサーションと低くなります。アサーションは、実際の実行では起こりそうもない状況を検出するために使用されます。アサーションには副作用があってはならず、ブール テストとして定義する必要があります。アサーションが失敗した場合は、アサーションに失敗した関数の呼び出し元にエラー状態を返すなど、明示的な回復アクションを実行する必要があります。静的ツールの場合、静的ツールによって決して失敗しない、または決して起動しないことが証明できるアサーションはすべて、このルールに違反します (たとえば、無駄なassert(true) ステートメントを追加してこのルールを満たすことは不可能です)。
- データ オブジェクトは最小のスコープで宣言する必要があります。
- void 以外の関数の戻り値は、関数が呼び出されるたびにチェックする必要があり、そのパラメーターの有効性は各関数内でチェックする必要があります。
- プリプロセッサの使用は、ヘッダー ファイルと単純なマクロ定義を含めることに限定されます。シンボルの結合、可変長引数リスト (省略記号)、および再帰マクロ呼び出しは許可されません。すべてのマクロは、完全な構文単位に拡張可能である必要があります。条件付きコンパイル ディレクティブの使用はわかりにくいことがよくありますが、常に回避できるわけではありません。これは、大規模なソフトウェア開発であっても、ヘッダー ファイルを複数回インクルードすることを避けるという標準的な慣例を超えて、1 つまたは 2 つ以上の条件付きコンパイル ディレクティブに正当な理由が必要であることを意味します。コード内でこれを行うたびに、ツールベースのチェッカーによってフラグが付けられる必要がありますが、それには十分な理由があります。
- ポインターの使用は制限されるべきです。特に、ポインターの逆参照は 1 レベルを超えてはなりません。ポインター逆参照操作をマクロ定義または型宣言で暗黙的に行うことはできません。また、関数ポインターは使用できません。
- 開発初日から、コンパイラによって有効になっている最高レベルの警告オプションを使用してコードをコンパイルする必要があります。この設定では、コードは警告なしでコンパイルする必要があります。コードは、少なくとも 1 日に 1 回以上、ソース コード静的解析ツールを使用してチェックされ、警告なしで合格する必要があります。
-
これらのルールに関して、NASA は次のように述べています:
これらのルールは車のシートベルトのようなもので、最初は少し不快に感じるかもしれませんが、しばらくすると習慣になり、使用しないことは考えられません。
###著者について:###
Adarsh Verma は Fossbytes の共同創設者であり、オープンソース、技術の進歩、完全性に常に注目してきた尊敬される起業家です。電子メールで彼に連絡できます —
[email protected]
以上がNASA のようなプログラミング コードを書くのに役立つトップ プログラマーになるための 10 のガイド!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。