Что пишут в блогах

Подписаться

Онлайн-тренинги

Конференции

Что пишут в блогах (EN)

Разделы портала

Про инструменты

Лучшие вакансии

.
Эвристики тестирования: будьте внимательны!
28.04.2020 00:00

Автор: Ричард Брэдшоу (Richard Bradshaw) и Сара Дири (Sarah Deery)
Оригинал статьи
Перевод: Ольга Алифанова

Для любых тест-методов и техник верно то, что глубокое понимание того, что это такое, когда их применять, и каковы их сильные и слабые стороны – это важнейший залог их эффективного использования. Эвристики – не исключение. Вы не можете применять чек-лист эвристических техник в любых контекстах и ожидать одинаковых результатов или решения своих проблем. Их нужно применять со знанием дела, мудро и осторожно.

Как тестировщик, вы, скорее всего, знакомы с использованием эвристик для структурированного создания тестов, генерации новых тест-идей и исследования границ системы, но слышали ли вы об эвристическом праксисе? Праксис – это то, что происходит, когда тест-теория применяется к тест-практике. Это расхождение между теорией и практикой. Теория без практики – сотрясание воздуха. Практика без теории пустой звук. Лучшие тестировщики – это те, кто знает об этом и работает внутри праксис-разрыва.

Теория эвристик

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

Изучение эвристик

Как гласит основополагающая работа по принятию решений Тверски и Канемана, эвристики в психологии – это

"Принципы, которые сводят сложные задачи оценки вероятностей и предсказания значений к более простым оценочным операциям"(1)

Проще говоря, эвристики – это когнитивные короткие дороги. Мы используем их в условиях неопределенности, зачастую автоматически и бессознательно пользуясь мышлением "Системы 1" для быстрого решения проблем и принятия решений. Если вы задумаетесь, какое огромное количество решений люди принимают ежедневно, то имеет прямой смысл использовать короткие дороги, чтобы быстро оценить все доступные варианты.

Пример эвристики, которая может быть вам знакома, и которую мы часто бессознательно используем – это эвристика доступности:

"Если пример решения легко приходит в голову – значит, он значим или как минимум более значим, чем альтернативные решения, которые приходят в голову не сразу".

Эта эвристика полезна для демонстрации двух других ключевых характеристик эвристик:

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

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

Эволюция эвристик

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

В наше время эвристики не менее важны. Люди используют и создают их ежедневно, когда принимают быстрые решения или ищут решения, не прибегая ко всей доступной информации или вычислительным возможностям. Можно привести такие, возможно, знакомые вам примеры ежедневно используемых эвристических техник – "проверенное правило", обоснованное предположение, следование интуиции. Без этих эвристик мы не смогли бы эффективно существовать – ежедневно необходимые решения потребовали бы всеобъемлющего анализа затрат и выгод.

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

Еще больше ободряет факт, что люди могут сознательно думать об эвристиках и переводить их из системы 1 (интуиции) в систему 2 (мышление). Если мы понимаем распространенные эвристики и потенциальные вызываемые ими искажения, а также имеем опыт применения этих эвристик в различных контекстах – мы можем сознательно и мудро выбрать наиболее подходящую, чтобы решить актуальную проблему.

Тестирование при помощи эвристик

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

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

Широко известные эвристики тестирования

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

Вот три хорошо известных тестировщикам эвристики:

1. Маша и медведи – Элизабет Хендриксон

Все мы знаем историю Маши и медведей, и эта эвристика концентрируется на концепции "слишком много, слишком мало, и в самый раз".

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

Элизабет рассказывает об этой эвристике и много другом в своей чудесной книге Explore It!

2. RCRCRC – Карен Н. Джонсон

Мнемоника RCRCRC поможет вам запомнить ключевые слова для тест-эвристики, поддерживающей регрессионное тестирование. Буквы расшифровываются как Recent (недавнее), Core (ключевое), Risky (рискованное), Configuration (конфигурационное), Repaired (исправленное) and Chronic (хроническое). Каждое из пяти ключевых слов было подставлено, чтобы побудить вас подумать о полезных тест-идеях в вашем контексте. К примеру, первое слово, "Недавнее", может подсказать вам мысли о свежедобавленном коде или фичах и тестировании, которое нужно провести в связи с этими изменениями.

Чтобы узнать больше об этой мнемонике и применении этой эвристики в регрессионном тестировании, посмотрите слайды Карен из ее презентации Software Testing Heuristics & Mnemonics.

3. FEW HICCUPPS – Джеймс Бах, Майкл Болтон.

FEW HICCUPPS – это мнемоника, которая может помочь вам запомнить ключевые слова для оракулов, помогающих идентифицировать проблемы в вашем продукте. Эти оракулы особенно полезны, если спецификация отсутствует или содержит неадекватную информацию. Важно отметить, что все оракулы – это эвристики; это просто особенный тип эвристики, помогающий распознавать проблемы в продукте.

Буквы в мнемонике означают Familiar (известность), Explainability (объяснимость), World (мир), History (история), Image (имидж), Comparable product (конкуренты), Claims (заявления), User Expectations (ожидания пользователя), Product (продукт), Purpose (цель), Standards (стандарты), и Statutes (законы и нормы).

Эти оракулы фокусируются на критерии соответствия – к примеру, должен ли ваш продукт соответствовать собственной истории:

"Мы ожидаем, что нынешняя версия системы соответствует ее предыдущим версиям". (9)

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

Это не только мнемоника - FEW HICCUPPS можно также использовать как метафору, чтобы расшевелить свою память.

"Мы тестируем и выискиваем проблемы в продукте, потому что нам нужно икнуть пару раз (FEW HICCUPPS.”(9)

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

Другие распространенные эвристики

Это было лишь три из множества тест-эвристик, распространенных среди сообщества тестировщиков. Дель Деуар любезно собрал множество мнемоник для тест-эвристик из ряда источников, и объединил их в этой удобной ментальной карте.

Примечание: так как множество известных тест-эвристик использует мнемоники, то широко распространено заблуждение, что у эвристик должна быть мнемоника, или что это одно и то же. Это не так. Эвристики не требуют мнемоник, они просто создаются таким образом, чтобы их было легче запомнить. Множество известных тест-эвристик, не являющихся мнемониками, можно найти в чит-листе эвристик от Элизабет Хендриксон: Test Heuristic Cheat Sheet.

Еще примечание: мнемоники – это тип эвристики. Они работают как когнитивная короткая дорожка, дабы помочь решить проблему вспоминания. Чит-лист – это тоже тип эвристики. Ментальная карта – тоже тип эвристики, и мы можем продолжать до бесконечности. Помните, эвристикой может быть практически что угодно. Это все, что работает как когнитивный короткий путь, помогающий принимать решения или решать проблемы, но не делает этого с гарантией и может  привести к искажениям.

Личные эвристики тестирования

Если вы практикующий тестировщик, вы будете использовать свои собственные эвристики, знаете вы об этом или нет. Это в частности связано с тем, что использование и создание эвристик – интуитивный врожденный процесс. Но также это вызвано и тем, что все, чем заняты тестировщики в тестировании, может рассматриваться как эвристика. Начиная с тест-техник и заканчивая тест-идеями, пришедшими в голову в ходе исследовательского тестирования, все это рождается благодаря когнитивным коротким маршрутам, помогающим быстро принимать решения и решать проблемы.

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

Выявить ваши личные эвристики может быть непросто – в конце концов, зачастую мы бессознательно создаем их на основании прошлого опыта, пользуясь мышлением системы 1. Наилучший способ заметить их и вывести в систему 2 – это размышлять над своими действиями во время и после каждой тест-сессии. Регулярное размышление над своим тестированием поможет вам выявить паттерны в поведении, и потенциально – определить ваши личные тест-эвристики. Эти размышления также могут помочь вам выявить когнитивные искажения.

Разрыв эвристического праксиса

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

Разрыв эвристического праксиса также может произойти, когда практикующие тестировщики создают эффективные эвристики, не осознавая этого. В чем же тут проблема, спросите вы? Без осознанности тестировщики неспособны обосновать свои решения, и подвержены вызываемыми эвристиками когнитивным искажениям. Что еще печальнее, многие отличные тест-эвристики не доходят до тест-сообщества, а ведь они помогли бы продвигать нашу профессию.

И, наконец, разрыв праксиса может случиться, если тестировщик понимает теорию эвристик, но не знает, как эффективно применять ее на практике.

Преодоление разрыва

Праксис происходит только при приложении теории к практике. Для преодоления разрыва вы должны изучить теорию эвристик, выучить известные эвристики и попрактиковаться в их осознанном применении.

Для изучения теории читайте блоги и книги об эвристиках, смотрите доклады и обсуждайте с другими тестировщиками, когда и как эти эвристики применять. Обсуждайте это лично, на форумах, через Slack, социальные сети, где угодно. Чем больше народу в это вовлечено, тем лучше.

Когда вы узнали об эвристиках все, настало время пытаться применять их в различных контекстах. Важно: вы должны размышлять об их эффективностью; что сработало, что нет, и почему. Если эвристика для вас не срабатывает, попробуйте другую, измените ее, или создайте собственную.

Модификация эвристик

Не бойтесь пропускать части широко известной эвристики, если для вас они не очень-то срабатывают. Вы можете не получить пользы от использования эвристики во всей полноте, поэтому вперед, используйте только часть! Используйте то, что работает для вас в вашем контексте, отбрасывая то, что не работает.

Другой вариант – добавить эвристику. К примеру, вы можете забыть слова для RCRCRC. Ричард Брэдшоу регулярно это делает, и считает, что часть этой эвристики – это "Revenue" (доход). Это не так, но это не важно – эта модификация помогла ему с множеством тест-идей. Доход заставляет его думать о частях системы, генерирующих прибыль – нет прибыли, нет бизнеса. Поэтому для него эта эвристика превратилась в RCRCRCR.

