Эта тема показывает, как запустить 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