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

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

.
Ретроспективные уроки исследовательского тестирования: эвристики
03.09.2019 12:46

Автор: Виктор Славчев (Viktor Slavchev)
Оригинал статьи
Перевод: Ольга Алифанова

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

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

В конце этой статьи я попробую подобрать интересные и полезные ссылки про эвристики.

Что такое эвристика?

Я небольшой поклонник определений, но осознаю, что эвристика – слово пугающее. Я также убежден, что четкое знание основ зачастую лучше, чем "какое-то" продвинутое знание о "чем-то".

Итак, вот формальное определение эвристики:

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

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

Где можно встретиться с эвристиками?

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

Представьте логическую задачку, например, кубик Рубика.

 

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

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

В повседневной жизни мы используем множество эвристик – вот некоторые из них:

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

Если вас интересует краткое введение в эвристики, вы можете посмотреть короткое видео: https://www.youtube.com/watch?v=ZINodNt-33g

Что самое главное в эвристиках?

В норме эвристики – это альтернатива использованию жестких правил или алгоритмов. Интересное наблюдение Майкла Болтона из статьи Heuristics for Understanding Heuristics:

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

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

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

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

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

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

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

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

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

В норме мы сталкиваемся вот с чем:

  • Программное выполнение надежных тестов (автоматизация).
  • Поиск максимально возможного количества ценных багов за короткое время (но какие баги считать ценными, и насколько это время ограничено?)
  • Поиск камня преткновения.
  • Воспроизведение странного поведения, вызывающего боль и отчаяние клиента, и т. д.

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

Эвристики в тестировании

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

Если вам интересно узнать больше об эвристиках и их применении в тестировании, вот с чего стоит начать:

SFDIPOT – эвристика для создания значимого и глубокого описания покрытия вашего продукта (Бах и Болтон).

Чит-лист эвристик – документация по тест-эвристикам для распространенных функциональностей, созданная Элизабет Хендриксон, Джеймсом Линдси и Дейлом Эмери.

RCRCRC – эвристика для регрессионного тестирования от Карен Джонсон.

Если вас интересует глубокое погружение в тест-эвристики, то рекомендую книгу “Explore it: Reduce risk and increase confidence with exploratory testing” от Элизабет Хендриксон. Это не просто набор отличных эвристик – это одна из самых глубоких книг по исследовательскому тестированию, которую я когда-либо читал.

"Лучшие" практики – искаженные эвристики

Я уже говорил о заблуждении про "лучшие" практики в докладе ““Worst” practices of software testing” Я читал его на конференции Ministry of testing Testbash Munich. Между прочим, он был выбран как самый просматриваемый доклад на TestBash, поэтому я планирую хвастаться этим при каждом удобном случае.

Что мы должны из этого вынести? "Лучшие" практики – это эвристики. Это то, что мы ранее описывали как "правило буравчика" – эмпирически оправданный практический совет, сформулированный человеком или коллективом. Пока все звучит неплохо, но причина, по которой я называю их искаженными эвристиками – это слово "лучшие". Если практику называют "лучшей" – это подразумевает, что она или всегда срабатывает, или доказано, что она более эффективна, нежели любая иная. То, о чем этот эпитет умалчивает – это о том, что эвристики подвержены ошибкам. К ним склонна любая эвристика, включая "лучшие" практики.

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

Совет вместо выводов

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

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

Есть идеи или мнения? Я буду рад их обсудить. Спасибо, что прочитали!