Как тестировать состояние переходов, используя технику тест-дизайна
1️⃣ Как кратко ответить
Тестирование состояния переходов с использованием техники тест-дизайна заключается в моделировании системы как конечного автомата, где состояния представляют различные этапы работы системы, а переходы — возможные изменения состояния. Тесты разрабатываются для проверки корректности переходов между состояниями, включая все возможные пути и условия, которые могут вызвать эти переходы.
2️⃣ Подробное объяснение темы
Техника тестирования состояния переходов используется для проверки систем, которые можно представить в виде конечного автомата. Конечный автомат — это математическая модель, состоящая из конечного числа состояний, переходов между этими состояниями и событий, которые вызывают эти переходы.
Зачем это нужно
Тестирование состояния переходов позволяет выявить ошибки в логике работы системы, особенно в сложных системах с множеством состояний и переходов. Это важно для обеспечения надежности и корректности работы системы, особенно в критически важных приложениях, таких как банковские системы, системы управления транспортом и т.д.
Где применяется
Эта техника применяется в системах, где поведение зависит от последовательности событий, например, в автоматах по продаже билетов, системах авторизации пользователей, игровых приложениях и других системах с четко определенными состояниями и переходами.
Как работает
-
Определение состояний: Определите все возможные состояния системы. Например, для системы авторизации это могут быть состояния "Неавторизован", "Авторизован", "Блокирован".
-
Определение переходов: Определите все возможные переходы между состояниями. Например, из состояния "Неавторизован" в "Авторизован" можно перейти при успешном вводе логина и пароля.
-
Определение событий и условий: Определите события и условия, которые вызывают переходы. Например, ввод неверного пароля может привести к переходу в состояние "Блокирован".
-
Создание диаграммы состояний: Постройте диаграмму состояний, которая визуально представляет все состояния и переходы между ними.
-
Разработка тестов: Разработайте тесты, которые проверяют все возможные переходы и состояния. Убедитесь, что тесты покрывают все возможные пути, включая нормальные и исключительные сценарии.
Пример
Рассмотрим простой пример системы авторизации:
-
Состояния:
- S1: Неавторизован
- S2: Авторизован
- S3: Блокирован
-
Переходы:
- T1: S1 -> S2 (успешный ввод логина и пароля)
- T2: S1 -> S3 (три неудачных попытки ввода пароля)
- T3: S2 -> S1 (выход из системы)
- T4: S3 -> S1 (разблокировка после проверки)
-
Диаграмма состояний:
[S1] --(успешный ввод)--> [S2]
[S1] --(3 неудачных попытки)--> [S3]
[S2] --(выход)--> [S1]
[S3] --(разблокировка)--> [S1]
- Тесты:
- Проверка перехода T1: Ввод корректных данных для авторизации.
- Проверка перехода T2: Трижды ввести неверный пароль.
- Проверка перехода T3: Выполнить выход из системы.
- Проверка перехода T4: Выполнить процедуру разблокировки.
Пример кода
class AuthSystem:
def __init__(self):
self.state = "Неавторизован"
self.failed_attempts = 0
def login(self, password):
if self.state == "Блокирован":
return "Аккаунт заблокирован"
if password == "correct_password":
self.state = "Авторизован"
self.failed_attempts = 0
return "Успешная авторизация"
else:
self.failed_attempts += 1
if self.failed_attempts >= 3:
self.state = "Блокирован"
return "Неверный пароль"
def logout(self):
if self.state == "Авторизован":
self.state = "Неавторизован"
return "Выход выполнен"
return "Вы не авторизованы"
def unlock(self):
if self.state == "Блокирован":
self.state = "Неавторизован"
self.failed_attempts = 0
return "Аккаунт разблокирован"
return "Аккаунт не заблокирован"
# Пример использования
auth_system = AuthSystem()
# Попытка авторизации с неверным паролем
print(auth_system.login("wrong_password")) # Неверный пароль
print(auth_system.login("wrong_password")) # Неверный пароль
print(auth_system.login("wrong_password")) # Аккаунт заблокирован
# Попытка авторизации с заблокированным аккаунтом
print(auth_system.login("correct_password")) # Аккаунт заблокирован
# Разблокировка аккаунта
print(auth_system.unlock()) # Аккаунт разблокирован
# Успешная авторизация
print(auth_system.login("correct_password")) # Успешная авторизация
# Выход из системы
print(auth_system.logout()) # Выход выполнен
AuthSystem— класс, моделирующий систему авторизации.__init__— инициализация начального состояния "Неавторизован" и счетчика неудачных попыток.login— метод для попытки авторизации. Проверяет состояние и корректность пароля, обновляет состояние и счетчик.logout— метод для выхода из системы, изменяет состояние на "Неавторизован".unlock— метод для разблокировки аккаунта, сбрасывает состояние и счетчик неудачных попыток.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться