Файл: Обеспечения Базовый курс (3е издание) Версия книги 2 от 17. 04. 2023.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 07.11.2023
Просмотров: 877
Скачиваний: 31
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
Доменное тестирование и комбинации параметров
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 244/301
Добавим третий параметр (признак зарезервированного имени) и получим таблицу 2.7.e.
Таблица 2.7.e — Комбинации значений трёх параметров
Windows
Linux
Зарезервирован-
ное имя
Локальный путь
+
+
Сетевой путь
-
-
Свободное имя
Локальный путь
+
+
Сетевой путь
+
+
Добавим четвёртый параметр (признак допустимости длины) и получим таб- лицу 2.7.f.
Чтобы таблица равномерно увеличивалась по высоте и ширине, удобно до- бавлять каждый последующий параметр попеременно — то как строку, то как стол- бец (при формировании таблиц 2.7.e и 2.7.f третий параметр мы добавили как строку, четвёртый – как столбец).
Таблица 2.7.f — Комбинации значений четырёх параметров
Недопустимая длина
Допустимая длина
Windows
Linux
Windows
Linux
Зарезервиро-
ванное имя
Локальный
путь
-
-
+
+
Сетевой
путь
-
-
-
-
Свободное
имя
Локальный
путь
+
+
+
+
Сетевой
путь
+
+
+
+
Такое представление по сравнению с графическим оказывается более ком- пактным и позволяет очень легко увидеть комбинации значений параметров, кото- рые необходимо подвергнуть тестированию. Вместо знаков «+» в ячейки можно по- ставить ссылки на другие таблицы (хотя иногда все данные совмещают в одной таблице), в которых будут представлены классы эквивалентности и граничные условия для каждого выбранного случая.
Как несложно догадаться, при наличии большого количества параметров, каждый из которых может принимать много значений, таблица наподобие 2.7.f бу- дет состоять из сотен строк и столбцов. Даже её построение займёт много времени, а выполнение всех соответствующих проверок и вовсе может оказаться невозмож- ным в силу нехватки времени. В следующей главе мы рассмотрим ещё одну технику тестирования, призванную решить проблему чрезмерно большого количества ком- бинаций.
Попарное тестирование и поиск комбинаций
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 245/301
2.7.4.
Попарное тестирование и поиск комбинаций
Уточним данное ранее
{95}
определение:
Попарное тестирование (pairwise testing
354
)
— техника тестирования, в которой вместо проверки всех возможных комбинаций значений всех па- раметров проверяются только комбинации значений каждой пары пара- метров.
Выбрать и проверить пары значений — звучит вроде бы просто. Но как вы- бирать такие пары? Существует несколько тесно взаимосвязанных математических методов создания комбинаций всех пар:
• на основе ортогональных массивов
355
,
359
;
• на основе латинских квадратов
356
;
• IPO (in parameter order) метод
357
;
• на основе генетических алгоритмов
358
;
• на основе рекурсивных алгоритмов
359
Глубоко в основе этих методов лежит серьёзная математическая тео- рия
359
В упрощённом виде на примерах суть и преимущества этого под- хода показаны в книге Ли Коупленда
360
и статье Майкла Болтона
355
, а спра- ведливая критика — в статье Джеймса Баха
361
Итак, суть проблемы: если мы попытаемся проверить все сочетания всех значений всех параметров для более-менее сложного случая тестирования, мы по- лучим количество тест-кейсов, превышающее все разумные пределы.
Если представить изображённую на рисунке 2.7.e схему в виде набора пара- метров и количества их значений, получается ситуация, представленная таблицей
2.7.g.
Минимальное количество значений получено по принципу «расположение: локально или в сети», «существование: да или нет», «семейство ОС: Windows или
Linux
» и т.д. Вероятное количество значений оценено исходя из необходимости учитывать несколько классов эквивалентности. Количество значений с учётом пол- ного перебора получено исходя из технических спецификаций операционных си- стем, файловых систем и т.д. Значение нижней строки получено перемножением значений в соответствующей колонке.
354
The answer is not to attempt to test all the combinations for all the values for all the variables but to test all pairs of variables. [Lee
Copeland,
«A practitioner’s guide to software test design»]
355
«Pairwise Testing», Michael Bolton [
http://www.developsense.com/pairwiseTesting.html
]
356
«An Improved Test Generation Algorithm for Pair-Wise Testing», Soumen Maity and oth. [
https://citeseerx.ist.psu.edu/view- doc/download?doi=10.1.1.147.2164&rep=rep1&type=pdf
]
357
«A Test Generation Strategy for Pairwise Testing», Kuo-Chung Tai, Yu Lei [
https://
citeseerx.ist.psu.edu/viewdoc/down- load?doi=10.1.1.106.8350&rep=rep1&type=pdf
]
358
«Evolutionary Algorithm for Prioritized Pairwise Test Data Generation», Javier Ferrer and oth.
[
https://neo.lcc.uma.es/staff/javi/files/gecco12.pdf
]
359
«On the Construction of Orthogonal Arrays and Covering Arrays Using Permutation Groups», George Sherwood
[
http://testcover.com/pub/background/cover.htm
]
360
«A Practitioner's Guide to Software Test Design», Lee Copeland.
361
«Pairwise Testing: A Best Practice That Isn’t», James Bach [
http://citeseerx.ist.psu.edu/viewdoc/down- load?doi=10.1.1.105.3811&rep=rep1&type=pdf
].
Попарное тестирование и поиск комбинаций
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 246/301
Таблица 2.7.g — Список параметров, влияющих на работу приложения
Параметр
Минимальное
количество
значений
Вероятное
количество
значений
Количество значе-
ний с учётом пол-
ного перебора
Расположение
2 25 32
Существование
2 2
2
Наличие прав доступа
2 3
155
Семейство ОС
2 4
28
Зарезервированное или свободное имя
2 7
23
Кодировки
2 3
16
Длина
2 4
4096
Комбинации символов
2 4
82
ИТОГО тест-кейсов
256
201
’600
34
’331’384’872’960
Конечно, мы не будем перебирать все возможные значения (для того нам и нужны классы эквивалентности), но даже 256 тест-кейсов для проверки всего лишь одного параметра командной строки — это много. И куда вероятнее, что придётся выполнять около 200 тысяч тест-кейсов. Если делать это вручную и выполнять по одному тесту в пять секунд круглосуточно, понадобится около 11 суток.
Но мы можем применить технику попарного тестирования для генерации оп- тимального набора тест-кейсов, учитывающего сочетание пар каждого значения каждого параметра. Опишем сами значения. Обратите внимание, что уже на этой стадии мы провели оптимизацию, собрав в один набор информацию о расположе- нии, длине, значении, комбинации символов и признаке зарезервированного имени.
Это сделано потому, что сочетания вида «длина 0, зарезервированное имя com1» не имеют смысла. Также мы усилили часть проверок, добавив русскоязычные названия каталогов.
Таблица 2.7.h — Список параметров и их значений
Параметр
Значения
Расположение / длина / зна- чение / комбинация симво- лов / зарезервированное или свободное
1. X:\
2. X:\dir
3.
“X:\пробелы и русский”
4. .\dir
5. ..\dir
6. \\host\dir
7. [256 байт только для Windows]
+
Пункты 2-6 с “\” в конце пути.
8. /
9. /dir
10.
“/пробелы и русский”
11. host:/dir
12. smb://host/dir
13. ./dir
14. ../dir
15. [4096 байт только для Linux]
+ Пункты 9-14 с “/” в конце пути.
Недопустимое имя.
16. [0 символов]
17. [4097 байт только для Linux]
18. [257 байт только для Windows]
19. "
20. //
21. \\
Попарное тестирование и поиск комбинаций
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 247/301 22. ..
23. com1-com9 24. lpt1-lpt9 25. con
26. nul
27. prn
Существование
1.
Да
2.
Нет
Наличие прав доступа
1.
К каталогу и его содержимому
2.
Только к каталогу
3.
Ни к каталогу, ни к его содержимому
Семейство ОС
1. Windows 32 bit
2. Windows 64 bit
3. Linux 32 bit
4. Linux 64 bit
Кодировки
1. UTF8 2. UTF16 3. OEM
Количество потенциальных тест-кейсов уменьшилось до 2736 (38*2*3*4*3), что уже много меньше 200 тысяч, но всё равно нерационально.
Теперь воспользуемся любым из представленных в огромном количестве ин- струментальных средств
362
(
например, PICT) и сгенерируем набор комбинаций на основе попарного сочетания всех значений всех параметров. Пример первых де- сяти строк результата представлен в таблице 2.7.i. Всего получилось 152 комбина- ции, т.е. в 1326 раз меньше (201’600 / 152) исходной оценки или в 18 раз меньше
(2736 / 152
) оптимизированного варианта.
Таблица 2.7.i — Наборы значений, полученные методом попарных комбинаций
№ Расположение / длина /
значение / комбинация
символов / зарезерви-
рованное или свобод-
ное
Существо-
вание
Наличие прав до-
ступа
Семейство
ОС
Кодировки
1
X:\
Да
К каталогу и его со- держимому
Windows 64 bit
UTF8 2 smb://host/dir/
Нет
Ни к каталогу, ни к его содержимому
Windows 64 bit
UTF16 3
/
Нет
Только к каталогу
Windows 32 bit
OEM
4
[0 символов]
Да
Только к каталогу
Linux 32 bit
UTF8 5 smb://host/dir
Нет
К каталогу и его со- держимому
Linux 32 bit
UTF16 6
../dir
Да
Ни к каталогу, ни к его содержимому
Linux 64 bit
OEM
7
[257 байт только для
Windows]
Да
Только к каталогу
Windows 64 bit
OEM
8
[4096 байт только для
Linux]
Нет
Ни к каталогу, ни к его содержимому
Windows 32 bit
UTF8 9
[256 байт только для
Windows]
Нет
Ни к каталогу, ни к его содержимому
Linux 32 bit
OEM
10 /dir/
Да
Только к каталогу
Windows 32 bit
UTF16
Если исследовать набор полученных комбинаций, можно исключить из них те, которые не имеют смысла (например, существование каталога с именем нуле- вой длины или проверку под Windows характерных только для Linux случаев — см.
362
«Pairwise Testing, Available Tools» [
https://jaccz.github.io/pairwise/tools.html
]
Попарное тестирование и поиск комбинаций
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 248/301 строки 4 и 8). Завершив такую операцию, мы получаем 124 комбинации. По сооб- ражениям экономии места эта таблица не будет приведена, но в приложении «При- мер данных для попарного тестирования»
{293}
представлен конечный итог оптимиза- ции (из таблицы убраны ещё некоторые комбинации, например, проверка под Linux имён, являющихся зарезервированными для Windows). Получилось 85 тест-кейсов, что даже немного меньше минимальной оценки в 256 тест-кейсов, и при этом мы учли куда больше опасных для приложения сочетаний значений параметров.
Задание 2.7.c: в представленной в приложении «Пример данных для по- парного тестирования»
{293}
в колонке «Наличие прав доступа» иногда от- сутствуют значения. Как вы думаете, почему? Также в этой таблице всё ещё есть «лишние» тесты, выполнение которых не имеет смысла или представляет собой крайне маловероятный вариант стечения событий.
Найдите их.
Итак, на протяжении последних четырёх глав мы рассмотрели несколько тех- ник тестирования, позволяющих определить наборы данных и идей для написания эффективных тест-кейсов. Следующая глава будет посвящена ситуации, когда вре- мени на столь вдумчивое тестирование нет.
Исследовательское тестирование
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 249/301
2.7.5.
Исследовательское тестирование
Исследовательское
{85}
и свободное
{85}
тестирование уже было упомянуто ра- нее на уровне определения. Для начала ещё раз подчеркнём, что это разные виды тестирования, пусть в каждом из них степень формализации процесса значительно меньше, чем в тестировании на основе тест-кейсов
{84}
Сейчас мы будем рассмат- ривать применение именно исследовательского тестирования.
Сэм Канер определяет
363
исследовательское тестирование как стиль, осно- ванный на свободе и ответственности тестировщика в непрерывной оптимизации своей работы за счёт выполняемых параллельно на протяжении всего проекта и взаимодополняющих изучения, планирования, выполнения проверок и оценки их результатов. Если сказать короче, исследовательское тестирование — это одно- временное изучение, планирование и тестирование.
Кроме очевидной проблемы с тестированием на основе тест-кейсов, состоя- щей в высоких затратах времени, существует ещё одна — существующие техники оптимизации направлены на то, чтобы максимально исследовать приложение во всех учтённых ситуациях, которые мы можем контролировать — но невозможно учесть и проконтролировать всё. Эта идея визуально представлена на рисунке
2.7.h.
Рисунок 2.7.h — Факторы, которые могут быть пропущены тестированием на ос- нове тест-кейсов
363
Исследовательское же тестирование часто позволяет обнаружить дефекты, вызванные этими неучтёнными факторами. К тому же оно прекрасно показывает себя в следующих ситуациях:
• Отсутствие или низкое качество необходимой документации.
• Необходимость быстрой оценки качества при нехватке времени.
• Подозрение на неэффективность имеющихся тест-кейсов.
• Необходимость проверить компоненты, разработанные «третьими сторо- нами».
• Верификация устранения дефекта (для проверки, что он не проявляется при незначительном отступлении от шагов воспроизведения).
363
«A Tutorial in Exploratory Testing», Cem Kaner [
http://kaner.com/pdfs/QAIExploring.pdf
]
Приложение
Подготовленные данные и команды
Контролируемое поведение
Неучтённые состояния компонентов приложения
Неучтённые состояния ОС и среды выполнения
Неучтённые состояния конфигураций и ресурсов
Неучтённые воздействия других приложений
Неучтённые состояния компонентов приложения
Неучтённые состояния ОС и среды выполнения
Неучтённые воздействия на разнообразные ресурсы
Неучтённые воздействия на другие приложения
Исследовательское тестирование
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 250/301
В своей работе
363
Сэм Канер подробно показывает способы проведения ис- следовательского тестирования с использованием базовых методов, моделей, при- меров, частичных изменений сценариев, вмешательства в работу приложения, про- верки обработки ошибок, командного тестирования, сравнения продукта с требова- ниями, дополнительного исследования проблемных областей и т.д.
Вернёмся к нашему «Конвертеру файлов»
{60}
. Представим следующую ситу- ацию: разработчики очень уж быстро выпустили первый билд, тест-кейсов (и всех тех наработок, что были рассмотрены ранее в этой книге) у нас пока нет, а прове- рить билд нужно. Допустим, в уведомлении о выходе билда сказано: «Реализованы и готовы к тестированию требования:
СХ-1
,
СХ-2
,
СХ-3
,
ПТ-1.1
,
ПТ-1.2
,
ПТ-2.1
,
ПТ-
3.1
,
ПТ-3.2
,
БП-1.1
,
БП-1.2
,
ДС-1.1
,
ДС-2.1
,
ДС-2.2
,
ДС-2.3
,
ДС-2.4
,
ДС-3.1
,
ДС-3.2
(текст сообщений приведён к информативному виду),
ДС-4.1
,
ДС-4.2
,
ДС-4.3
».
Ранее мы отметили, что исследовательское тестирование — это тесно взаи- мосвязанные изучение, планирование и тестирование. Применим эту идею.
Изучение
Представим полученную от разработчиков информацию в виде таблицы 2.7.j и проанализируем соответствующие требования, чтобы понять, что нам нужно бу- дет сделать.
Таблица 2.7.j — Подготовка к исследовательскому тестированию
Требование
Что и как будем делать
СХ-1
Не требует отдельной проверки, т.к. вся работа с приложением будет выпол- няться в консоли.
СХ-2
Не требует отдельной проверки, видно по коду.
СХ-3
Провести тестирование под Windows и Linux.
ПТ-1.1
Стандартная проверка реакции консольного приложения на различные вари- анты указания параметров. Учесть, что обязательными являются первые два параметра из трёх (третий принимает значение по умолчанию, если не задан).
См. «Идеи», пункт 1.
ДС-2.1
ДС-2.2
ДС-2.3
ДС-2.4
ПТ-1.2
См. «Идеи», пункт 2.
ПТ-2.1
Не требует отдельной проверки, покрывается другими тестами.
ПТ-3.1
На текущий момент можно только проверить факт ведения лога и формат за- писей, т.к. основная функциональность ещё не реализована. См. «Идеи», пункт 4.
ПТ-3.2
ДС-4.1
ДС-4.2
ДС-4.3
БП-1.1
См. «Идеи», пункт 3.
БП-1.2
ДС-1.1
Тестирование проводить на PHP 5.5.
ДС-3.1
Проверять выводимые сообщения в процессе выполнения пунктов 1-2 (см.
«Идеи»).
ДС-3.2
Планирование
Частично планированием можно считать колонку «Что и как будем делать» таблицы 2.7.j, но для большей ясности представим эту информацию в виде обоб- щённого списка, который для простоты назовём «идеи» (да, это — вполне класси- ческий чек-лист).
Исследовательское тестирование
Тестирование программного обеспечения. Базовый курс.
© EPAM Systems, 2015–2023
Стр: 251/301
Идеи:
1.
Проверить сообщения в ситуациях запуска: a.
Без параметров. b.
С верно указанными одним, двумя, тремя параметрами. c.
С неверно указанными первым, вторым, третьим, одним, двумя, тремя параметрами.
2.
Остановить приложение по Ctrl+C.
3.
Проверить сообщения в ситуациях запуска: a.
Каталог-приёмник и каталог-источник в разных ветках ФС. b.
Каталог-приёмник внутри каталога-источника. c.
Каталог-приёмник, совпадающий с каталогом-источником.
4.
Проверить содержимое лога.
5.
Посмотреть в код классов, отвечающих за анализ параметров командной строки и ведение лога.
Задание 2.7.d: сравните представленный набор идей с ранее рассмотрен- ными подходами
{152}
,
{234}
,
{237}
,
{242}
,
{245}
— какой вариант вам кажется более про- стым в разработке, а какой в выполнении и почему?
Итак, список идей есть. Фактически, это почти готовый сценарий, если пункт
2 (про остановку приложения) повторять в конце проверок из пунктов 1 и 3).
Тестирование
Можно приступать к тестированию, но стоит отметить, что для его проведе- ния нужно привлекать специалиста, имеющего богатый опыт работы с консольными приложениями, иначе тестирование будет проведено крайне формально и ока- жется неэффективным.
Что делать с обнаруженными дефектами? Для начала — фиксировать в та- ком же формате, т.е. как список идей: переключение между прохождением некоего сценария и написанием отчёта о дефекте сильно отвлекает. Если вы опасаетесь что-то забыть, включите запись происходящего на экране (отличный трюк — запи- сывать весь экран так, чтобы были видны часы, а в списках идей отмечать время, когда вы обнаружили дефект, чтобы потом в записи его было проще найти).
Список «идей дефектов» можно для удобства оформлять в виде таблицы
(см. таблицу 2.7.k).
Таблица 2.7.k — Список «идей дефектов»
№
Что делали
Что получили
Что ожидали / Что не так
0 а) Во всех случаях сообщения приложения вполне корректны с точки зрения происходящего и информативны, но противоречат требованиям (обсудить с заказчиком изменения в требо- ваниях). б) Лог ведётся, формат даты-времени верный, но нужно уточнить, что в требованиях име- ется в виду под «имя_операции параметры_операции результат_операции», т.к. для разных операций единый формат не очень удобен — нужно ли приводить всё к одному формату или нет?
1 php converter.php
Error: Too few command line parameters.
USAGE: php converter.php SOURCE_DIR
DESTINATION_DIR [LOG_FILE_NAME]
Please note that DESTINATION_DIR may
NOT be inside SOURCE_DIR.
Сообщение совершенно не соответствует требованиям.
2 php converter.php zzz:/ c:/
Error: SOURCE_DIR name [zzz:] is not a valid directory.
Странно, что от «zzz:/» оста- лось только «zzz:».