JavaScript is not currently enabled, but is required for full CodeSonar manual search and browse functionality.
If you are viewing this file in your hub's Web GUI, enable JavaScript in your browser: you will also need it for GUI functionality.
If you opened this file directly from disk, your browser may be directly suppressing JavaScript functionality: certain browsers perform this suppression on local files (but not files delivered by web servers) for security reasons.
| CodeSonar® 9.0p0 Hot Tips | CONFIDENTIAL | CodeSecure Inc |
CodeSonarの解析では、関数内のいくつかのコードは解析されません;解析されないもののなかで最も重要な命令文の形式は呼び出しとなります。
これと、その他の解析されないコードのワーニングクラスは一般的に全てのコードの解析を許可する SEARCH_BOUND 設定パラメータの値が十分に高くないために起こります。
これらのワーニングを減らすためにこの値を高くすると、解析時間が長くなります。
実際のプログラムの多くでは、解析されないコードの全てのワーニングを出力しないように search bound を高くすると、実用的ではないほど解析時間が長くなります。
これらのクラスは、パスカバレッジよりもコードカバレッジに関係しています。いくつかの場合では、プロシージャを介した可能性のあるパスの厳密なサブセットのプロシージャ内の全てのコードを網羅することは可能です。
| クラス名 | Unexercised Call | |||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 日本語クラス名 | 解析されない呼び出し | |||||||||||||||||||||||||||||||||||||||
| クラス分類 | 診断 (diagnostic) | |||||||||||||||||||||||||||||||||||||||
| ニーモニック | DIAG.UNEX.CALL | |||||||||||||||||||||||||||||||||||||||
| カテゴリー |
|
|||||||||||||||||||||||||||||||||||||||
| 対応言語 | C および C++ で利用可能です。 |
|||||||||||||||||||||||||||||||||||||||
| 有効/無効設定 | このワーニングクラスのチェックはデフォルトで無効になっています。チェックを有効にするにはプロジェクト設定ファイル
(configuration file)に以下の WARNING_FILTER ルールを追加してください。
WARNING_FILTER += allow class="Unexercised Call" このワーニングクラスは、コード内の問題に対する警告検出というより、診断解析を目的としています。 その為、通常はCodeSonarのpresetsで有効になることはありません。特に、all_warningclasses presetでさえも、有効にはなりませんことを留意して下さい。 |
簡潔な説明のために、設定値を減らすために、設定ファイルで以下の設定を加えたとします。
SEARCH_BOUND=3
SEARCH_BOUND=3の場合、CodeSonarはunex_call()のプロシージャの3つのパスのみ探索します。
しかしながら、プロシージャには4つのパスがあり、3つのパスのみが探索された場合、switch caseの一つは解析されません。
各々の switch caseで最も重要な命令文の形式は呼び出しなので、解析されない呼び出しワーニングはそれらの文のいずれか一つで発生します。
ソースコードの中でどの一つなのかを正確に予想することはできません。それはCodeSonarのビルドと解析のいくつかの現象によります。
void f(void);
int g(void);
void unex_call(int j)
{
int i=g();
switch( j )
{
case __LINE__: f(); j++; if (i) i=4; return; break; /* 'Unexercised Call' warning issued either here... */
case __LINE__: f(); j++; if (i) i=4; return; break; /* ...or here... */
case __LINE__: f(); j++; if (i) i=4; return; break; /* ...or here... */
default: f(); j++; if (i) i=4; return; break; /* ...or here. */
}
}
以下のテーブルリストは重要度に応じた解析されないワーニングクラスで、最も重要な(”解析されない呼び出し”)が最初に来ています。実行されない呼び出しブロックに関連したワーニングクラスはブロック内の命令文で最も重要なクラスに適用されます。
| ワーニングクラス名 | 解析されないセットで最も重要な命令文 |
|---|---|
| Unexercised Call 解析されない呼び出し |
呼び出しサイト |
| Unexercised
Computation 解析されない計算 |
加算等のデータ計算を実行する命令文 |
| Unexercised
Conditional 解析されない条件文 |
if, while, switch, ?, &&, || 等の分岐命令 |
| Unexercised Data Flow 解析されないデータフロー |
単純な割り当て、値を持ったリターン命令 |
| Unexercised
Control Flow 解析されないコントロールフロー |
break, goto, continue もしくは値の無いリターン等のコントロールフローに影響する、分岐ではない命令文 |
設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。