メインコンテンツ

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

MATLAB スクリプトを使用した異なる Polyspace 実行結果の比較

このトピックでは、MATLAB® スクリプトを使用して Polyspace® を実行し、各結果を個別のフォルダーに保存し、最後の実行と比較した新しい結果またはレビューされていない結果のみを表示する方法を説明します。

プロジェクトがレガシ コードで構成されていると、多くの場合、予備解析の実行には利点があります。以降の実行では、新たに追加されたコードに関する結果のみに注目できます。

最後の実行と比較した新しい結果のみをレビュー

新しい結果のみを表示するには、現在の実行が最後の実行の結果フォルダーから結果とコメントをインポートしなければならないように指定します。

このスクリプトでは、Polyspace の毎回の実行結果を個別のフォルダーに保存して、各結果セットを以前の実行による結果セットと比較します。

  • このスクリプトの初回実行時には、すべての結果が新規であり、変数 newResTable に格納されます。

  • 間でファイルを変更せずにこのスクリプトを再度実行する場合、新しい結果はありません。変数 newResTable には空の table が含まれており、適切なメッセージが表示されます。

    次回の実行までの間にファイルを変更した場合、変数 newResTable にはその変更に関連する結果のみが含まれます。

proj = polyspace.Project;

% Specify sources and includes
sourceFile = fullfile(polyspaceroot, 'polyspace', ... 
    'examples', 'cxx', 'Bug_Finder_Example', 'sources', 'numerical.c');
includeFolder = fullfile(polyspaceroot, 'polyspace', ... 
    'examples', 'cxx', 'Bug_Finder_Example', 'sources');

% Create results folder name based on time of analysis
runTime = datetime('now','Format',"d_MMM_y_H'h'_m'm'");
resultsFolder = ['results_', char(runTime)];

% Configure analysis
proj.Configuration.Sources = {sourceFile};
proj.Configuration.TargetCompiler.Compiler = 'gnu4.9';
proj.Configuration.EnvironmentSettings.IncludeFolders = {includeFolder};
proj.Configuration.ResultsDir = fullfile(pwd, resultsFolder);
 
% Set up import from previous results if a previous result folder exists
if isfile('lastResultFolder.mat')
    load('lastResultFolder.mat', 'lastResultsFolder');
    proj.Configuration.ImportComments =  fullfile(pwd, lastResultsFolder);
end
lastResultsFolder = resultsFolder;
save('lastResultFolder.mat', 'lastResultsFolder');

% Run analysis
bfStatus = run(proj, 'bugFinder');

% Read results
resObj = proj.Results;
resTable = getResults(resObj);
matches = (resTable.New == 'yes');
newResTable = resTable(matches ,:);
if isempty(newResTable)
    disp('There are no new results.')
end
この例で使用されている重要な関数は以下の関数です。

  • polyspace.Project:Polyspace 解析を実行し、結果を table に読み取ります。

    • 結果フォルダーを指定するには、プロパティ Configuration.ResultsDir を使用します。

    • 結果のインポート元となる以前の結果フォルダーを指定するには、プロパティ Configuration.ImportComments を使用します。

  • datetime:現在の時刻を読み取り、適切な形式に変換し、それを結果フォルダー名に追加します。

  • load および save: MAT ファイル lastResultFolder.mat から以前の結果フォルダー名を読み取り、以降の実行のために MAT ファイルに現在の結果フォルダー名を保存します。

最後の実行からの新しい結果およびレビューされていない結果のレビュー

新しい結果のみに注目する代わりに、レビューされていない結果に注目するよう選択できます。レビューされていない結果には、新しい結果と、Polyspace ユーザー インターフェイスでステータスが割り当てられなかった最後の実行からの結果が含まれます。

レビューされていない結果に注目するには、前のスクリプトのこのセクションを次と置き換えます。

% Read results
resObj = proj.Results;
resTable = getResults(resObj);
matches = (resTable.New == 'yes');
newResTable = resTable(matches ,:);
if isempty(newResTable)
    disp('There are no new results.')
end
次のセクション:
% Read results
resObj = proj.Results;
resTable = getResults(resObj);
matches = (resTable.Status == 'Unreviewed');
unrevResTable = resTable(matches ,:);
if isempty(unrevResTable)
    disp('There are no unreviewed results.')
end

参考

| | |

トピック