Стоит ли проводить комплексные и интеграционные тесты для не критически важных задач?

9

Хорошо известно, что комплексные и интеграционные тесты являются дорогостоящими. Конечно, если мы разрабатываем приложения, в которых люди могут умереть, если что-то пойдет не так, это стоит вложений. Однако в приложениях, где ошибки не являются концом света, не будет ли дешевле вообще пропустить тесты E2E и интеграционные тесты и вместо этого создать план резервного копирования, если что-то пойдет не так? Например, достаточно ли ручного тестирования пользовательских историй + модульных тестов + использование статически типизированного языка?

Как, например, если интернет-магазин потерял заказ, он может вместо этого отправить товар бесплатно + еще один товар в качестве извинения. Таким образом, конечный пользователь может оказаться еще счастливее, и компания в целом экономит деньги.

Наверное, у меня вопрос в общем, сколько стоит интеграционный тест и тест E2E и сколько денег он экономит? Есть ли способ сделать расчет риска / стоимости для этого?

Марк
источник
4
Есть ли способ сделать расчет риска / стоимости для этого? Кроме как на самом деле делать и то, и потом сравнивать, нет.
Робби Ди,
4
Вы должны учитывать ROI всего в процессе разработки. Стоит ли проводить модульные тесты? Стоит ли ручное тестирование? Стоит ли качество кода? Стоит ли создавать программное обеспечение в первую очередь? Это важные деловые вопросы. На что, конечно, нельзя ответить вообще. И они больше о деловом администрировании, чем о разработке программного обеспечения.
Кристиан Хакл
Как вы думаете, что скажется на бизнесе, если такой интернет-магазин, как Amazon, потерял несколько часов или заказы? Они могут попытаться отправить вещи бесплатно, но как это повлияет на их репутацию?
Барт ван Инген Шенау
@BartvanIngenSchenau Я думаю, что такая крупная компания, как Amazon, может позволить себе интеграционные тесты и E2E. Легко увидеть несколько часов заказов, стоивших им миллионы. Но мне интересно, если для небольших компаний стоимость репутации меньше стоимости самих тестов. Тем более, что превращение несчастных клиентов в счастливых может быть чрезвычайно ценным, что может даже не стоить с самого начала. У меня просто нет опыта делать выводы, поэтому я и спрашиваю.
Марк

Ответы:

12

Неважно, реализуете ли вы E2E и интеграционные тесты, вам нужен план резервного копирования в любом случае . Никогда не ожидайте, что система не будет содержать ошибок только потому, что она была протестирована.

Таким образом, при оценке стоимости вы не сравниваете затраты на реализацию тестов E2E с затратами, которые ваш план резервного копирования оценивает в случае сбоя, вы сравниваете:

  • Затраты на выполнение тестов E2E вручную (несколько раз перед каждым новым выпуском)

против

  • Затраты на создание (и поддержание) автоматизированных тестов E2E

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

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

Док Браун
источник
Спасибо, это отличный ответ. Какие примеры тестов E2E просты в реализации, но ведут к дальнейшему развитию и техническому обслуживанию?
Марк
2
@Marc: Полагаю, вы неправильно поняли мое последнее предложение, я говорил о разных тестах: тех, которые легко внедрить / поддерживать, и тех, которые нет.
Док Браун
Правильно, отредактированная версия проясняет ситуацию.
Марк
@Marc: По моему опыту, тесты через пользовательские интерфейсы (особенно сложные) часто являются кандидатом, когда автоматизация тестирования менее рентабельна, чем другие тесты, но это во многом зависит от категории программного обеспечения, доступных инструментов и специфики. задействованные технологии.
Док Браун
7

Возможно, противоречит интуитивно, автоматизированное тестирование может фактически сократить время разработки по сравнению с отсутствием тестирования. Так что это победа победа.

Идея состоит в том, что тесты способствуют на нескольких уровнях

  1. Заставить строгие требования сбора и спецификации

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

  2. Разработчики знают, когда функция завершена

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

  3. Ошибки, внесенные новыми функциями, мгновенно обнаруживаются.

    Они могут легко стоить вам спринта и потребовать переписывания всей функции, если они останутся незамеченными.

  4. Более быстрый цикл выпуска

    Это означает меньше кода в полете, что означает меньше слияния, что означает меньше работы и меньше сложности для разработчиков

Особенно, если у вас есть настройка инфраструктуры тестирования, написание этих тестов занимает меньше времени, чем вы экономите на этих показателях эффективности.

Кроме того, вы экономите время на ручное тестирование, а в итоге получаете лучший продукт.

