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\sourcespolyspaceroot
は、使用している開発環境の 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');
bfStatus
に 0
が設定されます。 Polyspace 解析結果は Bug Finder 欠陥のリストで構成されます。Bug Finder 欠陥の概要を MATLAB table で表示するには、関数 getSummary
を使用します。各種の結果の概要を取得する方法の詳細は、getSummary
を参照してください。
% Obtain list of Bug Finder defects resObj = psPrj.Results; bfSummary = getSummary(resObj, 'defects');
9x4
テーブル bfSummary
にリストされます。
よく使用する MATLAB 関数
この表に、Polyspace 解析を自動化するために MATLAB エディターまたはコマンド ウィンドウから使用できるMATLAB 関数の一部を一覧します。
関数 | アプリケーション |
---|---|
fopen | ファイルをバイナリ読み取りアクセスで開きます。たとえば、エラー ログ ファイルを読み取るためにこの関数を使用します。 |
fclose | fopen を使用して開いたファイルを閉じます。たとえば、エラー ログ ファイルを読み取った後、そのファイルを閉じるためにこの関数を使用します。 |
open | 該当するアプリケーションで MATLAB 外部のファイルを開きます。たとえば、psprj ファイルを Polyspace UI で開くためにこの関数を使用します。 |
exist | エンティティの存在をチェックします。たとえば、特定のフォルダーまたはファイルが存在するかどうかをチェックするためにこの関数を使用します。 |
delete | ファイルまたはオブジェクトを削除します。たとえば、古い結果や不要なオプション オブジェクトを削除するためにこの関数を使用します。 |
questdlg | 構成可能なダイアログ ボックスを作成します。スクリプトで Polyspace 解析のさまざまな設定を変更するためにこの関数を使用します。たとえば、この関数の出力に基づいて有効にするさまざまなコーディング ルールを選択できます。 |
clear | すべてのオブジェクトを削除することにより、ワークスペースをクリアします。Polyspace 解析の最初にこの関数を使用できます。 |
clc | MATLAB コマンド ウィンドウのすべてのテキストをクリアします。 |
fullfile | ファイル名のパーツから完全なファイル名を構築します。たとえば、ソース ファイルへのフル パスを構築するためにこの関数を使用します。 |
char | 配列を文字配列に変換します。たとえば、文字配列を取る関数への入力引数を構築するためにこの関数を使用します。 |
string | 変数を string 配列に変換します。たとえば、文字列を取る関数への入力引数を構築するためにこの関数を使用します。 |
dir | 現在の作業フォルダーの内容をリストします。たとえば、現在のフォルダー内の特定のファイルまたはフォルダーを見つけるためにこの関数を使用します。 |
system | オペレーティング システム コマンドを実行してその出力を返します。たとえば、MATLAB を終了せずにコマンド ライン スクリプトを実行するためにこの関数を使用します。 |
disp | 入力変数の値を表示します。たとえば、C コードで printf() を使用するのと同様にして、コードのデバッグのためにこの関数を使用します。 |
visdiff | 2 つのファイルまたはフォルダーを比較します。たとえば、異なる Polyspace 解析の結果を比較してその相違を確認するためにこの関数を使用します。 |
ismember | 1 つの配列の要素が別の配列にも存在するかどうかを判断します。たとえば、チェッカーまたはコーディング ルールが Polyspace 解析で有効になっているかどうかをチェックする場合や、特定のチェックを見つけるため結果をフィルター処理する場合に、この関数を使用します。 |
any | いずれかの配列要素が非ゼロかどうかを判断します。たとえば、新しい結果があるかチェックするためにこの関数を使用します。 |
nnz | 非ゼロ行列要素の数を返します。たとえば、新しい結果があるかチェックするためにこの関数を使用します。 |
fieldnames | 構造体、Java® オブジェクト、または Microsoft® COM オブジェクトを読み取り、フィールド名を返します。たとえば、テーブルを読み取って操作するためにこの関数を使用します。 |
参考
polyspace.Project
| polyspaceCodeProver
| run
| run