このリリースでは、新規コンパイラおよび IDE のサポートが重点的に行われたほか、MISRA 2008 などのコーディング スタンダードのサポートが拡張されました。

コンパイラのサポート

  • Microsoft Visual C++ 14.1x/ 2017
  • WindRiver GCC 4.8.x (静的解析のみ)
  • IAR Compiler for ARM 8.11.x

IDE サポートの拡張

  • Eclipse 4.7 のサポート 
  • Visual Studio 2017 のサポート

C/C++test DTP Engine および Parasoft DTP Plugin for Visual Studio は Visual Studio 2017 との統合をサポートします。C/C++test Desktop での Visual Studio 2017 サポートは次のバージョン 10.3.4 で行われます。

テスト コンフィギュレーション操作ワークフローの拡張

C/C++test をデスクトップで使用する際にテスト コンフィギュレーションを操作するのが容易になりました。既存のテスト コンフィギュレーションを DTP 上で複製およびカスタマイズできるほか、IDE の設定ページからテスト コンフィギュレーションを実行できます。 詳細については「カスタム テスト コンフィギュレーションの作成」および「アクティブテスト コンフィギュレーションの設定」を参照してください。

静的解析の拡張

このリリースでは、MISRA C++ 2008 を対象とする新しい静的解析ルールが追加されました。「New Code Analysis Rules」を参照してください。MISRA C++ 2008 ルールの重要度が変更されました。

  • Required → 重要度 2
  • Advisory → 重要度 4
  • Document → 重要度 5

フロー解析が拡張され、C++11 Thread API がサポートされました (BD-TRS ルール)。また、新規コンフィギュレーション オプションにより、以下が可能になりました

  • noreturn 属性でターミネーター/関数を無効化する
  • [変数の値が使用されていないパスが少なくとも 1 つある場合にレポートする] オプションによる BD-PB-VOVR ルールのパラメータライズ。詳細はルールのドキュメントを参照してください。
  • インライン アセンブリ コードを通るパスに対する違反のレポートを無効化する
  • ルール パラメーターですべての汚染されたデータ ソースを有効化または無効化する

RuleWizard モジュールが拡張され、以下のノードおよびプロパティが追加されました。

  • IsFinal - 関数またはクラスが 'final' または 'sealed' 指定子付きで宣言されている場合、true を返します。
  • IsExplicitFinal - 関数またはクラスが 'final' 指定子付きで宣言されている場合、true を返します。
  • IsSealed - 関数またはクラスが 'sealed' 指定子付きで宣言されている場合、true を返します。

詳細については『RuleWizard 10.3.3 ユーザーズ ガイド』を参照してください。

新規コード解析ルール

