Какие факторы определяют решение о завершении тестирования в проекте?

Ответ

Решение о завершении тестирования — это взвешенная оценка рисков, основанная на заранее определенных и измеримых критериях (Exit Criteria).

Ключевые факторы:

  1. Выполнение критериев завершения (Exit Criteria):
    • Достигнут целевой процент покрытия кода тестами.
    • Все запланированные тестовые сценарии выполнены.
    • Выполнены требования к качеству: отсутствуют открытые баги с приоритетами Blocker/Critical, количество багов High/Medium ниже установленного порога.
  2. Оценка рисков: Анализ потенциального воздействия необнаруженных багов на бизнес и пользователей. Приемлемый уровень риска согласуется с продукт-менеджером.
  3. Ограничения по срокам и бюджету: Реальные сроки релиза могут диктовать окончание тестовой фазы.
  4. Стабильность продукта: Частота появления новых багов снизилась до минимума, основные функциональные потоки работают стабильно.

Пример формализации критериев (псевдокод):

def should_stop_testing(project_metrics, risk_profile="standard"):
    exit_criteria = {
        "test_execution": project_metrics.percent_tests_executed >= 100,
        "critical_bugs": project_metrics.open_critical_bugs == 0,
        "high_priority_bugs": project_metrics.open_high_bugs <= 3,
        "new_bug_rate": project_metrics.new_bugs_last_week < 5
    }
    # Для высокорисковых проектов критерии строже
    if risk_profile == "high":
        exit_criteria["high_priority_bugs"] = 0

    return all(exit_criteria.values())

Решение принимается совместно QA-лидом, менеджером проекта и продукт-менеджером.

Ответ 18+ 🔞

Слушай, ну вот смотри, все эти умные книжки про тестирование рассказывают, как надо красиво и по науке. А на деле-то часто получается, что мы, как Герасим с Муму, стоим у реки и думаем: топить или не топить, то есть заканчивать или нет. Страшно, блядь, ошибиться!

Так вот, чтобы не быть немым крестьянином, который только «Му-му» мычит, когда у него спрашивают «чё по релизу?», нужно иметь чёткие, ёбта, ориентиры. Не просто «ну вроде всё ок», а измеримую хуйню, в которую тыкнуть можно.

На что смотрим, когда решаем, что пора валить домой:

  1. Критерии завершения — наш святой грааль. Это не абстрактные пожелания, а конкретные цифры, которые мы все заранее подписали кровью.

    • Накрыли тестами нужный процент кода? Не «ой, вроде много», а вот эта вот циферка в отчёте.
    • Все запланированные тест-кейсы прошли? Все, блядь, до единого. Не «ну кроме этих трёх хитрых, их завтра доделаем» — нихуя, сегодня.
    • Качество в норме? Нет открытых багов, от которых продукт горит синим пламенем (Blocker/Critical). А багов уровня «высокий» и «средний» — не больше, чем мы сами себе позволили. Иначе это не релиз, а автоподжог.
  2. Оценка риска, или «а нам на это похуй?». Вот представь: нашли баг — кнопка «купить» мигает розовым раз в сто нажатий. Риск? Пользователь, может, офигеет, но купит всё равно. А если баг — «после оплаты деньги списываются, а заказ не создаётся»? Это уже, простите, пиздец и разговор с юристами. Оцениваем, какой риск мы готовы затолкать в релиз, и договариваемся об этом с продактом. Он потом не скажет «а чё так вышло?».

  3. Давление сроков, оно же «пора уже, блядь». Реальность — жестокая шлюха. Иногда календарь и бюджет кричат «СТОП!» громче, чем все наши идеальные критерии. Приходится принимать решение: вот с таким набором косяков мы можем жить, потому что иначе проект накроется медным тазом.

  4. Стабильность, она же «перестало сыпаться». Если в последние дни тестирования новые баги появляются реже, чем трезвые мысли у менеджера в пятницу, — это хороший знак. Основные сценарии работают, не падают. Продукт устаканился.

А вот как это может выглядеть в коде, чтобы не мычать, а чётко знать:

def пора_ли_уже_закругляться(метрики_проекта, профиль_риска="стандартный"):
    наши_требования = {
        "тесты_выполнены": метрики_проекта.процент_выполненных_тестов >= 100,
        "критические_баги": метрики_проекта.открытые_критические_баги == 0,
        "баги_высокого_уровня": метрики_проекта.открытые_баги_хай <= 3,
        "темп_появления_багов": метрики_проекта.новые_баги_за_неделю < 5
    }
    # Если проект важный, как ипотека твоей бабушки, то затягиваем гайки
    if профиль_риска == "высокий":
        наши_требования["баги_высокого_уровня"] = 0

    # Если ВСЕ условия True — можно нести билд на прод. Если нет — сиди, работай.
    return all(наши_требования.values())

И главное, ёпта! Это решение не тестировщик в одиночку принимает, упиваясь своей властью. Нет! Это коллективное творчество: QA-лид, менеджер проекта и продакт-менеджер садятся, смотрят на цифры, на риски, на календарь и вместе говорят: «Да, хуле, пошли уже в прод, или нет, блядь, ещё недельку потыкаем». Чтобы потом не было мучительно больно, как Герасиму на берегу.