К основному контенту

Автоматизация тестирования. С чего начинать, возможные проблемы.

Disclaimer: Началось все "с чего начать", потом превратилось в копилку полезных ссылок по автоматизации.

С чего начать? 

  • Начинайте с малого в самом начале проекта, регулярно запускайте тестовую сюиту.
  • Заведите себе backlog для задач автоматизации и их приоритизации. Это поможет вам сфокусироваться на неотложных задачах без потери общего направления, вашей конечной цели. 
  • Не бойтесь потратить 1-2 спринта на изучение существующих тестовых фреймворков, их возможностей. Попробуйте написать реальные тесты с их помощью, это поможет вам выбрать фреймворк наиболее подходящий вашим требованиям. Желательно потом ответить себе на ряд вопросов.
  • Старайтесь сохранять независимость тестов от данных. Это даст вам возможность менять инструменты (фреймворки), когда в этом возникнет необходимость.
  • Создавайте самодостаточные тесты. Обращайте внимание на сложность поддержки и время прогона тестов каждый раз, когда добавляете новые тесты в автоматическую сюиту. 
  • Ваши тесты не должны создавать ложного ощущения безопасности (false positive). Это убивает всю идею автоматических тестов.
  • Сделайте все возможное, чтобы исправлять ошибки выявленные тесты максимально быстро.
  • Обязательно включайте запуск автоматических тестов в систему сборки (continuous integration)
  • У вас должен быть интуитивно понятный способ отчетов, дающий возможность любому в команде увидеть результаты тестов и историю их предыдущих запусков. Это дает возможность каждому быть включенным в мониторинг состояния проекта и помогает принимать правильные решения.
Шпаргалка для определения мест, которые нужно автоматизировать 


Есть другие версии квадратов:  "The Testing Quadrants – We got it wrong!", "Let’s break the Agile Testing Quadrants".

А здесь, можно найти алгоритм от Martin Fowler для определения того, достаточно ли у вас тестов:
- вы редко выдаете "баги" в релиз
- вы редко опасаетесь изменить код из-за опасения привнесения "баги"
Кстати там же развенчивается миф о 100%  test coverage. Рекомендую.

Какие проблемы могут возникнуть  и что нужно учитывать?

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

Интересная дискуссия на тему автоматических тестов развернулась в комментариях к статье Michael Feathers "Taking Automated Test Off the Pedestal" (тут была ссылочка, уже померла). Майкл поднимает вопрос увеличения количества автоматических тестов на проектах и, как следствие, роста стоимости и временных затрат. При этом отмечается, что проблема политическая: стоимость поддержки и запуска автоматических тестов может быть высокой, но ее необходимо сравнивать со стоимостью их отсутствия. Считая, что тесты обеспечивают обратную связь, мы должны решить, какую именно реакцию и когда мы ожидаем. Предлагается установить временные рамки, в пределах которых мы рассчитываем получить результат. Если наши тесты позволяют нам это сделать - хорошо. Если нет, то начинаем делить сюиты, для того чтобы запускать их попеременно. Для этого важно определить те тесты, которые являются самыми важными для вас.

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

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

Не зацикливайтесь на автоматизации "через GUI", как правило, это неудобно и медленно (даже сейчас, в 2023, а в 2012 совсем грустно было).
В идеале (по крайней мере у вас в голове) должна сложиться такая картинка (см. новый вариант ниже)

К сожалению, чаще можно наблюдать такое, поэтому работы у нас еще море :) (пирамидки сперты отсюда):

Новая, классная картинка с пирамидой (треугольником?)



Еще одна запоминающаяся классификация ("домик")
Architecturally-aligned testing

Самая интересная от Noah Sussman, в виде фильтра через которые проходят фичи.
https://twitter.com/noahsussman/status/836612175707930625 (с)

Свеженькое (2018) от Джеймса Баха: "Round Earth Test Strategy"

У меня даже есть своя "реализация":


Еще одна фигурка для упражнений :)

by Richard Bradshaw (link)
И еще. Не думайте, что автоматические тесты будут вам искать баги. Не будут! (Хотя практика и опыт показывает, что таки иногда находят, особенно когда это сложные многокомпонентные проверки). Это не их задача. Автоматика всего лишь доказывает, что ожидаемый функционал работает в тех условиях и в тех рамках, которые заданы тестом. Это все. Чудес ожидать не стоит.

