Тестирование по принципу чёрного ящика


Одним из способов проверки программ является стратегия тестирования, называемая стратегией чёрного ящика или тестированием с управлением по данным. В этом случае программа рассматривается как чёрный ящик, и такое тестирование имеет целью выяснения обстоятельств, в которых появление программы не соответствует спецификации. 
Для обнаружения всех ошибок в программе необходимо выполнить исчерпывающее тестирование, то есть тестирование на всех возможных наборах команды зависит от предшествующих ей событий необходимо проверить и все возможные последовательности.
Очевидно, что построение исчерпывающего входного теста для большинства случаев невозможно. Поэтому обычно выполняется «разумное» тестирование, при котором тестирование программы ограничивается прогонами на небольшом подмножестве всех возможных данных. Естественно при этом целесообразно выбрать наиболее подходящее подмножество (подмножество с наивысшей вероятностью обнаружения ошибки).
Правильный выбранный тест подмножеством должен обладать следующими свойствами:
уменьшать, причём более чем на одно число других тестов, которые должны быть разработаны для достижения заранее определённой цели приемлемого тестирования. Покрыть значительную часть других возможных тестов, то в некоторой степени свидетельствует о наличии или отсутствии ошибок до и после применения этого ограниченного множества значений входных данных. Стратегия чёрного ящика включает в себя следующие методы формирования тестовых наборов:
1. Эквивалентное разбиение;
2. Анализ граничных значений;
3. Предположение об ошибке;
4. Анализ причинно-следственных связей.
ЭКВИВАЛЕНТНОЕ РАЗБИЕНИЕ.
1. Основу метода составляют 2-а положение:
исходные данные программы необходимо разбить на конечное число классов эквивалентности. Так, чтобы можно было предположить , что каждый тест , являющийся представителем некоторого класса. Иными словами, если тест какого-либо класса обнаруживает ошибку, то предполагается, что все другие тесты этого класса эквивалентности тоже обнаружат эту ошибку, и наоборот.
2. Каждый тест должен включать , по возможности, максимальное количество различных входных условий, что позволяет минимизировать общее число необходимых тестов.
Первое положение используется для разработки наборов «интересных» условий, которые должны быть протестированы, а второе- для разработки минимального набора тестов.
Разработка тестов методом эквивалентного разбиения осуществляется в 2-а этапа:
1. выдиление классов эквивалентности.
2. Построение тестов.
1. Выделение классов эквивалентности.
Классы эквивалентности выделяются путем выбора каждого входного условия( обычно это фраза из спецификаций или некоторое предположение) и разбиением его на 2-е или более групп. Для этого используется таблица вида:
Входные условия Правильные классы эквивалентности Неправильные классы эквивалентности

Правильные классы включают правильные данные, неправильные- неправильные данные. Выделение классов эквивалентности является эвристическим процессом. Однако при этом существует ряд правил:
1. если входные условия описывают область значений ( например, целое данное может принимать значения 0-99) , то выделяют один правильный класс x>=1 && x<=99 и два неправильных: х<1 и x>99.
2. если входные условия описывают число значений ( например, в автомобиле могут ехать от 1-го до 6-ти человек) ,то определяется 1-н правильный класс эквивалентности и 2-а неправильных( ни одного и более 6-ти человек).
3. если входное условие описывает множество входных значений и есть основания полагать, что каждое значение программист трактует особо (например, известные способы передвижения: на автобусе, на грузовике , такси ,мотоцикле или пешком) , то определяется правильный класс эквивалентности для каждого значения и 1-н неправильный класс(например, на прицепе).

