Скачиваний:
387
Добавлен:
01.05.2014
Размер:
1.33 Mб
Скачать

Лекция 5. Метрики структурной сложности программ.

Структурная сложность программ определяется:

  • числом взаимодействующих компонент;

  • числом связей между компонентами;

  • сложностью взаимодействия компонент.

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

Установлено, что сложность программного модуля связана не столько с размером (числом команд) программы, сколько с числом маршрутов ее исполнения и их сложностью.

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

Все маршруты исполнения программного модуля условно можно разделить на две группы

  • вычислительные маршруты

  • маршруты принятия логических решений.

Первая группа маршрутов включает в себя маршруты арифметической обработки данных и предназначена для преобразования величин, являющихся квантованными результатами измерения непрерывных физических характеристик (квазинепрерывных переменных).

Для проверки вычислительных маршрутов можно построить достаточно простую стратегию их проверки. Во всем диапазоне входных переменных нужно выбрать несколько характерных точек (предельные значения, значения в точках разрыва и несколько (1-3) промежуточных значений), для которых проверяется работоспособность программы. Предполагается, что в большинстве промежуточных точек программу можно не проверять из-за гладкости значений непрерывных переменных.

Сложность вычислительных маршрутов оценивается следующей формулой:

,

где m – количество маршрутов исполнения программы

li число данных обрабатываемых в i-ом маршруте

j – число значений обрабатываемых данных j-го типа (2 j 5)

Расчет сложности программы по данной формуле имеет значительную неопределенность из-за произвола в выборе количества значений j при изменении входных данных. Поскольку доля вычислительной части во многих сложных программных комплексах обработки информации относительно невелика (общее число арифметических операций не выходит за предел 5–10%), вычислительные маршруты не определяют структурную сложность программ.

Сложность маршрутов принятия логических решений оценивается формулой

,

где pi – число ветвлений или число проверяемых условий в i-ом маршруте.

Общая сложность программы определяется формулой

,

где с – некоторый коэффициент пропорциональности, определение которого является сложной задачей.

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

Рассмотрим более простые критерии выделения маршрутов, учитывающие только структурные характеристики программных модулей.

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

Поток управления – последовательность выполнения различных модулей и операторов программы.

Граф потока управления – ориентированный граф, моделирующий поток управления программы.

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

Рассмотрим структурную сложность типичной программы управления, содержащей 100 – 200 команд, граф потока управления которой, представленный на рис.3, содержит 14 вершин, 20 дуг и 3 цикла.

Для полной проверки этой программы по первому критерию достаточно следующих четырех маршрутов:

m1: 1 – 2 – 14

m2: 1 – 3 – 4 – 6 – 8 – 6 – 8 – 14

m3: 1 – 3 – 5 – 7 – 9 – 10 – 11 – 12 – 13 – 14

m4: 1 – 3 – 4 – 5 – 7 – 9 – 10 – 9 – 10 – 11 – 7 – 9 – 10 – 11 – 12 – 14

Рис.3

Структурная сложность программы по первому критерию вычисляется следующим образом

m

S =  pi ,

i =1