Как и любой подход, MBT имеет преимущества и недостатки. Рассмотрим их по порядку.
Плюсы:
-
Использование тестовых моделей развивает аналитическое мышление за счет постоянного анализа (!) тестируемой системы. Лучший способ развить этот тип мышления - применять его для решения задач, например, для создания абстрактной схемы продукта или его компонента.
-
Моделирование улучшает понимание системы как у того, кто модель создает, так и у команды, которая ревьюит и использует ее. Приятный бонус: спустя некоторое время благодаря модели можно научиться предугадывать поведение системы в тех или иных обстоятельствах.
-
Тестовую модель поддерживать легче, чем много тест-кейсов (за счет абстрактности и того, что кейсов много, а модель одна).
-
MBT позволяет взглянуть на систему (или ее часть) в целом и увидеть неочевидные зависимости.
-
Создание и поддержание тестовой модели способствует синхронизации понимания работы системы внутри команды. Это очень полезно для избегания неоднозначных ситуаций и решения спорных вопросов "на берегу" до начала разработки.
-
Благодаря математической подоплеке наличие модели позволяет автоматизировать нахождение оптимального пути, пути с задействованием всех состояний и т.д. Кроме того, тестовую модель можно использовать как основу для проектирования автотестов.
-
Несомненно, модель делает процесс адаптации новичка в проект более эффективным. "Лучше один раз увидеть, чем сто раз услышать" тут как раз работает. Кроме того, у нового члена команды могут возникнуть вопросы, которые не пришли в голову команде, или другие участники процесса разработки могут вспомнить что-то важное, презентуя модель новичку.
-
Тестирование на основе моделей прекрасно подходит для долгосрочных проектов, где большое число тест-кейсов затруднит понимание принципов работы системы, а простая и наглядная схема, наоборот, упростит его.
Минусы:
-
Если в модели есть ошибка, это может привести к фундаментальному недопониманию внутри команды. Именно поэтому важен следующий пункт.
-
Желательно, чтобы в моделировании (или ревью модели) участвовала вся команда. Во-первых, это позволяет исключить недопонимания, во-вторых, активирует силу коллективного разума.
-
Как и в случае с тестовой документацией, надо не лениться, поддерживать и регулярно обновлять модель. Если на это нет времени и/или недостаточно знаний, стоит поставить под сомнение целесообразность использования тестовых моделей в проекте.
-
Иногда создание модели занимает больше времени, чем написание простого чек-листа. Особенно это актуально для больших и многокомпонентных систем: если модель начинают создавать после того, как внутри системы уже существует куча не до конца понятных зависимостей, это может стать довольно долгим (но, скорее всего, того стоящим) процессом.
-
Использование тестовых моделей требует определенных навыков абстрактного мышления вкупе с внимательностью к мелочам. Скорее всего, если вы успешно работаете в тестировании, у вас есть все эти навыки, но нужно быть осторожными и никогда не отключать критическое мышление даже по отношению к собственным трудам.
Мы поняли, что такое тестовые модели, откуда они взялись и что в них хорошего. Мы даже готовы к потенциальным челленджам тестирования на основе моделей. Осталось лишь сделать первый шаг. Ниже представлю один из допустимых вариантов, как это сделать.
-
Определить наиболее удобный для восприятия (собой, командой или бизнес-оунерами) вид схемы (таблица, диаграмма, граф... ). Важно, чтобы те, для кого делается модель, легко "читали" ее - это наша основная задача;
-
Декомпозировать систему, которую собираемся описать, на модули (руководствуясь приоритетами, функциональностью, логикой или другими критериями). Скорее всего, ваша система многокомпонентна. Не стоит пытаться описать все и сразу: начните с малого.
-
Определить для отдельно взятого модуля возможные состояния системы, действия пользователя, переходы между состояниями, а также начальные и конечные точки взаимодействия (т.н. точку входа и точку выхода).
-
Схематично нарисовать "золотой путь", то есть идеальный вариант взаимодействия пользователя и системы.
-
Расширить этот путь для модуля так, чтобы помимо идеальных случаев модель включала и иные варианты: подумайте, что может пойти не так на каждом шаге.
-
Не забудьте о влиянии каждого состояния и перехода на другие части системы. Это особенно актуально, если вы создаете не первую модель для тестируемого продукта.
-
Решить, будете ли вы объединять модули в одну схему или хранить их по отдельности.
-
Поделиться полученной моделью с командой. Можно презентовать, отдать на ревью или пригласить коллег на ограниченную по времени сессию мозгового штурма, чтобы дополнить то, что вы могли забыть или упустить.
-
Поддерживать! Не забывать актуализировать и обновлять модель - особенно когда добавляете новые компоненты, связи или даже новые модели.
Давайте немного отойдем от теории и рассмотрим на практике пример из книги Ли Коупленда "A Practitioner's Guide to Software Test Design", а именно диаграмму переходов состояний как иллюстрацию рабочей тестовой модели.
Тестировать будем покупку билета - например, на концерт.
Для начала, мы инициируем транзакцию: после того, как выбрали билет, мы ввели информацию о себе и перешли на страницу оплаты, в то время как система автоматически инициировала таймер оплаты. Так как нас интересует процесс оплаты и использования билета, можно сделать именно этот шаг входной точкой тестовой модели.
Что мы будем делать после этого? В идеальном случае оплатим билет, а затем распечатаем и предъявим его на входе. Отразим эти действия в нашей модели.
После распечатывания и предъявления на входе у билета есть точка невозврата - мы использовали его на прошедшем мероприятии. Дальше билет недействителен и не может быть как-то использован, - значит, примерно здесь наш "золотой путь" и заканчивается: обозначим конец на нашей диаграмме.
Как тестировщики, мы прекрасно понимаем, что все не так просто и на каждом этапе что-то может пойти не по плану. Что будет, если пользователь отменил оплату? А если просто забыл про нее, и таймер оплаты истек, тем самым завершив сессию? Это будут 2 разных типа отмены.
Добавим указанные ситуации в модель.
Еще мы помним, что покупатель может захотеть вернуть билет в момент после оплаты или после распечатывания билета, но до того, как начался концерт. Эти ситуации подходят под уже существующее состояние "Отмена по инициативе клиента" - осталось лишь добавить соответствующие переходы.
Та-даааа! Наша небольшая, но гордая работоспособная модель готова. Двигаясь по вершинам-состояниям путем ребер-переходов, мы составляем сценарии, которые будем проверять при тестировании:
Мы получили 5 рабочих кейсов и бонусом наглядное представление процесса.
Тестирование на основе моделей - большая и интересная область, которая позволяет применять аналитические навыки для изучения системы как на уровне пользователя, так и на более глубоких слоях - например, для визуализации связей между микросервисами или таблицами в базе данных. Прелесть ее в том, что она позволяет распространять знания о системе внутри команды, достигать лучшего понимания разрабатываемого продукта, а еще порог вхождения для использования MBT достаточно невысок.
Как и любой другой подход (approach) к тестированию, она должна применяться с умом: лучше всего прикинуть время, которое сэкономит использование модели, и соотнести его со временем, необходимым для ее составления и поддержания. Модель обязательно нужно актуализировать и обновлять, иначе ее использование теряет смысл.
Конечно же, статья несет лишь обзорное представление о том, что такое тестовые модели и зачем они нужны. Если тема заинтересовала вас и вы чувствуете, что хотите узнать больше и, возможно, даже применить знания на практике, рекомендуется обратить внимание на источники ниже.
-
Lee Copeland "A Practitioner's Guide to Software Test Design",
Глава 7: State-Transition Testing - глава, описывающая одну из наиболее "дружащих" с тестовыми моделями технику тест-дизайна
-
Rikard Edgren "The Little Black Book On Test Design", Using Many Models
-
"Model-based testing essentials", Anne Kramer, Bruno Legeard, 2016
-
"Essential Software Test Design" by Torbjrn Ryber, Chapter 9 "Models"