コード改善への近道

コード品質を改善する最も早い方法は、コード解析ツールを使用することです。実際は、機能安全認証のアプリケーションを扱う場合は静的解析が必要です。この種のツールは、コードに含まれる最も一般的な欠陥源を見つける助けとなるだけでなく、開発者がコード記述時、特に、ただスキャフォールドコードを生成して何かを機能させるだけというような場合に見逃しがちな問題を探し出す助けにもなります。この種のツールを使用すればコーディング標準に従うことになるので、より優れたコードを作成する助けとなります。

静的解析は、使用するソリューションの品質に応じて、作成したコードを机上でチェックしながら、他のさまざまな潜在的問題をチェックすることができます。その機能を理解するために、C-STAT静的解析ツールの実際の動作をチェックしてみましょう。C-STATは、MISRA C 2004および2012規則セット、MISRA C++ 2008規則セット、MITREの共通脆弱性タイプ一覧(CWE)、およびSEI CERT Cの規則を採用しています。コーディング標準への適合をチェックできる規則を図4に示します。

  • 標準と規則の選択

    図4 - 標準と規則の選択

カテゴリ内まで掘り下げて、プロジェクトに適用できると思われる規則だけを選択することができます。さらに、これらの選択をグループレベル、ファイルレベル、機能レベル、あるいは個々の行レベルにおいてもオーバーライドして、チェックする内容を非常に細かく指定することが可能です。ツールの設定後は、プロジェクト(またはグループもしくは個々のソースファイル)を解析できます。解析完了後はさらに各ファイルまで掘り下げて、発生した問題を確認することができます。

  • コード解析メッセージ

    図5 - コード解析メッセージ

図5で検出された問題「CERT-ERR33-C_c」は、CERT C規則の一部です。ほとんどの規則は説明不要ですが、詳細な説明が必要な場合は、ユーザーガイド、または図6に示すコンテキストヘルプ(F1)で参照できます。

  • コンテキストヘルプ

    図6 – コンテキストヘルプ

ヘルプウィンドウでは、問題の詳細、それがバグになる可能性とそのバグがもたらす結果の重大度、その問題が違反しているすべてのコーディング標準を参照することができます。最も重要な点は、図7に示すように、表示の一番下の部分に1~3個のコード例が表示されることです。これらは不適切なコード部分の例と、チェックをパスしてコードの信頼性を向上させるために、それらの例を修正する方法を示しています。これは、静的解析によって明らかになったソースコードのすべての欠陥を迅速に解決する助けとなります。

  • チェックで不合格となったコードと合格したコードの例

    図7 - チェックで不合格となったコードと合格したコードの例

自動化されたワークフロー

コード品質の確保は日々デスクで作業する開発者にとって重要なことですが、仮想マシン、コンテナ(Docker)、ランナーを含むCI/CDパイプライン用のモダンでスケーラブルなビルドサーバートポロジにとってはさらに重要です。

コード解析ツールは、大規模なチームの場合や多数のチームが世界中のさまざまな地域に分散している場合でも、プログラミング標準との適合性を確保するための自動化タスクを容易に実現できるように、十分なスケーラビリティを備えている必要があります。C-STAT静的解析ツールをLinux-Ubuntuのコマンドラインから使用する場合の方法を図8に示します。多くの自動化ワークフローにとって、クロスプラットフォームのサポートは、開発チームの効率アップのための基準となります。

  • 自動化ワークフロー

    図8 - 自動化ワークフロー

コード解析の助けを借りる

静的解析における理論上の大きな利点の1つは、システムの性能に影響を与えないことですが、これは解析実行時にシステムを動作させないからです。また、テストスイートの品質とも無関係です。要するに、実行中のコードで特定のエラーを見つけるには、特定のデータセットを使いプログラムを通じて特定のパスを実行する必要がありますが、静的解析ツールは、理論的に考えられるすべてのパスをコード全体にわたって検査することができます。

開発サイクルの早い段階で、あるいはコードの再利用時やソースコードの将来性を確保する際に、コードの品質管理を導入することにより、エラーの影響を最小限に抑えることができます。適切に定義されたコーディング標準を使ってRISC-Vデバイスによる開発を行う際、静的解析を簡単に行うことができれば、ソースコードに潜む問題を開発時に見つける助けとなり、それによって製品段階でエラーが発生した場合と比べて、エラーのコストを抑えることができます。

参考資料

[1] https://en.wikipedia.org/wiki/COCOMO
[2] https://www.misra.org.uk/misra-c/
[3] https://cwe.mitre.org/
[4] https://wiki.sei.cmu.edu/confluence/display/seccode/Top+10+Secure+Coding+Practices?focusedCommentId=88044413

著者プロフィール

Rafael Taubinger
IARシステムズ
テクニカルマーケティングスペシャリスト