Допущения в тестировании: благо или зло? |
16.04.2018 11:45 |
Автор: Джошуа Рейн (Joshua Raine) Оригинал статьи: http://www.testingcircus.com/assumptions-necessary-or-evil-in-testing/ Перевод: Ольга Алифанова Оспаривая допущенияПервая встреча тестировщиков, на которой я побывал, была посвящена планированию тестирования. Ближе к концу отчета о своем опыте, с которого и начался разговор, докладчик процитировал Джеймса Уиттакера, сказав, что «Хороший тестировщик никогда ничего не предполагает». В то время я не знал, кто такой Джеймс Уиттакер, но цитата застряла в моей голове. Мы в итоге подняли эту тему и обсудили ее вкратце, но она спровоцировала для меня длительные размышления о небольших (или больших) допущениях и их месте в тестировании. В детстве мое знакомство с допущениями началось с расхожей фразы, которую я до сих пор довольно часто слышу – «Когда ты предполагаешь, ты делаешь осла и из себя, и из меня» (игра слов – when you assume, you make an ass out of U and Me – прим. переводчика). Очевидно негативная коннотация и забавная игра слов заставили эту фразу застрять в голове, но если задуматься, неужели допущения – это так плохо? Исходя из фразы, любое предположение будет по умолчанию плохим и иметь негативные последствия. Это было мое первое и единственное знакомство с термином, на основе которого выстроился внутренне отрицательный взгляд на предположения. Причиной, объясняющей это, всегда было то, что предположения – это упражнения в лени, которые тебя в итоге погубят – лучше спроси, чем додумывай. Всегда ли, или почти всегда предположения негативны? Мой опыт говорит мне «нет» - по сути, предположения очень важны. Я думал о возможности хороших, нейтральных или необходимых предположений, а также о том, что если предположение плохо – может, это все равно был лучший вариант действий в тот момент? Иногда, подростком, я узнавал, что предположения – необходимая часть общения с миром – мы не можем знать все, а то, что мы не знаем досконально, но с чем нам приходится иметь дело, неминуемо породит предположения. Не предполагаем ли мы, что все предположения негативны? Если предположения необходимы, нам нужно знать, когда их стоит делать, и что делает их хорошими или плохими. Тут можно поставить два вопроса для исследования:
Как это относится ко мне, и к тестированиюНачнем со второго вопроса – предположения относятся к чему угодно. Они часть повседневной жизни – такая же, как работа или хобби. Заходя в магазин, мы в целом предполагаем, что магазин примет приемлемую форму оплаты (наличные, карту или что-то другое в зависимости от вашей страны). Мы в целом предполагаем, если у нас нет причин думать иначе, что живущие в нашей стране люди говорят на нашем основном языке, и мы будем смущены, раздражены или расстроены, если дела обстоят иначе. Что касается тестирования, разумный человек не может ожидать, что перед началом тестирования мы имеем на руках абсолютно всю информацию – не уверен, сколько тестирования понадобится в ситуации, когда у нас действительно есть абсолютно вся информация о тестируемом продукте. Вне зависимости от вышесказанного – если вы общаетесь с людьми и не умеете читать мысли, у вас по определению нет всей полноты информации. Когда нам не хватает информации, мы делаем предположения. Прямая связь с тестированием тут в использовании информации, которую вы получаете, зная о предположениях (как своих, так и чужих) – в целом, знать о чем-то лучше, чем не знать, и если вы знаете свои предположения, вы можете оспаривать их, учиться у них. Оспорить свои предположения до того, как вы сделаете из себя осла, может сберечь ваше (и не только) ценное время и силы на тестирование. К тому же предположения – это форма ожиданий, которые влияют на множество практик – к примеру, сколько действий, у которых есть объявленный ожидаемый результат, мы предпринимаем? Один из моих бывших коллег сострил, что тестирование, которое проводится для проверки ожиданий разработчика или пользования (к примеру, расширенное юнит-тестирование или UAT) можно назвать «тестированием, основанным на предположениях». Если вы не знаете свои предположения (потому что иногда не все так просто), их нелегко оспорить самостоятельно. Тестирование проводится людьми, независимыми от разработчиков – поэтому полезно иметь человека, оспаривающего ваши предположения, и это одно из достоинств парного тестирования. Этот человек может даже не быть тестировщиком – если он задает вопросы или, что еще лучше, использует метод Сократа, это помогает пролить свет на ваши предположения. Итак, мы уже видим, что предположения – необходимая, если не неотъемлемая, часть тестирования. Вопрос, на каких видах предположений надо концентрироваться (знать их, принимать их, улучшать их), все еще открыт. И сводится к тому, разумно предположение или нет. Что делает предположение «разумным предположением»?Возвращаясь к первому своему вопросу, я начну с простого определения, которое мы позднее будем развивать. «Предположение разумно, пока выгода от того, что мы его придерживаемся, перевешивает риски от него». Это определение вроде бы удовлетворяет нужду в понимании разумности предположения, но вся штука в том, что определение слишком простое. Все, что оно утверждает – так это то, что проще придерживаться предположений, чем не придерживаться их. С практической точки зрения нам только это и нужно, и, по иронии судьбы, приводит нас к причине, почему предположения – это плохо: потому что происходят они из лени, которая может быть источником эффективности. Давайте протестируем определение: оно, по всей видимости, предполагает, что нам известны выгоды и риски, и оно нечетко определяет типы этих ценностей (абсолютны ли они, известны ли они, и т. п.). Оно также звучит для меня таким образом, как будто нет никаких причин оспаривать его, пока оно не изменилось. Но тут есть с чего начать. Как предполагалось выше, выгода от предположения означает, что нам не нужно тратить ресурсы (время и силы) на размышление над вещами, про которые мы теоретически решили, что они не стоят размышлений. Слово «решили» тут ключевое: опасно не знать собственных предположений. Если мы предположим некую базу, точку отсчета нашей работы, то мы можем урезать количество вопросов и сил на сбор информации, нужные нам для понимания, с чем мы имеем дело. Так как в тестировании задавание вопросов и сбор информации – ключевая деятельность, всегда останутся тесты, которые можно провести, но на которые уже нет времени. Предположения позволяют нам сконцентрироваться на, насколько нам известно, самых важных вещах. Основные риски предположений исходят из неверных предположений. Что, если мы предположили, что наша информация верна, когда это не так? Что, если мы предположили, что система предназначена для чего-то одного, хотя ее главная задача совсем не в этом? Поиск и проверка собственных предположений могут отправить вас по длинному пути, но беготня за неверными предположениями делает то же самое. Вторичный риск на рекурсивном уровне в том, что проверка предположений занимает время и усилия. Это альтеративная издержка поиска необходимой информации (также, как альтернативной издержкой будет решение не оспаривать это предположение – постарайтесь не нырять в кроличью нору чересчур глубоко, занимаясь рекурсивным анализом). Итак, когда же мы начинаем проверять наши (уже не разумные) предположения? Прямым, но неточным ответом будет «когда у нас будет веская причина этим заняться№ мы хотим убедиться, что ценность, которую мы получим от изменения предположения, достаточно высока, чтобы оправдать альтернативные издержки его переоценки. Итак, зная ценность (возможно, измеренную как риск против награды) и альтернативные издержки, мы приобретаем мотор для переоценок. Теперь у нас есть более полная картина того, что будет разумным предположением. Предположение разумно, пока
Бойтесь неизвестных предположенийВсе вышеописанное здорово подходит для предположений, о которых вы знаете. Но их основная опасность в тех, о которых вы не имеете никакого понятия. Чтобы анализировать предположение на разумность, нужно знать о нем. Я знаю два отличных метода выводить предположения на чистую воду. Во-первых, изменение масштаба. Если вы меняете масштаб своего фокуса (думаете о более мелких частях системы или о системе в целом) в плане идеи тестирования, и превращаете ее в несколько мелких взаимосвязанных идей, это заставит вас оценить, как она/они на самом деле функционируют. Схожим образом, если смотреть на общую картину, разглядывая свою идею в контексте системы, частью которой она является, вы неминуемо оцените ее на внутреннюю состоятельность. Во-вторых, изменение формата. Транспонируйте свое мышление на другой формат или структуру – картинки, диаграммы вместо слов и текста – и ваша перспектива, возможно, достаточно изменится, чтобы показать вам то, что скрыто и то, что вы еще не очень хорошо понимаете. Эта техника расширяется до других изменений формата, к примеру, техники Фейнмана, меняющей способ, которым вы объясняете идею – что, в свою очередь, изменит ваш взгляд на нее. Как только вы узнаете, что сделали предположение, или как только вы узнаете, что знаете что-то, противоречащее известному предположению – только тогда вы можете решать, стоит ли бороться с ним. Тут можно начать дискутировать на отдельную тему – как оценивать новую информацию, учитывая, как плохо мы умеем оценивать риск, неизвестность, и знания, отличающиеся от наших текущих верований. Заключение
|