このセクションでは、C++test に付属のビルトイン テスト コンフィギュレーションについて説明 します。
C++test には、最も一般的に使用されるテスト シナリオを表したビルトイン テスト コンフィギュ レーションが用意されています。ビルトイン テスト コンフィギュレーションをコピーして変更する か、新規にユーザー定義テスト コンフィギュレーションを作成することによって、ニーズに合わせ てテスト コンフィギュレーションをカスタマイズできます。ユーザー定義テスト コンフィギュレー ションは、[ ユーザー定義] または [ チーム] カテゴリに保管できます。ローカル マシンに保存され たユーザー定義テスト コンフィギュレーションは、ローカルの C++test で実行されるすべてのテ ストで利用可能です。チームの Team Server に格納されたチーム テスト コンフィギュレーション にはチーム メンバー全員がアクセスできます。
Static Analysis グループ
テスト コンフィギュレーション | 説明 |
---|---|
Flow Analysis Standard | テスト ケースやアプリケーションの実行を必要とすることなく、複 雑な実行時エラーを検出します。検出する欠陥には、未初期化メモ リ、不正なメモリ、null ポインターの間接参照、配列とバッファー のオーバーフロー、ゼロによる除算、メモリ リーク、リソース リー ク、デッド コードが含まれます。フロー解析テスト コンフィ ギュレーションの詳細については 「フロー解析ビルトイン テスト コンフィギュレーション」を参照してください。 |
Flow Analysis Fast | 解析の深さとして「最も浅い」を使用するため、 Standard や Aggressive よりも迅速に実行します。 適度な量の問題を発見し、違反の数が爆発的に増加するのを防止します。フロー解析テスト コンフィギュレーションの詳細については「フロー解析ビルトイン テスト コンフィギュレーション」を参照してくださ い。 |
Flow Analysis Aggressive | あらゆる疑わしいコードを違反として検出します。フロー解析テスト コンフィギュレーションの詳細については 「フロー解析ビルトイン テスト コンフィギュレーション」を参照し てください。 |
CERT C Coding Standard | CERT C Secure コーディング スタンダードのルールをチェックし ます。このコーディング スタンダードは、セキュア コーディングの ためのガイドラインを提供します。その目的は ( たとえば未定義の プログラム動作や悪用可能な脆弱性をもたらしかねない未定義の動 作を排除することによって) 安全で信頼でき、セキュアなシステム の開発を容易にすることです。 |
CRules | C 言語に適用されるルールをチェックします。 |
CWE-SANS Top 25 Most Dangerous Programming Errors | 2011 CWE/SANS Top 25 Most Dangerous Software Errors を チェックします。これは、ソフトウェアの深刻な脆弱性につながる 可能性がある、最も蔓延していて重大なエラーのリストです。 多く の場合、それらは発見しやすく、悪用しやすいエラーです。高い頻 度で、これらのエラーは攻撃者がソフトウェアを完全に乗っ取った り、データを盗んだり、ソフトウェアを動作不能にすることを可能 にします。 (http://cwe.mitre.org/top25/index.html) 詳細については「2011 CWE/SANS Top 25 Most Dangerous Software Errors Mapping」を参照してくださ い。 |
DISA-STIG Coding Standard | DISA STIG のルールをチェックします。これらのルールは、セ キュア開発のためのアメリカ合衆国国防総省のガイドラインです。 |
Effective C++ | Scott Meyers の『Effective C++』に基づいたルールをチェック します。C++ プログラムの効率性をチェックします。 |
Effective STL | Scott Meyers の『Effective STL』に基づいたルールをチェックし ます。 |
Ellemtel | Ellemtel Telecom Systems の C++ スタイル ガイドに基づいた ルールをチェックします。この C++ スタイル ガイドは電気通信業 界で広く使用されています。 |
Find Duplicated Code | 重複する関数、コード フラグメント、文字列リテラル、および #include ディレクティブを検出します。. |
HIS Source Code Metrics | Herstellerinitiative Software (HIS) グループによって要求される メトリクスをチェックします。 |
ISO 26262 Recommended Rules | ISO 26262 規格によって推奨されるルールをチェックします。 |
Joint Strike Fighter | Joint Strike Fighter (JSF) プログラム コーディング規約を推進す るルールをチェックします。 |
Metrics | メトリクスの統計をレポートし、許容範囲を超えるメソッド値を検 出します。 |
MISRA C | MISRA C コーディング規約を推進するルールをチェックします。 |
MISRA C 2004 | MISRA C 2004 コーディング規約を推進するルールをチェックしま す。 |
MISRA C++ 2008 | MISRA C++ 2008 コーディング規約を推進するルールをチェック します。 |
MISRA C 2012 | MISRA C 2012 コーディング規約を推進するルールをチェックしま す。 |
OWASP Top 10 Security Vulnerabilities | OWASP Top 10 Security Vulnerabilities (http:// www.owasp.org/index.php/Top_10_2007) にあるセキュリティ の問題をチェックします。 |
Payment Card Industry Data Security Standard | Payment Card Industry Data Security Standard (PCI DSS) の セクション 6 にあるセキュリティの問題をチェックします。 (https://www.pcisecuritystandards.org/security_standards/pci_dss.shtml) 検出される問題には、クロス サイト スクリプティング、インジェク ション フロー、悪意のあるファイル実行などを防止するための入力 の検証、および適切なエラー処理の検証が含まれます。 |
Parasoft’s Recommended Rules | 重大な構造の結果を特定する可能性が高いルールをチェックします。 アプリケーションの問題を引き起こす構造の欠陥としては、低パ フォーマンス、メモリ リーク、セキュリティ脆弱性などがありま す。 |
Parasoft's Recommended FDA C++ Phase 1 | 「FDA General Principles for Software Validation」に準拠するた めに推奨されるルールの中で、主要なルールをチェックします。 |
Parasoft's Recommended FDA C++ Phase 2 | 「FDA General Principles for Software Validation」に準拠するた めに推奨されるルールをチェックします。すでにフェーズ 1 のルー ル セットを実装している組織に推奨します。 |
Parasoft's Recommended FDA C++ Phase 3 | 「FDA General Principles for Software Validation」に準拠するた めに推奨されるルールをチェックします。すでにフェーズ 2 のルー ル セットを実装している組織に推奨します。 |
SAMATE Annex A Source Code Weaknesses | NIST Software Assurance Metrics and Tool Evaluation (SAMATE) プロジェクト (http://samate.nist.gov) の Annex A に記載されたコードの脆弱性をチェックします。 |
SecurityRules | セキュリティの脆弱性を防止または特定するルールをチェックしま す。 |
Sutter-Alexandrescu | Herb Sutter と Andrei Alexandrescu の『C++ Coding Standards』に基づいたルールをチェックします。 |
The Power of Ten | Gerard J. Holzmann の記事「The Power of Ten - Rules for Developing Safety Critical Code」 (http://spinroot.com/gerard/pdf/Power_of_Ten.pdf) に基づいたルールをチェックしま す |
Unit Testing グループ
テスト コンフィギュレーション | 説明 |
---|---|
File Scope> Build Test Executable (File Scope) | トライアル ビルドのためのテスト用実行モジュールをビルドします。 |
File Scope> Collect Stub Information (File Scope) | [ スタブ] ビューに表示するスタブ情報を収集します。 |
File Scope> Debug Unit Tests (File Scope) | デバッガー下で単体テストを実行します。 |
File Scope> Generate Stubs (File Scope) | 見つからない関数定義と変数定義のためのスタブを生成します。 |
File Scope> Run Unit Tests | 利用可能なテスト ケースを実行します。 |
Build Test Executable | トライアル ビルドのためのテスト用実行モジュールをビルドします。 |
Collect Stub Information | シンボル データを収集して [ スタブ] ビューに表示します。 |
Debug Unit Tests | デバッガー下で単体テストを実行します。 |
Generate Regression Base | プロジェクト コードの現在の機能をキャプチャしたベースライン テスト スイートを生成します。このベースラインからの変更を検出するには、定期的にこのテスト スイートを使ってコード ベースをテストします。 |
Generate Stubs | 見つからない関数定義と変数定義のためのスタブを生成します。 |
Generate Test Suites | 選択したリソースのテスト スイートを生成します。テスト ケースは生成しません。 |
Generate Unit Tests | 選択したリソースの単体テストを生成します。 |
Run Unit Tests | 利用可能なテスト ケースを実行します。 |
Run Unit Tests with Memory Monitoring | 利用可能なテスト ケースを実行し、メモリの問題についての情報を収集します。 |
Application Monitoring グループ
テスト コンフィギュレーション | 説明 |
---|---|
Build Application with Coverage Monitoring | カバレッジ計測が有効な状態で、テスト対象アプリケーションをビルドします。 |
Build Application with Full Monitoring | カバレッジ計測とメモリ エラー検出が有効な状態で、テスト対象アプリケーションをビルドします。 |
Build Application with Memory Monitoring | メモリ エラー検出が有効な状態で、テスト対象アプリケーションをビルドします。 |
Build and Run Application with Coverage Monitoring | カバレッジ計測が有効な状態で、テスト対象アプリケーションをビルドして実行します。 |
Build and Run Application with Full Monitoring | カバレッジ計測とメモリ エラー検出が有効な状態で、テスト対象アプリケーションをビルドして実行します。 |
Build and Run Application with Memory Monitoring | メモリ エラー検出が有効な状態で、テスト対象アプリケーションをビルドして実行します。 |
Embedded Systems グループ
Test Configuration | Description |
---|---|
Window Mobile> Build Test Executable for Windows Mobile | ターゲットデバイスに手動で送って実行する必要があるテスト用実行モジュールをビルドします。このテストコンフィギュレーションは [Build Test Executable] テストコンフィギュレーションに非常に似ています。唯一の違いは、実行後の成果物 ( カバレッジと結果) を生成するために外部ストレージカードを使用するよう構成されている点です。詳細については「Windows Mobile のサポート」を参照してください。 |
Window Mobile> Build and Run Test Executable for Pocket PC | テスト用実行モジュールをビルドし、エミュレーターにデプロイして実行します。実行が完了したら、C++test にテスト結果を読み込んで表示するために、ユーザーがエミュレーターを閉じる必要があります。詳細については「Windows Mobile のサポート」を参照してください。 |
Window Mobile> Build and Run Test Executable for Smartphone | テスト用実行モジュールをビルドし、エミュレーターにデプロイして実行します。実行が完了したら、C++test にテスト結果を読み込んで表示するために、ユーザーがエミュレーターを閉じる必要があ ります。詳細については「Windows Mobile のサポート」を参照してください。 |
Window Mobile> Build and Run Test Executable for Windows Mobile or Windows CE Using ActiveSync | テスト用実行モジュールをビルドし、エミュレーターにデプロイして実行します。通信チャネルとして ActiveSync が使用されます。このフローを使用するには、ホストマシンとターゲットマシンの両 方が ActiveSync をサポートしていなければなりません。ターゲットとして、ActiveSync がサポートする方法で接続された実際のデバイスまたはエミュレーターを使用できます。詳細については「Windows Mobile のサポート」を参照してください。 |
Utilities グループ
テスト コンフィギュレーション | 説明 |
---|---|
Load Test Results (File) | ファイル チャネルを介してテスト結果を収集します。デフォルトでは、このテスト コンフィギュレーションは ${cpptest:testware_loc} 中にログがあると想定します。必要に応じて、この場所は、C++test GUI からアクセスできるファイル システム上の任意の場所に変更できます。 |
Load Test Results (Sockets) | TCP/IP ソケットを介して送られるテスト結果を収集します。 このテスト コンフィギュレーションは Java ユーティリティ プログラムを起動してテスト結果をリッスンしキャプチャします。テスト結果とカバレッジ結果のポート番号はカスタマイズ可能です。ポート番号はresults_port および coverage_port プロパティで定義されます。 |
Extract Library Symbols | 外部ライブラリ ( またはオブジェクト ファイル) からシンボル リストを抽出します。バイナリからシンボル情報を収集するための C++test の標準アルゴリズムが十分ではない場合は常にこのテスト コンフィギュレーションを使用するべきです。たとえば、Wind River DKM タイプのプロジェクトを使用している場合、この方法で収集された VxWorks イメージからすべてのシンボルを抽出します。通常、シンボルを抽出するバイナリの場所を入力するほか、ライブラリ/ オブジェクト ファイルのコンテンツをダンプするのに使用できる nm に似たユーティリティの名前も入力する必要があります。 |
Generate Stubs Using External Library Symbols | [Extract Library Symbols] テスト コンフィギュレーションを実行した後に、スタブを生成するために使用されます。このテスト コンフィギュレーションは、外部ライブラリからのシンボル リストのファイルがプロジェクトの一時データ中に格納されているものと想定します。 |
Load Insure++ Coverage | Insure++ カバレッジをロードします。 |
Code Review グループ
名前 | スコープ | コード レビュー |
---|---|---|
Pre-Commit | ローカルで追加または変更されたファイルのみ | ソース管理システムにコミットする「前」にコードをレビューしたいチームに適しています。 このテスト コンフィギュレーションを使用するには、コード レビューの設定で [ スキャナー実行中にユーザー補助を表示] チェックボックスをオンにし、適切なレビューアーを作成者が指名できるようにしなければなりません。詳細については「コード レビュー」を参照してください。 |
Post-Commit (Template) | 前日に変更されたすべてのプロジェクト ファイル | ソース管理システムにコミットした「後」にコードをレビューしたいチームに適しています。 このテスト コンフィギュレーションは、複製してカスタマイズしてから使用しなければなりません ( たとえば作成者とレビューアーのマッピングなど)。詳細については「コード レビュー」を参照してください。 |
Post-Commit (Assign All) | 前日に変更されたすべてのプロジェクト ファイル | ソース管理システムにコミットした「後」にコードをレビューしたいチームに適しています。 このテスト コンフィギュレーションは、カスタマイズせずに使用できます。ローカル コード レビューユーザーのマッピングを含みます。( あらゆる作成者について) スコープで発見されたすべてのリビジョン |
プロジェクトやチームの優先順位に合わせてユーザー定義テスト コンフィギュレーションを作成する方法については、「テストコンフィギュレーションとルールの設定」を参照してください。
2011 CWE/SANS Top 25 Most Dangerous Software Errors とのマッピング
CWE ID | CWE 脆弱性 | Parasoft ID | Parasoft ルール名 |
---|---|---|---|
CWE-89 | SQL コマンドで使用される特殊要素の不適切な無効化 (SQL インジェクション) | BD-SECURITY-TDSQL | SQL インジェクションから防御する |
CWE-78 | OS コマンドで使用される特殊要素の不適切な無効化 (OS コマンド インジェクション) | BD-SECURITY-TDCMD | コマンド インジェクションから防御する |
CWE-120 | 入力のサイズをチェックしないバッファー コピー ( 古典的バッファオーバーフロー) | BD-PB-OVERFFM | 不正な書式指定子によるバッファー オーバーフローを避ける |
BD-PB-OVERFNZT | ゼロで終わっていない文字列の読み込みによるオーバーフローを避ける | ||
BD-PB-OVERFWR | バッファー書き込み時のオーバーフローを避ける | ||
BD-SECURITY-OVERFWR | 汚染されたデータによるバッファー書き込み時のオーバーフローを避ける | ||
CWE-22 | 制限されたディレクトリへのパス名に対する不適切な制限 (パス トラバーサル) | BD-SECURITY-TDFNAMES | ファイル名インジェクションから防御する |
CWE-676 | 危険な可能性がある関数の使用 | PB-37 | <cstring> ライブラリの無制限の関数を使用してはならない |
SECURITY-11 | shell メタ文字に影響される可能性があるため安全でない shell 関数は使用しない | ||
SECURITY-12 | バッファ オーバーフローの原因になる可能性があるため、安全ではない文字列関数を使用しないようにする | ||
SECURITY-13 | 範囲をチェックしないため安全ではない文字列関数を使用しないようにする | ||
SECURITY-14 | 書式文字列で変数サイズを指定せずに scanf または fscanf 関数を使用しない | ||
SECURITY-16 | gets() を使用しない | ||
SECURITY-22 | mbstowcs() 関数を使用しない | ||
SECURITY-30 | プログラム コードで getpw 関数を使用しないようにする | ||
SECURITY-31 | cuserid 関数を使用しない | ||
CWE-327 | 不具合のある、または危険な暗号アルゴリズム | SECURITY-02 | C ライブラリの乱数を使用する関数は使用しないようにする |
SECURITY-28 | セキュリティ上の理由で乱数が必要な場合に、標準の乱数ジェネレータを使用してはならない | ||
SECURITY-37 | 弱い暗号化関数を使用してはならない | ||
CWE-131 | バッファー サイズの不正な計算 | BD-PB-ARRAY | 配列の境界を超えてアクセスしてはならない |
BD-PB-OVERFRD | バッファー読み込み時のオーバーフローを避ける | ||
BD-SECURITY-ARRAY | 汚染されたデータを配列添え字として使用しない | ||
MRM-45 | sizeof 演算子をポインタ型に使用して、malloc、calloc、realloc 関数で割り当てるメモリのサイズを指定してはならない | ||
CWE-134 | 制御されない書式文字列 | SECURITY-05 | printf/wprintf 関数を変数パラメータ 1 個だけで使用しないようにする |
SECURITY-08 | 2 番目のパラメータが変数である場合に、fprintf/fwprintf 関数をパラメータ 2 個だけで使用してはいけない | ||
CWE-190 | 整数のオーバーフローまたはラップアラウンド | BD-SECURITY-INTOVERF | 汚染されたデータによる整数オーバーフロー/アンダーフローを防ぐ |
MISRA-051 | 符号なし整数定数式の評価は結果の型にはまるべきである |