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

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

.
Проектируя тесты: в чем разница между хорошим и плохим тестом?
31.07.2018 12:04

Автор: Марк Уинтерингэм (Mark Winteringham)

Оригинал статьи: http://dojo.ministryoftesting.com/lessons/designing-tests-what-s-the-difference-between-a-good-test-and-a-bad-test

Перевод: Ольга Алифанова

Вопрос «Что именно делает тест хорошим или плохим» задавался недавно не только в Software Testing Clinic, но и на моих личных воркшопах. Я не думаю, что «хорошие» или «плохие» тесты в принципе существуют. Если я прогоняю простейший поверхностный тест и он находит баг, помогает мне сформулировать новую идею или вскрывает новую полезную для меня информацию – это хороший тест. При этом это не означает, что я могу полагаться исключительно на простые или поверхностные тесты.

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

Роль тестирования

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

  • Как продукт должен работать с точки зрения заинтересованных лиц.
  • Как он на самом деле работает.
  • Как генерировать новые идеи для тестов.
  • Есть ли в продукте баги.

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

Работа с риском

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

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

Формирование идей для тестов

Как только вы достигли понимания рисков, на которых фокусируется тестирование, и получили на руки то, что можно тестировать, пора задуматься об идеях для тестов. Помните – качественный тест дает вам ценную информацию, связанную со специфическим риском. Попытайтесь подумать о чем-нибудь специфичном для продукта. Придумайте или запишите вопросы – это ценный элемент формирования идей для тестов. К примеру, вы можете попробовать использовать технику пяти W’s H, которая позволяет задавать, например, такие вопросы:

  • Что, если я введу плохие данные?
  • Как эта форма отправляет данные службе?
  • Что будет, если я нажму на эту кнопку двенадцать раз?

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

Подумайте о том, что вы выиграете и что упустите, тестируя через GUI или HTTP-интерфейсы. К примеру, работа через HTTP-интерфейс может сообщить вам, что все найденные баги относятся к бэк-энду, в то время как при аналогичном тесте через GUI может показаться, что баг относится к GUI-технологии (например, к JavaScript). Если вы тестируете через GUI, вы можете обнаружить, что некоторые возвращаемые бэк-эндом значения ломают разметку продукта.

Проведение тестов

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

Замыкая круг

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

«Если вам кажется, что вы узнали больше о том, что тестируете – возможно, это хороший тест».

Тест должен помочь вам подумать о новых идеях и рисках, а также сообщить о важных деталях, которыми (плохими или хорошими) необходимо поделиться с командой.

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

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

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

  • Достаточно ли качественны ваши тесты, довольны ли вы ими?
  • Как их улучшить?
  • Какой информации вам, возможно, недостает?

Заключение

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

Ссылки