Файл: Обеспечения Базовый курс (3е издание) Версия книги 2 от 17. 04. 2023.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 07.11.2023
Просмотров: 885
Скачиваний: 31
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
Позитивные и негативные тест-кейсы
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 235/301
И всё, т.е. в данном конкретном случае существует единственный вариант верного использования первого параметра — указать корректное имя существую- щего каталога (пусть вариантов таких корректных имён и много). Фактически мы получили чек-лист для позитивного тестирования. Все ли варианты допустимых имён мы учли? Может быть, и не все. Но эту проблему мы рассмотрим в следующей главе, посвящённой классам эквивалентности и граничным условиям
{237}
В настоящий момент важно ещё раз подчеркнуть мысль о том, что сначала мы проверяем работу приложения на позитивных тест-кейсах, т.е. в корректных условиях. Если эти проверки не пройдут, в некоторых совершенно допустимых и типичных ситуациях приложение будет неработоспособным, т.е. ущерб качеству будет весьма ощутимым.
Как оно может сломаться, т.е. начать работать неверно? Негативных тест-кейсов (за редчайшим исключением) оказывается намного больше, чем пози- тивных. Итак, какие проблемы с именем каталога-источника (и самим каталогом- источником) могут помешать нашему приложению?
• Указанный путь не является корректным именем каталога: o
Пустое значение (“”). o
Слишком длинное имя:
▪
Для Windows: более 256 байт. (Важно! Путь к каталогу длиной в
256 байт допустим, но надо учесть ограничение на полное имя файла, т.к. его превышение может быть достигнуто естествен- ным образом, что приведёт к возникновению сбоя.)
▪
Для Linux: более 4096 байт. o
Недопустимые символы, например: ? < > \ * | " \0. o
Недопустимые комбинации допустимых символов, например: “....\dir”.
• Каталог не существует: o
На локальном диске. o
В сети.
• Каталог существует, но к нему нет прав доступа.
• Доступ к каталогу утерян после запуска приложения: o
Каталог удалён или переименован. o
Изменены права доступа. o
Потеря соединения с удалённым компьютером.
• Использование зарезервированного имени: o
Для Windows: com1-com9, lpt1-lpt9, con, nul, prn. o
Для Linux: “..”.
• Проблемы с кодировками, например: имя указано верно, но не в той коди- ровке.
Если погружаться в детали поведения отдельных операционных систем и файловых систем, данный список можно значительно расширить. И тем не менее открытыми будут оставаться два вопроса:
• Все ли эти варианты надо проверить?
• Не упустили ли мы что-то важное?
На первый вопрос ответ можно найти, опираясь на рассуждения, описанные в главе «Логика создания эффективных проверок»
{152}
Ответ на второй вопрос по- могут найти рассуждения, описанные в двух следующих главах, т.к. классы эквива- лентности, граничные условия и доменное тестирование значительно упрощают решение подобных задач.
Позитивные и негативные тест-кейсы
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 236/301
Задание 2.7.a: как вы думаете, почему в вышеприведённых чек-листах мы не учли требование о том, что SOURCE_DIR не может содержать внутри себя DESTINATION_DIR?
Классы эквивалентности и граничные условия
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 237/301
2.7.2.
Классы эквивалентности и граничные условия
В данной главе мы рассмотрим примеры упомянутых ранее техник тестиро- вания на основе классов эквивалентности
{94}
и граничных условий
{95}
Если уточнить определения, получается:
Класс эквивалентности (equivalence class
349
)
— набор данных, обраба- тываемых одинаковым образом и приводящих к одинаковому результату.
Граничное условие (border condition, boundary condition
350
)
— значение, находящееся на границе классов эквивалентности.
Иногда под классом эквивалентности понимают набор тест-кейсов, пол- ное выполнение которого является избыточным. Это определение не про- тиворечит предыдущему, т.к. показывает ту же ситуацию, но с другой точки зрения.
В качестве пояснения идеи рассмотрим тривиальный пример. Допустим, нам нужно протестировать функцию, которая определяет, корректное или некорректное имя ввёл пользователь при регистрации.
Требования к имени пользователя таковы:
• От трёх до двадцати символов включительно.
• Допускаются цифры, знак подчёркивания, буквы английского алфавита в верхнем и нижнем регистрах.
Если попытаться решить задачу «в лоб», нам для позитивного тестирования придётся перебрать все комбинации допустимых символов длиной [3, 20] (это 18- разрядное 63-ричное число, т.е. 2.4441614509104E+32). А негативных тест-кейсов здесь и вовсе будет бесконечное количество, ведь мы можем проверить строку дли- ной в 21 символ, 100, 10000, миллион, миллиард и т.д.
Представим графически классы эквивалентности относительно требований к длине (см. рисунок 2.7.a).
Рисунок 2.7.a — Классы эквивалентности для значений длины имени пользова- теля
Поскольку для длины строки невозможны дробные и отрицательные значе- ния, мы видим три недостижимых области, которые можно исключить, и получаем окончательный вариант (см. рисунок 2.7.b).
Мы получили три класса эквивалентности:
• [0, 2] — недопустимая длина;
• [3, 20] — допустимая длина;
• [21, ∞] — недопустимая длина.
349
An equivalence class consists of a set of data that is treated the same by a module or that should produce the same result. [Lee
Copeland,
«A practitioner’s guide to software test design»]
350
The boundaries
— the «edges» of each equivalence class. [Lee Copeland, «A practitioner’s guide to software test design»]
0 2 3
20 21
Допустимо
Недопустимо
Недопустимо
Недостижимо
Классы эквивалентности и граничные условия
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 238/301
Рисунок 2.7.b — Итоговое разбиение на классы эквивалентности значений длины имени пользователя
Обратите внимание, что области значений [0, 2] и [21, ∞] относятся к разным классам эквивалентности, т.к. принадлежность длины строки к этим диапазонам проверяется отдельными условиями на уровне кода программы.
Граничные условия уже отмечены на рисунке 2.7.b — это 2, 3, 20 и 21. Зна- чение 0 тоже стоит включить в этот набор на всякий случай, т.к. в программирова- нии ноль, NULL, нулевой байт и т.п. исторически являются «опасными значениями».
В итоге мы получаем следующий набор входных данных для тест-кейсов
(сами символы для составления строк можно выбирать из набора допустимых сим- волов случайным образом, но желательно учесть все типы символов, т.е. буквы в обоих регистрах, цифры, знак подчёркивания).
Таблица 2.7.a — Значения входных данных для тест-кейсов (реакция на длину имени пользователя)
Позитивные тест-кейсы
Негативные тест-кейсы
Значе-
ние
AAA
123_zzzzzzzzzzzzzzzz AA
Пустая строка
1234_zzzzzzzzzzzzzzzz
Поясне-
ние
Строка ми- нимальной допустимой длины
Строка максимальной допустимой длины
Строка не- допустимой длины по нижней границе
Строка не- допустимой длины, учтена для надёжно- сти
Строка недопустимой длины по верхней гра- нице
Осталось решить вопрос с недопустимыми символами. К сожалению, столь же наглядно, как с длиной, здесь не получится. Даже если подойти строго научно, т.е. выбрать кодировку и по её кодовой таблице определить диапазоны кодов сим- волов (на рисунке 2.7.c приведён пример такого разделения для ASCII-таблицы), у нас нет никакой гарантии, что символы с кодами из каждого диапазона трактуются единообразно.
Здесь мы видим ярчайший пример случая, в котором тестирование по ме- тоду белого ящика сильно облегчило бы нам жизнь. Если бы мы видели, как в коде приложения реализована проверка на допустимые и недопусти- мые символы, мы могли бы подобрать очень показательные значения входных данных.
Рисунок 2.7.c — Неудачный способ поиска классов эквивалентности для наборов допустимых и недопустимых символов (коды символов приведены по ASCII- таблице)
0 2 3
20 21
Допустимо
Недопустимо
Недопустимо
Цифры
48 0
47 57 58 65 90 64 91 96 97 122 94 95 123 255
Буквы A-Z
Буквы a-z
_
Классы эквивалентности и граничные условия
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 239/301
Раз оказалось, что по кодам символов подбирать классы эквивалентности в нашем случае нерационально, посмотрим на ситуацию по-другому (и намного проще). Поделим символы на недопустимые и допустимые, а последние, в свою очередь, — на группы (см. рисунок 2.7.d).
Рисунок 2.7.d — Классы эквивалентных допустимых и недопустимых символов
Интересующие нас комбинации допустимых символов (с представителями всех групп) мы уже учли при проверке реакции приложения на имена пользователя допустимых и недопустимых длин, потому остаётся учесть только вариант с допу- стимой длиной строки, но недопустимыми символами (которые можно выбирать случайным образом из соответствующего набора). В таблицу 2.7.a добавим одну колонку и получим таблицу 2.7.b.
Таблица 2.7.b — Значения всех входных данных для тест-кейсов
Позитивные тест-кейсы
Негативные тест-кейсы
Зна-
чение
AAA
123_zzzzzzzzzzzzzzzz AA
Пустая строка
1234_zzzzzzzzzzzzzzzz #$%
Пояс-
нение
Строка мини- мальной допусти- мой длины
Строка максимальной допустимой длины
Строка недопу- стимой длины по ниж- ней гра- нице
Строка недопу- стимой длины, учтена для надёж- ности
Строка недопустимой длины по верхней гра- нице
Строка допусти- мой длины, недопу- стимые символы
Конечно, в случае критически важных приложений (например, системы управления ядерным реактором) мы бы проверили с помощью средств ав- томатизации реакцию приложения на каждый недопустимый символ. Но предположив, что перед нами некое тривиальное приложение, мы можем считать, что одной проверки на недопустимые символы будет достаточно.
Теперь мы возвращаемся к «Конвертеру файлов»
{60}
и ищем ответ на во- прос
{235}
о том, не упустили ли мы какие-то важные проверки в главе «Позитивные и негативные тест-кейсы»
{234}
Начнём с того, что выделим группы свойств SOURCE_DIR, от которых зави- сит работа приложения (такие группы называются «измерениями»):
• Существование каталога (изначальное и во время работы приложения).
• Длина имени.
• Наборы символов в имени.
• Комбинации символов в имени.
• Расположение каталога (локальный или сетевой).
• Права доступа к каталогу (изначальные и во время работы приложения).
• Зарезервированные имена.
Цифры
Буквы A-Z
Буквы a-z
Знак _
Все остальные символы
Допустимо
Недопустимо
Классы эквивалентности и граничные условия
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 240/301
• Поведение, зависящее от операционной системы.
• Поведение, зависящее от работы сети.
Задание 2.7.b: какие ещё группы свойств вы бы добавили в этот список и как бы вы выделили подгруппы у уже имеющихся в списке свойств?
Очевидно, что отмеченные группы свойств оказывают взаимное влияние.
Графически его можно отобразить в виде концепт-карты
351
(рисунок 2.7.e).
Рисунок 2.7.e — Концепт-карта взаимовлияния групп свойств каталога
351
«Concept map», Wikipedia [
http://en.wikipedia.org/wiki/Concept_map
]
Локальный
SOURCE_DIR
Сетевой
Права доступа
Существование
Изначально
Во время работы
Особенности работы сети
Существует
Не существует
Права есть
Прав нет
Имя
Длина
Допустимая
Недопустимая
Символы
Допустимые
Недопустимые
Комбинации символов
Допустимые
Недопустимые
Зарезервированное
Свободное
Особенности работы
ОС
Кодировки
Классы эквивалентности и граничные условия
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 241/301
Чтобы иметь возможность применить стандартную технику классов эквива- лентности и граничных условий, нам нужно по рисунку 2.7.e дойти от центрального элемента («SOURCE_DIR») до любого конечного, однозначно относящегося к пози- тивному или негативному тестированию.
Один из таких путей на рисунке 2.7.e отмечен кружками. Словесно его можно выразить так: SOURCE_DIR → Windows → Локальный каталог → Имя → Свободное
→
Длина → В кодировке UTF16 → Допустимая или недопустимая.
Максимальная длина пути для Windows в общем случае равна 256 байтам:
[
диск][:\][путь][null] = 1 + 2 + 256 + 1 = 260. Минимальная длина равна 1 байту (точка обозначает «текущий каталог»). Казалось бы, всё очевидно и может быть представ- лено рисунком 2.7.f.
Рисунок 2.7.f — Классы эквивалентности и граничные условия для длины пути
Но если почитать внимательно спецификацию
352
, выясняется, что «физиче- ски» путь может быть длиной до 32’767 символов, а ограничение в 260 символов распространяется лишь на т.н. «полное имя». Потому возможна, например, ситуа- ция, когда в каталог с полным именем длиной 200 символов помещается файл с именем длиной 200 символов, и длина полного имени файла получается равной
400 символам (что очевидно больше 260).
Так мы подошли к ситуации, в которой для проведения тестирования нужно либо знать внутреннюю реализацию поведения приложения, либо вносить правки в требования, вводя искусственные ограничения (например, длина имени
SOURCE_DIR не может быть более 100 символов, а длина имени любого файла в
SOURCE_DIR не может быть более 160 символов, что в сумме может дать макси- мальную длину в 260 символов).
Ввод искусственных ограничений — плохая идея, потому с точки зрения ка- чества мы вполне вправе считать представленное на рисунке 2.7.f разбиение кор- ректным, а сбои в работе приложения (если таковые будут), вызванные описанной выше ситуацией вида «200 символов + 200 символов», — дефектом.
Таблица 2.7.c — Значения всех входных данных для тест-кейсов по проверке вы- бранного на рисунке 2.7.e пути
Позитивные тест-кейсы
Негативные тест-кейсы
Зна-
чение
(точка)
C:\
256
байт
Пустая строка
C:\
257
байт
Пояс-
нение
Имя с мини- мальной допу- стимой длиной
Имя с максимальной допустимой длиной
Имя с недопустимой длиной, учтено для надёжности
Имя с недопустимой длиной
Итак, с одним путём на рисунке 2.7.e мы разобрались. Но их там значительно больше, и потому в следующей главе мы рассмотрим, как быть в ситуации, когда приходится учитывать влияние на работу приложения большого количества пара- метров.
352
«Naming Files, Paths, and Namespaces», MSDN [
https://msdn.microsoft.com/en-us/library/aa365247.aspx#maxpath
]
0 1
256 257
Допустимо
Недопустимо
Недопустимо
Доменное тестирование и комбинации параметров
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 242/301
2.7.3.
Доменное тестирование и комбинации параметров
Уточним данное ранее
{95}
определение:
Доменное тестирование (domain testing, domain analysis
353
)
— техника со- здания эффективных и результативных тест-кейсов в случае, когда не- сколько переменных могут или должны быть протестированы одновре- менно.
В качестве инструментов доменного тестирования активно используются техники определения классов эквивалентности и граничных условий, которые были рассмотрены в соответствующей
{237}
главе. Потому мы сразу перейдём к практиче- скому примеру.
На рисунке 2.7.e кружками отмечен путь, один из вариантов которого мы рас- смотрели в предыдущей главе, но вариантов может быть много:
• Семейство ОС o Windows o Linux
• Расположение каталога o
Локальный o
Сетевой
• Доступность имени o
Зарезервированное o
Свободное
• Длина o
Допустимая o
Недопустимая
Чтобы не усложнять пример, остановимся на этом наборе. Графически ком- бинации вариантов можно представить в виде иерархии (см. рисунок 2.7.g). Исклю- чив совсем нетипичную для нашего приложения экзотику (всё же мы не разрабаты- ваем сетевую утилиту), вычеркнем из списка случаи зарезервированных сетевых имён (отмечены на рисунке 2.7.g серым).
Легко заметить, что при всей своей наглядности графическое представление не всегда удобно в обработке (к тому же мы пока ограничились только общими иде- ями, не отметив конкретные классы эквивалентности и интересующие нас значения граничных условий).
Альтернативным подходом является представление комбинаций в виде таб- лицы, которое можно получать последовательно за несколько шагов.
Сначала учтём комбинации значений первых двух параметров — семейства
ОС и расположения каталога. Получается таблица 2.7.d.
Таблица 2.7.d — Комбинации значений первых двух параметров
Windows
Linux
Локальный путь
+
+
Сетевой путь
+
+
На пересечении строк и столбцов можно отмечать необходимость выполне- ния проверки (в нашем случае таковая есть, потому там стоит «+») или её отсут- ствие, приоритет проверки, отдельные значения параметров, ссылки и т.д.
353
Domain analysis is a technique that can be used to identify efficient and effective test cases when multiple variables can or should be tested together. [Lee Copeland,
«A practitioner’s guide to software test design»]
Доменное тестирование и комбинации параметров
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 243/301
Рисунок 2.7.g — Графическое представление комбинаций параметров
SOURCE_DIR
Windows
Linux
Локальный
Сетевой
Локальный
Сетевой
Зарезерви- рованное
Свободное
Зарезерви- рованное
Свободное
Зарезерви- рованное
Свободное
Зарезерви- рованное
Свободное
Недопус- тимая
Допустимая
Недопус- тимая
Допустимая
Недопус- тимая
Допустимая
Недопус- тимая
Допустимая
Недопус- тимая
Допустимая
Недопус- тимая
Допустимая
Недопус- тимая
Допустимая
Недопус- тимая
Допустимая