Тестирование чёрного ящика или поведенческое тестирование — стратегия (метод) тестирования функционального поведения объекта (программы, системы) с точки зрения внешнего мира, при котором не используется знание о внутреннем устройстве (коде) тестируемого объекта. Иначе говоря, тестированием чёрного ящика занимаются тестировщики, не имеющие доступ к исходному коду приложения. Под стратегией понимаются систематические методы отбора и создания тестов для тестового набора. Стратегия поведенческого теста исходит из технических требований и их спецификаций[1].
Под «чёрным ящиком» понимается объект исследования, внутреннее устройство которого неизвестно. Понятие «чёрный ящик» предложено У. Р. Эшби. В кибернетике оно позволяет изучать поведение систем, то есть их реакций на разнообразные внешние воздействия и в то же время абстрагироваться от их внутреннего устройства.
Манипулируя только лишь со входами и выходами, можно проводить определённые исследования. На практике всегда возникает вопрос, насколько гомоморфизм «чёрного» ящика отражает адекватность его изучаемой модели, то есть как полно в модели отражаются основные свойства оригинала.
Описание любой системы управления во времени характеризуется картиной последовательности её состояний в процессе движения к стоящей перед нею цели. Преобразование в системе управления может быть либо взаимно-однозначным и тогда оно называется изоморфным, либо только однозначным, в одну сторону. В таком случае преобразование называют гомоморфным.
«Чёрный» ящик представляет собой сложную гомоморфную модель кибернетической системы, в которой соблюдается разнообразие. Он только тогда является удовлетворительной моделью системы, когда содержит такое количество информации, которое отражает разнообразие системы. Можно предположить, что чем большее число возмущений действует на входы модели системы, тем большее разнообразие должен иметь регулятор.
В настоящее время известны два вида «чёрных» ящиков. К первому виду относят любой «чёрный» ящик, который может рассматриваться как автомат, называемый конечным или бесконечным. Поведение таких «чёрных» ящиков известно. Ко второму виду относятся такие «чёрные» ящики, поведение которых может быть наблюдаемо только в эксперименте. В таком случае в явной или неявной форме высказывается гипотеза о предсказуемости поведения «чёрного» ящика в вероятностном смысле. Без предварительной гипотезы невозможно любое обобщение, или, как говорят, невозможно сделать индуктивное заключение на основе экспериментов с «чёрным» ящиком.
Для обозначения модели «чёрного» ящика Н. Винером предложено понятие «белого» ящика. «Белый» ящик состоит из известных компонентов, то есть известных X, Y, δ, λ. Его содержимое специально подбирается для реализации той же зависимости выхода от входа, что и у соответствующего «чёрного» ящика. В процессе проводимых исследований и при обобщениях, выдвижении гипотез и установления закономерностей возникает необходимость корректировки организации «белого» ящика и смены моделей. В связи с этим при моделировании исследователь должен обязательно многократно обращаться к схеме отношений «чёрный» — «белый» ящик.
Исследование поведения «чёрного» ящика
Рассмотрим, как изучается и исследуется поведение «чёрного» ящика второго вида. Предположим, что дана некоторая система управления, внутреннее строение которой неизвестно. Система управления имеет входы и выходы .
Способ исследования поведения данного «чёрного» ящика заключается в проведении эксперимента, результаты которого можно представить в виде табл. 1.
Такой способ исследования «чёрного» ящика называется протокольным. Значения входных величин в моменты времени могут выбираться произвольно.
Таблица 1
Способ исследования «чёрного» ящика
Состояние входов
Состояние выходов
Время
............
............
....
............
............
....
Другой способ исследования заключается в подаче на входы некоторых стандартных последовательностей. Этот способ особенно привлекателен, потому что позволяет сравнивать поведение нескольких «чёрных» ящиков с условием выбора таких, которые будут соответствовать предъявляемым требованиям.
Исследование систем управления связано с понятиями «вероятностный автомат», «вероятностная система», что требует изучения их вероятностных свойств. Для этих целей можно построить матрицу вероятностей (табл. 2), в которой для каждого входа и каждого выхода указывается условная вероятность , что возникает в ответ на [7], приведённой в табл. 2.
Разработка методов построения математических моделей «чёрного» ящика является одной из важных кибернетических проблем. При условии наличия математической модели «чёрного» ящика появляется возможность отнести его к какому-либо одному классу, все системы которого изоморфны по поведению.
Создание математического описания «чёрного» ящика является своего рода искусством. В некоторых случаях удаётся сформировать алгоритм, в соответствии с которым «чёрный» ящик реагирует на произвольный входной сигнал. Для большинства же случаев делаются попытки установить дифференциальные уравнения, которые связывают реакцию «чёрного» ящика с его входами или, как говорят, с его входными стимулами.
Для науки метод «чёрный» ящик имеет весьма большое значение. С его помощью в науке были сделаны очень многие выдающиеся открытия. Например, учёный Гарвей ещё в XVII веке предугадал строение сердца. Он моделировал работу сердца насосом, позаимствовав идеи из совершенно другой области современных ему знаний — гидравлики. Практическая ценность метода «чёрный» ящик заключается во-первых, в возможности исследования очень сложных динамических систем, и, во-вторых, в возможности замены одного «ящика» другим. Окружающая действительность и биология дают массу примеров выявления строения систем методом «чёрного» ящика.
Принципы тестирования чёрного ящика
В этом методе программа рассматривается как чёрный ящик. Целью тестирования ставится выяснение обстоятельств, в которых поведение программы не соответствует спецификации. Для обнаружения всех ошибок в программе необходимо выполнить исчерпывающее тестирование, то есть тестирование на всевозможных наборах данных. Для большинства программ такое невозможно, поэтому применяют разумное тестирование, при котором тестирование программы ограничивается небольшим подмножеством всевозможных наборов данных. При этом необходимо выбирать наиболее подходящие подмножества, подмножества с наивысшей вероятностью обнаружения ошибок.
Свойства правильно выбранного теста
Уменьшает более чем на одно число других тестов, которые должны быть разработаны для разумного тестирования.
Покрывает значительную часть других возможных тестов, что в некоторой степени свидетельствует о наличии или отсутствии ошибки до и после ограниченного множества тестов.
Приёмы тестирования чёрного ящика
Эквивалентное разбиение.
Анализ граничных значений.
Анализ причинно-следственных связей.
Предположение об ошибке.
Рассмотрим подробнее каждый из этих методов:
Эквивалентное разбиение
Основу метода составляют два положения:
Исходные данные необходимо разбить на конечное число классов эквивалентности. В одном классе эквивалентности содержатся такие тесты, что если один тест из класса эквивалентности обнаруживает некоторую ошибку, то и любой другой тест из этого класса эквивалентности должен обнаруживать эту же ошибку.
Каждый тест должен включать, по возможности, максимальное количество классов эквивалентности, чтобы минимизировать общее число тестов.
Разработка тестов этим методом осуществляется в два этапа: выделение классов эквивалентности и построение теста.
Классы эквивалентности выделяются путём выбора каждого входного условия, которые берутся с помощью технического задания или спецификации и разбиваются на две и более группы. Для этого используется следующая таблица:
Входное условие
Правильные классы эквивалентности
Неправильные классы эквивалентности
'
'
'
Выделение классов эквивалентности является эвристическим способом, однако существует ряд правил:
Если входное условие описывает область значений, например «Целое число принимает значение от 0 до 999», то существует один правильный класс эквивалентности и два неправильных.
Если входное условие описывает число значений, например «Число строк во входном файле лежит в интервале (1..6)», то также существует один правильный класс и два неправильных.
Если входное условие описывает множество входных значений, то определяется количество правильных классов, равное количеству элементов в множестве входных значений. Если входное условие описывает ситуацию «должно быть», например «Первый символ должен быть заглавным», тогда один класс правильный и один неправильный.
Если есть основание считать, что элементы внутри одного класса эквивалентности могут программой трактоваться по-разному, необходимо разбить данный класс на подклассы. На этом шаге тестирующий на основе таблицы должен составить тесты, покрывающие собой все правильные и неправильные классы эквивалентности. При этом составитель должен минимизировать общее число тестов.
Определение тестов:
Каждому классу эквивалентности присваивается уникальный номер.
Если ещё остались не включённые в тесты правильные классы, то пишутся тесты, которые покрывают максимально возможное количество классов.
Если остались не включённые в тесты неправильные классы, то пишут тесты, которые покрывают только один класс.
Анализ граничных значений
Граничные условия — это ситуации, возникающие на высших и нижних границах входных классов эквивалентности.
Анализ граничных значений отличается от эквивалентного разбиения следующим:
Выбор любого элемента в классе эквивалентности в качестве представительного осуществляется таким образом, чтобы проверить тестом каждую границу этого класса.
При разработке тестов рассматриваются не только входные значения (пространство входов), но и выходные (пространство выходов).
Метод требует определённой степени творчества и специализации в рассматриваемой задаче.
Существует несколько правил:
Построить тесты с неправильными входными данными для ситуации незначительного выхода за границы области значений. Если входные значения должны быть в интервале [-1.0 .. +1.0], проверяем −1.0, 1.0, −1.000001, 1.000001.
Обязательно писать тесты для минимальной и максимальной границы диапазона.
Использовать первые два правила для каждого из входных значений (использовать пункт 2 для всех выходных значений).
Если вход и выход программы представляет упорядоченное множество, сосредоточить внимание на первом и последнем элементах списка.
Анализ граничных значений, если он применён правильно, позволяет обнаружить большое число ошибок. Однако определение этих границ для каждой задачи может являться отдельной трудной задачей. Также этот метод не проверяет комбинации входных значений.
Анализ причинно-следственных связей
Этапы построения теста:
Спецификация разбивается на рабочие участки.
В спецификации определяются множество причин и следствий. Под причиной понимается отдельное входное условие или класс эквивалентности. Следствие представляет собой выходное условие или преобразование системы. Здесь каждой причине и следствию присваивается номер.
На основе анализа семантического (смыслового) содержания спецификации строится таблица истинности, в которой последовательно перебираются всевозможные комбинации причин и определяются следствия для каждой комбинации причин.
Таблица снабжается примечаниями, задающими ограничения и описывающими комбинации, которые невозможны. Недостатком этого подхода является плохое исследование граничных условий.
Предположение об ошибке
Тестировщик с большим опытом выискивает ошибки без всяких методов, но при этом он подсознательно использует метод предположения об ошибке. Данный метод в значительной степени основан на интуиции. Основная идея метода состоит в том, чтобы составить список, который перечисляет возможные ошибки и ситуации, в которых эти ошибки могли проявиться. Потом на основе списка составляются тесты.
Росс Эшби У.Глава 6. Чёрный ящик // Введение в кибернетику = An Introduction to Cybernetics. — Издательство иностранной литературы, 1959. — С. 127-169. — 432 с.
Бейзер Б. Тестирование чёрного ящика. Технологии функционального тестирования программного обеспечения и систем. — Питер, 2004. — 320 с. — ISBN 5-94723-698-2.