Визуализируйте результаты анализа 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 ,:);

Похожие темы