4. если входное условие описывает ситуацию «должно быть» (например, одним символом идентефикатора должна бить буква) , то определяется 1-н правильный класс эквивалентности( 1-н символ – буква) и 1-н неправильный (1-н символ – не буква).
5. если есть любые основания считать, что различные элементы классов эквивалентности трактуется программо не одинаково , то данный класс разбивается на меньшие классы эквивалентности.
2. ПОСТРОЕНИЕ ТЕСТОВ.
Этот шаг заключается в использовании классов эквивалентности для построения тестов. Этот процесс включает в себя:
1. назначение каждому классу эквивалентности уникального номера.
2. проектирование новых тестов, каждый из которых покрывает как можно большее число непокрытых классов эквивалентности до тех пор , пока все правильные классы не будут покрыты тестами.
3. запись тестов, каждый из которых покрывает 1-н и только 1-н из непокрытых неправильных классов эквивалентности до тех пор, пока все неправильные классы не будут покрыты тестами.
Разработка индивидуальных тестов для неправильных классов эквивалентности обусловлена тем, что определение проверки с ошибочными входами скрывают или заменяют другие проверки с ошибочными кодами.
Недостаток метода эквивалентных разбиений в том , что он не исследует комбинации входных условий.
АНАЛИЗ ГРАНИЧНЫХ ЗНАЧЕНИЙ
Граничные условия – это ситуации, возникающие на границе, выше или ниже границ входных классов эквивалентности. Анализ граничных значений отлич-х от эквивалентного разбиения следующим:
1. выбор любого элемента в классе эквивалентности в качестве представительного при анализе граничных условий осуществляется таким образом, чтобы проверить тестом каждую границу этого класса.
2. при разработке тестов рассматриваются не только входные условия(пространства входов), но и пространство результатов.
Приминение метода анализа граничных условий требует определенной степени творчества и специализации в рассматриваемой проблеме , тем не менее существует несколько общих правил приминения этого метода:
1) построить тесты для границ области и тесты с неправильными входными данными для ситуаций незначительного выхода за границы области. Если входное условие описывает область значений (например от –1,0 до 1,0), то необходимо написать тесты для ситуаций (-1,0;1,0;-1,001;1,001).
2) Построить тесты для минимальных и максимальных значиний и тесты большие и меньшие этих двух значений, если входное условие удовлетворяет дискретному ряду значений. Например, если входной фаил может содержать от 1 до 255 записей, то проверить 0,1,255 и 256 записей.
3) Использовать правило 1 для каждого выходного условия, причем важно проверить границы пространства результатов, так как не всегда границы входных областей представляют такой же набор условий, как и границы выходных областей. Не всегда также можно получить результат вне выходной области, но тем не менее стоит рассмотреть эту возможность.
4) Использовать правило 2 для каждого выходного условия
5) Если вход или выход программы есть упорядоченное множество (последовательный фаил, линейный список, таблица), то необходимо сосредоточить внимание на первом и последнем элементах этого множества.
6) Попробовать свои силы в поиске других граничных условий.
Анализ граничных условий, если он применен правильно является одним из наиболее полезных методов построения тестов. Однако следует помнить, что граничные условия могут быть едва уловимы и определение их связано с большими трудностями, что является большим недостатком метода. Второй недостаток связан с тем, что метод анализа граничных условий не позволяет проверять сочетание исходных данных.
1. Анализ причинно-следственных связей (АПСС)
Метод АПСС помогает системно выбирать высоко результативные тесты. Он дает полезный побочный эффект, позволяя обнаруживать неполноту и неоднозначность исходных спецификаций. Для использования метода необходимо понимание булевой логики.
Построение тестов осуществляется в несколько этапов:
1) спецификация разбивается на рабочие участки, так как таблицы ПСС становятся громоздкими, при применении метода к большим спецификациям (например, при тестировании компилятора в качестве рабочего участка можно рассматривать отдельные операторы языка)
2) в спецификации определено множество причин и множество следствий. Причина есть отдельное входное условие или класс эквивалентных входных условий. Следствие – выходное условие или преобразование системы. Каждой причине и следствию приписывается отдельный номер;
3) на основе анализа семантическог осодержания спецификации строится таблица истинности, в которой последовательно перебираются все возможные комбинации причин и определяются следствия каждой комбинации причин. Таблица снабжается примечаниями, задающими ограничения и описывающими комбинации причин и-или следствий, которые являются невозможными из-за синтаксиса или внешних ограничений. Аналогично при необходимости строится таблица истинности и для класса эквивалентности. При построении таблицы можно использовать следующие приемы:
а) по возможности выделяют независимые группы ПСС в отдельные таблицы;
б) истина – 1; ложь – 0; для обозначения безразличных состояний применяется x, которое предполагает произвольное значение условия.
4) каждая строка таблицы истинности преобразуется в тест при этом следует по возможности совмещать тесты из независимых таблиц.
Недостаток метода: неадекватно исследуются граничные условия.
2. Предположение об ошибке (МПО)
Часто программист с большим опытом ищет ошибки без методики. При этом он подрузумевает использование МПО. Процедура МПО в значительной степени основана на интуиции.

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

