メインコンテンツ

polyspaceAutosar

MATLAB スクリプトを使用して AUTOSAR ソフトウェア コンポーネントのコード実装に対して Polyspace Code Prover を実行

説明

[status, msg] = polyspaceAutosar('-create-project',projectFolder,'-arxml-dir',arxmlFolder,'-sources-dir',codeFolder,options) は、AUTOSAR ソフトウェア コンポーネントのコード実装に、ランタイム エラーと、対応する AUTOSAR XML 仕様のデータ制約違反がないかどうかをチェックします。解析では、arxmlFolder 内の AUTOSAR XML 仕様 (.arxml ファイル) を解析し、その仕様に基づいて codeFolder 内のコード実装 (.c ファイル) をモジュール化して、チェックのために各モジュールに対して Code Prover を実行します。Code Prover の結果は projectFolder に保存されます。解析後、Polyspace® ユーザー インターフェイスで projectFolder からプロジェクト psar_project.psprj を開くか、Web ブラウザーでファイル psar_project.xhtml を開くことができます。各ソフトウェア コンポーネントの結果を個別に確認できます。

トラブルシューティングのために追加オプションを使用して、たとえば、更新した特定部分のみを実行して問題を見つけ出したり、追加のヘッダー ファイルを指定したり、マクロを定義したりできます。

[status, msg] = polyspaceAutosar('-update-project',prevProjectFile,options) は、前回の解析以降の ARXML ファイルまたは C ソース コードの変更に基づいて Code Prover の解析結果を更新します。この更新では、前回の解析の XHTML ファイル prevProjectFile を使用し、前回の解析以降に変更されたソフトウェア コンポーネントのコード実装のみを再解析します。

トラブルシューティングでは追加オプションを使用できます。

[status, msg] = polyspaceAutosar('-update-and-clean-project',prevProjectFile,options) は、前回の解析以降の ARXML ファイルまたは C ソース コードの変更に基づいて Code Prover の解析結果を更新します。この更新では、前回の解析以降に変更されたソフトウェア コンポーネントのコード実装のみを再解析します。クリーンな更新では無効なソフトウェア コンポーネントに関する情報の削除も行います。たとえば、特定のソフトウェア コンポーネントの更新を強制する追加オプションを使用していて、他のソフトウェア コンポーネントも変更されている場合、クリーンな更新ではこれらの他のソフトウェア コンポーネントを Polyspace プロジェクトから削除します。

トラブルシューティングでは追加オプションを使用できます。

[status, msg, out] = polyspaceAutosar(___) は、以前と同じオプションを使用して Code Prover 解析を実行します。出力は、MATLAB® コマンド ウィンドウに表示される変わりに、文字ベクトル out にリダイレクトされます。

メモ

MATLAB から Polyspace を実行する前に、Polyspace インストールと MATLAB インストールをリンクしなければなりません。MATLAB や Simulink との Polyspace の統合またはPolyspace Server 製品と MATLAB との統合を参照してください。

すべて折りたたむ

現在のフォルダーに含まれる arxml フォルダーに ARXML ファイルがあり、code フォルダーに C ソース ファイルがあるとします。

ARXML ファイルで定義されたすべてのソフトウェア コンポーネントに対して Code Prover を実行します。結果を一時フォルダー内にあるフォルダー polyspace-project に保存します。

このフォルダーは、既に存在していてはなりません。そのフォルダーに以前の結果が存在する場合、その結果を更新できます。更新では、前回の実行以降に変更されたソース ファイルのみを再解析します。

exampleDir = fullfile(polyspaceroot,'polyspace',...
    'examples','doc_cxx','polyspace_autosar');
arxmlDir = fullfile(exampleDir, 'arxml');
sourceDir = fullfile(exampleDir, 'code');

tempDir = tempdir;
projectDir = fullfile(tempDir, 'polyspace-project');
prevProjectFile = fullfile(projectDir, 'psar_project.xhtml');

