Тестирование черного ящика. Б. Бейзер (2004) (1186170), страница 48
Текст из файла (страница 48)
7.4. Методы 7.4.1. ОСновы Существует масса стратегий тестирования доменов [АГ1Г90, АГ!Г92, С!.АК82, СОНЕ78, ]ЕНС94, НАОМ87, РЕКЕ85, ЪЧН!Т78А, ЪЧН1Т80А, ЮН1Т85В, ЮН!Т90, ХЕП.83, ЕЕП.89], Мы не будем рассматривать их все. Если вы занимались программированием, то вы, безусловно, знаете основы стратегий тестирования доменов. Если вы занимались программированием непродолжительное время, то вы использовали эвристические методы тестирования доменов. Прежде чем прейтн к рассмотрению эффективных стратегий, давайте обсудим причины несовершенства эвристических стратепш. 1. Тестирование экстремальных точек. В соответствии с этой стратегией любой численный ввод должен быть протестирован в окрестности минимального и максимального значения этого ввода.
Эта эвристическая стратегия имеет множество названий, таких как тестирование граничных значений [МУЕК79], 7А. Методы 195 тестирование экстремальных значений и тестирование особых значений, 1НОЪЧР801 Как подмечено Ричардсоном 1В)СН851 и многими другими, все зти эвристические стратегии относится к тестированию доменов. Основное отличие между формальным тестированием доменов и эвристическим тестированием доменов (обгцепринятым в течение десятилетий) заключается в большей эффективности первого и в том, что формальное тестирование позволяет узнать больше о найденных ошибках при помощи меньшего числа тестов.
2. Тестирование комбинаций экстремальных точек. Следующая стратегия типична и необычайно популярна (но плохо управляема). Согласно ей, необходимо проверить комбинацию экстремальных точек. Несмотря на то, что зта стратегия поддерживается коммерческими продуктами, позволяющими автоматически генерировать тесты, она в принципе ущербна, что мы и увидим в дальнейшем. 7.4.2. Недостатки комбинирования экстремальных точек «Стратегия» комбинирования экстремальных точек, если ее можно так назвать, подразумевает существование наибольшего и наименыпего значений для каждой входной переменной. Предполагается, что все значения больше максимума и меньше минимума программа исправит или запретит.
Очевидно, минимальные и максимальные значения определяют (отчасти) границы доменов, и стратегия направлена в первую очередь на тестирование границ доменов, а затем на проверку значений, лежащих чуть выше максимума и чуть ниже минимума. Это в пространстве с размерностью один. В двумерном пространстве, согласно этой стратегии, необходимо проверить комбинацию экстремальных точек. Если я условно назову четыре актуальных случая для каждой переменной соответственно «ниже», «ппп», «шах» и «выше», то в соответствии с этой стратегией для двух переменных нам надо проверить; (нижеА, нижеВ), (нижеА, пппВ), ...
(вышеА, вышеВ), всего 16 тестов, плюс еще один для типичных значений. Для и входных переменных число тестовых вариантов вырастет до «и + 1. Какой тип ошибок мы здесь рассчитываем обнаружить? Обработка, что бы она собой пи представляла, должна задавать функциональное отношение между входными переменными. Существует два варианта функциональных отношений между входными переменными: выходная функция, выраженная через зти переменные, или граница домена, выраженная через зти переменные. 1. Функция. Вычисляемая функция л1ожет быть или верной, или неверной. При тестировании комбинаций мы предполагаем отсутствие ошибок, за исключением особенных комбинаций (экстремальных случаев), поскольку для других комбинаций входных значений програмл1а корректна. Иначе говоря, корректная обработка и обработка комбинации экстремальных значений, содержащая ошибки, соответствуют различным доменам.
Если дело в этом, то нам лучше проверить границы доменов. 2. Граница домена. Входные переменные могут фигурировать в одной и той же (интерпретированной) границе домена. То есть возможны два вариан- 196 Глава 7 ° Тестирование доменов та — либо входные переменные используются в описании границы„либо нет. Если нет, то они независимы. Между ними не существует функциональных отношений, мы предполагаем наличие ошибки, которая создает отношение на пустом месте. В таком случае это не ошибка, а вредительство.
Если функциональное отношение существует, то его то нам и надо проверять, а тестирование ряда комбинаций критических значений не даст нам никакой информации об этом отношении. В примере на рис. 7.3 я применил эвристическую комбинационную стратегию и получил заштрихованные точки. У нас есть три домена, границы которых изображены сплошными линиями.
Только восемь контрольных точек — смежные с критическими точками, лежащими на верхней границе — могут сказать нам что-либо о корректности границ доменов. Тесты не скажут нам ничего о корректности нижней границы. Предположим, у нас есть ошибка, в результате которой реализуются два домена с границами, показанными пунктиром. Вместо трех доменов, мы получаем четыре, и кто знает, какая обработка будет им соответствовать7 Тестирование комбинаций экстремальных точек не выявит эту ошибку. Рис. 7.3. Функциональное отношение между входными переменными Однако, может возразить предполагаемый оппонент, мы знаем, что домены существуют и что нам надо протестировать вводы в области значений х = б и у = б и их комбинации! Уже лучше, но все равно недостаточно хорошо. Эта предлагаемая поправка добавит 12 тестов, но все равно не сможет ныявить ошибочное пересечение границ.
В итоге мы приходим к выводу, что единственный способ протестировать функциональное отношение — это тестировать функциональное отношение. И предположение о наличии ошибки, которая создает отношение на пустом месте — плохое предположение. Тестирование комбинаций экстремальных точек — зто не лучший способ тестирования доменов в и-мерном пространстве. Он приводит к необходимости проведения массы тестов, большинство из которых бессмысленны и/или обманчивы. В преды- Методы 197 душем примере мы провели 29 тестов, но так и не обнаружили ошибку. Правильная стратегия выявит эту ошибку всего за 4 теста.
Самое плохое в рассматриваемой стратегии — это то, что число тестов растет экспоненциально с увеличением числа входных переменных. Следовательно, покрытие невозможно даже при наличии автоматизации. Для 50 входных переменных только очень небольшая часть чудовищного числа комбинаций (1.2077ЕЗО, или 4Е19 лет тестирования при длительности теста— 1 миллисекунда) может быть проверена, и, следовательно, выбор проверяемых комбинаций будет совершенно произволен. Правильно организованное стохастическое тестирование обнаружит большее число ошибок и скажет вам больше о надежности программного обеспечения. В то же время грамотное тестирование доменов обладает существенно большими возможностями при меньших затратах.
7А.З. Слабая стратегия 1х 1, одномерное пространство Первая стратегия (которая будет вами наиболее часто использоваться) — это слабая стратегия 1 х 1, Она называется «слабой», поскольку в ней предусматривается разработка всего лишь одного набора тестов для каждого граничного неравенства, вместо того, чтобы разработать подобный набор для кюкдого сегмента границы, а «1 х 1», так как она требует одну точку НА и одну точку ВНЕ для одного граничного неравенства. На рис. 7А показаны все возможные ошибки для одномерной границы домена. В соответствии со стратегией, требуется по два теста на каждую границу (точка в одномерном пространстве) — проверка одной точки НА и одной точки ВНЕ.
Я проиллюстрировал это на примере закрытой границы. Предлагаю вам в качестве упражнения самостоятельно убедиться, что стратегия работает для любой комбинации открытых и закрытых границ. Приведенные ниже случаи моделируют все возможные ошибки в одномерных границах доменов. 1. Ошибка закрытия. Граница открыта в то время, когда должна быть закрыта, и закрыта в то время, когда должна быть открыта. Тест точки ВНЕ выявит эту ошибку, поскольку ввод будет обработан как домен В, вместо того чтобы обрабатываться как домен А.
Это работает, если только на границе нет случайной корректности. 2. Граница сдвинута влево. Точка ВНЕ будет обработана как домен В, вместо того чтобы обрабатываться как домен А. 3. Граница сдвинута вправо, Точка НА должна обрабатываться как домен А, но вместо этого будет обработана как домен В. Этот тест не дает информации, связана ли эта ошибка с закрытием или со сдвигом вправо, а лишь указывает на наличие ошибки. 4. Пропущенная граница.
Обе точки НА и ВНЕ обрабатываются одинаково, хотя должны обрабатываться по-разному. 5. Лишняя граница. Дополнительная граница делит первоначальный домен на два домена. Наличие еще одной границы должно проявляться в видимом различии в обработке, в противном случае, мы не сможем ее обнаружить. Сравнение двух процессов обработки для точек, принадлежащих изначальной границе, должно выявить это различие.