このリリースでは、新機能の追加のほか、既存の機能の拡張が行われました。
Development Testing Platform との統合
最新バージョンの C++test は、Parasoft Development Testing Platform (DTP) との統合をサポートしています。DTP は、Parasoft の革新的なアプローチに基づいて、ソフトウェアの品質プロセスを継続的に改善します。ローカル解析の結果を集約して解析し、IDE にインポート可能な具体的な指摘事項に変換することで、開発プロセスを最適化します。DTP に保存されたテスト コンフィギュレーションは、チーム全体で共有できるため、組織のコーディング ポリシーを適用するのに役立ちます。
詳細については、「DTPとの接続」を参照してください。
静的解析の拡張
このリリースでは、以下の CERT Coding Standard のほか、modern C++ standard (C++11、C++14 および C++17) の新規ルールが追加されました。詳細は「新規コード解析ルール」を参照してください。CERT C ルールは CERT C Coding Standard ビルトイン テスト コンフィギュレーションに追加されています。マッピング情報は「CERT C コンフィギュレーションの更新」を参照してください。
また、静的解析およびフロー解析によってレポートされる結果の安定性と正確性が向上しました。結果の正確さまたはルール ドキュメントに関して変更されたルールルールの一覧は「更新されたコード解析ルール」を参照してください。
RuleWizard モジュールが拡張され、以下のノードおよびプロパティが追加されました。
- C/C++ Nodes> Expressions> Miscellaneous> Lambda ノード
- C/C++ Nodes> General> Lambda Capture ノード
- HasDefaultValue プロパティ (デフォルト値を持つルーチン パラメーターの場合に true)
詳細については『RuleWizard 10.3.2 ユーザーズ ガイド』を参照してください。
コール カバレッジの収集
カバレッジ機能が拡張され、プログラム実行時に実行された定義済み関数またはメソッドの呼び出しの数に関する情報が収集されるようになりました。詳細については「カバレッジ情報の参照」を参照してください。
その他の変更および拡張
- 新しい[コードのパースの問題] オプションを使用すると、解析中のファイルにパース エラーがあった場合に静的解析をどのように実行するかをより詳細にカスタマイズできます。このオプションはC++test 9.6 の [パース エラーのあるファイルを解析する] オプションの代替です。詳細については「[静的] タブ - 静的解析の方法を定義する」を参照してください。
- コマンド ライン モードを使用する場合、
-publish
オプションを指定すると結果を DTP に送信できます。このオプションは、C++test 9.x では Team Server に結果をレポートするために使用されていました。C++test 10.x では、Team Server に結果を送るには-publishteamserver
オプションを使用します。 - C++test を拡張する CPPTEST_ENGINE_EXTRA_ARGS オプションが追加され、ソース ファイルのエンコーディングやメモリのサイズなど、静的解析設定を詳細にカスタマイズできるようになりました。詳細については「詳細オプションの設定」を参照してください。
新規コード解析ルール
ルール ID | ヘッダー |
---|---|
BD-PB-BYTEORD | システム間でデータを送信する場合は正しいバイト順序を使用する |
BD-PB-INVENV | 環境ポインターを無効化する可能性がある演算の後で環境ポインターに依存しない |
BD-PB-PUTENV | 自動変数へのポインターを引数として putenv() を呼び出さない |
BD-SECURITY-RAND | 疑似乱数生成器に適切なシードを指定する |
BD-TRS-ARG | 複数の POSIX スレッドで共有されるオブジェクトは、適切な記憶域期間を持つよう宣言する |
BD-TRS-BITLOCK | ビット フィールドを変更する場合は、ロックを使用して競合状態を防ぐ |
BD-TRS-DSTRLOCK | 他のスレッドの mutex を破壊しない |
BD-TRS-FORKFILE | fork およびファイル記述子を使用する際の競合状態を避ける |
BD-TRS-REVLOCK | 獲得されていないロックを解放しない |
BD-TRS-SYMLINK | シンボリック リンクの存在を確認する際の競合状態を避ける |
CODSTA-127_b | オブジェクト型へのポインターと 'uintptr_t' または 'intptr_t' 以外の整数型の間で変換を行うべきではない |
CODSTA-150_c | 安全ではないマクロの引数での副作用を避ける |
CODSTA-187_a | より大きな整数サイズに代入する前に文字を unsigned char にキャストする |
CODSTA-187_b | 'signed char' 型の式を配列インデックスとして使用するべきではない |
CODSTA-187_c | より大きな整数サイズに変換する前に文字を unsigned char にキャストする |
CODSTA-188 | ナロー文字列とワイド文字列を混同しない |
CODSTA-189 | ポインターに対して、スケールされた整数値の加算または減算を行わない |
CODSTA-190 | 浮動小数点値の比較にオブジェクト表現を使用しない |
CODSTA-MCPP-10_a | iterator ではなく const iterator を使用する |
CODSTA-MCPP-10_b | cbegin()、crbegin、cend()、crend() 関数を優先的に使用する |
CODSTA-MCPP-13 | 右辺値参照には std::move() を使用し、ユニバーサル参照には std::forward() を使用する |
CODSTA-MCPP-15_a | デフォルトのキャプチャ モードを避ける |
CODSTA-MCPP-15_b | デフォルトの by-reference キャプチャを使用するラムダでは、明示的に 'this' ポインターを使用する |
CODSTA-MCPP-16_a | なるべく raw ポインター メンバーではなくスマート ポインター メンバーを使用する |
CODSTA-MCPP-16_b | 配列または STL コンテナーでは、なるべく raw ポインター メンバーではなくスマート ポインター メンバーを使用する |
CODSTA-MCPP-16_c | new を直接使用するのではなく、できるだけ 'std::make_shared' を使用する |
CODSTA-MCPP-16_d | std::auto_ptr ではなく、できるだけ std::unique_ptr を使用する |
CODSTA-MCPP-17 | ローカル オブジェクトを参照でキャプチャするラムダを返してはならない |
CODSTA-MCPP-18_a | ラムダ式では不要なデフォルト キャプチャ モードを避ける |
CODSTA-MCPP-18_b | 不要なラムダ キャプチャを避ける |
GLOBAL-CONDMUTEXVAR | 1 つの条件変数に対する並行待機処理に複数の mutex を使用しない |
SECURITY-02_b | 疑似乱数の生成に rand() 関数を使用しない |
SECURITY-43 | 'PTHREAD_CANCEL_ASYNCHRONOUS' 引数を指定して 'pthread_setcanceltype()' 関数を呼び出すべきではない |
SECURITY-44 | 権限を正しい順序で破棄する |
SECURITY-45 | 権限が正常に破棄されたことを確認する |
SECURITY-46 | データをユーザー領域にコピーできる関数に構造体へのポインターを渡すべきではない |
SECURITY-47 | シフト演算子の右辺のオペランドをチェックする際、適切な整数精度を使用する |
SECURITY-48 | system() を呼び出さない |
更新されたコード解析ルール
BD-PB-ZERO ルールに冗長モードが追加されました。
MISRA C 2012 ルールの重要度が更新されました。
- Mandatory → 重要度 1
- Required → 重要度 2
- Advisory → 重要度 4
以下のルールは、結果の正確さ、またルール ドキュメントに関して変更されました。
- BD-PB-ARRAY, BD-PB-ERRNO, BD-PB-EXCEPT, BD-PB-INTOVERF, BD-PB-NOTINIT, BD-PB-NZTS, BD-PB-SWITCH, BD-TRS-TSHL
- CODSTA-144*, CODSTA-145*, CODSTA-150*, CODSTA-150_b*, CODSTA-161_a, CODSTA-CPP-04, CODSTA-CPP-28, CODSTA-CPP-53
- INIT-06, INIT-07, INIT-15
- JSF-071_b, JSF-118, JSF-174_b, JSF-177_b, JSF-180_f, JSF-180_g, JSF-209_b
- MISRA-043_c, MISRA-043_d, MISRA-107_b, MISRA2004-6_3_b, MISRA2004-16_7, MISRA2008-7_1_1, MISRA2008-7_1_2_a, MISRA2012-DIR-4_1_a, MISRA2012-DIR-4_6_b, MISRA2012-RULE-8_13_a, MISRA2012RULE-10_1_a, MISRA2012-RULE-12_4_a*, MISRA2012-RULE-14_3_zd, MISRA2012-RULE-18_1_a
- OOP-01
- PB-66_a*
- SECURITY-10, SECURITY-12*, SECURITY-25
* ドキュメントの変更
CERT C コンフィギュレーションの更新
CERT C Coding Standard ビルトイン コンフィギュレーションは、次のルール マッピングに従って、新しいルールを使用するよう変更されました。
CERT ID | Parasoft ID |
---|---|
CERT-ARR39-C | CODSTA-189 |
CERT-CON33-C | SECURITY-25 |
CERT-DCL39-C | SECURITY-46 |
CERT-ENV31-C | BD-PB-INVENV |
CERT-ENV33-C | SECURITY-48 |
CERT-ERR30-C | BD-PB-ERRNO |
CERT-FIO42-C | BD-RES-LEAKS |
CERT-FLP32-C | BD-API-VALPARAM |
CERT-FLP36-C | MISRA-043_c, MISRA-043_d |
CERT-FLP37-C | CODSTA-190 |
CERT-INT30-C | PB-66_a, BD-PB-INTOVERF |
CERT-INT35-C | SECURITY-47 |
CERT-INT36-C | CODSTA-127_b |
CERT-MSC30-C | SECURITY-02_b |
CERT-MSC32-C | BD-SECURITY-RAND |
CERT-POS30-C | CODSTA-144, CODSTA-145, BD-PB-OVERFNZT |
CERT-POS33-C | SECURITY-10 |
CERT-POS34-C | BD-PB-PUTENV |
CERT-POS35-C | BD-TRS-SYMLINK |
CERT-POS36-C | SECURITY-44 |
CERT-POS37-C | SECURITY-45 |
CERT-POS38-C | BD-TRS-FORKFILE |
CERT-POS39-C | BD-PB-BYTEORD |
CERT-POS47-C | SECURITY-43 |
CERT-POS48-C | BD-TRS-DSTRLOCK, BD-TRS-REVLOCK |
CERT-POS49-C | BD-TRS-BITLOCK |
CERT-POS50-C | BD-TRS-ARG |
CERT-POS51-C | BD-TRS-ORDER |
CERT-POS52-C | BD-TRS-TSHL |
CERT-POS53-C | GLOBAL-CONDMUTEXVAR |
CERT-PRE31-C | CODSTA-150, CODSTA-150_b, CODSTA-150_c |
CERT-STR31-C | BD-PB-ARRAY, BD-PB-OVERFWR, BD-SECURITY-BUFWRITE, BD-SECURITY-OVERFWR, SECURITY-12 |
CERT-STR34-C | CODSTA-187_a, CODSTA-187_b, CODSTA-187_c |
CERT-STR38-C | CODSTA-188 |
解決済み FR および PR
FR/PR ID | 説明 |
---|---|
CPP-36398 | Eigen ライブラリ使用時に関数定義と宣言を比較する際の問題 |
CPP-36530 | /STACK オプションが C++test (VS 2010) によって無視される |
CPP-36850 | C++11 inarmcc5.06 のサポートの追加 |
CPP-36861 | Renesas RX 2.05 C/C++ compiler (renrx_2_5) のサポート |
CPP-36892 | ポインターが代入と同じ行でチェックされている場合に MISRA-107_b ルールが誤って違反をレポートする |
CPP-36896 | GNU GCC 6 (native/host-based compiler) のサポート |
CPP-36965 | CODSTA-CPP-53 の誤検出 "Declare local variable 'x' as const" |
CPP-36966 | OOP-01 (Sutter Rule 54) の誤検出: "Base class copy constructor should be protected or public with smart pointer as parameter" |
CPP-36967 | CODSTA-CPP-28 (Sutter Rule 27) の誤検出: "Whenbinaryarithmeticoperatorsaredefined,assignmentversionsshouldbeprovidedtoo" |
CPP-37009 | メンバーがクラスで直接初期化されている場合も INIT-06 ルールが違反をレポートする [C++11] |
CPP-37011 | 暗黙の signed/unsigned 型が使用されている場合、MISRA2004-6_3_b (MISRA2012-DIR-4_6_b, JSF-209_b) ルールが違反をレポートしない |
CPP-37018 | move コンストラクターに対して CODSTA-CPP-04 ルールは違反をレポートすべきでない [C++11] |
CPP-37019 | cwc.bin 使用時にセグメンテーション違反 (TIOBE) |
CPP-37021 | MISRA2004-16_7 (MISRA2012-RULE-8_13_a) ルールが違反を誤検出する |
CPP-37022 | QA: 抑制コメントでマルチバイト文字が使用された場合に抑制コメントが文字化けする |
CPP-37023 | [VS2015] _Buffer_descriptor() restrict(amp,cpu) のパースの問題 |
CPP-37782 | BDF ファイルのソース パスが正しくスキャンされない |
* Parasoft Concerto (4.9.4 以降) は非推奨です。まだ Project Center および Team Server モジュールに接続することはできますが、将来の C++test では、Conterto 関連のワークフローは DTP ワークフローに置き換えられます。