1. HOME
  2. ブログ
  3. IT Образование
  4. Что такое цикломатическая сложность? Измерение качества кода

STAFF & CREATOR

スタッフ&クリエイター

IT Образование

Что такое цикломатическая сложность? Измерение качества кода

Конечно, у вас все еще может быть цикломатическая сложность ужасный код с низкой сложностью или достойный код с высокой сложностью. Но, в целом, это все еще весьма полезно для получения общего представления о том, насколько сложна программа. В гайдах по качеству кода, например Microsoft, особо подчеркивается, что высокая ЦС чревата ошибками (то есть багами). Анализаторы кода в IDE-редакторе отправляют разработчику (автоматическое) уведомление, если ЦС превысила пороговое значение (по дефолту 25, но можно настроить и ниже/выше). На графах демонстрируется в наглядном виде выполнение программы (обычно выполнение ее отдельного модуля, поскольку граф всей программы выглядел бы слишком большим и запутанным).

  • Этот код, содержащий оператор switch , имеет сложность 6, потому что существует много разных путей, по которым может идти код.
  • В графе узлы (или ноды, nodes), обозначают задачи (processing tasks), а рёбра обозначают пути выполнения (control flow).
  • В примере выше у функции sum цикломатическая сложность равна единице, а у функции abs — двойке, так как она содержит ветвление, а значит два независимых пути выполнения.
  • Решающими моментами являются if for for for, while, do, catch, case-выражения в исходном коде.
  • В 2017 году компания Sonar Source изобрела новую метрику под названием Cognitive Complexity.

Насколько этот показатель полезен для тестирования программного обеспечения?

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

Что такое метрика программного обеспечения?

Хотя это и не точная наука, она позволяет получить общее представление о сложности функций, классов и пространств имен, что может быть полезно при поиске кода для рефакторинга. Эти метрики показывают не совсем качество кода, а скорее качество работы программного обеспечения в продакшене. Обычно частота ошибок и время ответа растут очень медленно, по мере усложнения программы. Если у вас резко выросла одна из этих метрик — это сигнализирует, что только что в вашу кодовую базу привнесли серьёзное ухудшение. Цикломатическая сложность — показатель, количественно определяющий сложность кода, — часто становится жертвой заблуждений.

Применение при тестировании программного обеспечения

Эффективное управление цикломатической сложностью (CC) имеет решающее значение для поддержания качества кода и структурированности программы. Установление четких порогов приемлемой сложности с использованием таких ключевых слов, как «пороги», гарантирует соблюдение разработчиками заранее определенных стандартов. Методы рефакторинга, такие как модульность и реструктуризация кода, играют ключевую роль в сокращении CC и повышении удобства сопровождения сложного кода. Цикломатическая сложность в основном измеряет количество ветвлений вашего кода. Каждый раз, когда появляется оператор if или другой управляющий блок, например цикл, цикломатическая сложность возрастает, поскольку граф все больше и больше будет походить на дерево.

цикломатическая сложность это

Как найти цикломатическую сложность в вашем коде

К примеру, код из первого примера можно полностью покрыть одним тестом, но он всё равно упадёт, если вызвать функцию charge() для пользователя, у которого подписки нет вообще. Чтобы определить, насколько аккуратна кодовая база в проекте, прибегают к метрикам качества. Поскольку количественные методы хорошо зарекомендовали себя в других областях, многие теоретики и практики информатики пытались перенести данный подход и в разработку программного обеспечения. Как сказал Том ДеМарко, «вы не можете контролировать то, что не можете измерить». Плохой, нечитаемый и непонятный код и так хорошо видно, но тестировщикам все равно придется писать на него тесты!

Лучшие практики управления цикломатической сложностью

Линейно-независимый путь выполнения определяется Маккейбом как путь, имеющий хотя бы одно ребро, которое не было пройдено перед тем любыми другими путями выполнения.

