メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

Bug Finder チェッカーの既定の動作の変更

Polyspace®Bug Finder™ 解析は、C/C++ コードのバグや外部コーディング規約違反をチェックします。既定で、Bug Finder チェッカーは次のように設計されています。

  • 誤検知をできるだけ減らす。

  • 事前に最小限の設定が必要。

ただし、プロジェクトによっては、一部のチェッカーの既定の動作を変更しなければならない場合があります。たとえば、一部のユーザー定義のデータ型を事実上の boolean 型として処理したり、Bug Finder で既定でアトミックと見なされる操作を伴うデータ レースを検出したりする必要がある場合です。

このトピックを使用して、Bug Finder チェッカーに可能な変更を確認してください。また、解析レポートでこれらのオプションを探すことで、チェッカーの既定の動作が変更されたかどうかを確認できます。

次の点に注意してください。

  • オプションでチェッカーを有効または無効にすることはできません。

    特定のチェッカーを有効または無効にするには、特定の Bug Finder の欠陥チェッカーの選択を参照してください。

  • これらのオプションを単独で使用すれば、既存のチェッカーの動作を変更できます。

    ターゲット プロセッサ タイプ、マルチタスキング オプション、外部制約などのオプションによっても、チェッカーの動作を変更できます。ただし、変更はそれらの操作の二次的影響として行われます。通常は、ターゲット環境が正確に反映されるようにこれらのオプションを指定します。

解析オプションによる欠陥チェッカーとコーディング ルールの変更

Bug Finder を使用している場合、解析オプションは 2 つの方法で使用します。次が可能です。

  • チェッカーの動作を変更する。

  • Polyspace によるコードの動作の解釈方法を変更する。

チェック動作の変更

Bug Finder の欠陥チェッカーとコーディング ルール チェッカーの既定の動作を変更するには、次のオプションを使用します。たとえば、より厳密なチェックを実行するには、-checks-using-system-input-values を使用します。

オプションオプションの値変更されるチェッカー変更
システムのすべての入力値を考慮する、さらに厳密なチェックを実行 (-checks-using-system-input-values) システム入力の数値に依存するチェッカーとコーディング ルール。拡張可能なチェッカーを参照してください。特定のシステム入力値から欠陥を見つけるための Bug Finder チェッカーの拡張を参照してください。
-consider-analysis-perimeter-as-trust-boundary 汚染されたデータの欠陥と関連するコーディング ルール違反。Polyspace 汚染データ チェッカーを参照してください。

既定では、汚染されたデータの欠陥では外部で取得されたデータが汚染されたものと見なされます。このオプションを使用すると、以下も汚染されたデータと見なされます。

  • 可視の呼び出し元がない、外部から可視の関数の仮パラメーター。

  • スタブ関数の戻り値。

  • ユニット外部のグローバル変数。

Polyspace 解析での汚染のソースを参照してください。

ガイドラインをチェック (-guidelines)

XML ファイル。

XML ファイルのエントリにより、ソフトウェア複雑度チェッカーのしきい値が定義されます

ソフトウェアの複雑度のガイドラインPolyspace チェッカーを使用してソフトウェアの複雑度を低減するを参照してください。
-detect-atomic-data-race 

既定では、これらのチェッカーは、非アトミック操作を伴うデータ レースにフラグを設定します。操作がアトミックの場合は、別のタスクまたはスレッド内の操作で割り込むことができません。このオプションを使用すると、データ レースにフラグを設定するときにすべての操作が考慮されます。

Extend Data Race Checkers to Atomic Operationsも参照してください。

-detect-bad-float-op-on-zero 

既定で、チェッカーは、オペランドのいずれかが 0.0 の場合に、等号演算子を使用した浮動小数点比較を無視します。このオプションを使用すると、0.0 を使用した比較にもフラグが設定されます。

Polyspace によるコードの解釈の変更

Polyspace によるコードの動作の解釈方法を変更するには、次に示すオプションを使用します。たとえば、コード内の特定のデータ型が実質的には boolean であることを示すには -boolean-types を使用し、コードの特定の動作を指定するには -code-behavior-specification を使用します。

オプションオプションの値変更されるチェッカー変更
有効な boolean 型 (-boolean-types)

データ型

これらのチェッカーによって検証されるルールは、boolean 型に関するものです。このオプションを使用すると、ユーザー定義の型を事実上の boolean 型として処理できます。

非有限の浮動小数点を検討 (-allow-non-finite-floats) 浮動小数点演算に関連するチェッカーとコーディング ルール。詳細は、非有限の浮動小数点を検討 (-allow-non-finite-floats) を参照してください。このオプションを使用すると、Polyspace は浮動小数点のチェックの際に無限大と NaN を考慮します。浮動小数点演算での無限大と NaN にフラグを設定するチェッカーは、無効になるか、フラグを設定する欠陥数が少なくなります。
許可されるプラグマ (-allowed-pragmas)

プラグマの名前

MISRA C:2004 Rule 3.4 と MISRA C++ Rule 16-6-1

