Статические метрики кода

Статические метрики кода

Генератор кода выполняет статический анализ сгенерированного кода C or C++ и предоставляет эти метрики в Static Code Metrics Report разделе отчета генерации кода HTML. Когда вы помещаете курсор на функцию или переменную в сгенерированный код, вы также можете увидеть метрики.

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

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

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

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

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

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

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

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

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

Для примеров смотрите:

Статический анализ метрики кода

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

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

  • Использует указанные типы данных C. Для Simulink® модели, эти типы данных задаются в панели Hardware Implementation > Production hardware диалогового окна Параметры конфигурации (Configuration Parameters). Для генерации кода из кода MATLAB они задаются на вкладке Hardware диалогового окна параметров проекта MATLAB Coder™ или с помощью объекта строения генерации кода. Фактические метрики объектного кода могут отличаться из-за настроек целевого компилятора и платформы.

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

  • Для моделей 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

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

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

    Примечание

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

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

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

Отчет генерации кода

Когда вы просматриваете код в отчете генерации кода, для доступа к метрикам кода и определениям:

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

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

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

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

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

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

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

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

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