Сравнение результатов различных запусков Polyspace с помощью скриптов MATLAB

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

См. также

| | |

Похожие темы