デッドコード分析
静的解析ツールAxivion Suiteでデッドコードと到達不可能なコードを検出する方法
静的解析ツールAxivion Suiteは、以下のタイプの解析に基づいて、実行されないコードを検出します。
Axivion Suiteは、解析対象ソフトウェアの呼び出し関係(つまり、プロシージャ間の制御フロー)の到達可能性解析によって、デッドファンクションを検出します。システムのプログラムエントリーポイント(メイン、割り込みハンドラ、コールバックなど)からこれらの関数への接続がないため、これらの関数が呼び出されることはなく、したがって実行されることもありません。
より深い解析によって、個々の関数内で静的にアクセスできないコード領域や、プログラムロジックの観点からアクセスできないコード領域(到達不可能なコード、デッドコード、実行不可能なパス、到達不可能なステートメント、冗長なキャッチブロック) も見つけることができます。これらの解析は、MISRAなどの対応するコーディングガイドラインによって使用されます。
例えば、return文の直後にあるコードです。別の例としては、条件に関連する変数の値のために決して通過されないelse分岐があります。無限ループも検出できます。
デッドコードで視界を遮らせない
実行されないコードにも注意が必要です。
デッドコードは、理解やテスト、保守性を複雑にします。したがって、開発プロセスでコードに加えられた変更によって影響を受ける領域に特に注意を払うべきです。
以下のように考えてみてください:
- これは意図的に起きたことなのか、また、これらのコード行を完全に削除することは可能なのでしょうか?
- このコードが必要になることはあるのでしょうか?
- このコードは、スプリントや開発サイクルの終わりまでに最新の状態にする必要があるのでしょうか?
ここで、静的解析ツールAxivion Suiteの差分解析が活躍します。この直接的なフィードバックによって、予防的なバグ修正や閾値の低いリファクタリングが最適化されます。
ライブラリを構築していますか?割り込みを使用していますか?
デッドコード分析の典型的な難点は、ライブラリ、フレームワーク、製品ファミリー全体を開発する開発者に関係します。
このような場合、解析を単一のアプリケーションに限定することはできません。むしろ、完全な解析のためには、適切なセットアップでアプリケーションの全セットを解析に与えなければなりません。
デッドコードに関する質問の文脈に応じて、「生きている」部分はさまざまな設定オプションによって指定することができます。例えば、APIは解析によって「生きている」と見なされるようにマークすることができます。
オペレーティングシステムの呼び出しメカニズムを設定することで、典型的なユースケースをシミュレートし、解析中に適宜インターフェースを考慮することができます。
構成オプションは、割り込みサービスルーチンや割り込みハンドラの処理にも便利です。割り込み処理に対応する関数は、すでにプログラムコード(キーワード割り込み、属性の使用)のレベルでアライブとしてマークすることができます。
防御的なコーディングを行っていますか?
防御的プログラミングのパラダイムは、堅牢なソフトウェアの開発には非常に適していますが、静的解析の観点からはしばしばデッドコードや到達不能なコードを生み出すことがあります。
デッドコードは、通常の安全基準では禁止されています。それはプログラミングにエラーを引き起こすことが多いからです。そのため、Axivion Suiteでは、ワークフローでデッドコードを「意図的に」適切にマークし、逸脱管理で適切に考慮するための柔軟な設定ツールが用意されています。