Даже создатели широко известных эвристик меняют их. FEW HICCUPS начиналась как просто HICCUPS, а затем Майкл Болтон добавил FEW. Если это делают даже создатели, почему бы не создать собственные оракулы, концентрирующиеся на критерии соответствия? Майкл советует делать именно это.

Можно выйти на другой уровень креативности, смешивая эвристики. Джон Стивенсон предложил эту идею в своем фантастическом докладе об обновлении моделей для TestBash Brighton. Джон говорит, что надо применять метод SCAMPER к существующим моделям – Substitute (менять), Combine (комбинировать), Adapt (адаптировать), Modify (модифицировать), Put (применять иначе), Eliminate (уничтожать) и Reverse (переворачивать). Пробуйте экспериментировать с разными комбинациями и модификациями известных тест-эвристик, смотрите, что сработает для вас.

Примечание: модели – это тип эвристики, это метод попытки решения проблемы, когда сложные или абстрактные вещи делаются проще и легче для понимания.

Создайте свою

Первый шаг в осознании и разработке своей собственной тест-эвристики – это определить, где вы уже ей пользуетесь. Это очень сложный процесс .Мы привыкли объяснять, что мы делаем, но объяснить, почему, значительно сложнее – а именно там и прячутся эвристики. Вот что можно сделать, чтобы вывести их на чистую воду.

Обдумывание

Обдумывание вашего тестирования часто вскрывает паттерны – а они, возможно, результат применения эвристик. Регулярное обдумывание в ходе каждой тест-сессии и после нее повысит ваши шансы на идентификацию эвристик. К примеру, вы можете потратить несколько минут после каждой сессии, чтобы спросить себя "почему я провел именно эти тесты", и "почему я провел их именно в таком порядке". Хорошие тест-заметки помогут вам в этом – вы можете выявить паттерны, делая заметки и пересматривая их.

Вербализация

Другой способ идентификации и создания ваших собственных эвристик – это вербализация вашего тестирования другим людям. Процесс вербализации поощряет обдумывание, так как вы ищете слова, чтобы объяснить, что вы делаете или сделали. Обсуждая решения с другими людьми, мы часто обнаруживаем нюансы, о которых мы не знали, и создаем новые связи между мыслями и идеями, описывая их. Вы можете вербализировать ваше тестирование и решения другому члену команды – возможно, во время дебрифинга или парного тестирования. Как вариант, вы можете рассказывать это сами себе, используя эвристику резиновой уточки.

Преподавание

Преподавание – это область, в которой Ричард Брэдшоу получил максимум удовольствия от осознания своих собственных эвристик. Чтобы хорошо учить других, вам нужно полностью понимать свои собственные действия во время практики вашего предмета. Это означает, что вы много думаете и размышляете о своем тестировании, чтобы определить, что нужно передать студентам, и – что важнее – как это сделать. Разбираясь, как преподавать тест-знания и навыки, Ричард создал и распространил большую часть своих личных эвристик, чтобы они помогли ему в обучении. К примеру, модель SACRED была создана для обучения людей дизайну автоматизированных проверок, а TRIMS – дабы поощрить людей думать о стратегии автоматизации.

Применение теории на практике

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

Попрактиковавшись применять разные эвристики в разных контекстах, вы выработаете способность понимать, какую эвристику применять и когда. Глубоко размышляя над своим тестированием путем заметок и вербализации, вы сможете модифицировать существующие эвристики, чтобы они лучше подходили вашим задачам – а, возможно, и выявите свои собственные.

Мы призываем вас не стесняться и менять известные эвристики, а также разрабатывать свои собственные. Будем рады услышать о дополненных и новых эвристиках на форуме The Club.

Ссылки:

  1. Judgement under Uncertainty: Heuristics and Biases - Amos Tversky and Daniel Kahneman
  2. Dual Process Accounts of Reasoning - Systems - Wikipedia
  3. Decision-making heuristics and biases across the life span - JoNell Strough, Tara E. Karns, and Leo Schlosnagle
  4. Introduction to Memory Techniques - Mind Tools
  5. 99 Second Introduction to Oracles - SWTC
  6. 99 Second Introduction to Models - SWTC
  7. Test Heuristics Cheat Sheet - Elisabeth Hendrickson, James Lyndsay, and Dale Emery
  8. Software Testing Heuristics and Mnemonics - Karen N Johnson
  9. FEW HICCUPPS - Michael Bolton
  10. Testing Mnemonics - Del Dewar
  11. Mapping Biases to Testing - Maaike Brinkhof
  12. Model Fatigue and How to Break It - John Stevenson
  13. How Models Change - Michael Bolton
  14. Reflective Practice - Wikipedia
  15. Rubber Duck Debugging - Wikipedia
  16. Your Tests Aren’t Flaky, You Are! - Richard Bradshaw
  17. TRIMS - Richard Bradshaw

Дополнительная литература:

Обсудить в форуме