% Update project file if it already exists, else create new project
projectDirAlreadyExists = isfolder(projectDir);

if projectDirAlreadyExists
    [status, msg] = polyspaceAutosar('-update-project', ...
        prevProjectFile);
else
    [status, msg] = polyspaceAutosar('-create-project', projectDir, ...
    '-arxml-dir', arxmlDir, ...
    '-sources-dir', sourceDir...
    '-generate-autosar-headers');;
end

この例ではオプション -generate-autosar-headers を使用して AUTOSAR ヘッダー (Rte_ ヘッダーや Os.hCompiler.h など) を生成しています。ソース コードに対して polyspaceAutosar を実行する際に、独自の AUTOSAR ヘッダーを使用することもできます。それには、このオプションを省略し、-I オプションを使用して適切なインクルード フォルダーを指します。

入力引数

すべて折りたたむ

フォルダー名を、文字ベクトルとして指定します。このフォルダーが存在する場合、フォルダーは空でなければなりません。

解析後、このフォルダーには 2 つのプロジェクト ファイル psar_project.psprj および psar_project.xhtml が含まれます。

  • 結果を確認するには、プロジェクト ファイル psar_project.psprj を Polyspace ユーザー インターフェイスで開くか、ファイル psar_project.xhtml を Web ブラウザーで開きます。

  • MATLAB スクリプトを使用した以降の更新については、プロジェクト ファイル psar_project.xhtml を使用します。

AUTOSAR コードに対する Polyspace の結果のレビューも参照してください。

例: 'C:\Polyspace_Projects\proj_swc1'

フォルダー名を、文字ベクトルとして指定します。

フォルダー名の UNC パスはサポートされていません。

例: 'C:\arxml_swc1'

フォルダー名を、文字ベクトルとして指定します。

フォルダー名の UNC パスはサポートされていません。

例: 'C:\code_swc1'

前に作成したプロジェクト ファイル psar_project.xhtml へのパスを、文字ベクトルとして指定します。

例: 'C:\Polyspace_Projects\proj1\psar_project.xhtml'

Polyspace プロジェクトの作成および以降の解析を制御するためのオプションです。主にこのオプションはトラブルシューティングで使用し、たとえば、更新した特定部分のみを実行して問題を絞り込んだり、追加のヘッダー ファイルを指定したり、マクロを定義したりします。

各オプションを文字ベクトルとして指定します。それに続けて、オプションの値を個別の文字ベクトルとして指定します。たとえば、構文 polyspaceAutosar(...,'-options-file','opts.txt') を使用して、オプション ファイル opts.txt を指定できます。

一般的なオプション

オプション説明
'-verbose' 

コマンド実行のさまざまな段階に関する追加情報を保存します (詳細モード)。ファイル psar_project.log およびその他の補助ファイルにこの追加情報を保存します。

コマンド実行でエラーが発生した場合は、詳細モードを有効にしているかどうかにかかわらず、個別のファイルにエラー メッセージが保存されます。詳細モードで実行すると、実行のさまざまな段階のみが保存されます。この情報を使用することで、いつエラーが発生したのかを確認します。

'-options-file'オプション ファイル名 ('opts.txt' など)。

コマンド ライン オプションを補ったり置き換えたりするにはオプション ファイルを使用します。オプション ファイルでは、個別の行で各オプションを指定します。コメントを示すには、行の先頭に # を使用します。

オプション ファイル opts.txt は以下のようになります。

# Store Polyspace results
-create-project polyspace
# ARXML Folder
-arxml-dir arxml
# SOURCE Folder
-sources-dir code 

関数 polyspaceAutosar で直接指定したオプションが、オプション ファイルのオプションと競合する場合は、直接指定したオプションが使用されます。

通常、複数のプロジェクトに共通のオプションを格納したり、再利用したりするには、オプション ファイルを使用します。

'-generate-autosar-headers' 

ソース フォルダーで見つかったヘッダーを使用する代わりに、AUTOSAR ヘッダー (Rte_ ヘッダー、および Os.hCompiler.h など) を生成します。

