メインコンテンツ

MATLAB を使用した Polyspace 解析入門

このチュートリアルでは、MATLAB® コマンド ウィンドウまたは MATLAB エディターから Polyspace® を実行することにより手書きの C/C++ コードを解析する方法を説明します。Simulink® モデルから生成されたコードを解析するには、Simulink モデルから生成されたコードに対する Polyspace 解析の実行を参照してください。

前提条件

Polyspace 解析を MATLAB コマンド ウィンドウから実行する前に、Polyspace と MATLAB を統合します。MATLAB や Simulink との Polyspace の統合を参照してください。

MATLAB を使用した Polyspace 解析の実行

手書きの C コードを解析するには、MATLAB コマンド ウィンドウまたは MATLAB エディターから Polyspace 解析を構成してから開始します。

Polyspace 解析を実行するには、polyspace.Project オブジェクトを作成し、ソース ファイルと解析オプションを指定してから、そのオブジェクトを使用して解析を開始します。polyspace.Project オブジェクトを作成するには、関数 polyspace.Project を使用します。

psPrj = polyspace.Project;

このチュートリアルでは、numerical.c の手書きコードファイルを解析します。ファイル numerical.c は Polyspace ソフトウェアの一部です。解析に必要なこのソース ファイルとヘッダー ファイルはフォルダー polyspaceroot\polyspace\examples\cxx\Bug_Finder_Example\sources にあります。ここでの polyspaceroot は、使用している開発環境の Polyspace インストール フォルダーの場所です。このソース ファイルとヘッダー ファイルへのパスは、関数 fullfile を使用して作成します。

% Create the Path to source and header files
sourceFile = fullfile(polyspaceroot, 'polyspace', ... 
    'examples', 'cxx', 'Bug_Finder_Example', 'sources', 'numerical.c');
includeFolder = fullfile(polyspaceroot, 'polyspace', ... 
    'examples', 'cxx', 'Bug_Finder_Example', 'sources');

ソース ファイルおよびヘッダーファイルを psPrj オブジェクトと関連付けます。

% Associate the source and header files
psPrj.Configuration.Sources = {sourceFile};
psPrj.Configuration.EnvironmentSettings.IncludeFolders = {includeFolder};

Polyspace 解析オプションを構成します。たとえば、Polyspace 解析と具体的なコーディング ルールの違反のチェックに使用するコンパイラを指定できます。生成される結果を格納するフォルダーを指定することもできます。たとえば、結果を現在の作業ディレクトリ内のフォルダー 'results' に保存します。

% Specify target compiler
psPrj.Configuration.TargetCompiler.Compiler = 'gnu4.9';
% Enable Mchecking for MISRA C violation
psPrj.Configuration.CodingRulesCodeMetrics.EnableMisraC3 = true;
psPrj.Configuration.CodingRulesCodeMetrics.MisraC3Subset = 'mandatory';
% Specify results folder
psPrj.Configuration.ResultsDir = fullfile(pwd,'results');
変数 pwd には現在の作業ディレクトリのパスが入っています。構成可能な Polyspace 解析オプションの詳細は、polyspace.Project.Configuration のプロパティを参照してください。

関数 run を使用して Polyspace 解析を開始します。

% start BugFinder analysis
bfStatus = run(psPrj, 'bugFinder');
Polyspace 解析の進行状況は MATLAB コマンド ウィンドウに表示されます。解析が正常に実行されると、bfStatus0 が設定されます。

Polyspace 解析結果は Bug Finder 欠陥のリストで構成されます。Bug Finder 欠陥の概要を MATLAB table で表示するには、関数 getSummary を使用します。各種の結果の概要を取得する方法の詳細は、getSummary を参照してください。

% Obtain list of Bug Finder defects
resObj = psPrj.Results;
bfSummary = getSummary(resObj, 'defects');
Bug Finder 欠陥は 9x4 テーブル bfSummary にリストされます。

List of Bug Finder results shown in a MATLAB table.

よく使用する MATLAB 関数

この表に、Polyspace 解析を自動化するために MATLAB エディターまたはコマンド ウィンドウから使用できるMATLAB 関数の一部を一覧します。

関数アプリケーション
fopenファイルをバイナリ読み取りアクセスで開きます。たとえば、エラー ログ ファイルを読み取るためにこの関数を使用します。
fclosefopen を使用して開いたファイルを閉じます。たとえば、エラー ログ ファイルを読み取った後、そのファイルを閉じるためにこの関数を使用します。
open該当するアプリケーションで MATLAB 外部のファイルを開きます。たとえば、psprj ファイルを Polyspace UI で開くためにこの関数を使用します。
existエンティティの存在をチェックします。たとえば、特定のフォルダーまたはファイルが存在するかどうかをチェックするためにこの関数を使用します。
deleteファイルまたはオブジェクトを削除します。たとえば、古い結果や不要なオプション オブジェクトを削除するためにこの関数を使用します。
questdlg構成可能なダイアログ ボックスを作成します。スクリプトで Polyspace 解析のさまざまな設定を変更するためにこの関数を使用します。たとえば、この関数の出力に基づいて有効にするさまざまなコーディング ルールを選択できます。
clearすべてのオブジェクトを削除することにより、ワークスペースをクリアします。Polyspace 解析の最初にこの関数を使用できます。
clcMATLAB コマンド ウィンドウのすべてのテキストをクリアします。
fullfileファイル名のパーツから完全なファイル名を構築します。たとえば、ソース ファイルへのフル パスを構築するためにこの関数を使用します。
char配列を文字配列に変換します。たとえば、文字配列を取る関数への入力引数を構築するためにこの関数を使用します。
string変数を string 配列に変換します。たとえば、文字列を取る関数への入力引数を構築するためにこの関数を使用します。
dir現在の作業フォルダーの内容をリストします。たとえば、現在のフォルダー内の特定のファイルまたはフォルダーを見つけるためにこの関数を使用します。
systemオペレーティング システム コマンドを実行してその出力を返します。たとえば、MATLAB を終了せずにコマンド ライン スクリプトを実行するためにこの関数を使用します。
disp入力変数の値を表示します。たとえば、C コードで printf() を使用するのと同様にして、コードのデバッグのためにこの関数を使用します。
visdiff2 つのファイルまたはフォルダーを比較します。たとえば、異なる Polyspace 解析の結果を比較してその相違を確認するためにこの関数を使用します。
ismember1 つの配列の要素が別の配列にも存在するかどうかを判断します。たとえば、チェッカーまたはコーディング ルールが Polyspace 解析で有効になっているかどうかをチェックする場合や、特定のチェックを見つけるため結果をフィルター処理する場合に、この関数を使用します。
anyいずれかの配列要素が非ゼロかどうかを判断します。たとえば、新しい結果があるかチェックするためにこの関数を使用します。
nnz非ゼロ行列要素の数を返します。たとえば、新しい結果があるかチェックするためにこの関数を使用します。
fieldnames構造体、Java® オブジェクト、または Microsoft® COM オブジェクトを読み取り、フィールド名を返します。たとえば、テーブルを読み取って操作するためにこの関数を使用します。

参考

| | |

トピック