Цикломатическая сложность это .. Что такое Цикломатическая сложность?
Предположим, что программа имеет цикломатическую сложность 5. Это означает, что в этом методе есть 5 различных независимых путей. Этот цикломатическая сложность метод в основном используется при базовом тестировании белого ящика. Цикломатическая сложность представляет собой минимум нет.
Узнать какую задачу код решает тоже можно, но чтобы это перестало быть предположением, вам нужно будет потратить очень много усилий (например, запустить, протестировать, и т.д.). Очень многие программисты считают свой код самодокументированным автоматически, как бы по-умолчанию. Это соответствие интуитивно понятно как цикломатическая вложенность, и может быть вычислено как указанно выше.
Цикломатическая сложность (Cyclomatic Complexity)
Маккейб назвал изобретенную для этой цели меру существенной сложностью . То есть «первая гомология графа G относительно терминальных узлов t. Это другой способ сказать «число линейно независимых маршрутов через граф от входа к выходу». Π — число точек ветвления в программе,s— число точек выхода. Расчет цикломатической сложности программы очень прост по следующей формуле. Даже подграф графа (также известный как эйлеровый подграф ) является одним , где каждая вершина падает с четным числом ребер; такие подграфы представляют собой объединение циклов и изолированных вершин.
Допустим, тест применяется каждый раз для единственного маршрута, тогда необходимое количество раз применений теста определяется числом покрытия, равного числу путей, которые действительно могут быть использованы при работе программы. Разные языки имеют разные инструменты для измерения цикломатической сложности программы. Цикломатическая сложность кода – это количество линейно независимых путей в нем. Раздел VI статьи МакКейба 1976 года посвящен определению того, как выглядят графы потока управления неструктурированных программ в терминах их подграфов, которые МакКейб идентифицирует.
Преимущества цикломатической сложности:
Это помогает в тестировании программного обеспечения и дает нам больше уверенности в том, что каждый аспект нашей программы был протестирован. Это улучшает качество кода, а также помогает сосредоточиться на невидимых путях, если таковые имеются. Как правило, он рассчитывается путем разработки графов потока управления кода, который измеряет количество линейно независимых путей в программе для точного измерения сложности фрагмента кода.
- Цикломатическая сложность – это программный показатель, используемый для обозначения сложности программы .
- Из-за того, что условие имеет два условия True и False.
- Эта мера помогает нам понять, какую работу необходимо выполнить, и насколько сложным будет программное обеспечение.
- Предположим, что программа имеет цикломатическую сложность 5.
Если есть более сложная программа, то программисту не нужно увеличивать возможности. Предположим, у нас есть один, если условие определено, тогда мы получили сложность как 2. Из-за того, что условие имеет два условия True и False.
Персональные инструменты
Это помогает улучшить качество программного обеспечения. M – это нижняя граница количества путей через граф потока управления . Предполагая, что каждый тестовый пример использует один путь, количество случаев, необходимых для достижения покрытия пути, равно количеству путей, которые фактически могут быть пройдены.
Эта мера помогает нам понять, какую работу необходимо выполнить, и насколько сложным будет программное обеспечение. Cyclomatic сложность является частью тестирования White Box. К сожалению, не всегда удобно проверять все возможные пути прохождения программы. Рассматривая приведенный выше пример, каждый раз, когда добавляется дополнительный оператор if-then-else, количество возможных путей увеличивается в 2 раза. По мере того, как программа растет таким образом, она быстро достигает точки, когда проверка всех путей становится непрактично.
Примечания[править | править код]
Цикломатическая сложность оказалась полезной в географическом и ландшафтно-экологическом анализе после того, как было показано, что ее можно реализовать на графиках ультраметрических расстояний. Цикломатическая сложность также может использоваться для оценки семантической сложности программ искусственного интеллекта. Для примера рассмотрим нижеприведённую программу, состоящую из последовательного применения двух операторов if-then-else.
В общем, чтобы полностью протестировать модуль, должны быть проверены все пути выполнения через модуль. Это означает, что для модуля с высоким числом сложности требуется больше усилий по тестированию, чем для модуля с более низким значением, поскольку более высокое число сложности указывает на большее количество путей прохождения кода. Это также означает, что модуль с более высокой сложностью труднее понять программисту, поскольку программист должен понимать различные пути и результаты этих путей. Базис для пространства циклов легко построить, сначала зафиксировав остовный лес графа, а затем рассмотрев циклы, образованные одним ребром не в лесу, и тропой в лесу, соединяющей концы этого ребра; эти циклы составляют основу пространства циклов. Следовательно, цикломатическое число также равно количеству ребер, не входящих в максимальный остовный лес графа. Поскольку количество ребер в максимальном остовном лесу графа равно количеству вершин за вычетом количества компонентов, следует формула для цикломатического числа , приведенная выше.
Метрика Cognitive complexity или простой способ измерить сложность кода
Это позволяет нам более гибко подходить к оценке и потенциальному рефакторингу. Игнорировать структуры языков программирования, позволяющих сокращать написание кода и делать его более читаемым (это касается обновлённого синтаксиса любого из языков). Essential complexity – необходимая сложность, которая определяется самой проблемой и никак не может быть удалена. Чтобы посчитать его CyclomaticComplexity достаточно для каждого ветвления добавлять к сложности + 1. Например, рассмотрим программу, состоящую из двух последовательных операторов if-then-else. «относительный» означает, что путь должен начинаться и заканчиваться в точке входа или выхода.
Легко подсчитать, что ациклических путей в данном графе всего 3. Это соответствие характеризуется цикломатической сложностью как «количество циклов плюс количество компонентов». Следовательно, всегда полезно получить меньшее число для цикломатической сложности. Сложные коды сложно поддерживать и обновлять или модифицировать. Как мы все знаем, цикломатическая сложность не должна превышать 10.