Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
конспект по информационным технологиям+.doc
Скачиваний:
218
Добавлен:
29.02.2016
Размер:
793.09 Кб
Скачать

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

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

  1. Количество независимых путей в базовом множестве программы;

  2. Верхнюю оценку, количество тестов, которое гарантирует однократное выполнение всех операторов;

Независимым является любой путь, который вводит новый оператор обработки или новые условия.

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

Новый путь обязательно включает новую дугу. Все независимые пути графа образуют базовое множество.

Свойства базового множества:

  1. Тесты, обеспечивающие его проверку, гарантируют однократное выполнение каждого оператора, при выполнении каждого условия по ветвям True и False;

  2. Мощность базового множества равна цикломатической сложности потокового графа.

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

Цикломатическая сложность вычисляется одним из трех способов:

  1. Цикломатическая сложность равна количеству регионов потокового графа;

  2. Цикломатическая сложность может быть вычислена по формуле V(G)=E–N–2, где E – количество дуг, а N – количество узлов потокового графа;

  3. Цикломатическая сложность может быть вычислена по формуле V(G)=p+1, где p – количество предикатных вершин в потоковом графе G.

Шаги способа тестирования базового пути

  1. На основе текста программы формируется потоковый граф. Для этого нумеруются операторы текста программы, и производится отображение пронумерованного текста программы в узлы и дуги потокового графа.

  2. Определяется цикломатическая сложность потокового графа по любой из трех формул.

  3. Определяется базовое множество независимых путей.

  4. Подготавливаются тестовые варианты, интегрирующие выполнение каждого пути.

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

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

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

Способы тестирования условий

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

Выражение отношения имеет вид E1<оператор отношения>E2, где E1, E2 – арифметические выражения, а в качестве оператора отношения используется один из операторов >, <, =, .

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

Эти элементы определяют типы ошибок в условии. Если условие некорректно, то некорректен, по меньшей мере, один из элементов условия.

В условии возможны следующие типы ошибок:

  1. Ошибка булева оператора, т.е. наличие некорректных, отсутствующих или избыточных булевых операторов;

  2. Ошибка булевой переменной;

  3. Ошибка булевой скобки;

  4. Ошибка оператора отношения;

  5. Ошибка арифметического выражения.

Способ тестирования условий ориентирован на тестирование каждого условия в программе. Методики тестирования условий имеют два достоинства: во-первых, достаточно просто выполнить измерения тестового покрытия условия, во-вторых, тестовое покрытие условий в программе является фундаментальным для генерации дополнительных тестов в программе.

Целью тестирования условий является определение не только ошибок в условии, но и других ошибок в программе. Кроме того, если методика тестирования эффективна для обнаружения ошибок в условии, то вероятно, что эта методика будет эффективна ля обнаружения ошибок в программе.

Существует несколько методик тестирования условий.

Простейшая методика называется – тестирование ветвей. В соответствии с этой методикой для составления условий проверяется каждое простое условие, входящее в него, ветвь True, ветвь False.

Другая методика – тестирование области определения. В ней для выражения отношения требуется генерация 3-4 тестов.

Выражение вида E1<оператор отношения>E2 проверяется тремя тестами, которые формируют значение E1>E2 равным E2 и E1<E2.

Если оператор отношения неправильный, а E1 и E2 корректны, то эти три теста гарантируют обнаружение ошибки оператора отношения.

Для определения ошибок в E1 и E2 тест должен сформировать значение E1 большим или меньшим, чем E2, причем обеспечить как можно меньшую разницу между этими значениями.

Для булевых выражений с n переменными требуется набор из тестов. Этот набор позволяет обнаружить ошибки булевых операторов, переменных, скобок, но на практике применяется только при маломn.

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