exponenta event banner

Сравнение показателей сложности модели и сложности кода

Проанализируйте сложность системы, используя цикломатические показатели сложности. Метрики указывают на структурную сложность системы, измеряя количество линейно независимых путей в системе. Ограничивая цикломатическую сложность системы, можно сделать ее более удобочитаемой, ремонтопригодной и портативной. Можно измерить цикломатическую сложность как для модели, так и для кода, созданного из модели. Следует отметить, что различия между кодом и моделью могут приводить к различным уровням цикломатической сложности. Чтобы измерить цикломатическую сложность модели, используйте инструментальную панель «Метрики» (Metrics) и метрику сложности «Цикломатический» (Cyclomatic).

Пороговые значения метрики

Порог сложности кода

При разработке алгоритма путем написания кода вручную оценивается читаемость кода путем измерения цикломатической сложности кода. Код, имеющий более высокую цикломатическую сложность, может быть труднее понять и поддерживать. Для стандартизации ремонтопригодности кода организация может выбрать пороговое значение, ограничивающее цикломатическую сложность кода. Например, при написании кода, соответствующего показателям сложности кода HIS (Polyspace Bug Finder), проверяется, что цикломатическая сложность кода находится на уровне или ниже порогового значения 10.

Порог сложности модели

При использовании рабочего процесса конструирования на основе модели для моделирования алгоритма и генерации кода можно оценить читаемость системы, используя показатель цикломатической сложности модели вместо измерения цикломатической сложности сгенерированного кода. Графическое моделирование Simulink ® позволяет управлять сложными алгоритмами лучше, чем традиционный ручной код. Чтобы учесть это, пороговое значение показателя цикломатической сложности по умолчанию для модели составляет 30, что превышает стандартное пороговое значение сложности кода, равное 10. Чтобы изменить пороговое значение метрики модели, см. раздел Настройка компоновки и функциональности панели мониторинга метрик.

Сравнение результатов показателей кода и сложности модели

Цикломатическая сложность модели может быть выше или ниже цикломатической сложности генерируемого кода. Этот вариант зависит от модели и настроек генерации кода. Некоторые из шаблонов, генерирующих различные измерения сложности, включают в себя:

  • Оптимизация генерации кода, которая устраняет дополнительную логику, содержащуюся в модели. Эти оптимизации могут уменьшить сложность кода.

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

  • Дополнительная логика в сгенерированном коде для определенного целевого объекта. Эта логика может увеличить сложность кода.

Например, рассмотрим модель simulinkCruiseErrorAndStandardsExample. Чтобы открыть модель, выполните следующие действия.

  1. Откройте проект.

    path = fullfile(matlabroot,'toolbox','shared','examples',...
    'verification','src','cruise');
    run(fullfile(path,'slVerificationCruiseStart'))

  2. Из проекта откройте папку модели и откройте simulinkCruiseErrorAndStandardsExample.

Модель содержит целевую скорость вычисления диаграммы. Чтобы создать и проанализировать код для диаграммы с помощью Polyspace ®, см. раздел Анализ кода и тестирование программного обеспечения в цикле.

Отчеты, создаваемые Polyspace для кода, включают такие метрики кода, как цикломатическая сложность. Сгенерированная пошаговая функция для диаграммы имеет цикломатическую сложность 20.

Чтобы измерить цикломатическую сложность модели, используйте панель мониторинга метрик:

  1. Откройте панель мониторинга метрик. В галерее Приложения щелкните Панель мониторинга метрик.

  2. Щелкните Все метрики (All Metrics).

  3. Чтобы просмотреть подробные результаты цикломатической сложности, щелкните графический элемент «Сложность модели».

Диаграмма в модели имеет цикломатическую сложность 30. Для этой диаграммы генератор кода оптимизирует код, консолидируя логику, поэтому сгенерированный код имеет более низкую цикломатическую сложность, чем диаграмма в модели. В других случаях модель может иметь более низкую цикломатическую сложность, чем ее сгенерированный код. При ведении модели для создания кода используйте цикломатическую сложность модели для измерения сложности системы.

См. также

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