ルール IDヘッダー
BD-PB-PTRARRポインター オペランドと、そのオペランドを使用したポインター算術の結果であるポインターは、同じ配列の要素を指していなければならない
BD-TRS-CMFconst メンバー関数をスレッドセーフにする
CODSTA-CPP-90ヘッダー ファイルで using ディレクティブおよび using 宣言 (クラス スコープまたは関数スコープの using 宣言を除く) を使用してはならない
CODSTA-CPP-91オーバーロードされた二項演算子は対応する複合代入演算子を使って実装するべきである
CODSTA-CPP-92多重継承階層内のすべてのアクセス可能な名前は一意でなければならない
GLOBAL-COMPATDECLS1 つのオブジェクトまたは関数のすべての宣言は互換性のある型を持たなければならない
GLOBAL-EXCSPECDECL例外指定付きで関数を宣言する場合、同じ関数の (他の翻訳単位にある) すべての宣言に同じ type-id のセットを付けて宣言しなければならない
GLOBAL-ONEDEFRULE1 定義ルールに違反してはならない
GLOBAL-ONEFILEDECL複数の翻訳単位で使用される型、オブジェクト、関数は 1 つのファイルでだけ宣言されなければならない
GLOBAL-ONEUSEVARプロジェクトに 1 回しか使用されない非 volatile POD 変数が含まれていてはならない
GLOBAL-TEMPLNOINSTすべてのクラス テンプレート、関数テンプレート、クラス テンプレートのメンバー関数、クラス テンプレートの静的メンバーは、少なくとも 1 回インスタンス化されなければならない
GLOBAL-UNIQUETYPEDEFtypedef 名 (修飾子があれば修飾子も) は一意の識別子でなければならない
GLOBAL-UNUSEDTYPEプロジェクトに未使用の型宣言が含まれていてはならない
GLOBAL-UNUSEDVIRTPARAMvirtual 関数およびそれをオーバーライドするすべての関数には使用されない名前付きまたは無名のパラメーターがあってはならない
GLOBAL-VIRTBASECLASS基底クラスがダイアモンド型階層内で使われる場合にだけ、virtual として宣言する
MISRA2008-0_1_12virtual 関数およびそれをオーバーライドするすべての関数には使用されない名前付きまたは無名のパラメーターがあってはならない
MISRA2008-0_1_4プロジェクトに 1 回しか使用されない非 volatile POD 変数が含まれていてはならない
MISRA2008-0_1_5プロジェクトに未使用の型宣言が含まれていてはならない
MISRA2008-0_1_6未使用の値を避ける
MISRA2008-0_1_9:すべての空でない文は、どのように実行されても1つ以上の副作用を持つか、制御フローを変えなければならない
MISRA2008-0_3_1_a配列の境界を超えてアクセスしてはならない
MISRA2008-0_3_1_bnull ポインターの間接参照を避ける
MISRA2008-0_3_1_cゼロによる除算を避ける
MISRA2008-0_3_1_d不正な書式指定子によるバッファー オーバーフローを避ける
MISRA2008-0_3_1_eゼロで終わっていない文字列の読み込みによるオーバーフローを避ける
MISRA2008-0_3_1_fnull チェックの前に間接参照しない
MISRA2008-0_3_1_gバッファーからの読み取り時のオーバーフローを避ける
MISRA2008-0_3_1_hバッファー書き込み時のオーバーフローを避ける
MISRA2008-0_3_1_iポインタ算術は配列または配列要素を指すポインタにのみ適用する
MISRA2008-0_3_1_j>、>=、<、<= は、同じ配列を扱う場合を除き、ポインタ型に適用してはならない
MISRA2008-2_10_3typedef 名 (修飾子があれば修飾子も) は一意の識別子でなければならない
MISRA2008-3_2_11 つのオブジェクトまたは関数のすべての宣言は互換性のある型を持たなければならない
MISRA2008-3_2_21 定義ルールに違反してはならない
MISRA2008-3_2_3複数の翻訳単位で使用される型、オブジェクト、関数は 1 つのファイルでだけ宣言されなければならない

MISRA2008-3_2_4

外部リンケージを持つ識別子は、外部定義を 1 つだけ持たなければならない
MISRA2008-5_0_16_a配列の境界を超えてアクセスしてはならない
MISRA2008-5_0_16_bポインター オペランドと、そのオペランドを使用したポインター算術の結果であるポインターは、同じ配列の要素を指していなければならない
MISRA2008-5_17_1オーバーロードされた二項演算子は対応する複合代入演算子を使って実装するべきである
MISRA2008-5_19_1_a'+', '-', '*' 演算子の定数式における整数オーバーフローまたはアンダーフロー
MISRA2008-5_19_1_b'<<' 演算子の定数式における整数オーバーフローまたはアンダーフロー
MISRA2008-7_2_1列挙型を潜在型とする式は、列挙型の列挙子に対応する値だけを持つことができる
MISRA2008-7_3_6ヘッダー ファイルで using ディレクティブおよび using 宣言 (クラス スコープまたは関数スコープの using 宣言を除く) を使用してはならない
MISRA2008-10_1_2基底クラスがダイアモンド型階層内で使われる場合にだけ、virtual として宣言する
MISRA2008-10_2_1多重継承階層内のすべてのアクセス可能な名前は一意でなければならない
MISRA2008-14_5_1関連する名前空間に非メンバー ジェネリック関数を宣言しない
MISRA2008-14_6_2関数は、翻訳単位で事前に宣言されている関数に解決されなければならない
MISRA2008-14_7_1すべてのクラス テンプレート、関数テンプレート、クラス テンプレートのメンバー関数、クラス テンプレートの静的メンバーは、少なくとも 1 回インスタンス化されなければならない
MISRA2008-15_4_1例外指定付きで関数を宣言する場合、同じ関数の (他の翻訳単位にある) すべての宣言に同じ type-id のセットを付けて宣言しなければならない

