Туристическая метафора
Представьте себе типичного туриста, который посещает какой-нибудь туристический город. Здесь есть что посмотреть. Здесь есть что поделать. Да начнется трудная «работа»! То же и с тест-инженерами, которые нацелены максимально полно исследовать свой город – программный продукт.
Встает множество вопросов. Какой транспорт взять? Как уложиться во времени? Как проложить сквозной маршрут? Как вести себя при отсутствии хорошего места для селфи? Нужно ли разбираться с этим самому или звать полицейского?
Стратегия и цели. Если они отсутствуют, лучше сидеть дома. Цели существенно определяют план туриста: время и места. И они будут совершенно разные, например, для моряков, которые полгода были в плавании, и студентов… Ну, может пример и не лучший.
Ведь как может получится. Без плана и стратегии можно встретить интересные места. Иногда интересные места сложно пропустить. Но что это за места, какое значение они имеют, какова их история. Это можно упустить. Проехав в метро без карты, можно совершенно не осознать, какое расстояние было преодолено: 5 остановок – это много или мало? Когнитивные психологи сказали бы: «Ваша когнитивная карта не адекватна», а нейрофизиологи пригласили бы Вас к изучению ЛЦК (это безопасный метод изучения
Для Виттакера – это типичное описание того, как происходит тестирование. Это freestyle. И, возможно, не будет другого шанса посетить эти чудные места. Это будет первый и последний раз. Именно поэтому нужно избегать бесцельности в исследовании и рисковать тем, что мы можем пропустить существенную функциональность или важный баг.
Но не списывайте со счетов freestyle тестирование. Оно приобретает весомые преимущества в связке со сценарным подходом, поскольку сценарии не всегда описывают все интересные «улочки и аллеи» (для моряков и студентов – это очень актуально).
В этом смысле туризм – сочетание кантовской свободы и татлинской (а для кого-то фуллеровской) структуры. То же говорим и о тестировании.
Существует множество туристический метафор, помогающих нам в исследовательском тестировании и дополняющие freestyle. А это позволяет нам сделать тестирование быстрее и последовательнее. Вот они:
Нет, еще не они. Важно понять, что функционал редко работает независимо от другого функционала. Они делятся ресурсами, обрабатывают общий ввод, и работают на тех же внутренних данных. Это значит, что тестирование функциональностей отдельно может исключить ошибки их взаимодействия.
К нашему общему счастью туристические метафоры не занимаются такой декомпозицией. Они декомпозируют, но по-другому. Реальный турист выберет смесь отметок, которые надо увидеть, и мест, которые надо посетить. Тест-инженер сделает то же самое: составит план посещения различных фич с намерением сделать какую-либо соответствующую (этому продукту) операцию. И, конечно, это может задействовать множество функциональных блоков.
Туристическая метафора в тестировании – это районы. Для ПО – это логическое разделение, это пути для приложения. Вот эти туры.
Туры
1. Бизнес-районы
Это места, где «делается бизнес». Они начинаются с запуска кода и до завершения его работы. В них расположены функции, ради которых пользователи и используют данное приложение. Это «задняя стенка коробки» (читай – приложения), которая является главной при демонстрации коммерческой ценности продукта, а также код, который это поддерживает.
2. Исторические районы
Это излюбленные туристами исторические места, места, окруженные историей. Сюда включены «legacy» код и функции и фичи, которые исторически содержали большое количество ошибок. «Legacy» код зачастую плохо понятен. Его использование и изменение подразумевает большое количество предположений. Именно на этом компоненте и сосредотачивается данный тур.
3. Туристические районы
Во многих городах есть места, которые интересны только туристам и пользователям-новичкам. Местные ребята избегают таких мест, поскольку им там тесно. То есть (прим. для ПО) пользователи, которые уже имеют опыт взаимодействия с приложением, подобные функции почти не используют.
4. Развлекательные районы
После изучения исторических и туристических мест, порой необходимо предоставить себе отдых, немного развлечься. В ПО также наличествует что-то похожее – дополнительный функционал. И нужно его проверить.
5. Районы отелей
В каждом туристическом городе должны быть места, где можно отдохнуть, восстановить силы, переждать непогоду. Но вот ПО в моменты отдыха пользователя совсем не отдыхает. И хорошо бы проверить что и как оно делает.
6. Захудалые районы
Это небезопасные район, которые, однако, для кое-кого представляют некоторый интерес. Там творятся плохие вещи, и, видимо, будет лучше не лезть туда. Всем, кроме тест-инженеров. Эти места должны быть протестированы, поскольку они могут содержать уязвимости продукта.
1. Бизнес-районы
С утра и до самого вечера здесь кипит работа. Именно здесь «делается бизнес». И если вы спрашиваете, почему пользователи используют ваше приложение, они расскажут именно об этой части.
Тур по путеводителю
Путеводители часто содержат много информации о местах, которые можно посмотреть. Они рассказывают о лучших отелях, торговых комплексах и привлекательных местах без подробных деталей. Эксперты, посетившие эти места, любезно скажут туристам, как именно нужно наслаждаться этими местами. Здесь должно быть красиво, чисто, безопасно, чтобы туристы могли спокойно тратить свои деньги. Это очень важные места, и они должны быть включены в тестовую стратегию исследовательского тестирования. Мы должны заботиться о том, чтобы пользователи получали пользу и удовольствие от работы здесь.
Вариантом такого тура является F1 тур. А именно строгое следование руководству пользователя, предоставленное (если предоставлено) производителем, в котором даны описания ключевых функций. Цель в том, чтобы пройти все сценарии, которые описаны в руководстве пользователя, так полно, как это возможно. Зачастую здесь можно найти различные советы по входным данным и навигации по интерфейсу в процессе использования функций. Помимо самой функциональности этот тур позволяет проверить и то, насколько точно и аккуратно составлено руководство пользователя.
Разновидностями тура также являются тур блоггера, который содержит советы третьей стороны, а также тур эксперта, который рассматривает отзывы неудовлетворенных пользователей. Этому могут помочь различные форумы, новости, сообщества или даже книги (в случае, если приложение большое). Еще один полезный тур – тур конкурента, который позволяет рассмотреть приложение со стороны конкурирующей системы.
Вышеуказанные варианты тура по путеводителю позволяют оценить приложение в разрезе его разрекламированных функций. Это незамысловатые тесты, и любое отклонение от руководства должны воспринимать как ошибка. Указанный тур позволяет нам использовать функции именно в такой последовательности и взаимосвязи, в какой это будут делать сами пользователи.
Денежный тур
Каждое приложение имеет функциональность, которая, в глазах пользователя (заказчика), принесет им деньги. «Это самое привлекательно для меня» — скажет в этом случае пользователь. «Денежная» функциональность несет с собой «денежную силу». Сюда входят различные нюансы использования продукта, поскольку именно они позволяют зарабатывать деньги. Специалисты по продажам могут направлять демонстрацию продукта в сторону указанных сценариев, затрагивая то, что не было четко зафиксировано в документации к продукту. Такое «продажное видение» – отличная основа для денежного тура.
В указанном туре важно услышать то, как специалисты по продажам преподносят продукт, и пройтись именно по тому, на чем ставится акцент. Во время подобного тестирования вы не только находите ошибки, но и сохраняете видение «денежной жилы» приложения.
Разновидность денежного тура – тур скептически настроенного заказчика. Проходясь по туру, вы внезапно останавливаетесь и спрашиваете: «А что, если я сделаю вот так?» или «А как мне сделать это?». «А что, если я сейчас дополню проход такими сценариями, которые выходят за рамки изначально задуманных? Возьму да включу сюда еще парочку фич!».
Еще раз: наблюдение за демонстрациями продукта в разрезе «денежной ценности», а также хорошие отношения со специалистами по продажам дают отличную возможность проводить денежные туры значительно эффективнее.
Тур по отметкам
Мы выбираем какие-либо ориентиры и осуществляем скачок к одному из них через все приложение. Например, мы выбираем ключевую функцию в качестве отметки, которую мы определили в туре по путеводителю или в денежном туре. Далее мы составляем набор из таких отметок, определяем их порядок и исследуем приложение от отметки к отметке, пока не достигнем каждой из них. Далее можно создать карту покрытия отметками. Разный порядок, разные отметки – вот поле для вариативности подобного тура.
Интеллектуальный тур
Задавайте приложению сложные, интеллектуальные вопросы. Как можно заставить работать приложение так тяжело, как это возможно? Какие фичи приблизят его к собственному лимиту? Какой ввод и входные данные заставят его напрягаться? Какие данные могут обмануть процедуры проверки ошибок? Очевидно, это напрямую зависит от особенностей конкретного приложения.
Вариант – тур наглого американца, который использует стереотипы об иностранцах. Задавай глупые вопросы, старайся насолить, привлекай к себе внимание. Придумывайте препятствия и посмотрите, как с ними справится приложение. Имеет ли это смысл? Возможно и нет. Но ведь мы можем так сделать.
Интеллектуальный тур и его варианты могут помочь найти как действительно сложные и приоритетные ошибки, так и глупые ошибки. Нужно уметь различать их. Для этого необходимо создавать реальные случаи, чтобы в будущем было легче аргументировать то, что это важно и это нужно исправлять.
Тур FedEx
Думайте о данных, которые должны проходить через приложение. Данные начинают свой путь с ввода, далее хранятся во внутренних хранилищах и переменных, где часто происходит их обработка и изменение, а далее они могут подвергаться вычислениям. В конце большинство из таких данных предоставляются пользователю или куда-либо еще.
Нужно концентрироваться на данных. Нужно определить сохраненные данные и «проследить» их путь через приложение. Вот ввели вы, к примеру, адрес своей почты. А где он отображается? В каких местах? Попробуйте найти все области, с которыми соприкасаются данные. Определите весь их жизненный цикл.
Тур «после работы»
После денежной активности приложения, оно все еще продолжает работу. Это поддержка задач, архивация данных и файлов. Это может быть автоматическим процессом, но его также можно выполнять принудительно. Данный тур напоминает нам делать это.
Вариация тура – утреннее включение. Задача – тестирование начальных процедур и скриптов.
Тур уборщика
Уборщики – это такие ребята, которые знают округу даже лучше, чем здесь живущие или здешние полисмены. День за днем, улица за улицей.
Мы можем наметить места для методичной проверки интерфейса: экран за экраном, диалог за диалогом (преимущественно, по короткому пути) без детального тестирования. Только очевидные места.
Указанный тур включает выбор цели (все меню, ошибки, диалоговые окна, к примеру) и посещение каждой из них наиболее коротким путем.
2. Исторические районы
Такие районы представляют legacy код, функции, представленные в старых версиях и исправленные ошибки, которые все также нужно проверять.
Тур «плохие соседи»
Плохие соседи – те секции, в которых обнаруживается большое количество ошибок. Как можно определить эти секции? Заранее никак. А вот на опыте это делается на основе уже обнаруженных багов и их количества. Появляется возможность сделать некое предположение о местах их появления. Поскольку ошибки могут скапливаться локально, этот тур стоит того, чтобы его проходить. После работы с подобными ошибками рекомендуется пройти тур уборщика через близлежащие функции, чтобы убедиться, что исправления не задели их.
Музейный тур
Музейные древности здесь — legacy код. Его можно определить по датам, указанной в репозитории. Такой код, использованный в новом окружении, склонен к плохенькой работе. Исследовать этот код сложно: программист может быть уже не в компании, а документация может быть скудной. Тестировщик должен выявить такой код и обратить внимание на его работу.
Тур прежней версии
После апдейта предыдущей версии желательно провести тесты, которые были написаны для то, прежней версии. Это позволит убедиться в том, что функциональность, которую пользователи использовали ранее, все еще может быть использована полезно в новой версии продукта. В случае, если в новой версии произошло удаление или обновление функциональности, тестирование должно происходить соответствующим этим обновлениям образом.
3. Туристические районы
Этот тур концентрируется на нескольких моментах:
— короткие, быстрые тест-кейсы;
— более длинные сценарии-чеклисты;
— разговор не о том, чтобы заставить приложение работать, а том, чтобы быстро проверить функциональность… и сказать, «А я там был!».
Тур коллекционера
Коллекционируйте выходные данные, и чем больше, тем лучше. Идея в том, чтобы пройти туда, куда вы только можете и задокументировать все то, что вы увидите. Убедитесь, что вы увидите все выходные данные, которые может сгенерировать приложение. Для текстового редактора: печать, проверка орфографии, форматирование, различные структуры, таблицы, графика. Для магазина: возможность покупки из любого допустимого отдела, удачные и неудачные транзакции по картам. Нужно преследовать все возможные выходные данные, пока вы не сможете утвердить, что вы были везде, видели все и завершили свою коллекцию.
Это долгий тур и лучше бы его проходить групповой активностью.
Тур одинокого бизнесмена
Идея тура в том, чтобы проверить самые дальние уголки приложения, какие только возможно. Какая фича требует наибольшего количества кликов? Выберите такую, «прокликайте» к ней путь и протестируйте. Какая фича требует наибольшего количества экранов, чтобы ей можно было воспользоваться? Выберите и протестируйте. Смысл в том, чтобы пропутешествовать как можно дольше до конечного пункта.
Тур супермодели
Для этого тура мыслите поверхностно, не заходите дальше того, что снаружи. Примите уроки, которым нас учит современность. Этот тур не о функциях или чем-то существенном, а о том, как приложение выглядит и какое первое впечатление производит.
Сосредоточьтесь на интерфейсе. Он хорош? Хорошо выполнен? Если я делаю изменения, отображается ли это на нем? Происходит ли это корректно и не остаются ли какие-либо артефакты на экране? Все ли на своем месте? Нарушает ли он какие-либо требования удобства или стандарты?
Возможно, к этому не стоит и прикасаться, но какой же чертовски хороший вид.
Тур «тестируй одно, другое – бесплатно»
Этот тур для того, чтобы протестировать множественный запуск приложения одновременно. Запустите свое приложение, а потом еще раз, и еще. А теперь используйте фичи, которые относятся к памяти или дисковому пространству. Заставьте все копии приложения сделать что-то с тем же файлом или передачей каких-либо данных.
Тур шотландского паба
Это особенно актуально для крупных приложений. В них есть такие места, которые достаточно сложно найти без чьей-либо помощи. Их не сложно использовать, их просто сложно отыскать. Таких мест может быть действительно много. Проблема в том, чтобы узнать о них. Как? Общаться с пользователями, просматривать какие-либо блоги и просто погружаться в приложение.
4. Развлекательные районы
Это возможность немного развлечься с приложением: сделать его более привлекательным, поиграть с шаблонами, цветами. Это дает некоторый перерыв в усердной работе. Важна связь между магистральной и поддерживающей стороной приложения: она должна быть полезной и осмысленной.
Тур актера из команды поддержки
Всякий раз, когда специалисты по продажам демонстрируют продукт, пользователь склонен к искушению фичами, которые лежат рядом с теми, которые освещаются. Тур актера из команды поддержки сосредотачивается на тех фичах, которые разделяют экран с основными. Их близость к основным увеличивает их видимость, и мы должны уделять им соответствующее внимание. Покрути головой – вправо и влево – и посмотри, уделили ли должное внимание актерам, которые поддерживают основных.
Тур по задней аллее
Тур «за сценой». Все то, что удостаивается наименьшего внимания, то, что используется наименее часто, что используется наиболее редко. Самое донышко, самые дальние полки, то, что находится за фасадом.
Интересная вариация – тур смешанного назначения. Смешайте самые популярные и наименее популярные фичи, посетите их. Это как тур по отметкам со смешением самых больших и самых маленьких отметок. Может получится так, что фичи будут взаимодействовать таким образом, какой не предполагался разработчиками.
Как определить, что фичи могут взаимодействовать друг с другом? Витакер предлагает три вопроса:
— Вопрос входа. Есть ли входные данные, которые обрабатываются двумя фичами в одном потоке?
— Вопрос выхода. Оперируют ли функции одними и теми же частями графического интерфейса? Генерируют ли или обновляют ли они одни и те же выходные данные?
— Оперируют ли функции одними и теми же внутренними данными? Используют ли или модифицируют ли они одни и те же внутренние данные?
Тур «All night long»
Клубный тур – никогда не останавливайся, еще один клуб, еще один коктейль. Сможешь ли ты выжить всю ночь?
Ты можешь, а приложение? Как долго оно может работать и обрабатывать данные перед тем, как завалится? Накопление данных в памяти, запись (перезапись), многократное чтение переменных – это может привести к сбоям приложения: утечки памяти, нарушение данных, условия гонки и другое. Главное условие – никогда не закрывайте приложение. Открывайте файлы и не закрывайте их. Не сохраняйте файлы. Подсоединитесь к удаленным ресурсам и не отсоединитесь. И в то время, как действуют вышеописанные условия, можно пройти другие туры для работы приложения и обработки данных в нем. При перезагрузке приложения происходит очистка некоторых его участков – не допускайте этого.
Не редко подобный тур проходят автоматически, зацикливая сценарий. Долгая работа особа важна для мобильных устройств – это их обычные условия использования.
5. Район отелей
Это место, которое находится далеко от шума и суеты, место для легкого отдыха и расслабления. Это место, где можно отойти от основных функций приложения, популярных фич, и протестировать второстепенные, поддерживающие функции, которые могут быть не отражены в тест планах.
Тур под дождем
Идея в том, чтобы начать операцию и затем резко ее остановить, словно в этот момент пошел дождь и вам не хочется ходить куда-либо в это время. Начните вводить информацию о покупке с тем, чтобы сразу закончить эту процедуру и выйти; начните печать и отмените ее до того, как она распечатается. Если функционал имеет кнопку отмены или же если он выполняется дольше, чем несколько секунд – используйте этот тур.
Ищите трудоемкие операции – здесь есть место для игры. Поисковые механизмы – отличный пример: задайте слова, которые нагружают поиск, делают его длительным. Есть кнопка «Назад» — жмите. Нет – жмите ESC или даже кнопку «Назад» в браузере. Начните операцию, а затем еще раз без остановки первой.
Причины возможных ошибок в том, что приложение не может очищать хранилища после себя. Что-то может остаться открытым – файлы, данные, переменные. Может наступить состояние, которое противоречит обычному течению работы приложения. Так что после различных отмен, пройдитесь по нему и посмотрите, все ли в порядке. Убедитесь, что все отмененные процедуры все также можно запустить корректно.
Тур лежебоки
Всегда есть некто, кто скрещивает руки на груди. Он скучает и не проявляет никакой активности. Однако часто происходит так, что гид старается больше обычного, чтобы заинтересовать такую персону.
Так и для приложений: если человек не проявляет высокой активности, не значит, что приложение работает также неактивно. Наоборот, зачастую, это нагружает приложение, поскольку используется команда else в конструкции if-then-else. Приложению приходится выяснять, что делать, если пользователь оставляет поля пустыми. В моменты, когда пользователь не берет на себя инициативу, выполняется «логика по умолчанию».
Идея тура в том, чтобы делать настолько мало усилий, насколько это возможно. Оставляйте поля пустыми, принимайте значения по умолчанию, заполняйте формы наименьших количеством данных, не нажимайте ни на что дополнительное, пропускайте формы без нажатий или подайте туда все, что угодно. Если есть возможность выбора, выбирайте путь наименьшего сопротивления.
Опять же, ленивое взаимодействие пользователя не значит, что приложение работает лениво: оно должно подставлять значения по умолчанию, обрабатывать пустые формы и т.д.
6. Захудалые районы
Входные данные должны ломать приложение.
Тур диверсанта
Пытайтесь поломать приложение любыми возможными путями. Попросите приложение прочитать какие-либо данные с диска, и далее саботируйте эту попытку, навредив операции и файлу. Попросите сделать какую-либо операцию, которая интенсивно использует память, когда приложение установлено на машине с малым количеством памяти, или, когда одновременно запущено другое приложение, потребляющее большое количество ресурсов.
Концепция такая:
— принудите приложение совершить действие
— определите, какие ресурсы требуются для такого действия
— удалите или ограничьте эти ресурсы.
Вы поймете, что существует много способов ослабить приложение, добавляя и удаляя файлы, изменив права доступа, отключив сетевой кабель, запустив другие приложения на заднем фоне, развернув приложение на машине с известными проблемами и т.д. Также полезна концепция ошибочной инъекции (fault injection) (здесь у Виттакера отсылка к другой его книге — How to Break Software).
Антиобщественный тур
В данном районе происходят попытки разрушить приложение. Быть милым, вежливым и следовать толпе – не лучший способ сделать это.
Этот тур включает требование ввода наименее привлекательных данных и/или так негативного ввода. Если типичный пользователь делает «А», этот тур подразумевает, что тест-инженер никогда не будет делать «А», нужно найти что-то более бессмысленное.
Можно выделить три пути, чтобы реализовать такое антиобщественное поведение:
— Тур оппозиционера. Вводите самые невероятные данные, которые находятся вне контекста, глупые или совершенно бессмысленные. Здесь проверяется способность обработки ошибок. Если это поможет, можно проверить «терпение приложения».
— Тур преступления. Идея в том, чтобы предоставить такие данные, которые вообще не должны появляться… ну вообще не должны. Вы не ожидаете, что турист украдет пинту пива в пабе? Это не просто антисоциальные действия, это преступления.
Нарушая закон, турист попадет в неприятности. Нарушая закон, тест-инженер может встретить сообщения об ошибке. Данные в этом туре вызывают сообщения об ошибках, а если их нет – вы нашли баг. Вводите неправильные данные, неправильного формата, слишком длинные, слишком короткие и т.д. Думайте «Какие ограничения связаны с таким вводом?», и далее ломайте ограничения. «Хочешь положительных значений? Так на тебе отрицательных». И обращайте внимание на ошибки, они могут понадобится для других туров.
— Тур «Поворот не туда». Идея в том, чтобы делать что-то в неправильном порядке. Возьмите набор корректных действий и совершите их в некорректном порядке. Попробуйте оформить заказ до того, как положить что-либо в корзину. Попробуйте вернуть заказ до того, как вы его купили. Измените настройки доставки до того, как закончена покупка.
Тур навязчивости и даже одержимости
В этом туре нужно вводить одни и те же данные снова и снова, выполнять одно и то же действие опять и опять. Копируйте, вставляйте, вырезайте, заменяйте, а потом сделайте это еще раз. Название этому, обычно, — репетиция. Выберите товар, а потом снова этот же товар, чтобы проверить появляются ли скидки.
Разработчики часто думают, что пользователи будут использовать приложение в нужном порядке, целенаправленно. Но пользователи ошибаются и возвращаются назад, они не всегда понимаю «правильный» путь и прокладывают свой собственный.
Использование туров
Туры привносят структуру в тестирование. Они помогают тест-инженерам обнаружить более актуальные и интересные сценарии, нежели при freestyle тестировании. Предоставляя тест-инженерам цели, туры подталкивают их на определенный путь, которые являются более сложными нежели классическое тестирование, основанное на декомпозиции функциональностей.
Туры – инструмент для изучения фич в их комбинации. К тому же туры – это то, что является фиксируемым, их можно повторять. «Тебе — такой тур, а тебе – такой» — это уже исключает многие проблемы пересечения тест-инженеров.
Какие-то туры будут более удачные, какие-то менее. Опытным путем это можно определить. А далее их можно ранжировать различными способами (по найденным ошибкам, по времени выполнения, по покрытию кода/фич/интерфейса). Турами можно управлять, и это важно. На них можно учиться. Их можно распределять в команде. Можно определять их эффективность. Они помогают придать структуру тестированию и знаниям.
Автор: RockMachine