メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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

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

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

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 includes the Compute target speed subsystem, which has 5 inputs and 2 outputs.

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

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

  1. Compute target speed サブシステムを右クリックして [C/C++ コード][コード生成アドバイザー] を選択します。

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

    Code Generation Objectives dialog box

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

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

    Code Generation Advisor results

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

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

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

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

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

  2. モデル アドバイザーで、[タスク別] フォルダーにある [MISRA C:2012 のモデリング標準] を選択します。

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

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

コードの生成と解析

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

  1. Simulink® モデルで、Compute target speed サブシステムを右クリックし、[C/C++ コード][このサブシステムをビルド] をクリックします。

  2. コードが生成されたら、Simulink エディターで、Compute target speed サブシステムを右クリックし、[Polyspace][オプション] を選択します。

  3. [構成] をクリックして、より高度な Polyspace 解析オプションを選択します。Polyspace ウィンドウが開きます。

  4. 左側のペインで、[コーディング規約およびコード メトリクス] をクリックしてから、[コード メトリクスの計算] を選択して、生成されたコードのコード メトリクス計算を有効にします。[MISRA C:2012 のチェック] を選択します。

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

    Polyspace configuration dialog box

  6. モデルで Compute target speed サブシステムを右クリックし、[Polyspace][検証][選択したサブシステムについて生成されたコード] を選択します。

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

結果の確認

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

Polyspace Bug Finder dialog box

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

  1. モデルで Compute target speed サブシステムを右クリックし、[Polyspace][オプション] を選択します。

  2. [コンフィギュレーション パラメーター] ダイアログ ボックスで、[検証設定][プロジェクト構成] に設定します。

  3. [適用] をクリックします。

  4. [構成] をクリックします。

  5. Polyspace ウィンドウの左側のペインで、[コーディング規約およびコード メトリクス] をクリックします。次に、[MISRA C:2012 のチェック] を選択し、ドロップダウン リストから [単一単位ルール] を選択します。これで、Polyspace は、単一単位に該当する MISRA C:2012 ルールのみをチェックします。

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

  7. 新しい構成で解析を再実行します。Polyspace がチェックするルールを単一単位サブセットに限定すると、Polyspace では違反は 2 つだけ見つかります。

    Code coverage analysis dashboard

レポートの生成

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

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

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

参考

トピック