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

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

.
Ретроспективные уроки автоматизации: зачем она нужна?
01.10.2018 00:00

Автор: Виктор Славчев (Viktor Slavchev)

Оригинал статьи

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

Я начал этот цикл статей с программирования, и сделал наиболее распространенную ошибку, которую делают все автоматизаторы – углубился в объяснения, как автоматизировать, вместо того, чтобы рассказать, почему это важно и выгодно для нас (спасибо Джиму Хейзену за то, что он обратил на это мое внимание).

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

Начните с "Почему"

Я взял эту цитату из знаменитого доклада Саймона Синека на TED и книги, и думаю, что начинать с "почему" действительно очень важно, когда речь идет об автоматизации. Я знаю, что этот подход также разделяет Баз Дийкстра, однако, к сожалению, он мало где еще обсуждается.

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

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

Моя задача в этой статье – попытаться перечислить (в рамках моего ограниченного понимания вопроса) хорошие поводы для создания автоматизации и инвестирования в нее.

Почему автоматизация вообще внедряется?

  • Она повышает ценность тестирования
  • Она быстрая
  • Она непротиворечива
  • Она дает формализованные результаты.
  • Она хороша для решения машинных задач и проблем
  • Она хороша для утверждения детерминистических условий.
  • Она хороша для проверки фактов.
  • И расчетов.

Она также имеет ряд подводных камней…

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

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

  • Скорость иногда мешает.

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

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

  • Недостаточная вариативность.

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

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

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

  • Автотесты никогда не обнаружат непредвиденные риски.

Ключевой аспект хорошей автоматизированной проверки – это ее детерминистичность. Она проверяет очень специфичное условие, которое приводит к результату "правда" или "ложь", "да" или "нет", "0" или "1".

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

  • Автотесты проверят то, что им велено проверять, и ничего больше.

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

А) мы не уверены полностью в том, что она вообще делает

Б) у машины есть свободная воля, и она в состоянии принимать решения.

  • У расчетов есть предсказуемый процент ошибок.

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

Выводы

Уверен, что многие подумали "На кой черт этот идиот написал столько очевидных вещей?" Да, они очевидны, если вы уже доверились своим проверкам чересчур сильно, и получили хороший урок, когда они вас подвели (об этом говорит слово "ретроспективные" в заголовке статьи), но для новичков все это далеко не лежит на поверхности.

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

Я с радостью узнаю о вашем опыте, почему применяете автоматизацию лично вы? Каковы ее сильные стороны, с вашей точки зрения?

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