このリリースでは、新機能の追加のほか、既存の機能の拡張が行われました。

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-FORKFILEfork およびファイル記述子を使用する際の競合状態を避ける
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_aiterator ではなく const iterator を使用する
CODSTA-MCPP-10_bcbegin()、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_cnew を直接使用するのではなく、できるだけ 'std::make_shared' を使用する
CODSTA-MCPP-16_dstd::auto_ptr ではなく、できるだけ std::unique_ptr を使用する
CODSTA-MCPP-17ローカル オブジェクトを参照でキャプチャするラムダを返してはならない
CODSTA-MCPP-18_aラムダ式では不要なデフォルト キャプチャ モードを避ける
CODSTA-MCPP-18_b不要なラムダ キャプチャを避ける
GLOBAL-CONDMUTEXVAR1 つの条件変数に対する並行待機処理に複数の mutex を使用しない
SECURITY-02_b疑似乱数の生成に rand() 関数を使用しない
SECURITY-43'PTHREAD_CANCEL_ASYNCHRONOUS' 引数を指定して 'pthread_setcanceltype()' 関数を呼び出すべきではない
SECURITY-44権限を正しい順序で破棄する
SECURITY-45権限が正常に破棄されたことを確認する
SECURITY-46データをユーザー領域にコピーできる関数に構造体へのポインターを渡すべきではない
SECURITY-47シフト演算子の右辺のオペランドをチェックする際、適切な整数精度を使用する
SECURITY-48system() を呼び出さない

更新されたコード解析ルール

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-CCODSTA-189
CERT-CON33-CSECURITY-25
CERT-DCL39-CSECURITY-46
CERT-ENV31-CBD-PB-INVENV
CERT-ENV33-CSECURITY-48
CERT-ERR30-CBD-PB-ERRNO
CERT-FIO42-CBD-RES-LEAKS
CERT-FLP32-CBD-API-VALPARAM
CERT-FLP36-CMISRA-043_c, MISRA-043_d
CERT-FLP37-CCODSTA-190
CERT-INT30-CPB-66_a, BD-PB-INTOVERF
CERT-INT35-CSECURITY-47
CERT-INT36-CCODSTA-127_b
CERT-MSC30-CSECURITY-02_b
CERT-MSC32-CBD-SECURITY-RAND
CERT-POS30-CCODSTA-144, CODSTA-145, BD-PB-OVERFNZT
CERT-POS33-CSECURITY-10
CERT-POS34-CBD-PB-PUTENV
CERT-POS35-CBD-TRS-SYMLINK
CERT-POS36-CSECURITY-44
CERT-POS37-CSECURITY-45
CERT-POS38-CBD-TRS-FORKFILE
CERT-POS39-CBD-PB-BYTEORD
CERT-POS47-CSECURITY-43
CERT-POS48-CBD-TRS-DSTRLOCK, BD-TRS-REVLOCK
CERT-POS49-CBD-TRS-BITLOCK
CERT-POS50-CBD-TRS-ARG
CERT-POS51-CBD-TRS-ORDER
CERT-POS52-CBD-TRS-TSHL
CERT-POS53-CGLOBAL-CONDMUTEXVAR
CERT-PRE31-CCODSTA-150, CODSTA-150_b, CODSTA-150_c
CERT-STR31-CBD-PB-ARRAY, BD-PB-OVERFWR, BD-SECURITY-BUFWRITE, BD-SECURITY-OVERFWR, SECURITY-12
CERT-STR34-CCODSTA-187_a, CODSTA-187_b, CODSTA-187_c
CERT-STR38-C

CODSTA-188


解決済み FR および PR


 FR/PR ID 説明
CPP-36398Eigen ライブラリ使用時に関数定義と宣言を比較する際の問題
CPP-36530 /STACK オプションが C++test (VS 2010) によって無視される
CPP-36850C++11 inarmcc5.06 のサポートの追加
CPP-36861Renesas RX 2.05 C/C++ compiler (renrx_2_5) のサポート
CPP-36892ポインターが代入と同じ行でチェックされている場合に MISRA-107_b ルールが誤って違反をレポートする
CPP-36896GNU GCC 6 (native/host-based compiler) のサポート
CPP-36965CODSTA-CPP-53 の誤検出 "Declare local variable 'x' as const"
CPP-36966OOP-01 (Sutter Rule 54) の誤検出: "Base class copy constructor should be protected or public with smart pointer as parameter"
CPP-36967CODSTA-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-37018move コンストラクターに対して CODSTA-CPP-04 ルールは違反をレポートすべきでない [C++11]
CPP-37019cwc.bin 使用時にセグメンテーション違反 (TIOBE)
CPP-37021MISRA2004-16_7 (MISRA2012-RULE-8_13_a) ルールが違反を誤検出する
CPP-37022QA: 抑制コメントでマルチバイト文字が使用された場合に抑制コメントが文字化けする
CPP-37023[VS2015] _Buffer_descriptor() restrict(amp,cpu) のパースの問題
CPP-37782BDF ファイルのソース パスが正しくスキャンされない

* Parasoft Concerto (4.9.4 以降) は非推奨です。まだ Project Center および Team Server モジュールに接続することはできますが、将来の C++test では、Conterto 関連のワークフローは DTP ワークフローに置き換えられます。

  • No labels