こちらの記事は、Riccardo Giorato 氏により2019年10月に公開された『 The Power of 10 — NASA’s Rules for Coding 』の和訳です。
本記事は原著者から許可を得た上で記事を公開しています。
※Riccardo Giorato氏の個人ページはこちら
NASAの10のルールは、コードのレビューや静的解析を困難にするC言語のコーディング手法をなくすことを目的としています。
NASAはこちらの10のルールについて、以下の通り述べています。
このルールは、車のシートベルトのように機能します。最初は少し違和感があるかもしれませんが、しばらくするとその使い方が第二の習慣のようになり、使わないことは想像できなくなります。
10のルールの力は、2006年にNASA/JPL研究所のGerard J. Holzmannによって信頼性の高いソフトウェアのために作成されました。それらのルールは、レビューや静的解析が難しいC言語のコーディング手法をなくしていくことを目的としています。これらの規則は、MISRA Cガイドラインを補完するものであり、より多くのJPLコーディング標準に組み込まれています。
NASAの10のコーディングルール
- goto文や再帰呼び出しのような複雑なフロー構造を避ける
- すべてのループは必ず固定のリミットを設ける(コードの暴走を防ぐことができます。)
- ヒープメモリの割り当てを避ける
- 一画面に収まるように関数を短縮する
- 関数ごとに最低2つの実行時アサーションを使用する
- データの範囲を可能な限り小さく制限する
- すべての非void関数の戻り値をチェックする、またはvoidに型変換して戻り値が不要であることを示す
- プリプロセッサを控えめに使う
- ポインタの使用を単一の間接参照に制限し、関数ポインタは使用しない
- 起こり得るすべての警告を有効にしてコンパイルする。ソフトウェアのリリース前に必ずすべての警告に対処する
上記のルールはC言語のために定義されたものではありますが、中にはモダンなWebやモバイルアプリのプロジェクトでも使えるかもしれません。いくつかピックアップしてみました。
1. GotoやRecursionのような複雑なフロー構成を避ける
forで処理できるようなシンプルな重複するタスクを作成する必要がない場合は、再帰呼び出しを使用しません。火星や月、海の底など、マシンに直接アクセスできない場所での再帰は非常に危険です!
2.すべてのループは必ず固定のリミットを設ける
1つ目のルールと似ていますが、ループ処理も無限ループやコードの暴走を防ぐために、固定のリミットを作ります。
4. 一画面に収まるように関数を短縮する
関数の長さを1ページに短縮すると、プログラムの特定のルーチンのすべての機能を把握しやすくなります。
この長さを超えると、コードに追加するアクションが多すぎることを示します。
コードの重複を防ぐために関数を小さな関数に分割していないという別の問題も起こるかもしれません。
6. データの範囲を可能な限り小さく制限する
もしJavaScriptを使っているとしたら決してvarを使ってはいけません。常にletを使用して、変数のリークや上書き、ゴースト化を防ぎます。C#のような言語にも同じことが言えます。
privateやprotectedのように最も堅牢で小さい範囲で値を使ってください。
10.起こりえるすべての警告を有効にしてコンパイルする。ソフトウェアのリリース前にすべての警告に対して対処する必要があります。
JavaScriptではコードをコンパイルしませんが、コードから警告を得るために、簡単にESLintや同様なツールを利用できます。
役に立たないと思っても、すべてを削除して修正すべきです。
これで火星にコードをローンチする準備は万端です!
翻訳協力
Original Author: Riccardo Giorato
Thank you for letting us share your knowledge!
この記事は以下の方々のご協力により公開する事が出来ました。
改めて感謝致します。
選定担当: @r_pg10
翻訳担当: @r_pg10
監査担当: tsurumaki
公開担当: @r_pg10
ご意見・ご感想をお待ちしております
今回の記事は、いかがだったでしょうか?
・こうしたら良かった、もっとこうして欲しい、こうした方が良いのではないか
・こういったところが良かった
などなど、率直なご意見を募集しております。
いただいたお声は、今後の記事の質向上に役立たせていただきますので、お気軽にコメント欄にてご投稿ください。
みなさまのメッセージをお待ちしております。