Кстати, у меня появился пост про Fitnesse. Он может вам помочь вам с автоматизацией. Надеюсь получится полезная серия.

Update: Сергей Тепляков написал очень хорошую статью-обзор про автоматизацию тестирования. Крайне рекомендую.

Update 2: Еще рекомендую книжку "The A word" - интересный взгляд на эту тему.

Update 3: Сказка-быль о попытке оценить ROI автоматизации


Update 5: Тесты мало написать, их надо регулярно запускать, причесывать, подкармливать и пропалывать. Это нудная, но крайне необходимая работа. Тут подробности

Update 6: не нравится концепция "пирамиды автоматизации" - придумайте и используйте свою. Важно, чтобы у вас было как можно меньше тестов "через UI". Концепт "Test Automation Snowman"

Комментарии

  1. Автоматические тесты это часть движения к увеличению ответственности команды за результат. Как только у команды пропадает щит в виде тестеров, они становятся вынуждены писать тесты. Для эффективного написания тестов им приходится и код делать по человечески. 

    ОтветитьУдалить
  2. С первым предложением согласен. Со вторым не до конца. Работать совсем без тестировщиков - это по-самурайски и тут конечно без автоматики не обойтись. Но даже с тестировщикам без автотестов далеко не уедешь.

    ОтветитьУдалить
  3. Все сильно зависит от проекта. Нужно искать разумный баланс между стоимостью автотестов и профитом от них на какой-либо части продукта. А вот от эксплораторного тестирования никогда никуда не денешься! Если любой вид автотестов показывает, что баги нет, то это просто означает, что он ее либо не так либо не там.

    ОтветитьУдалить
  4. 2 года статье - только сейчас ошибку в названии нашел... :)

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

Mock vs Stub

Когда мы начали изучать модульное тестирование, то одними из первых терминов, с которыми пришлось познакомиться, стали Mock и Stub. Ниже попробуем порассуждать в чем их сходство и различие, как и для чего они применяются. Проверять работоспособность тестируемого объекта (system under test - SUT) можно двумя способами: оценивая состояние объекта или его поведение. В первом случае проверка правильности работы метода SUT заключается в оценке состояния самого SUT, а также взаимодействующих объектов, после вызова этого метода. Во-втором, мы проверяем набор и порядок действий (вызовов методов взаимодействующих объектов, других методов SUT), которое должен совершить метод SUT. Собственно, если коротко, то в одном случае используется Stub, а в другом Mock. Это объекты, которые создаются и используются взамен реальных объектов, с которым взаимодействует SUT в процессе своей работы. Теперь подробнее. Gerard Meszaros использует термин Test Double (дублер), как обозначение для объе

Полезные ресурсы для молодых (и не только) тестировщиков

сперто(с) Уже 3 месяца провожу собеседования тестировщиков (март 2016). Поначалу они просто  веселили - после 15-летнего опыта собеседования С++-разработчиков, общение с тестировщиками (чаще были "-цы") было чем-то экзотическим и забавным. Потом становилось все грустнее и грустнее, мимими закончилось. Началась печаль.

Заметки на коленке - 3. Что еще делать, если ваши тесты уже "зеленые"?

"Lately I find I'm working on automated tests that return non-binary results. Tests that neither pass nor fail" by  @noahsussman Отличная мысль, которую я ретвитил еще в 2016. Но давайте вместе подумаем, что за этим может скрываться? ( кстати, не знаю, что при этом думал Noah ) Ваши тесты прошли и прошли "успешно". Все хорошо или все же есть, куда еще посмотреть? Дальше то, что использовал я лично и то, что еще можно прикрутить дополнительно. Естественно все шаги ниже должны быть автоматизированны. 1. Контролируйте время выполнения тестов. Если набор проверок не меняется (а такое часто бывает, к сожалению), то рост времени выполнения может говорить о проблемах в продакшен коде (чаще всего) или проблемах с окружением. 2. Контроль за количеством выполняемых тестов. "Все зеленое" не значит, что сегодня выполняли те же Х тестов, что и вчера. Смешно(нет), но случается такое, что какие-то проверки "исчезают" из запуска из-за того, что у кого-то &qu