MISRA2012-RULE-18_1_c

ポインター オペランドと、そのオペランドを使用したポインター算術の結果であるポインターは、同じ配列の要素を指していなければならない
PB-70列挙型を潜在型とする式は、列挙型の列挙子に対応する値だけを持つことができる
TEMPL-13関連する名前空間に非メンバー ジェネリック関数を宣言しない
TEMPL-14関数は、翻訳単位で事前に宣言されている関数に解決されなければならない

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

ルール カテゴリルール ID
フロー解析BD-PB-OVERFWR, BD-PB-OVERFRD, BD-PB-VOVR, BD-SECURITY-ARRAY, BD-TRS-LOCK, BD-TRS-TSHL
Coding ConventionsCODSTA-103, CODSTA-163_b
CommentsCOMMENT-13
InitializationINIT-06
Joint Strike FighterJSF-071_b, JSF-111, JSF-171, JSF-187, JSF-204_b
MISRA 2004MISRA2004-14_2, MISRA2004-15_1, MISRA2004-17_2, MISRA2004-17_3, MISRA2004-17_6_a
MISRA 2008MISRA2008-0_1_6, MISRA2008-0_1_9, MISRA2008-0_3_1_g, MISRA2008-0_3_1_h, MISRA2008-0_3_1_i, MISRA2008-0_3_1_j, MISRA2008-5_0_17, MISRA2008-5_0_18, MISRA2008-5_19_1_a, MISRA2008-5_19_1_b, MISRA2008-6_4_3_a, MISRA2008-6_4_4, MISRA2008-7_5_1, MISRA2008-7_5_2_a
MISRA 2012MISRA2012-DIR-4_1_g, MISRA2012-DIR-4_1_h, MISRA2012-DIR-4_1_i, MISRA2012-DIR-4_1_j, MISRA2012-DIR-4_13_d, MISRA2012-DIR-4_14_a, MISRA2012-RULE-1_3_d, MISRA2012-RULE-1_3_e, MISRA2012-RULE-1_3_m, MISRA2012-RULE-2_2_a, MISRA2012-RULE-3_2, MISRA2012-RULE-10_3_b, MISRA2012-RULE-12_4_a, MISRA2012-RULE-12_4_b, MISRA2012-RULE-16_1_b, MISRA2012-RULE-16_2, MISRA2012-RULE-18_2, MISRA2012-RULE-18_3, MISRA2012-RULE-18_6_a, MISRA2012-RULE-21_17_b
Possible BugsPB-11, PB-66_a, PB-66_b


解決済みのバグおよび FR

バグ/FR ID説明
CPP-18579MISRA2012-RULE-10_3_b (CODSTA-163_b) ルールが違反を誤検出する
CPP-36999base_from_member.hpp", line 136: error: expected a ")" ::new ((void*) 0) MemberType( static_cast<T&&>(x)...) 
CPP-38187MISRA2004-17_6_a ルールが違反を誤検出する
CPP-38241PB-11 の誤った動作
CPP-38336MISRA2004-17_6_a-3 ルールが違反を誤検出する
CPP-38342MISRA2004-15_1 ルールが default に違反を誤検出する
CPP-38589CDD ルールの C++test 10.3.2 でのリグレッション (日本語のみ)
CPP-38602RuleWizard ディクショナリに関数の C++11 "final" 指定子を追加
CPP-39168Windows 7 で msbuild を使用して BDF を生成できない 
CPP-39211同じディレクトリにサブルール (テキスト ルール) があると、ユーザー ルールが実行されない場合がある
CPP-39356Keil for ARM v5.x での C++11 に関連するパース エラー 
CPP-39405 INIT-06 がデフォルトのムーブ コンストラクターに対して違反を誤検出する 
CPP-39407static_assert へのダブル引数
CPP-39409MISRA2012-RULE-7_1 の誤検出
CPP-39410MISRA2012-RULE-16_4_b の違反誤検出
CPP-39415RVCT コンパイラが大文字の '--C99' を受け入れる
CPP-39495IAR EWARM 8.x のサポート

  • No labels