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

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

.
Шесть проблем в рассуждениях о тестировании
07.11.2017 11:58

Автор: Джеймс Бах (James Bach)

Оригинал статьи: http://www.satisfice.com/blog/archives/1728

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

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

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

1. Когда вы говорите о том, сколько у вас тест-кейсов, вместо того, чтобы говорить о том, чем занимаются ваши тестировщики. Количество кейсов (500, 257, 39345) никому ни о чем не говорит и не демонстрирует, "сколько" вы на самом деле тестируете. Разработчики не хвастаются количеством созданных за рабочий день файлов – глупо считать файлы, буквы и строки кода. По той же причине глупо подсчитывать тест-кейсы. Одна и та же деятельность тестировщика может быть представлена как одним кейсом, так и миллионом их. Что, если тестировщик напишет программу, автоматически создающую сотню тысяч вариаций одного и того же кейса? Получится сто тысяч кейсов, или один большой кейс, или вообще не кейс? Впредь, услышав о точном количестве кейсов, попрактикуйтесь – напомните себе, что оно ни о чем вам не говорит. Затем уточните, что эти тесты делают. Что именно ими покрыто? Какие баги они могут найти? Какие риски привели к появлению этих кейсов?

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

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

4. Когда люди приравнивают автоматизацию к живому человеку. Если бы разработчики говорили о программировании так, как люди говорят о тестировании, то они бы сообщали, что продукт создается компилятором, а их задача только в том, чтобы манипулировать этим компилятором. Они бы сказали, что продукт создается "автоматически", а вовсе не благодаря напряженному труду умных людей, создающих код. А менеджмент носился бы с идеей "автоматизированной разработки", приобретая все новые и новые инструменты вместо того, чтобы нанять и обучить отличных разработчиков. О тестировании лучше говорить так же, как о разработке: это то, что делают люди, а вовсе не инструменты. Инструменты помогают, но тестировать они не умеют. Нет такого понятия, как "автоматизированный тест". Инструмент может максимум манипулировать продуктом, следуя заложенному в него сценарию, и убедиться, что результат соответствует заявленному. Это не тест – это проверка фактов о продукте. Инструменты отлично умеют проводить такие проверки. Но тестирование ими не ограничивается! Тестировщики используют свой здравый смысл и практический опыт, чтобы создать проверки, оценить их, поддерживать и улучшать их. И этот полностью завязанный на человека (и поддерживаемый инструментарием) процесс и называется тестированием. Фокусируясь на автотестах, вы перестаете концентрироваться на навыках, опыте, критическом мышлении и мотивации, которые и контролируют качество тестирования. Следовательно, вы забываете о важных факторах, от которых оно зависит.

5. Когда люди рассуждают так, как будто в мире есть один и только один подход к тестовому покрытию. Способов покрыть тестируемый продукт великое множество. Каждый метод оценки покрытия имеет собственную динамику и отличается от прочих. Нет способа обсуждать только один из них (к примеру, покрытие кода) и добиться полной картины. К примеру, если вы тестируете страницу поисковой выдачи, вы покрыли функциональность, представленную типом запроса, который вы сделали (функциональное покрытие) при помощи определенного набора данных, существующих на этот момент (покрытие данных). Если вы замените запрос, вы получите новое функциональное покрытие. Изменили данные? Новое покрытие данных. В любом случае вы можете найти новые баги, меняя покрытие. Функции взаимодействуют с данными, и хорошее тестирование включает не покрытие только функций или только данных, а покрытие и того, и другого в разных комбинациях.

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

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

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

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