このリリースでは、新機能の追加のほか、既存の機能の拡張が行われました。
このリリースでのアップデート:
コンパイラのサポート
- GNU GCC 6.x ( Windows および Linux)
- IAR Compiler for ARM v.7.8x (Windows)
- Renesas RX C/C++ Compiler 2.5x (Windows)
ARM Compiler 5.0 / ARM Compiler 5.0 for uVision: C++11 (--cpp11) のサポート更新
デスクトップでローカルに指摘事項を抑制
IDE で指摘事項を抑制する場合、抑制情報をデスクトップに保存できます。そうすると、DTP やソース管理システムを通じてチームで共有される抑制には影響を与えません。ローカルで抑制された指摘事項は、IDE 内で参照したり抑制を解除できます。詳細については、「GUI での指摘事項の抑制」 を参照してください。
ルール マップを使用した静的解析のカスタマイズ
拡張されたルール マッピング機能を使用すると、組織の開発ポリシーをすばやく簡単に実装することができます。ルール マップを作成し、ルールの重要度やカテゴリなど、C/C++test が実行する静的解析ルールのプロパティを変更したり、Development Testing Platform に保存されたテスト コンフィギュレーションにルールを 関連付けたりできます。
静的解析の拡張
このリリースでは、以下の CERT Coding Standard のほか、modern C++ standard (C++11、C++14 および C++17) の新規ルールが追加されました。詳細は「新規コード解析ルール」を参照してください。CERT C ルールは CERT C Coding Standard ビルトイン テスト コンフィギュレーションに追加されています。マッピング情報は「CERT C コンフィギュレーションの更新」を参照してください。
また、静的解析およびフロー解析によってレポートされる結果の安定性と正確性が向上しました。結果の正確さまたはルール ドキュメントに関して変更されたルールルールの一覧は「更新されたコード解析ルール」を参照してください。
MISRA C 2012 ルールの重要度が変更されました。
- 必須 → 重要度 1
- 必要 → 重要度 2
- 推奨 → 重要度 4
RuleWizard モジュールが拡張され、以下のノードおよびプロパティが追加されました。
- C/C++ Nodes> Expressions> Miscellaneous> Lambda ノード
- C/C++ Nodes> General> Lambda Capture ノード
- HasDefaultValue プロパティ (デフォルト値を持つルーチン パラメーターの場合に true)
詳細については『RuleWizard 10.3.2 ユーザーズ ガイド』を参照してください。
その他の拡張
- ライセンス: ライセンス マシン ID の計算方法が更新され、AWS およびAzure クラウド環境へのデプロイメントをサポートするようになりました。
新規コード解析ルール
ルール 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 にキャストするより大きな整数サイズに代入する前に文字を 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 ルールに冗長モードが追加されました。
以下のルールは、結果の正確さまたはルール ドキュメントに関して変更されました。
- 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
PR/FR ID | 説明 |
---|---|
CPP-36398 | Eigen ライブラリ使用時に関数定義と宣言を比較する際の問題 |
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) の誤検出: "Base class copy constructor should be protected or public with smart pointer as parameter""Whenbinaryarithmeticoperatorsaredefined,assignmentversionsshouldbeprovidedtoo" |
CPP-37005 | DTP の指摘事項タブ "Subcategory" ですべての C++test 指摘事項が "Unknown" と表示される |
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 ファイルのソース パスが正しくスキャンされない |