このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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
参考
polyspace.Project
| datetime
| load
| save