このリリースでは、コード解析機能の拡張および AUTOSAR C++ 14 コーディング標準のサポート拡充に重点が置かれました。
IDE のサポート
以下のサポートが追加されました。
- Eclipse 4.9
コンプライアンス パックの拡張
Automotive Compliance Pack が拡張され、AUTOSAR C++14 コーディング ガイドラインのコンプライアンス推進に役立つようになりました。
- "AUTOSAR C++ 14 Coding Guidelines" テスト コンフィギュレーションが更新され、AUTOSAR C++ 14 Coding Guidelines バージョン 18.10 へのコンプライアンス推進に役立つようになりました。
- "AUTOSAR C++ 14 Coding Guidelines" テスト コンフィギュレーションの大幅な拡張が行われ、標準を推進するための新しいルールが追加されました。
コンプライアンス パックを使用するには、専用のライセンス機能を有効化する必要があります。コンプライアンス パック ライセンスの詳細については、Parasoft 製品サポートにご連絡ください。
静的解析のパフォーマンス改善
C/C++test の静的コード解析機能が拡張され、パフォーマンスが改善しました。C/C++ テストは、インクリメンタルな CI ビルドでの解析時間を短縮するよう最適化され、コードの変更から静的解析結果の確認までのフィードバック サイクルが短縮されました。また、最適化により、IDE でローカルに実行される解析がスピードアップし、デスクトップでのソフトウェア開発の加速に役立ちます。詳細は「インクリメンタルな静的解析」を参照してください。
コード カバレッジ解析の拡張
コード カバレッジ機能を拡張し、システム テストおよび機能テストのカバレッジ計測を容易にしました。
スタンドアロン コード カバレッジ
C/C++test に軽量のコード カバレッジ ユーティリティ cpptestcc
が付属するようになりました。このユーティリティはビルド システムに簡単に統合でき、コードのインストゥルメント用プロジェクトを作成するという複雑な作業の負荷と時間を減らします。通常のビルド プロセスの一環として簡単にテスト バイナリを作成し、カバレッジ データを IDE にアップロードして通常の C/C++test のレポート機能を使用して結果を確認できます。MC/DC、判断文カバレッジ、関数カバレッジなど、すべてのカバレッジ メトリクスをモニターできます。詳細については「cpptestcc を利用したアプリケーション カバレッジの収集」を参照してください。
複数のテスト実行のコード カバレッジをマージ
複数のテスト セッションから得られたコード カバレッジを集約し、累積レポートを生成できます。詳細については「複数のテスト実行から結果をマージする」を参照してください。
追加または更新された解析ルール
新規静的解析ルールが追加され、コンプライアンス標準のカバー範囲が拡張されました。詳細については「New Rules」、「Updated Rules」、および「Removed Rules」を参照してください。
フロー解析の改善
- 実行パス中で発見されたときに常に解析対象とする関数を指定できるようになりました。詳細は「フロー解析」を参照してください。
- セットアップの問題のレポートが改善されました。
新規テスト コンフィギュレーション
以下のテスト コンフィギュレーションが追加されました。
- Load Test Results
- Load Archived Results
解決済みのバグおよび FR
バグ/FR ID | 説明 |
---|---|
CPP-36917 | MISRA2012-13_2_f (MISRA2004-12_2_f) が違反を誤検出する |
CPP-38031 | MISRA2012-RULE-11_1_a: 多次元配列の要素が初期化されている場合の誤検出 |
CPP-39310 | error: 'visibility' was not declared in this scope |
CPP-39915 | MISRA2004-10_6 (MISRA2012-RULE-7_2) ルールが巨大な配列の初期化で使用されている符号付き値に対して違反を誤検出する |
CPP-40091 | MISRA2012-RULE-10_3_b (CODSTA-163_b) が ARM v7.8 コンパイラで違反を誤検出する |
CPP-40400 | [RW] 呼び出しでのデフォルト引数の使用を検出するためのプロパティを追加 (Argument ノード) |
CPP-40561 | [CERTC] ルールの拡張: Understand the type issues associated with variadic functions (scanf) |
CPP-41278 | 列挙定数がシフト演算子の RHS オペランドとして使用されている場合、MISRA2004-12_8 (MISRA-038) が違反を検出しない |
CPP-41279 | 関数にコメントがない場合、METRICS-19 が違反を検出しない |
CPP-41829 | line 160: internal error: assertion failed at: "error.c", line 1123 |
CPP-42436 | ブロックのコンテキストで if 文 (またはその他) が誤って検出される (C のみ) |
CPP-42458 | [VS] ソリューション フォルダー内のテスト プロジェクトのサポート改善 |
CPP-42462 | line 66: internal error: assertion failed at: "scope_stk.c", line 5106 |
CPP-42467 | コマンド ライン オプション -edg.restrict_keyword_enabled の読み取りエラー |
CPP-42524 | MISRA-071_b (MISRA2012-RULE-17_3) はビルトイン関数の呼び出しに対して違反をレポートするべきではない |
CPP-42551 | [RW] RuleWizard が誤ったバージョン番号を表示する |
CPP-42577 | GNU GCC 8 _attribute_((fallthrough)) でパース エラー |
CPP-42578 | テンプレート コードを解析するカスタム ルールで cwc がクラッシュする |
CPP-42663 | PB.33_b: packed 属性付きで定義された列挙型に対して違反を誤検出する |
CPP-42687 | C++test がユーザー定義リテラルを処理できない |
CPP-42795 | 括弧付きの 'cppmode' タグの効果がない |
CPP-42859 | [DOCS] ライセンス エディション名の修正 |
CPP-42878 | 匿名共用体を含む構造体へのポインター型のパラメーターに対して MISRA2004-16_7 が違反を誤検出する |
CPP-42879 | 匿名共用体を含む構造体へのポインター型のパラメーターに対して CODSTA-132 が違反を誤検出する |
CPP-42901 | IAR EWARM __packed でパース エラー |
CPP-42936 | RW で a->b 式の 'b' が匿名共用他のメンバーであるとき、a.b として検出される |
CPP-42951 | OPT-03 (AUTOSAR A0-1-4) が属性 unused' (c++11) をサポートしていない |
CPP-43007 | Intel icc 18: BDF ファイルからリンカー オプションが抽出されない |
CPP-43010 | 代入演算子関数を使用してループ カウンターを初期化している場合、CODSTA-52 (JSF-198) が違反を誤検出する |
CPP-43080 | METRICS-29, -33 は定義されインスタンス化されたテンプレート関数に対してだけ違反を検出するべきである |
CPP-43103 | カスタム ルールで cwc が終了コード 4 でクラッシュする |
CPP-43105 | [RW] a.b, a->b, a.*b, a->*b ノードの 'OperatorName' プロパティの拡張 |
CPP-43299 | [DOCS] CPPTEST_REPORT_ENUM が実際には 3 つの引数を要求する |
CPP-43407 | [TEST_EDITOR] スクロールおよびサイズ変更時のウィジェットの動作の改善 |
FA-5720 | BD-PB-OVERFNZT の誤検出 |
FA-6283 | BD-PB-OVERFNZT の誤検出 |
FA-6745 | 終了関数が認識されない |
FA-6758 | グラフ構築時に現在のブロックが ScopeBlock エラーではない |
FA-6801 | BD-PB-OVERFNZT の誤検出 |
FA-6807 | BD-RES-LEAKS の誤検出 |
FA-6811 | 負数に設定されていないインデックスに対して BD-PB-ARRAY が違反を検出する |
FA-6857 | BD-PB-EOFCOMP ルールは fputs メソッドもカバーするべき |
FA-6974 | BD-PB-STDEXC の誤検出 |
FA-6976 | bool/int 比較評価に対して BD-PB-NP が違反を誤検出する |
新規ルール
以下のルールが追加されました。
ルール ID | ヘッダー |
---|---|
AUTOSAR-A0_1_6-a | プロジェクトに未使用の型宣言が含まれていてはならない |
AUTOSAR-A0_4_2-a | long double 型を使用してはならない |
AUTOSAR-A0_4_4-a | ライブラリ関数に渡される値を検証する |
AUTOSAR-A10_3_1-a | メンバー関数の宣言では virtual、override、final のいずれか 1 つだけを指定するべきである |
AUTOSAR-A10_3_5-a | ユーザー定義の代入演算子は virtual であってはならない |
AUTOSAR-A10_4_1-a | 抽象クラスから階層を開始する |
AUTOSAR-A11_0_1-a | 非 POD 型はクラスとして定義するべきである |
AUTOSAR-A11_0_2-a | 構造体には、public データ メンバーだけを含めるべきであり、基底であったり継承を行ったりするべきではない |
AUTOSAR-A12_0_2-a | パディング ビットを含む可能性があるクラスのオブジェクトを C の標準ライブラリ関数で比較してはならない |
AUTOSAR-A12_4_2-a | クラスの public なデストラクターが非 virtual である場合、クラスを final 宣言するべきである |
AUTOSAR-A12_7_1-a | 振る舞いが同等なら、特別なメンバー =default を定義する |
AUTOSAR-A12_8_3-a | 移動元オブジェクトの値に依存しない |
AUTOSAR-A13_1_2-a | ユーザー定義リテラル演算子のユーザー定義の接尾辞は、アンダースコアで始まり 1 文字以上の文字が続く必要がある |
AUTOSAR-A13_1_3-a | ユーザー定義のリテラル演算子は、渡されたパラメーターの変換だけを行う必要がある |
AUTOSAR-A13_2_2-a | 2 項算術演算子およびビット演算子は "prvalue" を返す必要がある |
AUTOSAR-A13_2_3-a | 関係演算子はブール値を返す必要がある |
AUTOSAR-A13_5_3-a | ユーザ定義の変換関数を使用しない |
AUTOSAR-A13_5_4-a | == と != など 2 つの演算子が反対の意味を持つ場合、両方を定義する |
AUTOSAR-A13_5_4-b | 2 つの逆の演算子 (たとえば == と != ) の一方を定義する場合、両方を定義する。また一方を使用して他方を定義する |
AUTOSAR-A13_5_5-a | 混合モードの算術をサポートするには、メンバ演算子ではなくメンバでない演算子を使う |
AUTOSAR-A13_6_1-a | 桁区切り ' は、次の場合にだけ使用する。 |
AUTOSAR-A14_5_1-a | 1 つのジェネリック パラメータを持つテンプレート コンストラクタがある場合、コピー コンストラクタを宣言する |
AUTOSAR-A14_7_2-a | テンプレートの特殊化は、一次テンプレートまたは特殊化が宣言されたユーザー定義型と同じファイルに宣言する必要がある |
AUTOSAR-A14_8_2-a | オーバーロードされた関数テンプレートを明示的に特殊化してはならない |
AUTOSAR-A15_0_2-a | リソースが解放されていることを確認する |
AUTOSAR-A15_1_1-a | std::exception のインスタンスだけを例外として使用する |
AUTOSAR-A15_1_5-a | 実行境界を越えて例外をスローしてはならない |
AUTOSAR-A15_4_2-a | 例外をスローしないよう宣言された関数から例外をスローしてはならない |
AUTOSAR-A15_5_1-a | デストラクタ、割り当て解除、スワップから例外をスローしてはならない |
AUTOSAR-A15_5_1-b | すべてのユーザー定義のムーブ コンストラクターおよびムーブ代入演算子は、例外で終了してはならない |
AUTOSAR-A16_2_2-a | ファイルは、コンパイルに必要な宣言および定義を含むヘッダーだけを直接的にインクルードするべきである |
AUTOSAR-A16_6_1-a | #error ディレクティブを使用してはならない |
AUTOSAR-A16_7_1-a | #pragma ディレクティブを使用してはならない |
AUTOSAR-A17_1_1-b | C 標準ライブラリの使用をラップする |
AUTOSAR-A17_6_1-a | 標準の名前空間 std および posix を変更してはならない |
AUTOSAR-A18_1_4-a | オブジェクトの配列の要素を指すポインターを単一のオブジェクト型のスマート ポインターに渡してはならない |
AUTOSAR-A18_1_6-a | ユーザー定義型のすべての std::hash 特殊化は、noexcept 関数呼び出し演算子を持つ必要がある |
AUTOSAR-A18_5_10-a | 不適切なストレージ容量を持つポインターまたは作成されるオブジェクトに対して適切にアラインされていないポインターを配置 new に渡さない |
AUTOSAR-A18_5_10-b | 配置 new アロケーション関数にオブジェクトの配列を渡す場合、オーバーヘッドを使用するべきである |
AUTOSAR-A18_5_11-a | 演算子 new を記述した場合は演算子 delete を記述する |
AUTOSAR-A18_5_11-b | 演算子 new[] を記述した場合は演算子 delete[] を記述する |
AUTOSAR-A18_5_3-c | 動的に割り当てられたリソースは適切に解放する |
AUTOSAR-A18_5_4-a | サイズ指定付きとサイズ指定なしの両方のバージョンの delete 演算子を定義する |
AUTOSAR-A18_5_5-c | new ハンドラーを適切に定義する |
AUTOSAR-A18_5_8-a | new または malloc ではなく、宣言によって割り当てる |
AUTOSAR-A18_5_9-a | ユーザー定義の new 演算子は、割り当てが失敗した場合、std::bad_alloc 例外をスローするべきである |
AUTOSAR-A18_9_2-a | std::forward を使用して前方ユニバーサル参照を行う |
AUTOSAR-A18_9_3-a | const または const & 型を指定して宣言されたオブジェクトに対して std::move を使用しない |
AUTOSAR-A2_10_1-a | ローカルまたは関数プロトタイプ スコープで宣言された識別子は、グローバルまたは名前空間のスコープで宣言された識別子を隠蔽してはならない |
AUTOSAR-A2_10_1-b | 内側のローカル スコープで宣言された識別子は、外側のローカル スコープで宣言された識別子を隠蔽してはならない |
AUTOSAR-A2_10_1-c | ローカル スコープで宣言された識別子は、クラス スコープで宣言された識別子を隠ぺいしてはならない |
AUTOSAR-A2_10_1-d | クラス スコープで宣言された識別子は、グローバルまたは名前空間のスコープで宣言された識別子を隠ぺいしてはならない |
AUTOSAR-A2_10_1-e | 内部クラスのスコープで宣言された識別子は、外側のクラスのスコープで宣言された識別子を隠ぺいしてはならない |
AUTOSAR-A2_10_5-a | 静的記憶域期間を持つオブジェクトや関数識別子は、再使用すべきでない |
AUTOSAR-A2_10_5-b | 静的記憶域期間を持つオブジェクトや関数識別子は、再使用すべきでない |
AUTOSAR-A2_10_6-a | 識別子が型を参照する場合、同じスコープのオブジェクトまたは関数を参照してはいけない |
AUTOSAR-A2_10_6-b | 識別子が型を参照する場合、同じスコープのオブジェクトまたは関数を参照してはいけない |
AUTOSAR-A2_10_6-c | 識別子が型を参照する場合、同じスコープのオブジェクトまたは関数を参照してはいけない |
AUTOSAR-A2_13_1-a | ISO/IEC 14882:2003 で定義されたエスケープ シーケンスだけを使用する |
AUTOSAR-A2_13_2-a | エンコーディング接頭辞が異なる文字列リテラルを結合してはならない |
AUTOSAR-A2_13_3-a | wchar_t 型を使用してはならない |
AUTOSAR-A2_13_4-a | 文字列リテラルを変更してはならない |
AUTOSAR-A2_13_5-a | 16 進定数はすべて大文字で表記する |
AUTOSAR-A2_13_6-a | ユニバーサル文字名は、文字または文字列リテラルの内部でだけ使用する |
AUTOSAR-A2_3_1-a | ISO の C 規格で定義されている文字だけを使用する |
AUTOSAR-A2_5_2-a | 次の 2 文字表記を使用しない %%,::%:%:%: |
AUTOSAR-A2_7_1-a | // コメントで行の結合を使用してはならない |
AUTOSAR-A2_7_2-a | コード セクションを "コメント アウト" してはならない |
AUTOSAR-A20_8_1-a | すでに所有されているポインター値を関連がないスマート ポインターに格納しない |
AUTOSAR-A20_8_2-a | スレッドにオブジェクトへのポインターを渡す場合はスマート ポインターを使用する |
AUTOSAR-A20_8_3-a | スレッドにオブジェクトへのポインターを渡す場合はスマート ポインターを使用する |
AUTOSAR-A20_8_4-a | ローカル オブジェクトに対して 'std::shared_ptr' ではなく 'std::unique_ptr' を使用することを検討する |
AUTOSAR-A20_8_5-a | std::unique_ptr が所有するオブジェクトを作成するには std::make_unique を使用する |
AUTOSAR-A20_8_6-a | new を直接使用するのではなく、できるだけ 'std::make_shared' を使用する |
AUTOSAR-A20_8_7-a | shared_ptr の循環参照を避ける |
AUTOSAR-A21_8_1-a | ctype.h ライブラリ関数に誤った値を渡してはならない |
AUTOSAR-A23_0_2-a | コンテナーを反復処理中に変更しない |
AUTOSAR-A23_0_2-b | 有効な参照、ポインター、イテレーターを使用して basic_string の要素を参照する |
AUTOSAR-A25_1_1-a | 述語を純粋関数にする |
AUTOSAR-A25_4_1-a | 等しい値に対して true を返す比較関数を連想コンテナに使用しない |
AUTOSAR-A26_5_1-a | 疑似乱数の生成に rand() 関数を使用しない |
AUTOSAR-A26_5_2-a | 疑似乱数生成器に適切なシードを指定する |
AUTOSAR-A27_0_1-c | 汚染されたデータによるバッファー オーバーフローを避ける |
AUTOSAR-A27_0_1-d | 不正な書式制限の定義によるバッファー オーバーフローを避ける |
AUTOSAR-A27_0_1-e | 汚染されたデータによるバッファー読み込み時のオーバーフローを避ける |
AUTOSAR-A27_0_1-f | 汚染されたデータによるバッファー書き込み時のオーバーフローを避ける |
AUTOSAR-A27_0_1-g | コマンド インジェクションから防御する |
AUTOSAR-A27_0_1-h | フォーマット文字列からサニタイズされていないユーザー入力を除外する |
AUTOSAR-A27_0_2-c | 配列ではなく vector や string を使用する |
AUTOSAR-A27_0_2-d | 配列の境界を超えてアクセスしてはならない |
AUTOSAR-A27_0_2-e | 汚染されたデータによるバッファー オーバーフローを避ける |
AUTOSAR-A27_0_2-f | 汚染されたデータによるバッファー書き込み時のオーバーフローを避ける |
AUTOSAR-A27_0_2-g | バッファ オーバーフローの原因になる可能性があるため、安全ではない文字列関数を使用しないようにする |
AUTOSAR-A27_0_3-a | 間にフラッシュまたは位置付けの処理を呼び出さずに交互にストリームの入力と出力を行ってはならない |
AUTOSAR-A3_1_2-a | ヘッダー ファイルの拡張子は常に ".h"、".hpp"、".hxx" にする |
AUTOSAR-A3_1_5-a | テンプレートではないクラス定義でメンバ関数を定義してはいけない |
AUTOSAR-A3_1_6-a | 小さいアクセサ関数やミューテータ関数はインラインにする |
AUTOSAR-A3_8_1-a | 解放されたリソースを使用してはならない |
AUTOSAR-A3_8_1-b | 自動記憶域のオブジェクトのアドレスを関数から返してはいけない |
AUTOSAR-A3_8_1-c | 自動記憶域のオブジェクトのアドレスを、オブジェクトが存在しなくなった後にも存在し続ける可能性がある別のオブジェクトに代入してはならない |
AUTOSAR-A3_8_1-d | 解放済みのラップされたオブジェクトを指してはならない |
AUTOSAR-A4_7_1-h | 整数のオーバーフローを避ける |
AUTOSAR-A5_0_4-a | 配列をポリモーフィックに処理しない |
AUTOSAR-A5_0_4-b | 派生クラス オブジェクトの配列を指すポインターを、基底クラスのポインターに変換してはいけない |
AUTOSAR-A5_0_4-c | 配列をポリモーフィックに処理しない |
AUTOSAR-A5_1_7-a | ラムダを typeid のオペランドにしてはならない |
AUTOSAR-A5_10_1-a | メンバー仮想関数を指すポインターは、null ポインター定数と等価かどうかだけをテストするべきである |
AUTOSAR-A5_2_5-b | 範囲外の配列およびポインターへのアクセスを避ける |
AUTOSAR-A5_2_5-c | ポインター オペランドと、そのオペランドを使用したポインター算術の結果であるポインターは、同じ配列の要素を指していなければならない |
AUTOSAR-A5_2_5-d | 汚染されたデータを配列添え字として使用しない |
AUTOSAR-A5_2_6-a | 論理演算子 && または|| のオペランドは後置式でなければならない |
AUTOSAR-A5_3_2-a | null ポインターの間接参照を避ける |
AUTOSAR-A5_3_3-a | 削除の時点で不完全なオブジェクトを削除してはならない |
AUTOSAR-A5_6_1-a | ゼロによる除算を避ける |
AUTOSAR-A6_5_4-a | for ループの初期化式は、1 つのループ パラメータの値を初期化する以外の処理を行ってはならない |
AUTOSAR-A6_5_4-b | for ループのインクリメント式は、1 つのループ パラメータを次の値に変更する以外の処理を行ってはならない |
AUTOSAR-A7_1_3-a | 7.1.4 CV 修飾子は、修飾される型の右側に置く |
AUTOSAR-A7_1_7-b | 複数の変数を同じ文で宣言してはならない |
AUTOSAR-A7_1_7-c | 各変数は、別個の宣言文で宣言しなければならない |
AUTOSAR-A7_1_9-a | クラス、構造体、列挙型を、型の定義の中で宣言してはならない |
AUTOSAR-A7_2_5-a | 有限の選択肢から選択する場合、整数型 (および定数) ではなく列挙型を使用する |
AUTOSAR-A7_3_1-a | オーバーロードされた関数を再宣言する場合、using 宣言を使用する |
AUTOSAR-A7_5_1-a | 関数は参照または const 参照によって渡されたパラメータへの参照またはポインタを返してはならない |
AUTOSAR-A7_6_1-a | return するべきでない関数から return してはならない |
AUTOSAR-A8_4_10-a | パラメーターが NULL の可能性がない場合、参照で渡す |
AUTOSAR-A8_4_11-a | 生存期間を表現する場合にだけパラメーター型としてスマートポインターを使用する |
AUTOSAR-A8_4_12-a | std::unique_ptr を const 参照で渡さない |
AUTOSAR-A8_4_12-b | 生存期間を表現する場合にだけパラメーター型としてスマートポインターを使用する |
AUTOSAR-A8_4_12-c | パラメーターは、管理対象オブジェクトを関数が置き換える場合にだけ 'std::shared_ptr' または 'std::unique_ptr' への非 const lvalue 参照として宣言するべきである |
AUTOSAR-A8_4_12-d | パラメーターの型を 'std::shared_ptr' または 'std::unique_ptr' への rvalue 参照として宣言しない |
AUTOSAR-A8_4_13-a | 生存期間を表現する場合にだけパラメーター型としてスマートポインターを使用する |
AUTOSAR-A8_4_13-b | パラメーターは、管理対象オブジェクトを関数が置き換える場合にだけ 'std::shared_ptr' または 'std::unique_ptr' への非 const lvalue 参照として宣言するべきである |
AUTOSAR-A8_4_13-c | パラメーターの型を 'std::shared_ptr' または 'std::unique_ptr' への rvalue 参照として宣言しない |
AUTOSAR-A8_4_3-a | 値ではなく参照でオブジェクトを渡す |
AUTOSAR-A8_4_3-b | できる限り参照パラメータを const 参照として宣言する |
AUTOSAR-A8_4_5-a | 右辺値参照には std::move() を使用し、ユニバーサル参照には std::forward() を使用する |
AUTOSAR-A8_4_6-a | 右辺値参照には std::move() を使用し、ユニバーサル参照には std::forward() を使用する |
AUTOSAR-A8_4_7-a | 基本データ型は、値を変更していない限り、値で渡すべきである |
AUTOSAR-A8_4_7-b | トリビアルなコピー コンストラクターを持つ小さいオブジェクトは値で渡す |
AUTOSAR-A8_4_9-a | できる限り参照パラメータを const 参照として宣言する |
AUTOSAR-A8_5_0-a | 初期化の前に使用しない |
AUTOSAR-A9_6_2-a | メンバ変数をビット フィールドとして宣言してはいけない |
AUTOSAR-M2_7_1-a | 文字列 /* を C スタイル コメント内で使用してはならない |
AUTOSAR-M9_6_4-a | signed integer 型の名前付きのビットフィールドは 2 ビット以上の長さでなければならない |
BD-PB-ARRPTR | オブジェクトの配列の要素を指すポインターを単一のオブジェクト型のスマート ポインターに渡してはならない |
BD-PB-NOEXCEPT | 例外をスローしないよう宣言された関数から例外をスローしてはならない |
BD-PB-OVERLAP | オブジェクトを重複するオブジェクトに代入またはコピーしてはならない |
BD-PB-REFPARAM | パラメーターが NULL の可能性がない場合、参照で渡す |
BD-RES-BADDEALLOC | 動的に割り当てられたリソースは適切に解放する |
BD-RES-CSP | shared_ptr の循環参照を避ける |
BD-SECURITY-TDINPUT | フォーマット文字列からサニタイズされていないユーザー入力を除外する |
CERT_CPP-ERR50-m | 例外をスローしないよう宣言された関数から例外をスローしてはならない |
CERT_CPP-EXP59-a | offsetof() は有効な型およびメンバーに対して使用する |
CERT_CPP-EXP62-a | パディング ビットを含む可能性があるクラスのオブジェクトを C の標準ライブラリ関数で比較してはならない |
CERT_CPP-MEM51-d | 動的に割り当てられたリソースは適切に解放する |
CERT_CPP-MEM54-a | 不適切なストレージ容量を持つポインターまたは作成されるオブジェクトに対して適切にアラインされていないポインターを配置 new に渡さない |
CERT_CPP-MEM54-b | 配置 new アロケーション関数にオブジェクトの配列を渡す場合、オーバーヘッドを使用するべきである |
CERT_CPP-MEM57-a | オーバーアラインされた型にデフォルトの演算子 new を使用しない |
CERT_CPP-STR50-b | ゼロで終わっていない文字列の読み込みによるオーバーフローを避ける |
CERT_CPP-STR50-c | バッファー書き込み時のオーバーフローを避ける |
CERT_CPP-STR50-d | 配列の境界を超えてアクセスしてはならない |
CERT_CPP-STR50-e | 汚染されたデータによるバッファー オーバーフローを避ける |
CERT_CPP-STR50-f | 汚染されたデータによるバッファー書き込み時のオーバーフローを避ける |
CERT_CPP-STR50-g | バッファ オーバーフローの原因になる可能性があるため、安全ではない文字列関数を使用しないようにする |
CODSTA-CPP-100 | パディング ビットを含む可能性があるクラスのオブジェクトを C の標準ライブラリ関数で比較してはならない |
CODSTA-CPP-101 | 関係演算子はブール値を返す必要がある |
CODSTA-CPP-102 | 2 項算術演算子およびビット演算子は "prvalue" を返す必要がある |
CODSTA-CPP-99 | offsetof() は有効な型およびメンバーに対して使用する |
CODSTA-MCPP-16_e | std::unique_ptr が所有するオブジェクトを作成するには std::make_unique を使用する |
CODSTA-MCPP-23 | クラスの public なデストラクターが非 virtual である場合、クラスを final 宣言するべきである |
CODSTA-MCPP-24 | メンバー関数の宣言では virtual、override、final のいずれか 1 つだけを指定するべきである |
CODSTA-MCPP-25 | 桁区切り ' は、次の場合にだけ使用する。 |
CODSTA-MCPP-26 | メンバー仮想関数を指すポインターは、null ポインター定数と等価かどうかだけをテストするべきである |
CODSTA-MCPP-27 | ユーザー定義型のすべての std::hash 特殊化は、noexcept 関数呼び出し演算子を持つ必要がある |
CODSTA-MCPP-28 | ラムダを typeid のオペランドにしてはならない |
CODSTA-MCPP-29 | スレッドにオブジェクトへのポインターを渡す場合はスマート ポインターを使用する |
CODSTA-MCPP-30 | ローカル オブジェクトに対して 'std::shared_ptr' ではなく 'std::unique_ptr' を使用することを検討する |
CODSTA-MCPP-31 | サイズ指定付きとサイズ指定なしの両方のバージョンの delete 演算子を定義する |
CODSTA-MCPP-33 | ユーザー定義のリテラル演算子は、渡されたパラメーターの変換だけを行う必要がある |
CODSTA-MCPP-34 | 生存期間を表現する場合にだけパラメーター型としてスマートポインターを使用する |
CODSTA-MCPP-35 | パラメーターは、管理対象オブジェクトを関数が置き換える場合にだけ 'std::shared_ptr' または 'std::unique_ptr' への非 const lvalue 参照として宣言するべきである |
CODSTA-MCPP-36 | パラメーターの型を 'std::shared_ptr' または 'std::unique_ptr' への rvalue 参照として宣言しない |
EXCEPT-21 | すべてのユーザー定義のムーブ コンストラクターおよびムーブ代入演算子は、例外で終了してはならない |
HICPP-13_2_2-b | 2 項算術演算子およびビット演算子は "prvalue" を返す必要がある |
HICPP-15_3_2-c | 例外をスローしないよう宣言された関数から例外をスローしてはならない |
HICPP-5_3_3-c | 動的に割り当てられたリソースは適切に解放する |
MISRA2008-15_5_2_b | 例外をスローしないよう宣言された関数から例外をスローしてはならない |
MISRA2008-15_5_3_l | 例外をスローしないよう宣言された関数から例外をスローしてはならない |
MISRA2012-DIR_4_14_l | フォーマット文字列からサニタイズされていないユーザー入力を除外する |
MISRA2012-RULE_19_1_c | オブジェクトを重複するオブジェクトに代入またはコピーしてはならない |
MISRAC2012-DIR_4_14-l | フォーマット文字列からサニタイズされていないユーザー入力を除外する |
MISRAC2012-RULE_19_1-c | オブジェクトを重複するオブジェクトに代入またはコピーしてはならない |
MRM-54 | オーバーアラインされた型にデフォルトの演算子 new を使用しない |
MRM-55 | 不適切なストレージ容量を持つポインターまたは作成されるオブジェクトに対して適切にアラインされていないポインターを配置 new に渡さない |
MRM-55_b | 配置 new アロケーション関数にオブジェクトの配列を渡す場合、オーバーヘッドを使用するべきである |
NAMING-51 | ユーザー定義リテラル演算子のユーザー定義の接尾辞は、アンダースコアで始まり 1 文字以上の文字が続く必要がある |
NAMING-52 | ユニバーサル文字名は、文字または文字列リテラルの内部でだけ使用する |
NAMING-53 | ヘッダー ファイルの拡張子は常に ".h"、".hpp"、".hxx" にする |
OOP-55 | 非 POD 型はクラスとして定義するべきである |
OOP-56 | ユーザー定義の代入演算子は virtual であってはならない |
OOP-57 | 構造体には、public データ メンバーだけを含めるべきであり、基底であったり継承を行ったりするべきではない |
PB-38_b | エンコーディング接頭辞が異なる文字列リテラルを結合してはならない |
PB-39_b | 関数は参照または const 参照によって渡されたパラメータへの参照またはポインタを返してはならない |
PORT-32 | long double 型を使用してはならない |
PORT-33 | wchar_t 型を使用してはならない |
PREPROC-22 | #error ディレクティブを使用してはならない |
PREPROC-23 | #pragma ディレクティブを使用してはならない |
PREPROC-24 | 前処理指令のすべてのマクロ識別子は、用いる前に定義しなければならない。ただし、#ifdef および #ifndef 前処理指令や defined() 演算子の場合は、その限りでない |
TEMPL-16 | テンプレートの特殊化は、一次テンプレートまたは特殊化が宣言されたユーザー定義型と同じファイルに宣言する必要がある |
更新されたルール
解析結果の向上のため、以下の静的解析ルールが更新されました。
ルール カテゴリ | ルール ID |
---|---|
AUTOSAR C++14 Coding Guidelines | AUTOSAR-A0_1_4-a,AUTOSAR-A12_4_1-a, AUTOSAR-A27_0_1-b, AUTOSAR-A27_0_2-a, AUTOSAR-A2_11_1-a, AUTOSAR-A2_8_1-a, AUTOSAR-A5_0_1-b, AUTOSAR-A5_0_1-f, AUTOSAR-A5_5_1-a, AUTOSAR-A8_5_1-a, AUTOSAR-A9_6_1-a, AUTOSAR-M0_1_1-b, AUTOSAR-M0_1_3-a, AUTOSAR-M0_1_3-b, AUTOSAR-M0_3_1-g. AUTOSAR-M11_0_1-a, AUTOSAR-M5_8_1-a |
フロー解析 | BD-CO-ITMOD, BD-PB-ERRNO, BD-PB-OVERFNZT, BD-PB-OVERFNZT, BD-SECURITY-RAND |
SEI CERT C | CERT_C-ARR38-d, CERT_C-DCL01-b, CERT_C-DCL10-a, CERT_C-DCL11-a, CERT_C-DCL11-b, CERT_C-DCL11-c, CERT_C-DCL11-d, CERT_C-DCL11-e, CERT_C-DCL11-f, CERT_C-ERR30-a, CERT_C-ERR32-a, CERT_C-EXP10-b, CERT_C-EXP30-b, CERT_C-EXP37-d, CERT_C-FIO41-b, CERT_C-FIO47-a, CERT_C-FIO47-b, CERT_C-FIO47-c, CERT_C-FIO47-d, CERT_C-FIO47-e, CERT_C-FIO47-f, CERT_C-INT31-f, CERT_C-INT34-a, CERT_C-MSC07-b, CERT_C-MSC09-a, CERT_C-MSC12-b, CERT_C-MSC13-a, CERT_C-MSC32-d, CERT_C-POS30-a, CERT_C-STR03-a, CERT_C-STR32-a |
SEI CERT C++ | CERT_CPP-CTR51-a, CERT_CPP-EXP50-b, CERT_CPP-MSC51-a, CERT_CPP-OOP53-a |
コーディング規約 | CODSTA-124_a, CODSTA-124_b, CODSTA-161_f, CODSTA-52, CODSTA-56 |
C++ コーディング規約 | CODSTA-CPP-87_c |
High Integrity C++ | HICPP-12_4_4-a, HICPP-14_2_1-a, HICPP-1_2_1-b, HICPP-3_1_1-b, HICPP-4_2_2-a, HICPP-5_1_2-b, HICPP-5_1_2-f, HICPP-5_7_2-a |
初期化 | INIT-10 |
Joint Strike Fighter | JSF-009, JSF-075, JSF-104, JSF-117, JSF-125_a, JSF-135_b, JSF-143_a, JSF-164, JSF-186_b, JSF-198, JSF-204.1_b, JSF-204.1_f |
メトリクス | METRICS-19, METRICS-29, METRICS-33 |
MISRA C 1998 | MISRA-005, MISRA-038, MISRA-071_b |
MISRA C 2004 | MISRA2004-12_2_b, MISRA2004-12_2_f, MISRA2004-12_8, MISRA2004-14_1_b, MISRA2004-5_2_b, MISRA2004-8_1_b |
MISRA C++ 2008 | MISRA2008-0_1_11, MISRA2008-0_1_1_b, MISRA2008-0_1_3_a, MISRA2008-0_1_3_b, MISRA2008-0_3_1_e, MISRA2008-11_0_1, MISRA2008-14_7_3, MISRA2008-2_10_2_b, MISRA2008-2_10_6_c, MISRA2008-5_0_1_b, MISRA2008-5_0_1_f, MISRA2008-5_8_1 |
MISRA C 2012 (Legacy) | MISRA2012-DIR-4_1_e, MISRA2012-RULE-10_1_f, MISRA2012-RULE-11_1_a, MISRA2012-RULE-11_1_b, MISRA2012-RULE-12_2, MISRA2012-RULE-13_2_b, MISRA2012-RULE-13_2_f, MISRA2012-RULE-17_3, MISRA2012-RULE-1_3_g, MISRA2012-RULE-1_3_k, MISRA2012-RULE-21_17_a, MISRA2012-RULE-22_10, MISRA2012-RULE-22_8, MISRA2012-RULE-22_9, MISRA2012-RULE-2_1_b, MISRA2012-RULE-5_3_b |
MISRA C 2012 | MISRAC2012-DIR_4_1-e, MISRAC2012-RULE_10_1-f, MISRAC2012-RULE_11_1-a, MISRAC2012-RULE_11_1-b, MISRAC2012-RULE_12_2-a, MISRAC2012-RULE_13_2-b, MISRAC2012-RULE_13_2-f, MISRAC2012-RULE_17_3-a, MISRAC2012-RULE_1_3-g, MISRAC2012-RULE_1_3-k, MISRAC2012-RULE_21_17-a, MISRAC2012-RULE_22_10-a, MISRAC2012-RULE_22_8-a, MISRAC2012-RULE_22_9-a, MISRAC2012-RULE_2_1-b, MISRAC2012-RULE_5_3-b |
オブジェクト指向 | OOP-48 |
最適化 | OPT-02, OPT-03, OPT-05, OPT-06, OPT-14, OPT-31 |
バグの可能性 | PB-33_b, PB-45, PB-46, PB-47, PB-48, PB-49, PB-50 |
テンプレート | TEMPL-10 |
削除されたルール
以下のルールは削除され、新しい AUTOSAR 18.10 標準への準拠を確認するルールに置き換えられました。
- AUTOSAR-A14_8_1-a
- AUTOSAR-A18_1_5-a
- AUTOSAR-A2_11_1-b
- AUTOSAR-A2_11_1-c
- AUTOSAR-A2_11_1-d
- AUTOSAR-A2_11_1-e
- AUTOSAR-A2_11_2-a
- AUTOSAR-A2_11_3-a
- AUTOSAR-A2_11_3-b
- AUTOSAR-A2_11_5-a
- AUTOSAR-A2_11_5-b
- AUTOSAR-A2_14_1-a
- AUTOSAR-A2_14_2-a
- AUTOSAR-A2_2_1-a
- AUTOSAR-A2_6_1-a
- AUTOSAR-A2_8_2-a
- AUTOSAR-A2_8_4-a
- AUTOSAR-A2_9_1-a
- AUTOSAR-A7_1_1-b
- AUTOSAR-M0_1_5-a
- AUTOSAR-M14_5_2-a
- AUTOSAR-M14_7_3-a
- AUTOSAR-M14_8_1-a
- AUTOSAR-M2_10_3-a
- AUTOSAR-M2_10_6-a
- AUTOSAR-M2_10_6-b
- AUTOSAR-M2_10_6-c
- AUTOSAR-M2_10_6-d
- AUTOSAR-M5_2_1-a
- AUTOSAR-M7_3_5-a
- AUTOSAR-M8_5_1-a
業界標準への準拠を改善するため、PREPROC-24 にマップされていた以下のルールは削除されました。
- AUTOSAR-M16_0_7-b
- MISRA2004-19_11
- MISRA2008-16_0_7
- MISRA2012-RULE-20_9_a
- MISRAC2012-RULE_20_9-a
テスト コンフィギュレーションで手動で PREPROC-24 ルールを有効化し、同じ違反をレポートすることができます。