Ewan
источник
Для меня этот ответ остается в силе или падает в зависимости от того, говорит ли ОП об интеграционных тестах сверх модульных тестов. Если уже есть модульные тесты, то ответ в лучшем случае может показаться умозрительным . Если нет модульных тестов, то, естественно, некоторые автоматизированные тесты лучше, чем вообще никаких.
Робби Ди
Да, я предполагаю, что у нас есть модульные тесты на месте
Marc
1

Мой ответ? Возможно, вероятно нет .

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

Несколько лет назад блог тестирования Google обсуждал эту тему. Я могу только согласиться с автором. Хороший тест должен быть быстрым , надежным и изолировать сбои , функции, которые тесты EOE не способны предоставить вам.

Я работал над приложением, в котором было проведено более 12 часов сквозных тестов, охватывающих множество сценариев. В конце концов нам удалось распространить эти тесты на разные машины, контролируя запуск, выполнение и окончание тестов, собирая и объединяя результаты. Тестируемое приложение было монолитным (то, что его легче установить и запустить в тестирование) и было кошмаром для поддержки тестов.

Большую часть времени мы поддерживали тесты, а не улавливали ошибки по их результатам. Обнаружение источника ошибки в сквозном тесте занимает много времени. Мы также рассмотрели множество «ложноотрицательных» тестов и немного времени, чтобы понять проблему и исправить ее: проблемы с загрузкой Java-апплета, ожидаемый элемент, не найденный на странице (плюс другие проблемы со скоростью автоматизации), поддержка кода запроса, который просто используются в тесте памяти базы данных (потому что исходный запрос использует специфический код базы данных) и т. д.

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

Итак, мой консервативный совет - используйте тестовую пирамиду от Google:

В качестве хорошего первого предположения Google часто предлагает разделение 70/20/10: 70% модульных тестов, 20% интеграционных тестов и 10% сквозных тестов. Точная смесь будет отличаться для каждой команды, но в целом она должна сохранять форму пирамиды.

Dherik
источник
0

По моему опыту, тестирование E2E, независимо от критичности приложения, всегда разумно. Я всегда думаю, что в худшем случае, если дела пойдут грубо, тебе удобно стоять перед руководством и оправдывать свой подход? Если нет, то вам нужно изменить свой подход. Многие организации сводят к минимуму важность и ресурсы, выделяемые на тестирование, но будьте уверены, что когда что-то пойдет не так, все будут искать кого-то виноватым, и если вы приняли решение ограничить тестирование или дали этот совет, то вы - один в увольнении линия.

Слишком часто разработка программного обеспечения требует внимания к организационной политике.

user1232212
источник
0

«Хорошо известно, что комплексные и интеграционные тесты являются дорогостоящими».

Я думаю, что я не согласен с этим утверждением.

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

Во-вторых, с точки зрения инструментов, E2E не имеет тенденцию замедлять внутреннюю эволюцию продукта и длится дольше. Если вы подумаете об этом, фактическая функциональная поверхность большинства продуктов редко меняется так сильно, а внутренне она может подвергаться всевозможным разработкам. В результате, как только тестовая оснастка запущена и работает, она обычно работает очень хорошо. В качестве примера, если мы вернемся к аналогии с автомобилем. Тот же тестовый сценарий "возьми его для езды" в значительной степени подойдет для Ford Model T, как и для Tesla. Как и инвестиции в прокатные дороги, аэродинамические трубы, установки для проверки герметичности и т. Д. Сколько из внутренних испытаний компонентов имели бы такой хороший ROI в течение их жизненного цикла?

Где тестирование E2E имеет тенденцию быть более дорогим / неуместным, хотя оно находится в начальной настройке и используется ли оно для того, чтобы все попробовать и протестировать. Прагматично, я думаю, что лучший способ избежать этой ловушки - это приоритеты, автоматизирующие тестирование вещей, которые:

  1. Легко автоматизировать и вряд ли нуждается в большом обслуживании, чтобы продолжать работать.
  2. Потратьте больше времени на применение последовательных, адекватных, ручных процессов тестирования.
  3. Риск, из-за которого вы или ваш начальник выглядите как идиоты, если продукт выпущен с поврежденным продуктом

Используйте любую форму тестирования, включая E2E, которую вы считаете подходящей. Фокус на тех, хотя.

shufflingb
источник
0

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

Вы должны спросить, что является наихудшей ошибкой, которая реально может оказаться в производстве из-за отсутствия E2E-тестирования. И помните закон Мерфи.

JacquesB
источник
0

Я предполагаю, что этот вопрос касается корпоративных веб-приложений.

Моя рекомендация для средне-критических вещей:

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

Я думаю, что большинство тестов должно быть на уровне API или на уровне компонентов. Меня не волнуют модульные тесты, которые выполняют только некоторые внутренние функции.

Mike76
источник