- PVSM.RU - https://www.pvsm.ru -
Книга "A Practitioner's Guide to Software Test Design" Lee Copeland была опубликована в 2003 году.
С тех пор она надежно закрепилась в списке книг, которые обязательно должен прочитать любой тестировщик. Её стоит прочитать в оригинале. Читается очень приятно: язык не сложный, стиль легкий. По ходу книги автор слегка иронизирует над собой, своими учениками, читателями и в целом над сферой нашей деятельности.
Далее приводится не перевод, а скорее подробный конспект раздела “Техники тестирования методом черного ящика”, в котором содержится описание применения техник тест-дизайна.
Ко мне в руки книга попала по совету бывшего коллеги, за что ему отдельное спасибо.
To be most effective and efficient test case must be designed, not just slapped together.
Equivalence Class Testing [1]
Boundary Value Testing [2]
Decision Table Testing [3]
Pairwise Testing [4]
State-Transition Testing [5]
Use Case Testing [6]
Классом эквивалентности называется набор данных, который запускает одни и те же модули и должен приводить к одним и тем же результатам.
Любые данные в рамках класса эквивалентны, это означает что если один тест-кейс в кассе эквивалентности обнаружил/не обнаружил дефект, то все остальные тест-кейсы внутри этого класса эквивалентности обнаружат/не обнаружат тот же самый дефект.
Альтернативный подход — использование классов эквивалентности не для входов, а для выходов. Разделить варианты выходов на классы эквивалентности, определить какие входные значения могут инициировать такие выходы. Преимущество в том, что проверяется каждый возможный вариант выхода. Недостаток в том, что внутри класса эквивалентности по выходу, может прятаться несколько классов эквивалентности по входу.
При наличии нескольких переменных:
Let your designers and programmers know when they have helped you. They’ll appreciate the thought and may do in again.
Следует помнить, что точка выше или ниже границы может быть экземпляром другого класса эквивалентности, в этом случае дублировать тест не нужно.
Значения определяются типом. Если граница 5, то для поля, где вводятся целые числа тестируются точки 4 и 6, а для поля, где вводятся суммы в рублях и копейках тестируются точки 4,99 и 5,01.
При наличии нескольких переменных:
Boundary value testing focuses on the boundaries because that is where so many defects hide.
Таблица принятия решений — представляет связь составных условий и результирующих действий.
Если условие представляет из себя диапазон значений, то дополнительно создаются тесты для проверки значений выше и ниже граничного.
| 23=8 комбинаций | Rule 1 | Rule 2 | Rule 3 | Rule 4 | Rule 5 | Rule 6 | Rule 7 | Rule 8 |
| Conditions | ||||||||
| Допустимый код акции | N | N | N | N | Y | Y | Y | Y |
| Допустимое количество | N | N | Y | Y | N | N | Y | Y |
| Достаточно средств | N | Y | N | Y | N | Y | N | Y |
| Actions | ||||||||
| Купить | N | N | N | N | N | N | N | Y |
Внимательно посмотрев на таблицу, можно заметить, что в правилах 1, 2, 3, 4, если код акции недопустимый, то проверка остальных условий не имеет смысла. Правила 5 и 6 могут быть объединены, т.к. условие проверки средств никак не влияет на результат. Условия, которые не оказывают влияние на результат помечаются как “DC”. Таблица преобразуется:
| 4 комбинации | Rule 1 | Rule 2 | Rule 3 | Rule 4 |
| Conditions | ||||
| Допустимый код акции | N | Y | Y | Y |
| Допустимое количество | DC | N | Y | Y |
| Достаточно средств | DC | DC | N | Y |
| Actions | ||||
| Купить | N | N | N | Y |
Т.к. всегда есть вероятность того, что таблица может быть преобразована неверно или код написан неправильно лучше, чтобы исходная таблица все равно была под рукой.
Famous Software Tester Mick Jagger gives excellent advice regarding this “You can’t always get what you want, but if you try sometimes, you just might find, you get what you need.”
Опытным путем было определено, что большинство дефектов это или одиночные дефекты (single-mode defects), или парные дефекты (double-mode defects), т.е. проявляющиеся при сочетании одного параметра всего лишь с одним другим параметром, при том что значение остальных параметров не имеет значения.
Если количество комбинаций значений переменных велико, не стоит пытаться протестировать все возможные комбинации, лучше сосредоточиться на тестировании всех пар значений переменных.
Два подхода попарного тестирования (pairwise testing): метод ортогонального массива (orthogonal arrays) и метод всех пар (allpair algorithm).
Ортогональный массив — это двумерный массив, обладающий особым свойством: если выбрать две любые колонки в массиве, то в них будут присутствовать все возможные сочетания значений параметров, тем же самым свойством обладают все пары колонок.
Все пары — для создания массива используется алгоритм, генерирующий пары напрямую, без использования дополнительной балансировки. Если имеется большое количество параметров, принимающих маленькое количество значений, то для составления пар лучше использовать этот метод.
Не обязательно составлять попарные комбинации вручную, для этого существует масса инструментов [7].
Нужно учитывать, что могут возникнуть ограничения связанные с тем, что некоторые сочетания параметров никогда не будут иметь места.
There is no underlying “software defect physics” that guarantees pairwise testing will be of benefit. There is only one way to know — try it.
Состояние (State) — Условие в котором система ожидает одно или несколько событий.Состояние помнит что было получено на вход и определяет ответную реакцию, которая должна произойти. Это событие может быть приводить в новое состояние и/или инициировать новое действие. Состояние обычно отражает значение некоторой переменной в системе. Изображается в форме круга.
Переход (Transition) — Представляет переход из текущего состояния в новое, в результате выполнения какого-то действия. Изображается в виде стрелки.
Событие (Event) — Событие, ставшее причиной изменения состояния. Обычно событие поступает в систему из внешнего мира посредством некоторого интерфейса. Иногда это событие инициируется внутри самой системы например такие как срабатывание таймера, снижение ниже какого-то уровня. Считается, что событие происходит моментально. Событие может быть как независимым, так и связанным. Когда событие случается, система может изменить состояние или остаться в прежнем состоянии и/или инициировать действие. События могут иметь, связанные с ними параметры (номер карты, сумма на счете). Изображается как подпись к стрелке перехода.
Действие (Action) — Операция, инициированная в результате смены состояния. Зачастую это некоторый ответ системы. Помните, что действие происходит при переходе между состояниями. Состояния сами по себе статичны. Указывается через слеш в подписи к стрелке перехода после события.
Диаграмма перехода состояний представляет собой одну специфическую сущность (например, процесс резервирования). Частая ошибка — попытка смешивать разные сущности в одной диаграмме (например Резервирование и Пассажира с событиями и действиями, связанными с каждым из них).
Может использоваться, когда системе нужно знать предысторию или правильный порядок выполнения операций.
На основании Диаграммы перехода состояний составляется Таблица перехода состояний. Таблица содержит 4 колонки: текущее состояние, событие, действие, следующее состояние.
Преимущество Таблицы перехода состояний в том, что это перечень всех возможных комбинаций переходов из состояния в состояние, в том числе и невалидных. При анализе такой таблицы могут быть замечены пробелы в требованиях. Использование таблицы перехода состояний может помочь отследить недопустимые переходы между состояниями.
Может быть выбран один из 4 вариантов создания тест-кейсов:

