Тестирование черного ящика. Б. Бейзер (2004) (1186170), страница 53
Текст из файла (страница 53)
Если (А) и (В) являются наборами строк, то (А)(В) означает конкатенацию каждой строки из (А) с каждой строкой из (В), с сохранением порядка следования. Если (А)::=(111, 4, х), а (В):: (/, Ф), то (А)(В)::=(111/, 111$, 4/, 4Ф, х/, хЦ. Если А является строкой, то для нее выполняются равенства: ЛА АЛ = А.
Если А — набор строк, то Л(А) = (А)Л - (А). Или. Если А и В строки, то А ~ В (еше пишут А+В), читается «А или В», что означает либо строку А, либо В, либо обе сразу. Поскольку это определение вводится для строк, а одиночные символы можно рассматривать как строки длиной в олин символ, то определение применимо так же и для одиночных символов. Или для строк аналогично логическому ИЛИ и так же подчиняется законам коммутативности и ассоциативности, то есть А ! В = В ! А, А ! (В ! С) = (А ! В) ( С. Очевилно, А ( В ! С ! О... и А + В + С + О, — это то же самое, что (А.
В, С, О...). Показатель степени. Если А — строка, то А" означает и повторений А. Например, если А::=.(Аг»Х, то А'.:= 00ФХ(/ЙХ, а А'.:=ФФФХФЙХФЙХ. Согласно определению Ас= Л. Краткая запись А" '" используется для обозначения ряда от и до ш повторений строки: Так А' « - Аз ~ А" ~ А' ~ А«. Если (А) — набор строк, то (А)" означает конка- 8.2. Основные термины 215 тенацию наборов (Л)(А)(А)...(А) ровно и-1 раз. Так (А)' = (А)(А), (А)в - (А)(А)(А) и так далее.
Плюс в показателе, Если А является строкой, то Л' обозначает одно или более тювторений строки Л; А, АА, ААА, ААА, ЛАЛА, ...., Л", Если А т:= ху, то ху, хуху, хухуху... По аналогии для (А)', где (А) — набор строк имеем: (А), (Л)(А), (Л)(Л)(Л)... Оператор «звезда». Если Л вЂ” строка, то А' обозначает ноль или более повторений строки Л: Х, А, ЛЛ, ААЛ, ... По аналогии, для (А)', где (А) — набор строк, имеем: Х, (Л), (А)(А), (А)(Л)(А). Или (А) = (Л)' ~ Х..
Очевидно, ЛА' = А'А = А'. Обьедицение. Если (Л) и (В) — наборы строк, то (Л) ~ (В) называется объединением (А) и (В), и обозначает совокупность всех строк (Л) и всех строк (В), без повторений. Альтернативные обозначения: (А) «(В), (А) П (В). Обезглавливание. Создание новой строки путем удаления ноля или большего числа символов, начиная с головы строки. Например, строка т1567х()()()11 была получена из строки аЬс)567х(1()()11 удалениелт первых двух символов.
Уко7таыивание. Создание новой строки путем удаления ноля или большего числа символов, начиная с хвоста строки. Например, строка аЬЬ567х(1()() была получена из строки аЬт1567х(1()()11 удалением последних двух символов. Подсотрока. Строка А называется подстрокой строки В, если А может быть получена из В обезглавливанием иггили укорачиванием В. БНФ, Форма Бэкуса — Нау)га (ВАСК95). Способ задания строк, использующий введенные выше операторы и обозначения с минимальными изменениями и расширением обозначений.
::=. Отдельный металингвистический символ, означающий «определяется как». Например, <иил строки альфа>гг>худ<строка бета><строка галиа> ) <дельта>. Это можно интерпретировать как «строка с именем "нмя строки альфа" определяется как последовательность символов х, у, х в указанном порядке, за которымп следует строка с именем "строка бета", а за ней строка с именем "строка гамма" или строка с именем "дельта" ». Мы считаем, что <строка бета>, <строка ганна> и <дельта> имеют свои собственные определения. Определение БНФ.
Определение набора строк с использованием определений оператора, нуля, конкатенации, операции ИЛИ, показателя, плюса в показателе, оператора «звезда», пулевого набора н имени строки или имени набора строк. Определения БНФ обычно выписываются сверху вниз, однако бывает, что определения приходится передвигать, чтобы определить текущие символы алфавита. Например: <нулевой вяоп> т)иа гг!)оа.!г! ~ тво ~ о(1г!.аг ~<нули>)<тире> <нули> .- <целочисленные нули>)<десятичные нули> <целочисленные нули> .= 0 '-' 'десятичные нули> ;= Ш:г Оаа <тире> ! ° н Обратите внимание, что в приведенной выше спецификации (()и ( о())1-63 отличается от (()а)1-63 ) (п())1 — 63.
В первом случае получаем (()о, и(), ()по(), ()о()о, о()о(), ...), в то время как второй включает в себя только (()о, ()о()п, ()п()п()о, ..., и(), о()о(), п()п()о()). Не пытайтесь упростить данное выражение, используя обычную алгебру. Здесь тождества обычной алгебры не работают (ВВ3062]. 216 Глава 8 ° Синтаксическое тестирование Необязательное поле, Необязательные поля обозначают, заключая их в скобки, как, например, [<необязательное поле >[.
Очевидно, что скобки служат для короткой записи показателя Π— 1. То есть [<необязательное поле >1 — это то же самое, что и <необязательное поле >' '. Одиночный произвольный символ. Обозначается как «?» и означает любой одиночный символ алфавита.
Например, выражение????аЬсе.ххх означает, что перед аЬсе.ххх идут четыре произвольных символа. Произвольная последовательность символов, Обозначается как «'» и означает ввод любых разрешенных символов в заменяемое им поле. Не следует путать это с оператором «звезда». Интерпретация произвольной последовательности символов зависит от контекста и не может быть предсказанной. Так, в строке РЕ1ас .ехе только знание операций из Мз-003 указывает нам на то, что звездочку ' надо рассматривать в данном случае как произвольную последовательность символов, заключенных между двоеточием и точкой, и что эта последовательность должна удовлетворять некоторым правилам, установленными для строк в данной позиции (например, количество символов в строке не должно превышать 8). Произвольные последовательности символов, такие как *, которые могут обозначать неопределенное число символов или произвольные последовательности, обозначающие множественные поля или наборы строк, потенциально опасны, и их надо избегать при проектировании тестов.
Они представляют опасность, поскольку их интерпретация может меняться и зависеть от контекста. По этой же причине они перспективны для поиска ошибок. 8.3. Отношения и модель 8.3.1. Основы Преобразование БНФ-спецификации в график, представляет собой механический и поэтому автоматизируемый процесс [ВКХО62). Это делается с помощью многократного применения четырех преобразований: Серия (конкатенация). Сегменты БНФ, состоящие из «поле а>«поле Ь>, моделируют при помощи связи, с весом «поле а>«поле Ь>. «Поле а> «Поле Ь> Параллельное соединение (дизьюнкция).
Сегменты БНФ, состоящие из «поле а> ~ «поле Ь> ~ «поле с>. «поле и>. моделируют с помощью узла ветвления, каждая из связей которого имеет вес, равный одному из элементов (называемых дизьюнктами), далее эти связи сходятся в одном в одном связывающем узле.
Мы не акцентируем внимание на узлах, изображая их окружностями в синтаксических диаграммах, так как эти узлы сами по себе не обладают важными для нас внутренними свойствами. Обычно мы используем вторую форму. 8.3. Отношения и модель 217 <Попе е>-ю <Попе Ь>-~-~ <Попе с>— <Попе и> Показатель, начинающийся ке с нуля. Показатель, такой как <поле>п-ш, интерпретируется как цикл, который выполняется по меньшей мере и и не больше ш раз.
Я сократил количество повторов цикла на 1, так как поле в цикле находится на нижней связи. Если бы я вставил это поле в верхнюго связь (эквивалетттная модель), то количества повторов стали бы равны соответственно и и пт. Это альтернативная допустимая модель. Оператор, обозначаемый плюсом в показателе, определяет собой цикл от единицы до бесконечности. пъ-1 раз рез Показатель, начинающийся огп нуля. Оператор < звездочка» определяет здесь цикл от 0 до бесконечности.
Есть несколько допустимых альтернативных, но эквивалентных моделей, обозначаюших прохождение цикла 0 или большее количество раз. Они показаны на рисунке. Вспомните, что Х вЂ” нулевая строка. Оператор «звезда» обозначает цикл от 0 до бесконечности, который можно представить также как А + ~Х. пт-1 рез Учитывая эти предварительные замечания, мы можем создать некие модели для ввода данных в различных строках формы 1040. Например, для номера социального обеспечения. Поле номера социального обеспечения состоит из трех частей по трн, два и четыре символа соответственно.
Между этими полями разрешен почти любой разделитель, кроме цифр. Наша спецификация в первом приближении может быть следующей: <нои соц обесп> :.- <цифра>'<рзздепит>"<цифра>'<рзздецит>'"<цифра>' <цифра> .;- 0 П !2!3/д!5!5~7~8~9 <раздедит> :;- Д/Х!о!<другие> <дртгие> ;.- а~б!с Б .
А~О~О... БНФ-форма может отличаться от этой спецификации. Вы можете ее написать с помотцью различных, но эквивалентных способов. Я не указываю, сколько разделителей необходимо вводить, но я экспериментально определил, что в моих налоговых документах наличие разделителя между полями вообше не обязательно. Следовательно, я пишу Х в третьей строчке. Я мог бы написать вместо <рездепит '" 218 Глава 8 ° Синтаксическое тестирование определение <разделит>'", а затем не ставить Л в третью строчку, так как <что-либо>'=Л. Я подразумеваю, что определение <другое> означает что-то еше. Однако вам стоить проверить и убедиться, что это поле включает в себя управляющие символы. Прежде чем идти дальше, убедитесь в том, что вы поняли эту спецификацию.
В моем налоговом пакете, хотя, возможно, к вашему это и не относится, очень мало ограничений, относящихся к этому полю. Мне не удалось найти верхний предел разрешенного числа входных символов. Такой предел, вероятно, существует, и любое тестирование данного программного обеспечения должно это проверять. Давайте определим верхний предел как 65 536 для каждого разделителя. Моя новая модель будет выглядеть следующим образом: <нон соц обесп>::= <разделит>»т>тн(<цифра >'"""и "тттзц<цифра>/<раздепитр <цифра> :- ОГ 1(2(ЗГ4ГВГВ(7ГВГ9 <разделит> ::- рГЛ|о)<другие> <другие> ::= агь|с Г .АгВ)О... Это не спецификация для социального номера, это описание того, что допускает мой налоговый пакет.
Он допускает почти все и извлекает первые девять цифр, используя их как социальный номер. Выбрав девятизначное число, он игнорирует все, что следует дальше. ВНС устанавливает более жесткие н сложные правила для корректного социального номера, так как они диктуют, где и какие цифры должны стоять, а также семантические ограничения на численные значения полей. Простая БНФ-спецификация для социального номера может иметь следующий вид: <нон соц обесп> .:- <цифра>'<разделит><цифра>'«разделит цифра>' <цнфра> - ОГ 1~2Г3~4/5~5(7!8~9 <разделит> .:- о/ П 7 Теперь мы можем описать нашу модель более привычным способом.