Поднажми еще раз: повторный прогон тестов – плохая идея |
19.10.2023 00:00 |
Автор: Виктор Славчев (Viktor Slavchev) В офисе прекрасный солнечный день, вы пришли туда раньше всех, потому что вы долбаный трудяга; вы схватили огромную чашку крепкого кофе и большой стакан воды, чтобы избежать обезвоживания, сели на свое место и смотрите на старого доброго CI-товарища. Но что же вы видите?! Падение, красную метку, проблему, какой ужас… Но вы знаете, что делать – перезапустить, пересобрать билд, перераскаяться во всех ваших тест-грехах, и спустя 30-90 минут… вуаля, зеленый прогон! (если не помогло, повторяйте все вышеперечисленное, пока не добьетесь успеха; все, кроме кофе, а то схватите передозировку). Знакомо звучит? Да, именно этим заняты ваши коллеги, «исправляющие нестабильные тесты». Сколько раз вас нужно ударить в одно и то же место, чтобы вы поняли, что это больно? Честно говоря, иногда эти повторные прогоны напоминают мне мультик о Томе и Джерри, в котором Том снова и снова наступает на лопату, грабли и другие садовые инструменты. Обращаюсь к вам, о перепрогонщики: если вы идете мимо яблони, и вам на голову падает яблоко, будете ли вы трясти дерево, чтобы добиться еще одного яблока и убедиться, что это и правда больно? Если срабатывает пожарная сигнализация, остановитесь ли вы поглядеть, не прекратится ли это само по себе, или же срочно эвакуируетесь? Конечно же, нет, в обоих случаях вы признаете существование проблемы и будете действовать соответственно. Если вы попытаетесь выключить «сигнализацию» и сделать вид, что проблемы больше не существует, вы ведете страусиную политику. Итак, где же кроется настоящая проблема? Простая математика прогона тестов «Мы сделали тесты стабильнее, добавив повторные попытки и повторные прогоны» — вот что частенько можно слышать от разработчиков и QA-автоматизаторов. Довольно легко понять, как повторные прогоны тестов дают иллюзию «повышенной стабильности». Вот простая формула вычисления процента упавших прогонов: (количество упавших прогонов / общее количество прогонов) * 100 Последняя часть нужна для превращения числа в проценты. Пример: допустим, ваш тест падает в 10 случаях из 100. Применим формулу: процент отказов = (10/100) = 0,01*100 = 10% (это, на самом деле, очевидно). Теперь вы добавили в ваш нестабильный тест «повторный прогон», чтобы «стабилизировать» его, и он будет запущен еще дважды. Формула станет выглядеть так: Процент отказов = 100 прогонов + (10 * 3 для повторных прогонов) или (10/130)*100 = 7,69%. По сути, вы просто увеличиваете общее количество прогонов, чтобы уменьшить долю в общем количестве, растворяя количество отказов в большом ведре прогонов. Это мошенничество, а не решение! Ложная тревога и порядок действий Именно в этом и суть нестабильных тестов – это ложная тревога, сломанная сигнализация, набат, не работающий как следует. Если у вас сломана сигнализация, каковы ваши действия? Конечно, починить ее. Слышали ли вы о пожарных, которые «перезапускают сигнализацию» еще пять раз, чтобы доказать вам, что пожара нет, в то время как ваша попка подгорает? Нет. Итак, у вас только один разумный вариант – исправить чертов тест. Не можете исправить? Удалите его, баба с возу – кобыле легче. Для меня тут вообще нет дилеммы, потому что логика тут вот какая:
Видите повторяющуюся часть? Исследовать – «любой упавший тест – повод для исследования» (Маарет Пюхяярве), и именно это вам нужно сделать – приложить свой труд, чтобы сделать с этой информацией что-то значимое, а не обманывать себя и коллег. Тупые оправдашки перепрогона тестов Наиболее распространенные объяснения для перепрогона тестов:
Повторный прогон тестов – ложная, неэффективная, аморальная QA-практика Больше всего меня, думаю, выводит из себя то, что повторный прогон упавших тестов – это просто аморально. Черт возьми, кого вы там пытаетесь обмануть? Вас самих и ваших коллег. Если мы, как QA/тест-специалисты, должны повышать качество продукта, добросовестно предоставлять заинтересованным лицам или внутренним клиентам подробную информацию о рисках и статусе продукта, то как, то, что вы им лжете, соответствует этим задачам? Стоит ли приносить в жертву качество, бизнес-успех и свое ценное время, чтобы защищать какую-то выдуманную, поддельную репутацию нас как инженеров-автоматизаторов? Итак, скажите мне – какое наитупейшее оправдание повторных прогонов слышали вы? |