Cyclomatic Complexity Program Control Flow Graph

Cyclomatic Complexity Program Control Flow Graph Average ratng: 3,6/5 846 votes

Содержание. Обзор В графе потока управления каждый узел (вершина) графа соответствует базовому блоку — прямолинейному участку кода, не содержащего в себе ни операций передачи управления, ни точек, на которое управление передается из других частей программы. Имеется лишь 2 исключения: точка, на которую выполняется переход, является первой инструкцией в базовом блоке, и базовый блок завершается инструкцией перехода. Направленные дуги используются в графе для представления инструкций перехода.

Также, в большинстве реализаций добавлено два специализированных блока: входной блок, через который управление входит в граф и выходной блок, который завершает все пути в данном графе. Структура CFG крайне важна для многих и для утилит. Codevisionavr v2 03 4.

Достижимость — одно из свойств графа, используемое при оптимизациях. Если блок или подграф не имеют путей до них от входного блока, то данная часть графа является недостижимой (мертвый код) при любых вариантах исполнения, и по этой причине он может быть удален из программы. Если же из данного подграфа нет путей до выходного блока, то значит этот подграф содержит.

Конечно же, не все бесконечные циклы можно обнаружить по такому признаку, см. Терминология Нижеприведенные термины часто используются при работе с графами потока управления. Иногда в переводах вместо «доминатор» используется «обязательный предшественник». Entry block — входной блок, стартовый блок узел, с которого начинается любой путь exit block — выходной блок узел, на котором завершаются все пути back edge — обратная дуга дуга, указывающая на предка, то есть узел, который бы был пройден раньше в процессе critical edge — критическая дуга an edge which is neither the only edge leaving its source block, nor the only edge entering its destination block. These edges must be split (a new block must be created in the middle of the edge) in order to insert computations on the edge without affecting any other edges. Abnormal edge — аномальная дуга дуга с неизвестным назначением. Могут появляться, например, после преобразования конструкций.

Эти дуги препятствуют оптимизациям. Impossible edge — невозможная дуга (иногда называется ложная дуга) дуга, добавленная в граф исключительно для того, чтобы сохранить свойство графа о постдоминировании выходным узлом любого другого узла. Эта дуга не может быть пройдена. Dominator — доминатор узел M доминирует над узлом N, если любой путь, достигающий N обязан предварительно пройти блок M. Входной узел доминирует над всеми остальными узлами графа.

Cyclomatic complexity всей программы после рефакторинга = 9 +? Программу предствленную в виде control flow graph можно эффективнее,.

Postdominator — постдоминатор узел M постдоминирует над узлом N, если любой путь от N к выходному блоку обязан пройти через узел M. Выходной узел постдоминирует все узлы графа. En:Lengauer-Tarjan's algorithm. Postdominator tree — дерево постдоминаторов Аналог дерева доминаторов.

Его корнем является выходной блок. Loop header — заголовок цикла Иногда называется точкой входа цикла — доминатор, который является назначением обратных дуг, образующих цикл. Доминирует над всеми узлами тела цикла. Loop pre-header — предзаголовок цикла Предположим, что блок M — доминатор с несколькими входными дугами, некоторые из которых являются обратными (таким образом, M — заголовок цикла). Для некоторых фаз оптимизации выгодно, чтобы блок M был разделен на два блока, M pre и M loop.

Содержимое M и обратные дуги переносится в M loop, остальные дуги переносятся на M pre, и создается новая дуга от M pre к M loop (таким образом, M pre стал непосредственным доминатором M loop). Сразу после преобразования M pre будет пустым, но оптимизации вроде выноса инвариантов могут пополнить его. M pre называется предзаголовком цикла, а M loop стал заголовком цикла. Примеры Для фрагмента кода: 0: (A) t0 = readnum 1: (A) if t0 mod 2 0 goto 4 2: (B) print t0 + ' is odd.' 3: (B) goto 5 4: (C) print t0 + ' is even.' 5: (D) end program Граф потока управления будет состоять из 4 базовых блоков: A для строк 0-1, B для строк 2-3, C для строки 4 и D для 5й строки.

Граф будет иметь дуги A - B, A - C, B - D, C - D. Также. Поток управления ( ). убрать шаблон. Диаграмма потока управления ( ).

Примечания. Смотреть что такое 'Граф потока управления' в других словарях:.

— Анализ потока управления это статический анализ кода для определения порядка выполнения программы. Порядок выполнения выражается в виде графа потока управления.

Для многих языков граф потока управления явно прослеживается в исходном коде Википедия. — Ждущая вершина алгоритма Граф схема алгоритма (ГСА) конечный связный ориентированный граф, вершины которого соответствуют операторам, а дуги Википедия.

— программы (англ. Cyclomatic complexity of a program) структурная (или топологическая) мера сложности программ, используемая для измерения качества программного обеспечения, основанная на методах статического анализа кода. ЦСП равна Википедия. — В программировании и теории компиляторов, недостижимым кодом называют часть кода программы, которая ни при каких условиях не может быть исполнена, поскольку является недостижимой в графе потока управления12. Недостижимый код часто относят к Википедия.

— Эта статья предлагается к удалению. Пояснение причин и соответствующее обсуждение вы можете найти на странице Википедия:К удалению/28 сентября 2012. Пока процесс обсуждения не завершён, статью мож Википедия. — У этого термина существуют и другие значения, см. Дракон (значения).

Пример блок схемы алгоритма на языке ДРАКОН дракон схемы ДРАКОН (Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность) визуальный Википедия. — В теории компиляторов, мёртвым кодом (так же бесполезным кодом, англ. dead code) называют код, который может быть исполнен, но результаты его вычислений в дальнейшем в программе не используются123. Другими словами это код, определяющий Википедия. — В теории компиляторов удалением мёртвого кода (англ. dead code elimination, DCE) называется оптимизация, удаляющая мёртвый код. Мёртвым кодом (так же бесполезным кодом) называют код, исполнение которого не влияет на вывод программы, все Википедия. — Эта статья об оптимизации программ и данных вообще; об оптимизациях, применяемых компиляторами см.: Оптимизация компилятора. У этого термина существуют и другие значения, см.

Program

Оптимизация модификация системы для улучшения её Википедия. — (англ. constant folding) и распространение констант (так же продвижение констант, дублирование констант, англ. constant propagation) часто используемые в современных компиляторах оптимизации, уменьшающие избыточные вычисления, Википедия.

Posted on