これらのルールでは、すべてのプラグマ指令がコンパイラのドキュメンテーション内でドキュメント化されている必要があります。このオプションを使用すると、ドキュメント化されたプラグマとして指定されたプラグマが解析で考慮されます。

-code-behavior-specifications

XML ファイル。

XML ファイル内のエントリによって、ユーザー定義の関数が標準ライブラリ内の関数にマッピングされます。

標準ライブラリ関数に伴う問題を検出するチェッカーとコーディング ルール。拡張可能なチェッカーを参照してください。標準ライブラリ関数用の Bug Finder チェッカーのカスタム ライブラリへの拡張を参照してください。

XML ファイル。

XML ファイル内のエントリによって、ユーザー定義の同時実行プリミティブが Bug Finder で自動的に検出可能なプリミティブにマッピングされます。

同時実行の欠陥および関連コーディング ルール。拡張可能なチェッカーを参照してください。

サポートされていないマルチスレッド環境への同時実行欠陥チェッカーの拡張を参照してください。

XML ファイル。

XML ファイル内のエントリには、ソース コードでの使用を禁止する関数、キーワード、またはマクロが示されます。

拡張可能なチェッカーを参照してください。Bug Finder チェッカーを使用した非推奨の関数または安全でない関数、キーワード、またはマクロのフラグ設定を参照してください。

XML ファイル。

XML ファイル内のエントリは、ポインター引数が初期化されたバッファーを指さなければならない関数を示しています。

拡張可能なチェッカーを参照してください。関数引数のポインター渡しをチェックする初期化のためのチェッカーの拡張を参照してください。

XML ファイル。

XML ファイル内のエントリによって、制御フロー ステートメントの入れ子の最大深度など、プログラムのグローバルな要素の制限を定義します。

MISRA C:2012 Rule 1.1

ルール チェッカーの次のパラメーターは増減できます。

  • 制御フロー ステートメントで許容される入れ子の最大深度

  • インクルード ファイルの使用で許容される、インクルードの最大レベル

  • 列挙で許容される定数の最大数

  • 翻訳単位で許容されるマクロの最大数

  • 構造体で許容されるメンバーの最大数

  • 構造体で許容される入れ子の最大レベル

Modify Bug Finder Checkers Through Code Behavior Specificationsを参照してください。

XML ファイル。

XML ファイル内のエントリによって、2 つの識別子を別個であると見なすまでに比較する文字数を定義します。

これらのルールでは、特定のタイプの識別子が一意であることが必要です。たとえば、Rule 5.1 では外部識別子が別個であることが必要です。

2 つの識別子に違いがあっても、その違いが先頭から num 文字目より後で発生している場合は、ルール チェッカーはこれらの識別子が同一であると見なします。パラメーター num は外部識別子と内部識別子では別個に変更できます。

Modify Bug Finder Checkers Through Code Behavior Specificationsを参照してください。

XML ファイル。

XML ファイル内のエントリによって、関数がリアルタイム関数および動的メモリを管理する関数として定義されます。

AUTOSAR C++14 Rule A18-5-7

このルールでは、動的メモリの割り当てと割り当て解除がリアルタイムに実行されないことが規定されます。Polyspace は、コード内のいずれの関数もリアルタイムで実行されず、特定の標準ライブラリ関数のみが動的メモリを管理すると仮定します。

関数をリアルタイム関数としてコードで指定するには、動作 REAL_TIME_FUNC を使用します。

関数を動的メモリの割り当てまたは割り当て解除を行う関数としてコードで指定するには、動作 MANAGES_MEMORY を使用します。

Modify Bug Finder Checkers Through Code Behavior Specificationsを参照してください。

XML ファイル。

XML ファイル内のエントリによって、例外処理または動的メモリの管理を行う関数が定義されます。

AUTOSAR C++14 Rule A15-0-7

このルールは、例外処理関数で確定的最悪実行時間が確保される必要があることを規定します。Polyspace は、一般的に使用される例外処理関数と動的メモリ管理関数を認識します。

関数を動的メモリの割り当てまたは割り当て解除を行う関数としてコードで指定するには、動作 MANAGES_MEMORY を使用します。

関数を、例外を処理する関数としてコードで指定するには、動作 EXCEPTION_HANDLING を使用します。

Modify Bug Finder Checkers Through Code Behavior Specificationsを参照してください。

XML ファイル。

XML ファイルのエントリにより、クリティカルなデータ メンバーが定義されます。

このチェッカーは、public として宣言されているクリティカルなデータ メンバーにフラグを設定します。既定では、Polyspace はどのデータ メンバーもクリティカルではないと仮定します。

コードでクリティカルなデータ メンバーを指定するには、動作 CRITICAL_DATA を使用します。

Modify Bug Finder Checkers Through Code Behavior Specificationsを参照してください。

Datalog ファイル。

Datalog ファイル内のエントリは、SQL または LDAP インジェクション チェッカーに関連する関数を定義します。

SQL インジェクションLDAP インジェクション

SQL または LDAP インジェクションの影響を受けやすいカスタム関数、SQL または LDAP クエリをサニタイズする関数などを指定します。

Modify Bug Finder Checkers Through Code Behavior Specificationsを参照してください。

参考

トピック