And now for something completely different. Monty Python
Use case — это сценарии, описывающие то как actor (обычно человек, но может быть и другая система) пользуется системой для достижения определенной цели. Варианты использования описываются с точки зрения пользователя, а не системы. Внутренние работы по поддержанию работоспособности системы не являются частью варианта использования.
Хотя бы один тест-кейс должен проверять основной сценарий и хотя бы по одному кейсу должно приходится на альтернативные сценарии.
Шаблон описания вариантов использования
| Use Case Component | Description |
| Use Case Number or Identifier (Номер или идентификатор) |
Уникальный идентификатор |
| Use Case Name (Наименование) |
В форме предложения, содержащего глагол в активной форме (что сделать?). Например, Авторизоваться, Создать заказ |
| Goal in Context (Цель и контекст) |
Более детальное описание цели, если это необходимо. Например, Создать заказ от имени организации. |
| Scope (Границы) | Корпорация (общий)|Система|Подсистема |
| Level (Уровень) | Общая|Частная|Подфункция |
| Primary Actor (Основной исполнитель | Роль или описание основного пользователя |
| Preconditions (Предусловия) | Состояние, в котором система должна находится до начала варианта использования |
| Success End Conditions (В случае успеха) | Состояние, в которое должна перейти система в случае удачного завершения варианта использования |
| Failed End Conditions (В случае провала) | Состояние, в которое должна перейти система в случае НЕудачного завершения варианта использования |
| Trigger (Условие срабатывания) | Действие, инициирующее запуск этого варианта использования |
| Main Success Scenario (Основной сценарий) |
Шаги и действия |
| Extensions (Дополнительные условия) | Условия, под действием которых в основных шагах сценария могут возникнуть альтернативные варианты. |
| Sub-Variations Альтернативы |
Шаги и действия. Варианты которые не связаны с основным потоком, но могут возникнуть. Описываются для шага. |
| Priority (Приоритет) | Критический |
| Response Time | Время, требуемое для выполнения этого кейса |
| Frequency | Частота использования |
| Channels to Primary Actor | Interactive|File|Database Интерактивно/Файл/База |
| Data Due | Расписание |
| Completeness Level | Степень завершенности |
| Open Issues | Зарегистрированные дефекты |
If you don’t try strange things. you know the users will.
Автор: voleka
Источник [8]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/testing/326321
Ссылки в тексте:
[1] Equivalence Class Testing: #EquivalenceClassTesting
[2] Boundary Value Testing: #BoundaryValueTesting
[3] Decision Table Testing: #DecisionTableTesting
[4] Pairwise Testing: #PairwiseTesting
[5] State-Transition Testing: #StateTransitionTesting
[6] Use Case Testing: #UseCaseTesting
[7] инструментов: https://pairwise.teremokgames.com/4s8/
[8] Источник: https://habr.com/ru/post/462837/?utm_campaign=462837&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.