データフロー解析 (DFA) は、関数内で変数がとり得る値の範囲や、if 文等の分岐による処理の流れを考慮した解析で以下のような問題点を検出します。
また、メトリックスには『DFA を実施した場合にのみ計測』されるものがあります。
DFA を実施するには『1次解析』がエラーなく完了している必要があります。Helix QAC 2022.3 (QAC 10.4.0 / QAC++ 5.4.0) 以前は DFA は1次解析の一部ですが、1次解析とは分けて考える場合もあります。
DFAで検出される問題点
- 配列の領域外アクセス
- ゼロ除算
- NULLポインタアクセス
- オーバーフロー、ラップアラウンド
- 値が設定されていない変数の使用
- 常に「真」または「偽」になる式
- 到達不能なコード
- 無限ループ
- 別々のオブジェクトを指すポインタ同士の比較
- 別々のオブジェクトを指すポインタ同士の差
- 過剰な右または左シフト
- return文が欠落しているコード
- 負の値を符号なし型に代入しているコード
- 冗長な代入式
...