В этом разделе показано, как запускать Polyspace ® с помощью сценариев MATLAB ®, сохранять каждый результат в отдельной папке и просматривать только новые или непросмотренные результаты по сравнению с последним запуском.
Если проект состоит из устаревшего кода, часто полезно выполнить предварительный анализ. В последующих прогонах можно сосредоточиться только на результатах, связанных с вновь добавленным кодом.
Чтобы увидеть только новые результаты, укажите, что текущий прогон должен импортировать результаты и комментарии из папки результатов последнего прогона.
Этот сценарий сохраняет результаты каждого выполнения Polyspace в отдельной папке и сравнивает каждый результирующий набор с результирующим набором предыдущего выполнения.
При первом запуске сценария все результаты становятся новыми и сохраняются в переменной newResTable.
При повторном запуске сценария без изменения файлов между ними новые результаты отсутствуют. Переменная newResTable содержит пустую таблицу и отображается соответствующее сообщение.
При изменении файлов между двумя прогонами переменная 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 и прочтите результаты в таблицу.
Чтобы указать папку результатов, используйте свойство 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
datetime | load | polyspace.Project | save