В этом разделе показано, как запустить 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