← Назад ко всем вопросам

Как тестировать состояние переходов, используя технику тест-дизайна

1️⃣ Как кратко ответить

Тестирование состояния переходов с использованием техники тест-дизайна заключается в моделировании системы как конечного автомата, где состояния представляют различные этапы работы системы, а переходы — возможные изменения состояния. Тесты разрабатываются для проверки корректности переходов между состояниями, включая все возможные пути и условия, которые могут вызвать эти переходы.

2️⃣ Подробное объяснение темы

Техника тестирования состояния переходов используется для проверки систем, которые можно представить в виде конечного автомата. Конечный автомат — это математическая модель, состоящая из конечного числа состояний, переходов между этими состояниями и событий, которые вызывают эти переходы.

Зачем это нужно

Тестирование состояния переходов позволяет выявить ошибки в логике работы системы, особенно в сложных системах с множеством состояний и переходов. Это важно для обеспечения надежности и корректности работы системы, особенно в критически важных приложениях, таких как банковские системы, системы управления транспортом и т.д.

Где применяется

Эта техника применяется в системах, где поведение зависит от последовательности событий, например, в автоматах по продаже билетов, системах авторизации пользователей, игровых приложениях и других системах с четко определенными состояниями и переходами.

Как работает

  1. Определение состояний: Определите все возможные состояния системы. Например, для системы авторизации это могут быть состояния "Неавторизован", "Авторизован", "Блокирован".

  2. Определение переходов: Определите все возможные переходы между состояниями. Например, из состояния "Неавторизован" в "Авторизован" можно перейти при успешном вводе логина и пароля.

  3. Определение событий и условий: Определите события и условия, которые вызывают переходы. Например, ввод неверного пароля может привести к переходу в состояние "Блокирован".

  4. Создание диаграммы состояний: Постройте диаграмму состояний, которая визуально представляет все состояния и переходы между ними.

  5. Разработка тестов: Разработайте тесты, которые проверяют все возможные переходы и состояния. Убедитесь, что тесты покрывают все возможные пути, включая нормальные и исключительные сценарии.

Пример

Рассмотрим простой пример системы авторизации:

  • Состояния:

    • 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 — метод для разблокировки аккаунта, сбрасывает состояние и счетчик неудачных попыток.

Тема: Техники тест-дизайна и анализ
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки