Каждый раз, когда кто-то говорит о «фазе тестирования», я прихожу в ужас. Худшим примером, который я недавно видел, была публикация в Agile группе, в которой был задан вопрос: «Сколько дней мы должны выделить для тестирования? Если нам требуется 10 дней на разработку, хватит ли нам 10 дней для тестирования? Или лучше 15?».
Я никого не осуждаю. Каждый с чего-то начинает и делает ошибки. Но на самом деле, нам нужно разобраться с тестированием раз и навсегда. Тестирование – не фаза, и каждый должен это понимать.
В Waterfall (Водопаде) тестирование было фазой
В старые недобрые времена Водопада тестирование было большой фазой. Никто не ничего не тестировал, пока не была завершена вся разработка. Задумайтесь об этом на мгновение: никто ничего не проверял, пока вся разработка не была «закончена». Здесь, конечно, есть два больших вопроса:
- Почему не провести тестирование до того, пока вся разработка не будет закончена? Почему не протестировать что-то сразу, как только появилась возможность начать это тестировать?
- Как узнать, что разработка «закончена»? Ведь на самом деле разработка не будет закончена, пока не будут выполнены все тесты.
В результате поэтапного подхода возникали огромные проблемы:
- тестировщики были не слишком загружены работой (помимо написания больших бесполезных документов) до тех пор, пока код не был «готов к тестированию»;
- передачи работы между фазами создавали зависимости;
- работы блокировались в ожидании одобрения;
- росли задержки сроков тестировщиками, проводившими к тому же ручное тестирование вместо автоматического;
- процветал «ад интеграции» и, как следствие, отсутствовало качество и целостность.
Поэтому в Agile тестирование не должно быть фазой
- Мы должны начинать тестировать как можно раньше и как можно чаще.
- Разработка не завершена, пока разработка и тестирование не будут завершены, потому что (вот ключевой момент) тестирование является частью разработки.
Agile в значительной степени позаимствовал идеи Lean Manufacturing (который многие идеи позаимствовал у Эдварда Деминга). В Lean качество встроено в систему, а не проверяется и не исправляется в конце. Таким образом, Agile разработка программного обеспечения рассматривает тестирование как основную и неотъемлемую часть разработки, а не как быструю «проверку», которая делается в последнюю минуту.
Тестирование перестает быть фазой и становится деятельностью, возникающей параллельно с разработкой.
Начинайте тестировать как можно раньше
Agile поощряет начинать тестирование как можно раньше. Если вы придерживаетесь подхода «разработка через тестирование» (Test Driven Development), что неплохо, то тестирование фактически начинается еще до того, как вы начнете писать код. Это потому, что TDD включает в себя написание и запуск тестов до того, как будет написан код для прохождения тестов. Таким образом, тестирование – одно из самых первых ваших действий, а не последнее.
Тестируйте как можно чаще
Тестирование должно проводиться очень часто, не один раз за спринт и, определенно, не один раз за релиз. Если вы работаете с маленькими партиями задач и вносите много небольших изменений (как и должно быть), то вам следует часто интегрироваться. В идеале один или несколько раз в день. И если вы часто интегрируетесь, вам нужно будет часто тестировать.
Непрерывная интеграция подразумевает внесение множества небольших изменений в кодовую базу, и для того, чтобы это произошло без риска разрушений, вам потребуется множество автоматических тестов. И вам нужно будет запускать это множество автоматических тестов очень часто. Модульные (unit) тесты занимают микросекунды, поэтому могут и должны выполняться сотни или тысячи раз в день. Интеграционные и приемочные тесты более длительные и нестабильные, поэтому их выполняют реже, но все равно не реже одного или даже нескольких раз в день.
Осторожно, мини-водопад!
Некоторые люди, особенно новички в Agile и Scrum, просто копируют все большие фазы Водопада, сокращают их и вставляют получившийся поэтапный мини-водопад в каждый спринт:
- Анализ
- Проектирование
- Разработка
- Тестирование
Не делай этого! Вы получите все «прелести» Водопада. Тестеры будут сидеть и ждать, пока все истории будут готовы к тестированию, вместо того, чтобы тестировать с самого начала. Качество откладывается на последнюю минуту, а не будет встроено с самого начала.
Спринты не имеют фаз
Внутри спринта нет фаз. Каждый день команда должна быть сфокусирована на том, чтобы перемещать небольшие кусочки работы по системе. Качество является фундаментальной частью этого процесса и никогда не должно рассматриваться как отдельная фаза.
Автор: Leon Tranter
Источник
Книга в подарок
Опубликована наша книга «Прорыв. Единственный путь развития бизнеса». Это бизнес-роман о производственном предприятии, столкнувшимся с «потолком» в своем развитии. Для прорыва в развитии руководству и персоналу приходится преодолеть собственные, выстраданные на опыте, но устаревшие убеждения. Читателю предлагается пройти через этот прорыв вместе с героями. Вы увидите трудности такой трансформации, осознаете природу сопротивления изменениям и реальный путь к таким изменениям.
Подпишись на наш Telegram-канал и получи книгу в подарок!