В моей компании мы успешно работаем с гибкими практиками, но без использования итераций. Основная причина в том, что мы не можем найти чистый способ вписаться в QA в цикле итерации.
Мы понимаем QA как дополнительный бит проверки для определенной сборки (кандидата на выпуск) до того, как эта сборка будет развернута на клиенте. Дело в том, чтобы избежать того, что один злонамеренный коммит повредит весь релиз. Поскольку вы никогда не знаете, какой это, QA должен ждать, пока все функции / коммиты для релиза будут в сборке. (Не допускаются последние известные слова «Это было просто крошечное изменение».)
Если QA находит ошибки в кандидате на релиз, разработчики исправляют эти ошибки в соответствующей ветке релиза (и объединяют ее в транк). Когда все ошибки исправлены, развертывается новая сборка для QA для повторного тестирования. Только в том случае, если в определенном кандидате на выпуск не обнаружены ошибки, он предлагается заказчику для проверки.
Это обычно занимает от двух до трех кандидатов, около одной недели, на выпуск. Время написания исправлений обычно намного меньше, чем усилия по тестированию. Таким образом, чтобы разработчики были заняты, они работают над выпуском N + 1, а QA работает над N.
Без использования итераций это не проблема, потому что мы можем перекрывать работу для выпусков N и N + 1. Однако, насколько я понимаю, это несовместимо с итеративными подходами, такими как Scrum или XP. Они требуют, чтобы итерация была доступна в конце, и все усилия по тестированию должны быть включены в итерацию.
Я считаю, что это обязательно приводит к одному из следующих нежелательных результатов:
(A) Разработчики бездействуют в конце итерации, потому что QA нужно время, чтобы проверить кандидата на выпуск, и работа по исправлению ошибок не полностью поддерживает занятость разработчиков.
(B) QA начинает работать уже до того, как первый релиз-кандидат готов. Это то, что в основном рекомендуется на Stack Exchange. Но это не то, что моя компания понимает как QA, потому что нет конкретного протестированного кандидата на выпуск. И «крошечное изменение», которое ломает все, все еще может быть внесено незамеченным.
(C) Ошибки переносятся на следующую итерацию. Это также рекомендуется на Stack Exchange. Я не думаю, что это решение вообще. В основном это означает, что мы никогда не получим проверенную сборку, потому что всякий раз, когда исправляются ошибки, новые, непроверенные коммиты также добавляются в ту же ветку.
Есть ли выход из этой дилеммы?