Что такое цикломатическая сложность? Измерение качества кода

Следующие шаги программиста должны быть сосредоточены на снижении цикломатической сложности, чтобы улучшить читаемость кода и снизить вероятность ошибок. Такие инструменты, как SonarQube, Doesn’t и PMD, анализируют базы кода и создают подробные отчеты о цикломатической сложности. Эти инструменты помогают разработчикам понять тонкости своего кода, выявляя области с высокими показателями сложности. Уровень сложности программы часто определяется количеством времени и усилий, затраченных на ее создание.

Полезности показателя цикломатической сложности в разработке и QA

цикломатическая сложность это

Это позволяет нам более гибко подходить к оценке и потенциальному рефакторингу. Автору никто “не заносил”, но в статье я укажу на конкретный инструмент статического анализа кода, который поможет в этом, благо он бесплатный. Datadog измеряет частоту ошибок и время ответа, а Sentry помогает с расследованием, показывая состояние приложения во время ошибок. К сожалению, высокий процент покрытия необязательно говорит, что ваши тесты написаны хорошо.

В 2017 году компания Sonar Source изобрела новую метрику под названием Cognitive Complexity. Как видно из примера ниже, она отлично решает поставленную задачу, явно указывая на сильно большую сложность кода слева. На хабре ранее было несколько статей о том, что такое самодокументированный код и даны конкретные рекомендации по его написанию (например, вот, вот и вот). Правильные комментарии (описывающие «ЧТО» или «ПОЧЕМУ», а не очевидное «КАК»), правильно использованные конструкции языка, чистый код – всё это также важные характеристики самодокументированного кода. Но если суммировать, то единственный способ писать самодокументированный код – это писать такой код, который в большей мере раскрывает детали модели проблемы и при этом скрывает несущественные детали имплементации. Чем больше возможных путей выполнения, тем сложнее функцию понять, отладить и модифицировать.

Например, одна подпрограмма с несколькими точками принятия решения и циклами будет иметь более высокую цикломатическую сложность, что указывает на более сложную логику программы. Рекомендации специальных публикаций NIST часто рекомендуют управлять сложным программным обеспечением и контролировать его, поэтому ценный инструмент для достижения этой цели по сокращению CC имеет важное значение. В этой предстоящей публикации в блоге мы углубимся в значение CC для программистов, исследуем его роль в показателях качества программного обеспечения и то, как он помогает в оценке и улучшении сопровождаемости кода. Например, этот код имеет цикломатическую сложность, равную единице, поскольку в нем нет ветвей, и он просто снова и снова вызывает WriteLine. Поскольку это совершенно линейный код, количество узлов компенсирует количество ребер, что дает цикломатическую сложность, равную единице. Цикломатическая сложность — это структурная или топологическая мера сложности компьютерной программы, разработанная Томасом Дж.

цикломатическая сложность это

Некоторые инструменты расчета сложности используются для конкретных технологий. Сложность может быть найдена по количеству точек принятия решения в программе. Решающими моментами являются if for for for, while, do, catch, case-выражения в исходном коде. Более высокая сложность подразумевает большее количество тестовых примеров для достижения полного покрытия кода, что делает тестирование более сложным и трудоемким.

Этот код, содержащий оператор switch , имеет сложность 6, потому что существует много разных путей, по которым может идти код. Каждый case в операторе switch усложняет задачу, поскольку может привести к разным результатам при разных входных данных. Чтобы избежать высокой сложности, программисты раскладывают код по полочкам так, чтобы на каждой полочке оказался небольшой понятный кусочек. Если ваша программа, наоборот, состоит из больших кусков с высокой сложностью, как во втором примере, — это проблема. Ме́трика програ́ммного обеспе́чения (англ. software metric) — мера, позволяющая получить численное значение некоторого свойства программного обеспечения или его спецификаций.

IT курсы онлайн от лучших специалистов в своей отросли https://deveducation.com/ here.