exponenta event banner

Сравнение результатов выполнения различных полиспейсов с помощью сценариев 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

См. также

| | |

Связанные темы