Сравните результаты различных запусков 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

Смотрите также

| | |

Похожие темы