このリリースでは、コード解析機能の拡張および 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" テスト コンフィギュレーションの大幅な拡張が行われ、標準を推進するための新しいルールが追加されました。

(info) コンプライアンス パックを使用するには、専用のライセンス機能を有効化する必要があります。コンプライアンス パック ライセンスの詳細については、Parasoft 製品サポートにご連絡ください。

静的解析のパフォーマンス改善

C/C++test の静的コード解析機能が拡張され、パフォーマンスが改善しました。C/C++ テストは、インクリメンタルな CI ビルドでの解析時間を短縮するよう最適化され、コードの変更から静的解析結果の確認までのフィードバック サイクルが短縮されました。また、最適化により、IDE でローカルに実行される解析がスピードアップし、デスクトップでのソフトウェア開発の加速に役立ちます。詳細は「インクリメンタルな静的解析」を参照してください。

コード カバレッジ解析の拡張

コード カバレッジ機能を拡張し、システム テストおよび機能テストのカバレッジ計測を容易にしました。

スタンドアロン コード カバレッジ

C/C++test に軽量のコード カバレッジ ユーティリティ cpptestcc が付属するようになりました。このユーティリティはビルド システムに簡単に統合でき、コードのインストゥルメント用プロジェクトを作成するという複雑な作業の負荷と時間を減らします。通常のビルド プロセスの一環として簡単にテスト バイナリを作成し、カバレッジ データを IDE にアップロードして通常の C/C++test のレポート機能を使用して結果を確認できます。MC/DC、判断文カバレッジ、関数カバレッジなど、すべてのカバレッジ メトリクスをモニターできます。詳細については「cpptestcc を利用したアプリケーション カバレッジの収集」を参照してください。

複数のテスト実行のコード カバレッジをマージ

複数のテスト セッションから得られたコード カバレッジを集約し、累積レポートを生成できます。詳細については「複数のテスト実行から結果をマージする」を参照してください。

アセンブリ カバレッジの収集のサポート拡張

Linux ベースの開発環境を追加し、アセンブリ レベルでのカバレッジ情報収集に対するサポートを拡張しました。アセンブリ カバレッジ ツールは、x86 (32-bit) プラットフォーム対応の GCC コンパイラ をサポートするようになりました。詳細は「アセンブリ コード カバレッジ」を参照してください。

追加または更新された解析ルール

新規静的解析ルールが追加され、コンプライアンス標準のカバー範囲が拡張されました。詳細については「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 ルールを有効化し、同じ違反をレポートすることができます。

  • No labels