プロジェクトの更新を制御するオプション

プロジェクトを更新する場合、既定では、ARXML ファイルまたは C ソース コードに対して前回の解析以降に加えられた変更について、すべての AUTOSAR ソフトウェア コンポーネントの動作に関する解析結果が更新されます。これらのオプションを使用して、更新を制御します。

オプション説明
'-autosar-behavior'ソフトウェア コンポーネントの動作の完全修飾名 ('pkg.component.bhv' など)。

指定した内部動作が備わったソフトウェア コンポーネントの実装をチェックします。既定の解析では、ARXML 仕様内に存在するすべてのソフトウェア コンポーネントが考慮されます。

複数のソフトウェア コンポーネントを指定するには、このオプションを繰り返します。または、正規表現を使用して、同じパッケージ内にあるソフトウェア コンポーネントのグループを指定します。

次に例を示します。

  • 完全修飾名 pkg.component.bhv をもつ内部動作が備わったソフトウェア コンポーネントを指定するには、以下を使用します。

    polyspaceAutosar(...,
    '-autosar-behavior',...
    'pkg.component.bhv')

  • pkg.component で始まる完全修飾名をもつ内部動作が備わったソフトウェア コンポーネントを指定するには、以下を使用します。

    polyspaceAutosar(...,
    '-autosar-behavior',...
    'pkg.component\..*')
    \. は、パッケージ名の区切り . (ドット) を表し、.* は任意の数の文字を表します。

'-do-not-update-autosar-prove-environment' 

ARXML 仕様を読み取りません。前回の解析で保存された ARXML 仕様を使用します。

コードを以前の仕様と比較するには、プロジェクトの更新中にこのオプションを使用します。このオプションを使用しない場合、プロジェクトの更新では全体の ARXML 仕様が再度読み取られます。

'-do-not-update-extract-code' 

C ソース コードを読み取りません。前回の解析で保存されたソース コードを使用します。

前回のソース コードを ARXML の仕様と比較するには、プロジェクトの更新中にこのオプションを使用します。このオプションを使用しない場合、プロジェクトの更新では前回の解析以降にソース コードに加えられたすべての変更が考慮されます。

'-do-not-update-verification' 

ARXML 仕様と C コード実装の読み取りのみを行い、Code Prover 解析は実行しません。

ARXML 仕様に生じたエラーまたはソース コードに生じたコンパイル エラーを調査するには、プロジェクトの更新中にこのオプションを使用します。まず、これらの問題を修正してから、Code Prover 解析を実行することができます。

ARXML 仕様の解析を制御するオプション

オプション説明
'-autosar-datatype'データ型の完全修飾名 ('pkg.datatypes.type' など)。

指定された AUTOSAR データ型の定義をインポートします。既定の解析では、検証するソフトウェア コンポーネントの内部動作で指定されたデータ型のみがインポートされます。

複数のデータ型を指定するには、このオプションを繰り返します。または、正規表現を使用して、同じパッケージ内にあるすべてのデータ型を指定します。

次に例を示します。

  • 完全修飾名 pkg.datatypes.type をもつデータ型を指定するには、以下を使用します。

    polyspaceAutosar(...,
    '-autosar-datatype',...
    'pkg.datatypes.type')

  • pkg.datatypes で始まる完全修飾名をもつデータ型を指定するには、以下を使用します。

    polyspaceAutosar(...,
    '-autosar-datatype',...
    'pkg.datatypes\..*')
    \. は、パッケージ名の区切り . (ドット) を表し、.* は任意の数の文字を表します。

  • すべてのデータ型のインポートを強制するには、以下を使用します。

    polyspaceAutosar(...,
    '-autosar-datatype',...
    '.*\..*')

'-Eautosar-xmlReaderSameUuidForDifferentElements'

'-Eno-autosar-xmlReaderSameUuidForDifferentElements'

 

