Что такое тестирование на основе таблицы состояний и переходов (STLS)?

Ответ

Тестирование на основе таблицы состояний и переходов (State Transition Testing) — это техника тестирования черного ящика, которая проверяет поведение системы при различных событиях и ее переходы между допустимыми состояниями.

Ключевые концепции:

  • Состояние (State): Условие или режим работы системы в определенный момент (например, Дверь: "Закрыта", Пользователь: "Заблокирован").
  • Переход (Transition): Изменение состояния в результате какого-либо события или входных данных.
  • Событие (Trigger): Действие, которое инициирует переход (например, нажать_кнопку, ввести_пароль).

Пример для системы входа:

Состояния: Вход не выполнен, Вход выполнен, Заблокирован. События: Ввести верный пароль, Ввести неверный пароль, Выйти.

Таблица переходов (State Transition Table): Текущее состояние Событие Новое состояние
Вход не выполнен Ввести верный пароль Вход выполнен
Вход не выполнен Ввести неверный пароль (1-й раз) Вход не выполнен
Вход не выполнен Ввести неверный пароль (3-й раз подряд) Заблокирован
Вход выполнен Выйти Вход не выполнен
Заблокирован (любое событие) Заблокирован (остается)

Как тестировать?

  1. Определите все возможные состояния системы.
  2. Определите события, которые вызывают переходы.
  3. Постройте диаграмму или таблицу переходов.
  4. Спроектируйте тест-кейсы для проверки:
    • Всех валидных переходов.
    • Невалидных переходов (например, попытка выйти, не войдя в систему).
    • Граничных условий (например, 3 неверные попытки пароля).

Применение: Эта техника особенно эффективна для тестирования протоколов, бизнес-процессов, автоматов и любого ПО с четко выраженными состояниями.

Ответ 18+ 🔞

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

Смотри, представь себе дверь в сортире. У неё всего два состояния: «Закрыта» и «Открыта». Событие одно — «Дёрнуть за ручку». Логика проще пареной репы: если закрыта и дёрнул — открылась. Если открыта и дёрнул — закрылась. Вот тебе и вся ёбаная диаграмма состояний, в рот меня чих-пых!

А теперь возьмём что посерьёзнее — систему входа. Тут уже повеселее.

Состояния у нас как в плохом сериале:

  1. «Не залогинен» — сидишь, пылишься у входа.
  2. «Залогинен» — ура, ты внутри, как сыр в масле.
  3. «Заблокирован» — всё, пиздец, конец игры. Сиди и думай о жизни.

События — это наши действия:

  • Ввести_верный_пароль
  • Ввести_неверный_пароль
  • Выйти

Теперь, внимание, ебушки-воробушки, смотри на эту магическую таблицу:

Где сейчас торчим? Что делаем? Куда вылетаем?
Не залогинен Ввести верный пароль Залогинен (ура!)
Не залогинен Ввести неверный пароль (1-й раз) → Остаёмся Не залогинен (ну бывает)
Не залогинен Ввести неверный пароль (3-й раз подряд) Заблокирован (всё, астанавитесь!)
Залогинен Выйти Не залогинен (до свидания)
Заблокирован Любое событие (хоть пароль, хоть пляску с бубном) → Остаёмся Заблокирован (ни хуя не выйдет)

И как же этим ебалу тестировать?

  1. Найди все состояния. Как в том анекдоте: «А ты кто такой? Я — состояние «Заблокирован», а это — состояние «Не залогинен». Не путай, пидарас шерстяной».
  2. Выяви все события. Что пользователь может тыкнуть, ввести или нажать.
  3. Нарисуй эту самую таблицу или диаграмму. Без неё ты как без карты в лесу — заблудишься и сожрут медведи.
  4. Генерируй тест-кейсы, чтобы проверить:
    • Все правильные переходы. Из А в Б, из Б в В. Работает? Отлично.
    • Все неправильные переходы. А что если из состояния «Заблокирован» попробовать выйти? Ничего не должно происходить, система должна послать тебя нахуй. Это тоже надо проверить!
    • Граничные условия. Вот эти самые «3 неверные попытки» — это и есть граница. Проверь, что на 2-й раз ещё живой, а на 3-й — уже труп (состояние «Заблокирован»).

Где это пригождается? Да везде, где есть хоть какая-то логика! Протоколы, бизнес-процессы («Заявка создана» → «На согласовании» → «Одобрена»), да даже тот же плеер: ОстановленоPlayИграет. Если в системе есть чёткие «режимы работы» — это твой клиент, чувак.

Короче, метод — хуйня простая, но мощная. Вместо того чтобы тыкать в интерфейс как слепой кот, ты системно проходишь по всем сценариям, которые только могут влезть в эту систему. И иногда находишь такие косяки, что сам от себя охуеваешь.