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