メインコンテンツ

コードの解析とソフトウェアインザループ テストの実行

コードを解析してエラーを検出し、標準への準拠をチェックして、長さや循環的複雑度などの主要メトリクスを評価できます。通常、独自のコードを作成するときは、静的コード解析を使用してランタイム エラーの有無をチェックし、要件に対してコードを評価するテスト ケースを実行して、コード カバレッジを評価します。結果に基づいて、コードを調整してテストを追加します。

この例では、コードを生成し、同じテスト ケースとベースライン結果を使用して、コードを実行するとモデルに対して同等の結果が得られることを示します。次に、コード カバレッジとモデル カバレッジを比較します。テスト結果に基づいて、テストを追加し、モデルを変更してコードを再生成します。

The code analysis and software-in-the-loop testing process. You generate code, analyze your code, perform testing to verify equivalence with your model. Then, you analyze code coverage and report result if they meet your requirements. Otherwise, you refine your code, tests and model.

欠陥、メトリクス、MISRA C:2012 を対象としてコードを解析

まず、モデルが MISRA™ C:2012 準拠のコードを生成することをチェックし、コード メトリクスと欠陥に関して、生成されたコードを解析します。MISRA に準拠するコードを生成するには、コード生成アドバイザーとモデル アドバイザーを使用します。コードが MISRA に準拠しているかどうかをチェックするには、Polyspace® MISRA C:2012 チェッカーを使用します。

  1. プロジェクト例を開きます。

    openExample("shared_vnv/CruiseControlVerificationProjectExample");
    pr = openProject("SimulinkVerificationCruise");

  2. simulinkCruiseErrorAndStandardsExample モデルを開きます。

    open_system("simulinkCruiseErrorAndStandardsExample");

    The simulinkCruiseErrorAndStandardsExample model has 5 inputs and 2 outputs, and includes an instance of the computeTargetSpeed model.

  3. simulinkCruiseErrorAndStandardsExample モデルには、computeTargetSpeed モデルのインスタンスが含まれます。computeTargetSpeed モデルを開きます。

    open_system("computeTargetSpeed");

コード ジェネレーター チェックの実行

コード生成アドバイザーを使用してモデルをチェックします。MISRA C との準拠性がより高く、Polyspace との互換性がより高いコードを生成するようにコード生成パラメーターを構成します。

  1. Embedded Coder アプリを開きます。[アプリ] タブで、[Embedded Coder] をクリックします。

  2. [C コード] タブで、[C/C++ コード アドバイザー] をクリックします。

  3. 左側のペインで、[コード生成アドバイザー] フォルダーを展開します。右側のペインで、[利用可能な目的] にある [Polyspace] を選択して右矢印をクリックします。[MISRA C:2023 ガイドライン] オブジェクティブが既に選択されています。MISRA C:2023 ガイドラインは、MISRA C:2012 への準拠を維持しています。

    Code Generation Objectives dialog box

  4. [選択したチェックを実行] をクリックします。

    コード生成アドバイザーで、モデルに MISRA C:2012 準拠や Polyspace コード解析に推奨されないブロックや構成設定が含まれているかチェックされます。このモデルでは、互換性のないブロックのチェックはパスしますが、一部の構成設定は MISRA 準拠や Polyspace チェックと互換性がありません。

    Code Generation Advisor results

  5. [コード生成の目的に対するモデル構成をチェック] をクリックします。[パラメーターの変更] をクリックしてパラメーターの変更を受け入れます。

  6. チェックを再実行するには、[このチェックを実行] をクリックします。

  7. [パラメーターの変更] をクリックして追加のパラメーターの変更を受け入れ、失敗したチェックを再実行します。

モデル アドバイザー チェックの実行

モデルからコードを生成する前に、モデル アドバイザーを使用して、モデルが MISRA C および Polyspace に準拠しているかチェックします。

  1. [コード生成アドバイザー] ウィンドウの下部で、[モデル アドバイザー] をクリックします。

  2. モデル アドバイザーで、[タスク別] フォルダーにある [MISRA C:2023 のモデリング標準] を選択します。[高信頼性システム] オプションをクリアします。

  3. [実行] をクリックして結果を確認します。

  4. いずれかのタスクが失敗した場合は、推奨される変更を行って、MISRA モデリング ガイドラインがパスするまでチェックを再実行します。

コードの生成と解析

モデルの準拠についてチェックしたら、コードを生成できます。コードを生成した後、Polyspace を使用して、コードが MISRA C:2012 に準拠しているかどうかをチェックし、MISRA C:2012 との準拠を示すレポートを生成できます。

  1. Simulink® モデルで [コード生成] をクリックします。

  2. コードが生成されたら、Simulink エディターで、モデルを右クリックし、[アプリの選択] にカーソルを合わせます。次に、[Polyspace コード検証] ボタン polyspace code verifier button をクリックします。

  3. [Polyspace] アプリのセクションで、[設定][プロジェクトの設定] をクリックします。

  4. Polyspace Platform ウィンドウの [構成] タブで、[静的解析] を選択します。

  5. 左側のペインで、[欠陥とコーディング規約] を選択します。

  6. [カスタム チェッカー ファイルを使用] を選択します。

  7. [チェッカーの選択] ダイアログの左側のペインで、[MISRA C:2012] を選択します。次に、[必須][必要] を選択します。[変更の保存] をクリックして、ファイルの名前を入力し、[保存] をクリックします。

  8. [MISRA C:2012 の生成されたコードの要件を使用] を選択します。

  9. Polyspace ウィンドウを保存して閉じます。

    Polyspace Defects and Coding Standards pane

  10. モデル内で右クリックして、[Polyspace Code Prover] セクションで [モデル コードのバグを検出] を選択し、[このモデルの Polyspace 解析を実行] アイコンをクリックします。

    Polyspace Bug Finder™ が、MISRA チェックのサブセットを対象として、生成されたコードを解析します。解析の進行状況は、MATLAB® コマンド ウィンドウで確認できます。解析が完了すると、Polyspace 環境が開きます。