ARXML 仕様における複数の要素に同じ汎用一意識別子 (UUID) がある場合、警告とエラーを切り替えるにはこれらのオプションを使用します。

この問題が発生した場合、既定の解析はエラーで停止します。警告に変換するには、'-Eno-autosar-xmlReaderSameUuidForDifferentElements' を使用します。競合する UUID について、解析では最後に読み取った要素を格納し、警告を続行します。

以降の実行は引き続き警告モードを使用します。エラーに戻すには、オプション '-Eautosar-xmlReaderSameUuidForDifferentElements' を使用します。

'-Eautosar-xmlReaderTooManyUuids'

'-Eno-autosar-xmlReaderTooManyUuids'

 

ARXML 仕様における同じ要素に異なる汎用一意識別子 (UUID) がある場合、警告とエラーを切り替えるにはこれらのオプションを使用します。

この問題が発生した場合、既定の解析はエラーで停止します。警告に変換するには、'-Eno-autosar-xmlReaderTooManyUuids' を使用します。競合する UUID について、解析では最後に読み取った要素を格納し、警告を続行します。

以降の実行は引き続き警告モードを使用します。エラーに戻すには、オプション '-Eautosar-xmlReaderTooManyUuids' を使用します。

'-Wno-autosar-xmlDuplicateType'

 

このオプションを使用して、ARXML での重複する型に関する警告を非表示にします。

重複する型の警告メッセージは以下のようになります。

Type arrayType is already defined 
in another file.

C ソース コードの読み取りを制御するオプション

オプション説明
'-include'ヘッダー ファイル

解析に関係する各ファイルによって #include でインクルードされる、ヘッダー ファイルを指定します。たとえば、-include file1.h では、すべてのソース ファイルに行 #include 'file1.h' があるかのように解析が行われます。#include でインクルードされるファイルには、コンパイル エラーに対する Polyspace 固有の回避方法 (データ型やマクロの定義など) を含めることができます。

データ型とマクロの定義を含むヘッダー ファイルを指定できるのは、プロジェクトの作成中のみです。以降の更新では、このファイルの内容は変更できますが、新しいファイルは提供できません。また、このファイルは Polyspace プロジェクトおよび結果と同じフォルダーに入れてはなりません。

複数のファイルを指定するには、ファイルごとに 1 つのオプションを入力します。次に例を示します。

polyspaceAutosar(...,
 '-include', 'file1.h', '-include', 'file2.h')

オプション '-D' または '-U' を使用して追加でマクロを定義したり、その定義を解除したりする場合、PREINCLUDE_FILE の定義と競合する定義については -D または -U の指定が優先されます。

'-I'ヘッダー ファイルを含むフォルダー。

ヘッダー ファイルを含むフォルダーを指定します。解析では、このフォルダー内にある #include されたファイルを調べます。このフォルダーは、ソース コード フォルダーのサブフォルダーでなければなりません。

複数のフォルダーに対してこのオプションを繰り返します。解析では、指定した順にこれらのフォルダー内のヘッダー ファイルを調べます。

ソース コード フォルダーに含まれていないフォルダーを指定する場合は、次のオプションを使用します。

polyspaceAutosar(...,
 '-extra-project-options','-I INCLUDE_FOLDER')

