exponenta event banner

Метрики статического кода

Метрики статического кода

Генератор кода выполняет статический анализ сгенерированного кода C или C++ и предоставляет эти метрики в разделе «Отчет о метриках статического кода» отчета о создании кода HTML. При наведении курсора на функцию или переменную в сгенерированном коде можно также увидеть метрики.

Информацию в отчете можно использовать для:

  • Найдите количество файлов и строк кода в каждом файле.

  • Оцените количество строк кода и использование стека для каждой функции.

  • Сравните разницу между количеством файлов, функций, переменных и строк кода при каждом изменении модели или алгоритма MATLAB ®.

  • Определите целевую платформу и выделение ОЗУ стеку на основе размера глобальных переменных плюс расчетного размера стека.

  • Определите возможные точки замедления производительности, например, самые большие глобальные переменные или наиболее дорогостоящий путь вызова с точки зрения использования стека.

  • Просмотрите цикломатическую сложность функции, которая подсчитывает количество линейно независимых путей через функцию.

  • Просмотрите дерево вызовов функций. Определите самый длинный путь вызова для оценки времени выполнения наихудшего случая.

  • Просмотрите, как целевые функции, предоставляемые выбранной библиотекой замены кода, используются в созданном коде.

Примеры см. в разделе:

Анализ показателей статического кода

Статический анализ генерируемого кода выполняется только по исходному коду без выполнения программы. Результаты анализа метрик статического кода включены в раздел «Метрики статического кода» отчета о создании кода HTML. Отчет недоступен, если функция MEX создается из кода MATLAB.

Статический анализ созданных файлов исходного кода:

  • Использует указанные типы данных C. Для моделей Simulink ® эти типы данных указываются на панели Аппаратная реализация > Производственное оборудование диалогового окна Параметры конфигурации. Для создания кода из кода MATLAB их можно указать на вкладке «Оборудование» диалогового окна «Параметры проекта MATLAB Coder™» или с помощью объекта конфигурации создания кода. Фактические метрики объектного кода могут отличаться из-за параметров компилятора и платформы для конкретного объекта.

  • Включает пользовательский код, только если он указан. Для моделей Simulink пользовательский код указывается на панели Создание кода (Code Generation) > Пользовательский код (Custom Code) в конфигурации модели. Для создания кода из кода MATLAB необходимо указать его на вкладке Отладка (Debugging) диалогового окна Настройки проекта кодера MATLAB (MATLAB Coder project settings) или с помощью объекта конфигурации генерации кода. Отчет об ошибке генерируется, если созданный код включает файлы, специфичные для платформы, не содержащиеся в стандартной библиотеке времени выполнения Си.

  • Для моделей Simulink включает созданный код из ссылочных моделей.

  • Использует 1-байтовое выравнивание для всех элементов структуры для оценки глобальных и локальных размеров структуры данных. Размер структуры вычисляется суммированием размеров всех ее полей. Эта оценка представляет наименьший возможный размер для структуры.

  • Вычисляет размер собственного стека функции как размер локальных данных в функции, исключая входные аргументы. Размер накопленного стека функции - это размер собственного стека плюс максимум размеров накопленного стека ее называемых функций. Например, если накопленные размеры стеков для вызываемых функций представлены как accum_size1...accum_sizeN, то накопленный размер стека для функции

    accumulated_stack_size = self_stack_size + max(accum_size1,...,accum_sizeN)

    Например, рассмотрим этот фрагмент сгенерированного кода:

    Рассмотрим следующие метрики кода:

    Накопленный размер стека равен 12 байтам, так как размер собственного стека функции Debug_b равно 12 байтам, и 4 входных аргумента не способствуют вычислению размера накопленного стека.

  • При оценке размера стека функции статический анализ останавливается на первом экземпляре рекурсивного вызова. Таблица Информация о функции (Function Information) указывает, когда рекурсия происходит в пути вызова функции. Генерация кода генерирует только рекурсивный код для трансляции событий Stateflow и для графических функций, если он записан как рекурсивная функция.

  • Вычисляет цикломатическую сложность функции как число решений плюс один:

    CC = Number of decisions + 1
    Следующие конструкции добавляют решение:

    • Оператор if

    • Оператор Else-If

    • Оператор переключения (1 решение для каждого case ветвь)

    • Операторы цикла: While, For, Do-while

    Примечание

    Логические операторы в предшествующих конструкциях не добавляют дополнительных решений.

  • Не включает ert_main.c, потому что у вас есть возможность предоставить свой собственный main.c.

Просмотр показателей и определений статического кода в сгенерированном коде

Отчет о создании кода

При просмотре кода в отчете о создании кода для доступа к метрикам и определениям кода:

  • Если на панели Создание кода (Code Generation) > Отчет (Report) установлен флажок Статические метрики кода (Static code metrics), можно поместить курсор на глобальные переменные и функции в окне кода, чтобы просмотреть информацию о метриках кода.

  • В окне кода, если щелкнуть связанные переменные или функции, откроется окно проверки кода. В окне содержатся ссылки на определения переменных или функций. Если на панели Создание кода (Code Generation) > Отчет (Report) установлен флажок Статические метрики кода (Static code metrics), можно также просмотреть сведения о метриках кода для переменной или функции.

Представление кода

При просмотре кода в представлении «Код» ракурса «Код» наведите курсор на меню многоточия над глобальными переменными и функциями для просмотра информации о метриках кода.

Подсказка содержит ссылку на определение переменной или функции.

Ограничения отчета по метрике статического кода

Статические метрики кода недоступны, если целевая конфигурация модели приводит к созданию кода, который:

  • Включает файл заголовка, который не создан иерархией модели и не является системным файлом заголовка

  • Использует нераспознанный макрос