結果の確認

Polyspace 環境に、静的コード解析の結果が表示されます。たとえば、結果リストをスクロールして、チェック 8.7 の結果を選択します。ルール 8.7 では、関数またはオブジェクトがローカルである場合、その関数およびオブジェクトをグローバルにしてはならないと定められています。これらの結果では、他のコンポーネントでも使用している CruiseOnOff などの変数を参照しています。コードまたはモデルに注釈を付けて、それぞれの結果を正当化できます。

Polyspace Bug Finder dialog box

MISRA ルールのサブセットのみをチェックするように解析を構成するには、以下を行います。

  1. モデルで、[設定][Polyspace 設定] をクリックします。[検証設定]Project configuration に設定します。

  2. [設定][プロジェクトの設定] をクリックします。

  3. Polyspace Platform の [構成] タブで、[静的解析] を選択します。

  4. 左側のペインで、[欠陥とコーディング規約] を選択します。

  5. [チェッカーの選択] ダイアログの左側のペインで、[MISRA C:2012] を選択します。[Mandatory][Required] をクリアして、[Single Unit] を選択します。[変更の保存] をクリックします。これで、Polyspace は、単一単位に該当する MISRA C:2012 ルールのみをチェックします。

  6. 新しい構成で解析を再実行します。単一単位チェックの結果を確認します。

レポートの生成

MISRA C:2012 への準拠を示し、生成されたコード メトリクスに関してレポートするには、結果をエクスポートしなければなりません。解析を実行するたびにレポートを生成する場合は、レポートの生成 (Polyspace Bug Finder)を参照してください。

  1. 結果をまだ開いていない場合は、Polyspace 環境で開きます。

  2. ツール バーから、[レポート][レポートの実行] を選択します。

  3. レポートの種類として [BugFinderSummary] を選択します。

  4. [レポートの実行] をクリックします。レポートは結果と同じフォルダーに保存されます。

  5. レポートを開くには、[レポート][レポートを開く] を選択します。

ソフトウェアインザループ テストを使用したモデルに対するコードのテスト

次に、生成されたコードで同じテスト ケースを実行して、コードが元のモデルに対して同等の結果を生成し、要件を満たしていることを示します。次に、コード カバレッジとモデル カバレッジを比較して、テストが生成コードを実行した範囲を確認します。

  1. MATLAB の [プロジェクト] ペインで、tests フォルダーにある SILTests.mldatx を開きます。テスト マネージャーでファイルが開きます。

  2. テスト ケースを確認します。[テスト ブラウザー] ペインで、SIL Equivalence Test Case をクリックします。この等価性テスト ケースでは、テスト ハーネスを使用して、simulinkCruiseErrorAndStandardsExample モデルを対象に 2 つのシミュレーションが実行されます。

    • シミュレーション 1 は、ノーマル モードでのモデル シミュレーションです。

    • シミュレーション 2 は、ソフトウェアインザループ (SIL) シミュレーションです。SIL シミュレーションでは、テスト ケースはモデルを実行するのではなく、モデルから生成されたコードを実行します。

    等価性テストでは 1 つの出力信号が記録され、2 つのシミュレーションの結果が比較されます。テスト ケースは、両方のシミュレーションのカバレッジ測定も収集します。

  3. 等価性テストを実行するには、テスト ケースを選択して [実行] をクリックします。

  4. テスト マネージャーで結果を確認します。[結果とアーティファクト] ペインで、[SIL Equivalence Test Case] を選択します。テスト ケースがパスし、このテスト ケースのモデルと同じ結果がコードで生成されます。

    Test Manager showing passed test cases and model and code coverage results.

  5. 右側のペインで [カバレッジの結果] セクションを展開します。カバレッジ測定では、テスト ケースがモデルとコードを実行する範囲が示されます。

複数のテスト ケースを実行する場合は、実行全体の結果に集計されたカバレッジ測定を表示できます。機能テストの実行とテスト カバレッジの解析 (Simulink Check)に示すように、カバレッジ結果を使用してテストを追加し、カバレッジ要件を満たします。

プロセッサインザループ (PIL) シミュレーションを実行して、生成されたコードをターゲット ハードウェアでテストすることもできます。テスト ケースに PIL シミュレーションを追加して、ターゲット ハードウェアで実行するときに、モデルのテスト結果とカバレッジ結果を、生成コードからの結果と比較できます。詳細については、Code Verification Through Software-in-the-Loop and Processor-in-the-Loop Execution (Embedded Coder)を参照してください。

参考

トピック