'-D'マクロの名前 ('_WIN32 など)。

解析で定義済みと見なされなければならないマクロを指定します。

たとえば、以下を指定するとします。

polyspaceAutosar(...,
 '-D','_WIN32')
その場合、プリプロセッサの条件 #ifdef _WIN32 が成功し、対応する分岐が実行されます。

'-U'マクロの名前 ('_WIN32 など)。

解析で未定義と見なされなければならないマクロを指定します。

たとえば、以下を指定するとします。

polyspaceAutosar(...,
 '-U','_WIN32')
その場合、プリプロセッサの条件 #ifndef _WIN32 が成功し、対応する分岐が実行されます。

Code Prover チェックを制御するオプション

オプション説明
'-extra-project-options'スペース区切りのオプションのリスト。

Code Prover 解析の追加オプションを指定します。指定したオプションは、ARXML 解析とコード抽出には適用されず、以降の Code Prover 解析にのみ適用されます。

この方法を使用して、非 AUTOSAR Code Prover 解析で使用する解析オプションを指定します。すべての Polyspace Code Prover 解析オプションのリストを参照してください。

たとえば、コンパイラとターゲット アーキテクチャの指定が必要な場合があります。既定では、AUTOSAR 仕様から作成されるプロジェクトのコンパイルでは、gnu4.7 コンパイラと i386 アーキテクチャを使用します。

visual11.0 コンパイラと x86_64 アーキテクチャを指定するには、次のオプションを入力します。

polyspaceAutosar(...,
 '-extra-project-options','-compiler visual11.0 -target x86_64')
コンパイラ (-compiler) およびターゲット プロセッサ タイプ (-target) も参照してください。

'-extra-options-file'Polyspace オプションを含むファイル。

オプション ファイルで Code Prover 解析の追加オプションを指定します。指定したオプションは、ARXML 解析とコード抽出には適用されず、以降の Code Prover 解析にのみ適用されます。

たとえば、ビルド コマンドをトレースして、コンパイラ オプション、マクロ定義、およびインクルード フォルダーへのパスを収集し、これらの情報を AUTOSAR ソフトウェア コンポーネントのコード実装解析のためのオプション ファイルに指定できます。

  1. 関数 polyspaceConfigure を使用してビルド コマンド (make など) をトレースし、以降の Code Prover 解析のためのオプション ファイルを生成します。-no-sources オプションを使用して、オプション ファイルのソースのインクルードを抑制します。

    polyspaceConfigure -output-options-file options.txt -no-sources make
  2. polyspace-autosar を使用して AUTOSAR コードに Code Prover を実行します。ARXML フォルダー、ソース フォルダー、およびその他のオプションを指定します。さらに、-extra-options-file オプションを使用して、先ほど生成したオプション ファイルを指定します。

    polyspaceAutosar(...,
     '-extra-options-file','options.txt')

'-show-prove'ソフトウェア コンポーネントの動作の完全修飾名 ('pkg.component.bhv' など)。

解析後に、指定された内部動作が備わった特定のソフトウェア コンポーネントの結果を開きます。

出力引数

すべて折りたたむ

解析が完了したかどうかを示す boolean フラグ。解析が完了している場合、戻り値は 0 です。完了していない場合、戻り値は 0 以外の値です。

0 以外の値が表示される場合は、polyspaceAutosar の 2 番目の出力引数のエラー メッセージをチェックします。

プロジェクト フォルダーのファイル psar_project.xhtml のエラー メッセージを調査することもできます。この XHTML ファイルを使用して、解析されたソフトウェア コンポーネントを判断できます。

AUTOSAR コードの Polyspace 解析のトラブルシューティングを参照してください。

解析ログ。以下のフィールドを持つ構造体として指定します。

メッセージのタイプ。以下の 3 つの文字ベクトルのいずれかとして返されます。

  • 'info':現在の解析段階などの情報。

  • 'warning':解析を停止しないが、今後エラーを発生させる可能性のある警告。

  • 'error':解析全体または特定のソフトウェア コンポーネントの解析を停止する可能性のあるエラー。

エラーをチェックするには、このタイプ情報を使用します。たとえば、構造体 msg のエラーをチェックするには、次のコードを使用します。

% Convert to table for logical indexing
msgTable = struct2table(msg);

% Check which messages have the type 'error'
errorMatches = (strcmp(msgTable.Criticity, 'error'));

% Read the error messages to another table
errorMessage = msgTable(errorMatches, :);

メッセージのコンテンツ。文字ベクトルとして返されます。

例: 'Start Extract user-implementation for Behavior ''pkg.tst002.swc001.bhv001''...'

解析ログ。文字ベクトルとして返されます。

バージョン履歴

R2018b で導入