コンテンツ
データフロー解析 (DFA) は、関数内で変数がとり得る値の範囲や、if 文等の分岐による処理の流れを考慮した解析で以下のような問題点を検出します。
また、メトリックスには『DFA を実施した場合にのみ計測』されるものがあります。
DFA を実施するには、DFAを除く『1次解析』がエラーなく完了している必要があります。DFA は1次解析の一部ですが、1次解析とは分けて考える場合もあります。
DFAで検出される問題点
- 配列の領域外アクセス
- ゼロ除算
- NULLポインタアクセス
- オーバーフロー、ラップアラウンド
- 値が設定されていない変数の使用
- 常に「真」または「偽」になる式
- 到達不能なコード
- 無限ループ
- 別々のオブジェクトを指すポインタ同士の比較
- 別々のオブジェクトを指すポインタ同士の差
- 過剰な右または左シフト
- return文が欠落しているコード
- 負の値を符号なし型に代入しているコード
- 冗長な代入式
など
DFA は QAC 6.2 / QAC++ 3.0 で導入され、バージョンアップと共に改良されてきております。
特に QAC では QAC 8.0 において大幅に改良されました。これに伴って QAC 8.0 以降では、DFA によって検出される警告メッセージが変更になっています。
DFA によって検出される警告メッセージ、QAC 7.2.3 以前と QAC 8.0 以降の DFA による警告メッセージの対応は『データフロー解析 (DFA) のメッセージ』をご覧ください。
QAC 7.2.3 以前のバージョンの QAC では DFA は常に実施されていましたが、QAC 8.0 以降および、QAC++ では DFA は標準状態では実施しない設定になっております。
ただし QAC 8.2.2 / QAC++ 3.2.2 以降で MISRA C などのコンプライアンスモジュールを使用する場合は DFA は標準状態で実施する設定になっております。