Визуализация результатов анализа Bug Finder в MATLAB

После Polyspace® анализ, можно считать результаты в MATLAB® таблица. Используя таблицу, можно сгенерировать графики или статистику о результатах. Если у вас есть MATLAB Report Generator, можно включить эти таблицы и графики в 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 Code Prover) объект. После анализа, Results свойство объекта содержит результаты. Смотрите Запуск анализа Polyspace при помощи скриптов MATLAB.

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

После чтения результатов в таблицу MATLAB можно визуализировать их в удобном формате. Если у вас есть MATLAB Report Generator, можно создать 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: Прочитайте результаты Bug Finder в таблицу.

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

    Чтобы создать гистограммы, замените pie с histogram в скрипте и удалите легенды круговых диаграмм.

  • mlreportgen.dom.Document (MATLAB Report Generator): создайте объект отчета, который задает формат отчета и место хранения отчета.

  • append (MATLAB Report Generator): Добавить содержимое к существующему отчету.

Когда вы выполняете скрипт, вы видите распределение дефектов по группам дефектов. Скрипт также создает 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 ,:);

Похожие темы