Недостающее звено между тестированием и автоматизацией |
04.06.2018 14:44 |
Автор: Виктор Славчев (Viktor Slavchev) Оригинал статьи: http://mrslavchev.com/2017/11/23/the-missing-link-between-testing-and-automation/ Перевод: Ольга Алифанова Если бы на модные словечки века проводился конкурс (хоть я и не думаю, что тестированию уже стукнуло сто лет), я почти на 100% уверен, что выиграла бы автоматизация тестирования. Если вы читаете про тестирование или слушаете подкасты, это обычно «автоматизация то», «автоматизация се», «автоматизируйте все». Оно безусловно чрезмерно употребляется и чрезмерно злоупотребляется, и я готов спорить, что куча людей, дающих советы по автоматизации, не имеют ни малейшего представления, о чем они, черт возьми, говорят. Или, как минимум, их заявления демонстрируют полнейшее непонимание цели автоматизации. То, что термины «тест-автоматизация» и «автоматизированное тестирование» во многом ошибочны, то, что «автоматизировать» тестирование, в сущности, нельзя, то, что мы можем автоматизировать только его часть, обсуждалось множество раз, бла, бла, бла, я не буду это повторять, и мне скучно говорить об этом снова и снова. Мысль, которая ударила меня как молния, состоит в том, что автоматизации тестирования не существует – есть «тестирование» и есть «автоматизация». Мне кажется, что наше мышление еще недостаточно развилось для того, чтобы мы эффективно их комбинировали. Сейчас покажу. Два разных склада умаЯ взял это под наблюдение примерно тогда, когда готовился к TestBash в Мюнхене, и эта мысль начала расти и развиваться – мне требовалось время, чтобы окончательно ее оформить. Когда вы, как тестировщик, присутствуете на конференции по «тест-автоматизации», или вы эксперт по автоматизации, и попали на конференцию по тестированию – не кажется ли вам, что люди говорят на чужом языке? Именно так себя чувствую я. Каждый раз, когда автоматизатор начинает петь про «ненадежные тесты», я думаю «ну привет, приехали, не существует ненадежных тестов, существует плохой тест-дизайн! Когда уже ты его выучишь? На эту тему было множество дискуссий, где ты был, пока они велись?» Готов спорить, что автоматизаторов тоже озадачивают разговоры и доклады, развивающие идеи командной работы, критического мышления, предубеждений, эвристик. И они, возможно, думают «О чем, черт побери, эти люди говорят? Они что, не в курсе, сколько кругом инструментов и технологий? Это же просто код, что за драма?» Мысль, которую я хочу тут донести, также отвечает на вопрос, почему мы не можем создать автоматизацию, действительно помогающую тестированию – потому что мы изначально неправильно понимаем цели тестирования и автоматизации, и у нас нет прозрачности в плане того, какие проблемы решает чужой «лагерь». С моей точки зрения, тестирование и автоматизация просто говорят на разных языках и стремятся к разным целям, оттого и растет изначальное непонимание в коммуникациях между ними. Склад ума тестировщикаДля того, чтобы выяснить, где у нас провал в коммуникации, давайте сначала разберемся, каковы наши цели. Это просто мои наблюдения, возможно, с некоторыми предубеждениями, не относитесь к ним как к высеченным в камне. Проблемы, которые пытаются решить тестировщики:
Почему складу ума тестировщика не удается помочь автоматизации?Как правило, склад ума тестировщика не справляется с помощью автоматизации по нескольким причинам: «Сопротивление тестирования»В какой-то степени наши усилия как тестировщиков превращаются в «сопротивление тестировщиков», потому что мы практически всегда способны покритиковать автоматизацию и указать на то, что она неспособна сделать. При этом мы нечасто демонстрируем выгоды автоматизации для тестирования. Я и сам тут признаю свою вину – я сделал это в статье «Горькая правда об автоматизации», не сказав ничего о ее полезности, но я постараюсь это исправить. Я убежден, что глупость про «ручное тестирование против автоматизированного» внесла в это немалый вклад, как и чушь про «нас заменят машинами» и прочие эпизоды, когда люди пытаются выглядеть умными, говоря при этом о полной фантастике. Возможно, настало время реально посмотреть на вещи и попытаться найти решение вместо того, чтобы указывать на проблемы. Неспособность извлечь пользу из автоматизацииДругая причина, по которой тестирование не может помочь автоматизации – это попытка ужать всю сложность тестирования и впихнуть ее в байты. Мы норовим поставить перед автоматизаторами практически нереальные задачи – или из-за предубежденности «ручных идиотов заменят скриптами», или потому, что мы знаем реальную ценность и сложность тестирования, и стремимся ее продемонстрировать. Чтобы стать лучше, нам нужно осознать следующее – тестирование и автоматизация хороши для специфических задач, которые зачастую не пересекаются. Тут не стоит вопрос выбора чего-то одного – скорее это «как им сосуществовать в симбиозе». Склад ума автоматизатораОн сильно отличается от склада ума тестировщика. Люди, работающие с автоматизацией, скорее мыслят, как разработчики, а не тестировщики. Нет, я не говорю, что это плохо, просто это совсем другое дело. И это надо ценить, потому что ряд инженеров-автоматизаторов – прекрасные разработчики. Какие проблемы решает автоматизация?Если она правильно применяется, то:
Определив оба склада ума, можно отметить, что склад ума автоматизатора куда более технически и алгоритмически ориентирован, а склад ума тестировщика в основном ориентирован на непредсказуемость и критический подход. Пока тестировщики стараются экспериментировать постепенно, упорно давить на систему, чтобы получить новую информацию, автоматизаторы делают ровно наоборот – убеждаются, что тесты выполняются в том же окружении, в тех же условиях, каждый раз. Тут-то многие из нас и поскальзываются на реализации того, что тестирование и автоматизация работают по-разному и не взаимозаменяемы. Почему складу ума автоматизатора не удается помочь тестированию?Культ инструментовМы уже отметили, что автоматизация очень технична и крайне ориентирована на инструменты, однако это становится проблемой, если инженеры-автоматизаторы начинают смотреть на инструменты как на решения или винить их за ошибки в собственном тест-дизайне. На самом деле множество докладов, посвященных автотестам, глубоко уходят в вопрос, «как» что-то сделать, абсолютно забывая про «зачем». В результате автоматизация ощущает себя полностью оторванной от тестирования и, скажу об этом вновь, возможно, в этом стоит винить битву «автоматизаторы против ручных тестировщиков» и сказку про «замену» одних другими. Но давайте не будем обманывать себя – значимость и цель автоматизации (и, к моей радости, Бас Дийкстра пришел к тому же выводу в своей блестящей статье) – в поддержке тестирования. Неважно, насколько устойчив ваш фреймворк, следовали ли вы принципам ООП, легко ли его расширить, слабо ли он связан и сильно ли он прочен, запускаются ли ваши тесты за наносекунду и управляют ли данными на «пять» - все это совершенно бессмысленно, если ваши автотесты не находят багов. Если они не нападают на систему, пробуя ее на прочность достаточно агрессивно, чтобы найти баги. Возможно, это гениальный код – но он не достигает своей цели, если не дает значимую, доступную для инспекции информацию об имеющихся в продукте проблемах. Почему это происходит? Переходим к проблеме номер 2. Вера в то, что того, «что мы делаем как тестировщики, достаточно»Из-за культа инструментов желание заменить тестирование вместо того, чтобы поддерживать его, и фокусе на том, как писать автотесты, большинство автоматизированных решений – это просто демонстрация, а не эксперимент. Сходите на конференцию автоматизаторов, почитайте статьи в их блогах – видали ли вы хоть раз, чтобы кто-нибудь из них задался вопросом «Тестирую ли я сейчас то, что нужно?», или «Это наилучший эксперимент, который я могу провести, используя этот инструмент?», или «Каково качество моих тестов?». Готов спорить, ответом будет «нет». Зачастую автоматизаторы так заняты подражанием поведению человека – открыванием выпадающих меню, взаимодействием с элементами, переходами между страницами, - что они забывают главную цель своего кода – быть высококачественным тестом определенного условия, которое имеет смысл тестировать. Вместо этого я вижу, как автоматизаторы обращаются с тест-дизайном, как с неким ископаемым из прошлого, с которым мы давно разделались. Это не так! Проводить значимые эксперименты – это основная цель как для тестирования, так и для автоматизации. Решение в создании недостающего звенаНу, вряд ли это можно назвать решением, в конце концов, я тут сам с собой разговариваю, но я считаю, что решением будет реализация ряда важных вещей. Тестирование и автоматизация не смешиваются. Давайте отбросим бред про «замену» и «если», и «когда», и «ручное», и попробуем поговорить о чем-нибудь продуктивном. Как мы уже отметили, цели тестирования и автоматизации – в решении совершенно разных проблем, и если обращаться с ними, как с взаимозаменяемыми вещами, мы никуда не придем. «Универсальных солдат» не существуетЯ считаю, что людей, которые одновременно глубоко разбираются и в тестировании, и в автоматизации, не существует, и в этом нет ничего плохого. Нет необходимости просить тестировщиков учиться программировать и писать автотесты, или просить автоматизаторов научиться мыслить критически и чересчур усложнять свой код. Просто продолжайте усердно работать над тем, что делает вас счастливыми, и оставайтесь открытыми для дискуссии, как принести пользу, тестируя продукт или систему. Старайтесь делать ваши проблемы и цели видимыми для окружающихТестировщикам было бы полезно приложить усилия к тому, чтобы объяснить, где нужна автоматизация, приводя примеры, где автоматизация имеет смысл и очень полезна. Безусловно, отдавая себе полный отчет, что она не начнет и не будет «отбирать у нас наше дело». Автоматизаторам, я думаю, было бы полезно приложить усилия, чтобы объяснить технологические ограничения своих инструментов и подходов, возможные ловушки тех или других, а также занимаемое время и сложность своей работы. Немного здорового скептицизма тоже не повредит при создании автотестов. Один из ключевых компонентов менталитета тестировщика – это сомнение в собственной способности хорошо тестировать. Следовательно, когда мы пишем автотесты, мы должны в первую очередь сомневаться в их качестве, не удовлетворяясь простым подтверждающим тестированием. Как я планирую решать этот вопрос для себя?Как я уже говорил, я «задолжал» информацию о том, как использовать автоматизацию, чтобы она была продуктивной для тестирования. Поэтому я начну с серии коротких статей, отвечающих на практические вопросы об автоматизации. Ответы на них, на самом деле, очевидны, просто про них не говорят. Я еще не придумал заголовок, но я над этим работаю. Вправе ли я писать об этом? Да кого это волнует! У меня есть блог, и я буду писать о чем хочу. Если людям это понравится – они это продемонстрируют, если не понравится – я остановлюсь. Я с радостью прочитаю и обсужу ваши решения для создания отсутствующего звена. Шаринг и ретвиты приветствуются. Спасибо, что прочитали. |