В качестве источника исходной информации используют диаграммы схем состояний, фиксирующие динамику поведения класса. Данный способ позволяет получить набор тестов, проверяющих поведение класса и тех классов, которые сотрудничают с ним [43]. В качестве примера на рис. 16.2 показана диаграмма схем состояний класса Счет.

Рис. 16.2. Диаграмма схем состояний класса Счет
Видим, что объект Счета начинает свою жизнь в состоянии Пустой счет, а заканчивает жизнь в состоянии Удалить счет. Наибольшее количество событий (и действий) связано с состоянием Работа счета. Для упрощения рисунка здесь принято, что имена событий совпадают с именами действий (поэтому действия не показаны).
Проектируемые тесты должны обеспечить покрытие всех состояний. Это значит, что тестовые варианты должны инициировать переходы через все состояния объекта:
Тестовый вариант 1: Открыть >УстановитьСчет >Положить (начальное) >Снять (конечное) >Закрыть.
Отметим, что эта последовательность аналогична минимальной тестовой последовательности. Добавим к минимальной последовательности дополнительные тестовые варианты:
Тестовый вариант 2: Открыть >УстановитьСчет >Положить (начальное) >Положить >Остаток >Кредит >Снять (конечное) >Закрыть
Тестовый вариант 3: Открыть >Установить >Положить (начальное) >Положить >Снять >ИнфоСчета >Снять (конечное) >Закрыть
Для гарантии проверки всех вариантов поведения количество тестовых вариантов может быть увеличено. Когда поведение класса определяется в сотрудничестве с несколькими классами, для отслеживания «потока поведения» используют набор диаграмм схем состояний, характеризующих смену состояний других классов.
Возможна другая методика исследования состояний.— «преимущественно в ширину».
В этой методике:
q каждый тестовый вариант проверяет один новый переход;
q новый переход можно проверять, если полностью проверены все предшествующие переходы, то есть переходы между предыдущими состояниями.
