Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision | |||
| mdd:a_complexity_measure [2026/08/29 07:53] – Bulk sync migration user | mdd:a_complexity_measure [2026/08/29 07:59] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ===== A Complexity Measure ===== | ||
| + | THOMAS J. McCABE. | ||
| + | San Francisco, California, USA — October 13 - 15, 1976 | ||
| + | Изложение в pdf – [[http:// | ||
| + | |||
| + | ==== Введение ==== | ||
| + | |||
| + | В статье описана метрика позволяющая оценить на сколько сложно будет тестировать программу и на сколько сложно будет ее поддерживать. Вводится понятие - цикломатической сложности программы (англ. Cyclomatic complexity of a program) — структурная (или топологическая) мера сложности компьютерной программы. | ||
| + | При вычислении цикломатической сложности используется граф потока управления программы. Узлы графа соответствуют неделимым группам команд программы, | ||
| + | Мак-Кейб применял вычисление цикломатической сложности при тестировании. Предложенный им метод заключался в тестировании каждого линейно независимого маршрута через программу, | ||
| + | |||
| + | ==== Содержание ==== | ||
| + | |||
| + | | ||
| + | Математически цикломатическая сложность структурированной программы определяется с помощью ориентированного графа, узлами которого являются блоки программы, | ||
| + | |||
| + | v(G) = E − N + 2P, | ||
| + | |||
| + | где: | ||
| + | |||
| + | E = количество рёбер в графе, | ||
| + | |||
| + | N = количество узлов в графе, | ||
| + | |||
| + | P = количество компонент связности. | ||
| + | |||
| + | В другой формулировке используется граф, в котором каждая точка выхода соединена с точкой входа. В этом случае граф является сильносвязным и цикломатическая сложность программы равна цикломатическому числу этого графа которое определяется как:: | ||
| + | |||
| + | v(G) = E − N + P | ||
| + | |||
| + | Это определение может рассматриваться как вычисление числа линейно независимых циклов, | ||
| + | Для простой программы, | ||
| + | Может быть показано, | ||
| + | Цикломатическая сложность может быть распространена на программу с многочисленными точками выхода; | ||
| + | |||
| + | π − s + 2 | ||
| + | |||
| + | где: | ||
| + | |||
| + | π — число точек ветвления в программе, | ||
| + | |||
| + | s — число точек выхода. | ||
| + | |||
| + | === Примеры графов и их цикломатических чисел из статьи === | ||
| + | |||
| + | |||
| + | Тут будут 4 картинки, | ||
| + | |||
| + | ==== Вывод ==== | ||
| + | |||
| + | В статье рекомендуется следить за цикломатической сложностью программы, | ||
| + | вашего кода становится больше 10. | ||
| + | Пора подумать над его реструктуризацией и упрощением. | ||
| + | Для тестирования же у цикломатического числа есть ещё два приложения: | ||
| + | |||
| + | 1) Это оценка сверху на число тест кейсов необходимых для того, чтобы обеспечить покрытие условий при тестировании методом белого ящика. | ||
| + | |||
| + | 2) Это оценка снизу на число тест кейсов необходимых, | ||
| + | |||
| + | == Литература == | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | Презентация по тестированию ПО (Сергей Зырин).–[[https:// | ||
| + | [[wp> | ||