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

Анализируйте сложность вашей системы с помощью цикломатических метрик сложности. Метрики указывают на структурную сложность системы путем измерения количества линейно независимых путей в системе. Ограничивая цикломатическую сложность вашей системы, вы можете сделать ее более читаемой, ремонтопригодной и портативной. Можно измерить цикломатическую сложность как для вашей модели, так и для кода, сгенерированного из вашей модели. Обратите внимание, что различия между кодом и моделью могут привести к различным уровням цикломатической сложности. Чтобы измерить цикломатическую сложность модели, используйте Панель показателей и метрику Цикломатическая сложность.

Метрические пороговые значения

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

Когда вы разрабатываете алгоритм путем написания вручную кода, вы оцениваете читаемость кода, измеряя цикломатическую сложность кода. Код, который имеет более высокую цикломатическую сложность, может быть более трудным для понимания и поддержания. Чтобы стандартизировать поддерживаемость кода, ваша организация может выбрать порог значение, которое ограничивает цикломатическую сложность вашего кода. Например, если вы пишете код, который соответствует метрикам сложности кода 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. Откройте инструментальную панель «Метрики». В галерее Apps нажмите Metrics Dashboard.

  2. Нажмите All Metrics.

  3. Чтобы просмотреть подробные результаты цикломатической сложности, щелкните виджет Model Complexity.

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

См. также

Похожие темы