exponenta event banner

Визуализация результатов анализа поиска ошибок в MATLAB

После анализа Polyspace ® можно считывать результаты в таблицу MATLAB ®. С помощью таблицы можно создавать графики или статистические данные о результатах. При наличии генератора отчетов MATLAB эти таблицы и графики можно включить в отчет PDF или HTML.

Экспорт результатов в таблицу MATLAB

Для считывания существующих результатов анализа Polyspace в таблицу MATLAB используйте polyspace.BugFinderResults объект, связанный с результатами.

Например, для чтения демонстрационных результатов в подпапке только для чтения polyspace/examples/cxx/Bug_Finder_Example/Module_1/BF_Result папки установки MATLAB скопируйте результаты в папку для записи и прочитайте их:

resPath = fullfile(polyspaceroot, 'polyspace', ... 
    'examples', 'cxx', 'Bug_Finder_Example', 'Module_1','BF_Result');

userResPath = tempname;
copyfile(resPath,userResPath);

resObj = polyspace.BugFinderResults(userResPath);
resSummary = getSummary(resObj);
resTable = getResults(resObj);
resSummary и resTable две таблицы MATLAB, содержащие сводку и подробные данные результатов Polyspace.

Можно также выполнить анализ Polyspace для исходных файлов C/C + + с помощью polyspace.Project(Средство проверки кода Polyspace). После анализа Results свойство объекта содержит результаты. См. раздел Выполнение анализа в пространстве с использованием сценариев MATLAB.

Создание графиков на основе результатов и включение в отчет

После считывания результатов в таблицу MATLAB их можно визуализировать в удобном формате. При наличии генератора отчетов MATLAB можно создать отчет PDF или HTML, содержащий визуализации.

Этот пример создает круговую диаграмму, показывающую распределение дефектов по группам дефектов, и включает диаграмму в отчет.

%% This example shows how to create a pie chart from your 
% results and append it to a report.

%% Generate Pie Chart from Polyspace Results

% Copy a demo result set to a temporary folder.
resPath = fullfile(polyspaceroot,'polyspace','examples','cxx', ...
  'Bug_Finder_Example','Module_1','BF_Result');
userResPath = tempname;
copyfile(resPath,userResPath);  
 
% Read results into a table.
resObj = polyspace.BugFinderResults(userResPath);
resTable = getResults(resObj);

% Eliminate results that are not defects.
matches = (resTable.Family == 'Defect');
defectTable = resTable(matches ,:);
 
% Create a pie chart showing distribution of defects.
defectGroupList = removecats(defectTable.Group);
pieDefects = pie(defectGroupList);
labels = get(pieDefects(2:2:end),'String');
set(pieDefects(2:2:end),'String','');
legend(labels,'Location','bestoutside')

% Save the pie chart.
print('file','-dpng');


%% Append Pie Chart to Report 
% Requires MATLAB Report Generator

% Create a report object.
import mlreportgen.dom.*;
report = Document('PolyspaceReport','html');
 
% Add a heading and paragraph to the report.
append(report, Heading(1,'Bug Finder Defect Distribution Graph'));
paragraphText = ['The following graph shows the distribution of ' ...
               'defects in your code.'];
append(report, Paragraph(paragraphText));

% Add the image to the report.
chartObj = Image('file.png');
append(report, chartObj);

% Add another heading and paragraph to the report.
append(report, Heading(1,'Defect Details'));
paragraphText = ['The following table shows the defects ' ...
               'in your code.'];
append(report, Paragraph(paragraphText));
 
% Add the table of defects to the report.
reducedInfoTable = defectTable(:,{'File','Function','Check',...
    'Status','Severity','Comment'});
reducedInfoTable = sortrows(reducedInfoTable,[1 2]);
tableObj = MATLABTable(reducedInfoTable);
tableObj.Style = {Border('solid','black'),ColSep('solid','black'),...
    RowSep('solid','black')};
append(report, tableObj);
 
% Close and view the report in a browser.
close(report);
rptview(report.OutputPath);
В примере используются следующие ключевые функции:

  • polyspace.BugFinderResults: Прочтите результаты поиска ошибок в таблицу.

  • pie: Создание круговой диаграммы из категориального массива. Можно также использовать функцию. histogram или heatmap.

    Для создания гистограмм замените pie с histogram в сценарии и удалить легенды круговой диаграммы.

  • mlreportgen.dom.Document(Генератор отчетов MATLAB): создание объекта отчета, определяющего формат и место хранения отчета.

  • append(Генератор отчетов MATLAB): добавление содержимого к существующему отчету.

При выполнении сценария отображается распределение дефектов по группам дефектов. Сценарий также создает HTML-отчет, содержащий график и таблицу дефектов Polyspace.

Для удаления строк из таблицы результатов перед отчетностью можно использовать любые критерии. В предыдущем примере используются критерии, согласно которым результат должен быть получен из семейства дефектов. См. также семейства результатов Bug Finder.

matches = (resTable.Family == 'Defect');
defectTable = resTable(matches ,:);

Вместо этого можно использовать другие критерии. Например, можно удалить результаты в файлах заголовков и сохранить результаты только из исходных файлов.

sourceExtensions = [".c",".cpp",".cxx"];
fileNameStrings = string(resTable.File);
matches = endsWith(fileNameStrings,sourceExtensions);
sourceTable = resTable(matches ,:);

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