ПРИМЕР
Пусть необходимо выполнить тестирование программы , определяющей точку пересечения 2-х прямых на плоскости. Попутно она должна определять параллельность прямой одной из осей координат. В основе программы лежит решение системы линейных уравнений:
AX+BY=C
EX+DY=F

1. используя метод эквивалентных разбиений получаем для всех коэффициентов 1-н правильный класс эквивалентности
(коэф-т – вещественное число) и 1-н неправильный (коэф-т – не вещественное число). Отсюда можно предположить 7-мь тестов: 1) все коэф-ты вещественные числа и 2) — 7) поочередно каждый из коэв-тов не вещественное число.
2. по методу граничных условий . Можно считать , что для исходных данных граничное условие отсутствует (то коэф-ты – любые вещественные числа ). Для рез-ов получаем , что возможны варианты:
1) единственное решение.
2) Прямые сливаются (множество решений).
3) Прямые параллельны (отсутствие решения).
Следовательно необходимо предложить тесты с результатами внутри области:
1) результат – единственное решение (?!=0)
2) результат – множество решений (?=0, ?x=?y=0).
3) Результат – отсутствие решений (?=0, но ?x!=0 или ?y!=0)
И с результатами на границе:
1) ?=0,01
2) ?=-0,01
3) ?=0, ?x=0.01, ?y=0
4) ?=0, ?x=0, ?y=-0.01

3. по методу анализа причинно-следственных связей.
A=0
B=0 для определения типа и существования 1-ой кривой.
C=0
E=0
D=0 для определения типа и существования 2-ой кривой.
F=0
Определим множество условий для определения точки пересечения:
?=0
?x=0
?y=0
Выделим 3-и группы причинно-следственных связей, определение типа и существования 1-ой линии, определение типа и существования 2-ой линии, определение точки пересечения. Строим таблицу:
A=0 B=0 C=0 РЕЗУЛЬТАТ
0 0 X Прямая общего положения
0 1 0 Прямая параллельна OY
0 1 1 Ось OY
1 0 0 Прямая параллельна OX
1 0 1 Ось OX
1 1 X Множество точек плоскости.
Такая же таблица строится и для второй прямой.
?=0 ?x=0 ?y=0 Единственное
решение Множество
решений Решений
нет
0 X X 1 0 0
1 0 X 0 0 1
1 X 0 0 0 1
1 1 1 0 1 0
Каждая строка этих таблиц преобразуется в тест . При возможности (с учетом независимости групп) берутся данные , соответствующие строкам сразу 2-х или 3-х таблиц. В результате к уже имеющимся 14 тестам добавляются:
1. проверки всех случаев расположения обеих прямых – 6 тестов.
6-ть тестов по 1-ой прямой вкладываются в 6-ть тестов по 2-ой прямой так , чтобы варианты не совпадали – в итоге получаем 6-ть тестов.
2. выполняется отдельная проверка несовпадения условия ?x=0 или ?y=0 ( в зависимости от того , какой тест был выбран по методу граничных условий ) – тест также можно совместить с предыдущими 6-тью тестами.
3. по методу предположения об ошибке добавим тест – все коэф-ты – нули . всего получаем 21 тест по всем 4-м

методикам.
Если еще попробовать независимые проверки , то ,возможно, число тестов можно еще сократить.
ОБЩАЯ СТРАТЕГИЯ ТЕСТИРОВАНИЯ.
Все методологии проектирования тестов могут быть объединены в общую стратегию. Это оправдано тем, что каждый метод обеспечивает создание определенного набора тестов, но не 1-н из них сам по себе не может создать такой полный набор. Приемлемая стратегия состоит в следующем:
1) если спецификация состоит из комбинаций входных условий , то начать рекомендуется с приминения метода причинно-следственных связей.
2) В любом случае необходимо использовать анализ граничных значений .
3) Определить правильные и неправильные классы эквивалентности для входных и выходных данных и дополнить, если это необходимо, тесты ,построенные на предыдущих шагах.
4) Для получения дополнительных тестов рекомендуется использовать метод предположения об ошибке.
5) Проверить логику программы на полученных тестах, при этом воспользоваться критериями покрытия решений, покрытия условий, покрытия решений/условий, либо комбинаторного покрытия условий. Если необходимость выполнения критерия покрытия требует построения тестов, не встречающихся среди построенных на предыдущих шагах, то следует дополнить уже построенный набор.

Загрузка...