このセクションでは、C++testに付属の RuleWizard ツールを使って独自のユーザー定義ルールを作成する方法について説明します。
このセクションの内容 :
ルールのカスタマイズ
C++test の静的解析で重要なことは、使用する静的解析ルールをテスト コンフィギュレーションで設定できるだけでなく、静的解析ルール自体もカスタマイズしたり新規作成できる点です。
C++test には多彩なルールが用意されています。しかし、コーディング スタイルやアプリケーションの性質などによって、ユーザーがニーズに合わせて独自にルールを変更したり新規にルールを作成したい場合もあります。したがって、 ルールのカスタマイズ方法およびチーム メンバーへのデプロイ方法を知っておくことが重要です。
C++test には次の 2 種類のルールがあります。
- パターン ベースのルール コードのパターンをチェックし、パターンに一致するコードを発見します。コード パターンによる解析は通常 1 つのコンパイル単位に対して行われます (1 つのコンパイル単位とは、1 個のソース ファイル およびインクルードされるすべてのヘッダーです)。パターン ベースのルールの多くは、直接 C++test GUI でパラメーター設定を変更してパラメータライズすることができます (「(ルール パラメーターのカスタマイズ」を参照)。一部のルールは RuleWizard を使ってカスタマイズすることもできます。
- フロー ベースのルール (バグ探偵ルール) 複数の関数とソース ファイルにわたって、コーディング パターンとデータ フローをチェックします。フロー ベースのルールの多くは、直接 C++test の GUI でパラメーター設定を変更してパラメータライズすることができます。詳細については 「ルール パラメーターのカスタマイズ」を参照してください。フロー ベースのルールの変更や作成に RuleWizard は使用されません。
ルール パラメーターのカスタマイズ
一部の C++test ルールでは、パラメーターを指定することができます。ルール パラメーターを指定することで、ルールの動作をカスタマイズできます。パラメーターを指定できるルールは、「ラジオボタン付きの魔法使いの帽子のアイコン」でテスト コンフィギュレーションの [静的] タブの [ルール ツリー] タブに表示されます。
利用できるパラメーターについての詳細は、ルールの説明中に記述されています。ルールの説明を参照するには、ルールのノードを右クリックしてショートカット メニューの [ルール ドキュメントの参照] をクリックします。
ルール パラメーターを編集するには、次の操作を行います。
- [Parasoft] メニューの [テスト コンフィギュレーション] をクリックします。
- ルール パラメーターを編集するテスト コンフィギュレーションの [静的] > [ルール ツリー] タブをクリックします。
- ルール カテゴリを展開します。
- パラメータライズド ルールを右クリックし、ショートカット メニューの [ルール パラメーターの表示/変更] をクリックします。
- 表示されたダイアログでルールのパラメーターを変更します。
- [OK] をクリックして変更を保存します。
複数のバージョンのパラメータライズド ルールを作成するには
たとえばユーザー指定のリーク定義を探す「バグ探偵」ルールなど、複数のバージョンのパラメータライズド ルールを作成するには、ルールのクローンを作成して各ルール インスタンスをパラメータライズします。詳細については 「ルール マッピングの指定」を参照してください。
RuleWizard によるルールのカスタマイズ
C++test のパターン ベース ルールは、 RuleWizard というツールを使ってカスタマイズすることができます。C++test のルールは、RuleWizard にロードして必要に応じて変更できる物理的ファイルです。ビルトイン ルールは C++test のインストール先ディレクトリ下にあります。
カスタマイズ可能なルールは、テスト コンフィギュレーションのルール ツリーで次のアイコンでマークされます。
C++test のビルトイン ルールはそのままにすることを強く推奨します。ビルトイン ルール自体を変更するのではなく、ビルトイン ルールを複製し、複製したルールを変更してください。
RuleWizard を使ってルールをカスタマイズするには、次の操作を行います。
- [Parasoft] メニューの [テスト コンフィギュレーション] をクリックします。
- 任意のテスト コンフィギュレーションを選択して [静的] > [ルール ツリー]タブをクリックします。
- 変更するルールのノードを右クリックし、ショートカット メニューの [複製] をクリックします。
- 複製されたルールのノードが追加されます。
- 複製したルールは、[設定] ウィンドウでユーザーが指定したディレクトリに追加されます。複製したルールがビルトイン ルールを覆い隠すことがないよう、この操作によってルール ID が変更されます ( ルール ID の重複の詳細については、「ルール ID の重複についての注意」 を参照してください)。
- 複製したルールを右クリックし、ショートカット メニューの [RuleWizard でルールを編集] をクリックします。
- RuleWizard でルールを編集し、保存します。
- ユーザー定義ルールの変更と保存の詳細については、RuleWizard GUI で [Help] メニューの [Documentation] をクリックして『RuleWizard ユーザーズ ガイド』を参照してください。
- 他のチーム メンバーがこのルールにアクセスできるよう、ルールを Team Server にアップロードします。それには、ルールを右クリックし、ショートカット メニューの [Team Server へアップロード] をクリックします。
- 適切なテスト コンフィギュレーションでこのルールを有効にします。
上記のすべてのステップは C++test のメニューから実行することができます。実際にファイルを操作する必要はありません。 C++test は上記のステップですべてのルール コンポーネントを完全に管理できます。
ルールの新規作成
RuleWizard は、ルールを作成したりカスタマイズしたりするためのツールです。RuleWizard を使用すると、簡単にビルトイン ルールを変更したりユーザー定義ルールを新規に作成したりできます。
RuleWizard では、フロー チャートのようにルールを表現してルールをグラフィカルに作成することも、ルール違反のサンプル コードを使ってルールを自動的に作成することもできます。
RuleWizard を表示するには、次の操作を行います。
- [Parasoft] メニューの [RuleWizard の起動] をクリックします。
RuleWizard GUI が表示されます。ルールの変更と作成およびユーザー定義ルールを有効にする方法については、『RuleWizard ユーザーズ ガイド』を参照してください。『RuleWizard ユーザーズ ガイド』を表示するには、RuleWizard GUI で [Help] メニューの [Documentation] をクリックします。 なお、PDF 版の『RuleWizard ユーザーズ ガイド』 については Parasoft Test インストール ディレクトリの下を参照してください。
ルールのデプロイ
ユーザー定義ルールを静的解析で使用するには、C++test にデプロイする必要があります。推奨する方法は、Team Server を利用したデプロイです。一般に、Parasoft インフラストラクチャのデプロイは、主要コンポーネントとして Team Server を利用します。C++test は指定ポートを介して Team Server に自動的に接続します。Team Server との接続を設定するには、[Parasoft] メニューの [設定] をクリックし、左側のリストから [Team Server] を選択します。詳細については「Connecting to Team Server 」を参照してください。
Team Server を使わずにユーザー定義ルールをデプロイすることは通常可能ですが、Team Server を利用した場合と較べて、デプロイの管理が著しく難しくなります。チームでユーザー定義ルールをデプロイする必要がある場合は Team Server を使用することを強く推奨します。
Team Server を使ってチームにユーザー定義ルールをデプロイする方法については「テストコンフィギュレーションとルールの設定」 を参照してください。
ルール ID についての注意事項
C++test にインポートするルールには、それぞれ固有のルール ID が必要です。同じ ID のルールを複数インポートしてはいけません。詳細については 「ルール ID の重複についての注意」を参照してください。
ルール ID を使ってルール カテゴリを指定するには、次のフォーマットを使用します。 <rule_category>-<rule_uid>
たとえば、 "myrule-123" は自動的に "myrule" カテゴリに割り当てられます。
Team Server を使ってユーザー定義ルールをデプロイする
「テストコンフィギュレーションとルールの設定」を参照してください。
Team Server を利用せずにユーザー定義ルールをデプロイする
RuleWizard で作成したユーザー定義ルールを C++test で使用するには、ユーザー定義ルールをデプロイする必要があります。
注意
ここでは、Team Server を使用していないチームでユーザー定義ルールを使用する方法について説明します。Team Server を使用している場合、「テストコンフィギュレーションとルールの設定 」を参照してください。
Team Server を使用していない場合にユーザー定義ルールをデプロイするには、次の操作を行います。
- [Parasoft] メニューの [テスト コンフィギュレーション] をクリックします。
- 任意のテスト コンフィギュレーション カテゴリを選択します。利用できるすべてのテスト コンフィギュレーションで新しいルールを使用できます。
- [静的] タブの [ルール ツリー] タブをクリックします。
- 新しい C++test カテゴリの下に新規ルールを置く場合、新しいカテゴリを作成します。
- [ルールマップ ファイルの編集] ボタンをクリックします。
- [カテゴリ] タブをクリックします。
- [新規] ボタンをクリックします。新しいエントリがカテゴリ テーブルに挿入されます。
- 新しいエントリの [カテゴリ ID] および [カテゴリ詳細] フィールドに値を入力します。たとえば、カテゴリ ID として ACME と入力し、カテゴリ詳細としてACME INTERNAL RULES と入力します。
- [OK] ボタンをクリックして新規カテゴリを保存します。
- [インポート] ボタンをクリックします。ダイアログが表示されます。
- [参照] ボタンをクリックし、ルールを記述したファイルを選択します。インポートするルールのチェックボックスをオンにして [OK] をクリックします。インポートするルールと同じ ID のルールがすでに存在する場合、既存のルールを上書きするかどうかの問い合わせがあります。
- 指定のカテゴリの下にルールが表示されます。ルールはデフォルトで無効に設定されています。
- 静的解析で使用するルールのチェックマークをオンにしてルールを有効にします。
- [適用] または [閉じる] をクリックして変更した設定を適用します。
ルール ID の重複についての注意
C++test はルール ID によってルールを認識します。すでにビルトイン、ユーザー、またはチーム カテゴリに存在するルールと同じ ID を持つルールがある場合、ルールはチーム/ユーザー定義/ビルトインの優先順位で使用されます。そのため、ビルトイン ルールと同じ ID を持つルールをインポートした場合、このルールは [設定] ウィンドウで設定されたデフォルト ルール ディレクトリに物理的に置かれ、ルール構成は同じ ID のビルトイン ルールではなく、インポートされたルールを使用します。ルールを Team Server にアップロードした場合、Team Server 上のルールは、同じ ID のビルトイン ルールだけでなく、同じ ID のユーザー定義ルールも覆い隠します。