Сколько тестировщиков нужно вашему проекту? |
03.02.2017 00:00 |
Автор: Наталья Руколь Многие руководители проектов ищут универсальный ответ на вопрос: «Каким должно быть соотношение тестировщиков и разработчиков»? В некоторых компаниях дело доходит до утверждения нормативов: например, численность тестировщиков должна составлять 40% от команды разработки, или на каждого разработчика должен приходиться один тестировщик. Для обоснования этого соотношения нередко подбирается некая универсальная статистика по отрасли. Существует ли оптимальный рецепт? Правильного соотношения не существуетУниверсальные ответы всегда чреваты неточностью. Представьте: вы приходите к врачу и начинаете ему жаловаться на свою проблему. Он, не дослушав, выписывает лекарство: — Какой у Вас вес? 80? Значит, по нормативу Вам надо пить 2 таблетки в день. Сократив затраты на диагностику, оценку ситуации и поиск подходящего именно вам решения, вы, скорее всего, впоследствии потеряете значительно больше времени на неизбежные в таком случае проблемы. Когда экономия обходится дорогоЕсли ваш «норматив» не подходит вашему проекту, и вы набираете слишком много тестировщиков в команду – это не самое страшное. Как правило, гораздо хуже – нехватка людей. Из-за поздно найденной ошибки могут сдвигаться сроки выпуска всего проекта, а дефект в промышленной эксплуатации иногда приводит не только к лишним расходам (на исправления, техническую поддержку, выпуски хотфиксов), но и к неизбежной потере репутации. И самое главное, хотя и не всегда заметное, – это влияние на общую продуктивность команды. По Теории Ограничений (а также в соответствии со здравым смыслом), производительность всей производственной цепочки определяется продуктивностью самого слабого звена, а значит, и суммарная скорость разработки будет упираться в наименее производительный этап. Допустим, свою работу не успевает сделать команда тестировщиков. Что тогда делает с оставшимся избытком ресурсов команда разработки? Как правило, она частично компенсирует нехватку тестирования! В итоге, разработчикам приходится тратить много сил на дополнительные активности. Мы можем столкнуться с несколькими вариантами таких трудозатрат:
Получается, что задачи тестирования тормозят весь процесс. Экономя на тестировании, которое является более дешёвым по сравнению с разработкой процессом, мы теряем продуктивность разработки! Больше – не значит лучшеМногие руководители проектов все еще свято верят в проектный треугольник: «Хотите сделать что-то лучше, больше? Либо наймите больше людей, либо расширьте сроки». К счастью, эта модель неполноценна. Она не учитывает ни квалификацию команды, ни специфику процесса работ. Когда вы необдуманно добавляете ресурсы в проект, теряется контроль, и добавляется избыточный «белый шум». Я лично участвовала в проекте по спасению крупной компании-разработчика ПО с мировым именем. Проблема на входе звучала как катастрофа: «Мы сорвали сроки выпуска продукта НА ПОЛТОРА ГОДА. В команде уже более 100 человек, но с каждым днём мы находим всё больше проблем, а сроки релиза откладываются всё дальше». В первый месяц мы уменьшили проектную команду до 40 человек, ещё через два месяца вышел успешный релиз. Как найти собственное «правильное» соотношение?Если тестировщиков слишком мало, их проблемы ложатся на плечи разработки. Если слишком много – теряется контроль, генерируется отвлекающий «белый шум», и это также негативно влияет на суммарную проектную производительность. Для формирования вашей уникальной эффективной команды потребуется анализ процесса, продукта и команды. Ниже мы рассмотрим один из возможных алгоритмов ваших действий. Шаг 1-й. Сначала строим процесс, потом расширяем команду. Шаг 2-й. Учитываем критичность программного продукта. В некритичном ПО мелкие ошибки зачастую вообще не исправляются, а потому их поиск и регистрация не имеют смысла. Чем выше степень ответственности проекта, тем большее внимание уделяется мелочам: «мелких» ошибок в таких задачах не бывает. Однажды я работала в команде, тестирующей низкоуровневую операционную систему реального времени, используемую в космической промышленности. На одного разработчика приходилось 7-8 тестировщиков, и мы тщательно покрывали тестами каждый уровень: от взаимодействия с железом и математических функций до интеграции и системного функционирования. Шаг 3-й. Учитываем поддерживаемые окружения. Требования к поддерживаемым окружениям существенно влияют на стоимость тестирования, и в меньшей степени – на разработку. Наглядный пример такой зависимости мы наблюдаем в разработке Android-приложений. Огромное количество производителей телефонов, разные версии Android, альтернативные прошивки, оболочки и настройки самой системы в совокупности дают бесконечное количество комбинаций. Теоретически, разработка под них ведётся в соответствии с общим гайдлайном. На практике в конкретных условиях возможны неожиданные дефекты. Узнать о них можно только эмпирическим путём через тестирование. Для обнаружения ошибки, связанной с определённой прошивкой конкретного «железа», может потребоваться проверить сотню других валидных комбинаций. Разработка будет задействована только в случае обнаружения проблемы, а тестирование – в любом случае. Шаг 4-й. Учитываем сложность продукта. Не стоит упускать из анализа и такое явление, как регрессионное тестирование. Допустим, мы имеем зрелый непростой продукт, кодовая база которого содержит полтора миллиона строк кода. Разработчик вносит маленькое изменение, и… Что проверять? Как узнать, что эти правки ничего не сломали? В качестве примера приведу ещё один случай из своей практики. Когда-то я подрабатывала тестировщиком в веб-компании, разрабатывающей достаточно простые сайты, не содержащие серьёзной функциональности (90% разработок – обычные «визитки»). Моей неполной занятости хватало на то, чтобы проверять результаты работы 30 разработчиков и верстальщиков, не пропуская при этом ни одной серьёзной ошибки. Простые продукты и тестировать очень просто. Шаг 5-й. Учитываем связи с внешними продуктами. Однажды мне на тестирование передали доработку, выполненную программистом меньше, чем за день. В ней было от силы 100 строчек кода, обеспечивающих передачу данных во внешнюю систему управления задачами через её API. За 3 (три!) дня тестирования я завела около 40 серьёзных функциональных дефектов. Все они были вызваны некорректной работой внешнего API или его неактуальной документацией. Разработчику пришлось обходить эти ошибки «костылями» с нашей стороны. ВыводыПридумать какое-то универсальное число и следовать ему – очень просто. Выбрать лучшее соотношение для своего проекта – значительно сложнее. Если вы хотите, чтобы проект был не просто «в норме», а по-настоящему успешен – вам придётся потрудиться! Лучшие результаты будут достигнуты в том случае, если вы для начала проанализируете текущие задачи, внедрите оптимальный процесс, а уж потом примете решение по количеству тестировщиков и разработчиков. Всевозможные «единственно правильные» установки и нормативы могут только увести вас от эффективного решения. Если вас заинтересовали идеи и методики, упомянутые в статье, и вы хотели бы узнать о них больше, или даже попробовать применить их на своём проекте - приглашаем вас на тренинг Натальи Руколь "Школа тест-менеджеров". |