среда, 21 декабря 2011 г.

Идея для парного тестирования

      Уже некоторое время ношусь с идеей для парного тестирования, но пока нет возможности опробовать ее на практике. Делюсь - может кому пригодится.
      Сразу уточним: под парным тестированием в данном случае имеется в виду не то тестирование, когда двое сидят за одним компьютером и один тестирует, а другой смотрит.
Тогда о чем это мы? А вот о чем:
    
      Есть задача: быстро провести над ПО ряд заранее спланированных тестов. 

      Например, нужно выяснить какие требования ТЗ на данный момент система выполняет, а какие нет. 
      Набор тестов может представлять собой пакет подробных пошаговых сценариев или чек-лист, где каждый тест описан в одну строчку - не важно.  Важно то, что тесты требуют участия человека (т.е. они не автоматизированы) и время на проверку ограничено.

      Проблема возникает, когда мы движемся по плану и находим дефект. Нашли - это, конечно, ура :) . Но в этот момент тестировщик становится перед выбором: исследовать дефект или продолжить прогон тестов.

      Что выбрать зависит от приоритетов. И в зависимости от выбора мы выигрываем и проигрываем в следующем:

Исследовать дефект
Продолжить прогон тестов
+ мы подробно сообщаем о дефектах в проверенной функциональности.
- объем проверенной функциональности уменьшается (время тратится на исследование дефектов и подписание их в баг-трекер)
+ мы быстро получаем общую картину состояния системы: выясняем где проблем нет, а где они есть.
- о проблемах, которые есть, мы пока не можем дать подробную информацию

      Исследование дефекта и занесение отчета о нем в баг-трекер может занять пять минут, а может и двадцать – зависит от дефекта. Если у вас дефекты трудноуловимы и вы нашли в день, скажем шесть штук, то 6*20 = 2 часа выпало из тестирования по плану.

      Кто из тестировщиков не испытал это на себе? Когда мучительно продираешься сквозь дебри свежего билда, аки первопроходец сквозь джунгли. На каждом шагу - то лиана, то удав, то коварное тропическое насекомое. А можно на тигра наткнуться.  Или на слона. И каждый раз, когда видишь подозрительные следы, все внутри рвется вперед - исследовать, описать, захватить! Но захватив в плен врага, потом долго вспоминаешь, что там было до начала погони? На каком тесте я остановилась и что делала? В результате процесс движения по плану напоминает езду по ухабистой дороге, когда то и дело съезжаешь в канаву. И в конце дня обнаруживаешь, что хоть весь день едва ли дым из ушей не шел, но в результате - половина тестов не выполнена.

      Если перед нами стоит задача быстро прогнать набор тестов, то разумно при обнаружении бага делать себе пометки, но продолжать тестировать по плану. А к исследованию дефектов перейти после прогона всех тестов. Но во-первых, для тестировщика это морально травмирующее решение - знать о баге и не сообщить о нем немедленно, а во-вторых - это риск, ведь проблема может оказаться серьезной, а мы не доложим о ней вовремя.

      Как все тесты выполнить, и все дефекты исследовать, и сделать это быстрее, чем обычно?

Решение: распараллелить прогон тестов и исследование дефектов.

Как это сделать:
      Команда из двух тестировщиков, каждый за своим компьютером. Первый тестировщик начинает выполнять тесты по плану. И тестирует до тех пор, пока не будет обнаружен дефект. В этот момент подзывается напарник, которому показывают замеченные симптомы. Напарник подхватывает дефект, исследует и подписывает в баг-трекер. Первый тестировщик после передачи дефекта продолжает методично двигаться по плану.  И так до конца списка тестов.

Графически временные затраты можно представить так:
 
Последовательный вариант:

Параллельный вариант:






Из графиков видно, что мы можем немного проиграть в трудозатратах (суммарные человеко-часы двоих тестировщиков), но получаем выигрыш в скорости.  Мы сможем раньше закончить тестирование по плану, владея при этом полной информацией по обнаруженным багам. Во всяком случае более полной, чем в последовательном режиме работы.

Плюсы и минусы параллельного подхода:
+ прогон запланированных тестов будет завершен раньше (чем в последовательном режиме);
+ найденные  дефекты будут сразу же исследованы и подписаны, не надо ждать окончания тестирования по плану;
- нужно два тестировщика, вместо одного;
- второй тестировщик простаивает в периоды между дефектами (на графике это серые зоны);
- есть риск того, что второй почувствует себя на вторых ролях;
- есть риск того, что первому будет скучно;
-  заметность (visibility) работы второго тестировщика в баг-трекере растет, а у первого нет.

Можно ли как-то нивелировать минусы? Давайте посмотрим:

Минус
Что делать тест тим лиду
Нужно два тестировщика, вместо одного.
Этот аспект обойти нельзя. Если вы - единственный тестировщик в проекте или все остальные заняты неотложными задачами, то данная тактика для вас неприменима.
В этом случае придется работать в последовательном режиме.
Второй тестировщик простаивает в периоды между дефектами.
Нужно дать задание на периоды простоя. Например:

1) Поручить второму прогон тестов с другого конца списка. Т.е. пока первый прогоняет тесты для функции “А”, второй начинает тестировать функцию “Я”. Как только один  из них находит дефект, тестировщик №2 бросает прогон тестов и приступает к исследованию дефекта.

2) С другой стороны, дополнительная ветка задач увеличивает время переключения между ними. Трудно сосредоточиться, когда вы то и дело дергаетесь то на одно, то на другое.  Так что в “серых” зонах можно устраивать классическое парное тестирование: один тестирует, другой смотрит на экран первого.

3) Придумать еще что-нибудь полезное.
Есть риск того, что Ловец Багов почувствует себя на вторых ролях.

        Вести разъяснительную работу. Неустанно объяснять как сильно и почему нужна и важна работа каждого из пары. Можно делать это громко и во всеуслышание.
        Поднять престиж этих ролей. Дать ролям гордые названия, сделать переходящие знаки отличия для каждой роли.
        Менять местами тестировщиков. В этом билде Петя прогоняет тесты, а Вася ловит дефекты.  А в следующей сборке - наоборот.
Есть риск того, что Планопроходцу будет скучно.
        Дать эту роль человеку, способному не скучать за такой работой.
        Менять местами тестировщиков.
        Замотивировать.
Заметность (visibility) работы второго тестировщика в баг-трекере растет, а у первого нет.
Вообще-то, если в компании и в проекте все в порядке, то это не должно не должно никого волновать. Вы, как руководитель группы, прекрасно знаете кто какой вклад делает в общее дело. И это уже ваша задача - обеспечить заметность работы ваших ребят начальству.

Но если так случилось, что количество багов важно, можно:
        менять тестировщиков местами;
        вносить эти дефекты “на счет” обоих напарников.
   
      Свои мысли по поводу этой идеи можно бестрепетно излагать в комментариях :).

20 комментариев:

  1. Есть подозрение, что где-то что-то забыли. И забыли что-то важное.
    Когда будете пробовать - посадите еще двух человек. Третьего, что-бы он вел журнал. Четвертого - гонять эти же тесты в традиционном режиме. Полученная информация от такого исследования с лихвой покроет трудопотери.

    ОтветитьУдалить
  2. Про еще двух человек - это шутка или всерьез? И что именно важное на ваш взгляд забыто?

    ОтветитьУдалить
  3. А в чем, собственно, преимущество перед тем, чтобы просто (или как-то сложно) разделить работу на двоих? Никто не будет страдать от однообразия работы и вторых ролей, а если кто-то завершит свой кусок раньше, просто поможет второму.

    ОтветитьУдалить
  4. to Кузьмич Максим,

    обратите внимание на специфику задачи: нужно не тестировать систему с целью нахождения дефектов, а выяснить, какие требования выполняются, а какие нет. И выяснить это в короткие сроки.

    Время, нужное на «чистый» прогон известного количества известных тестов можно предсказать довольно точно (мы, например, в свое время вели хронометраж, чтобы собрать эту информацию). Время, нужное на исследование неизвестного количества неизвестных дефектов предсказать либо нельзя вообще, либо можно, но очень приблизительно.

    Просто разделить работу на двоих, значит поделить на двоих как известную величину (время на тесты), так и неизвестную (время на дефекты). Да, в целом задача будет выполнена раньше, но если в системе много проблем, то эта неизвестная величина может оказаться большой и спутать нам карты. Вплоть до того, что ни один из двоих не завершит свою порцию тестов вовремя.

    Если мы отделяем тесты от дефектов, мы уменьшаем влияние неизвестной величины (время на дефекты), передавая ее всю отдельному человеку. В этом случае сроки окончания тестирования по плану предсказать можно с гораздо более высокой точностью.

    То есть преимущество в том, что мы можем предсказать сроки выполнения задачи более точно.

    ОтветитьУдалить
  5. В предложенном виде не получится. Тут просто предложено (и вроде как сделано обоснование) спихивать работу по расследованию отдельных багов на кого-то другого.

    Я бы не хотел быть тем, на кого такую работу спихивают :)

    Парами плодотворно работается иначе, в стиле "водитель - штурман", да еще иногда со сменой ролей.

    ОтветитьУдалить
  6. На первый взгляд, прикольная штука! Решается задача минимизировать время до получения ответа от тестирования.
    На самом деле, вторым человеком может быть не обязательно тестировщик, а, например, менеджер, если ему важна скорость и в данный момент нет более важных задач. Или разработчик.
    Я могу представить, когда это применимо.

    ОтветитьУдалить
  7. Вот, только что выяснила у своих, у нас есть похожая практика:
    При быстром ручном тестировании по чек-листу берутся за дело два человека до первого "плавающего" или сложного в инвестигейте бага. После этого один переходит в режим занесения, второй - продолжает тестирование. Это эффективно в том числе, если весь чек-лист passed.

    ОтветитьУдалить
  8. 2Леш Лупан: а здесь не нужно "брать и делать, как написано", это в большинстве случаев неправильно. Нужно понять принципы, и при встрече подходящей задачи попробовать применить с учетом своих особенностей. А не критиковть "не сработает", "я бы не хотел".

    ОтветитьУдалить
  9. to Алексей Лупан,

    мне кажется плодотворность работы зависит от отношения людей к выполняемой работе и от их личных склонностей.

    Некоторые стонут, когда в пятнадцатый раз за день движение по чек-листу прерывается из за очередного нерегулярного дефекта. Это действительно раздражает.
    И наоборот, есть люди, которые охотно будут заниматься исследованием багов, потому что это интереснее, чем выполнять сценарии. Я была бы рада, если бы кто-то спихнул на меня такую работу :)

    Насчет стиля "водитель-штурман": по-моему этот подход хорош во время тестирования, цель которого - поиск багов.

    Идея же в посте заточена под задачу "выяснить, какие требования выполняются, а какие нет".
    Смена ролей в этом случае тоже предлагается (три последние строки второй таблицы).

    ОтветитьУдалить
  10. to Julia Nechaeva,

    о, как интересно, у вас что-то похожее есть!

    я тут сейчас еще подумала и мне кажется можно расширить список задач, когда может быть полезен такой подход. Вот:
    1) выяснить, какие требования выполняются, а какие нет;
    2) дымовое тестирование (важно быстро узнать где "дымит" и решить возвращать ли билд на доработку)
    3) регрессионное тестирование (если нужно _быстро_ узнать что отвалилось, а что нет).

    А можно чуть подробнее, в каких случаях вы применяете свой похожий подход?
    "быстрое ручное тестирование по чек-листу" - когда, в каких случаях вы проводите такое тестирование?

    ОтветитьУдалить
  11. to Pollyanna
    Ну а что мешает двум участникам выполнять проход по чек-листу и фиксировать намеки на дефекты, но не влазить глубоко в них, а когда проход будет выполнен, вернуться к своим записям?

    Т.е. в посте предлагается не решение задачи "как можно быстрее пройтись по тестам", а другой "за предсказуемое время пройтись по тестам и получить какую-то информацию о дефектах". Но такую задачу можно решать и менее экзотическими способами.


    to Julia Nechaeva
    Перекидывание на другого сотрудника именно сложного дефекта -- правильная мысль, согласен. Но все подряд перекидывать точно не стоит. А если время позволяет, то лучше наоборот, разбираться сразу вдвоем, чтобы учить менее опытного сотрудника.

    ОтветитьУдалить
  12. to Кузьмич Максим,

    Если не вникать глубоко в дефекты, то для прохода по чек-листу достаточно и одного человека. Второй нужен, чтобы уменьшить риск того, что мы пропустим важный дефект, о котором нужно было узнать сразу.

    ОтветитьУдалить
  13. 2Максим: в ситуациях, когда мы выигрываем общее время засчет трудозатрат, не время обучать сотрудников )) Только если умению быстро перестраиваться и работать в сложных ситуациях.
    Обучать нужно в спокойное время. Задачи, о которых пишет Жанна, не предполагают обучения сотрудников в этот момент.

    ОтветитьУдалить
  14. Неплохая идея именно распараллеливания, т.к. на 'парное' тестирование как-то не очень похоже

    ОтветитьУдалить
  15. to Katya Kameneva,

    да, согласна, термин "парное" обычно к другому подходу относят. Поэтому в начале поста я специально это оговариваю.

    ОтветитьУдалить
  16. Идея интересная. Тестеры должны меняться ролями в этой схеме. Ну если это нормальные тестеры, а не странное инфантильное стадо, готовое спорить вместо работы о том, кому что больше нравится делать;-)
    Есть работа, делай ее за бабло и никакой вкусовщины.

    ОтветитьУдалить
  17. "Есть задача: быстро провести над ПО ряд заранее спланированных тестов. "
    Тесты спланированы, т.е. тот, кто будет проверять, будет по сути идти по плану, который не факт что он готовил?

    Сергей верно заметил, добавьте 2х человек и уже анализируйте полученные конкретные цифры. Если есть возможность на разных проектах. Если есть возможность посмотреть: Fixed Cost и T&M.

    "Есть работа, делай ее за бабло и никакой вкусовщины."
    А не нравится - увольняйся\уволим?:)

    Юлия, вопрос:
    "Это эффективно в том числе, если весь чек-лист passed. "
    А сколько времени подобное используется? В чем выражается эффективность? Время\деньги\объемы работы?

    ОтветитьУдалить
  18. to Сергей Атрощенков,

    да, тесты спланированы заранее. И не факт, что готовил их тот, кто будет их выполнять. Хотя этот вариант не исключен.

    "добавьте 2х человек и уже анализируйте полученные конкретные цифры. Если есть возможность на разных проектах. Если есть возможность посмотреть: Fixed Cost и T&M. "

    я бы только рада провести полноценное исследование этого подхода, но не уверена, что заказчики согласятся оплачивать наши эксперименты :)
    Верно ли я поняла, что еще два человека - это команда, которая должна дублировать работу первой пары тестировщиков, чтобы получить больше материала для анализа?

    ОтветитьУдалить
  19. "да, тесты спланированы заранее. И не факт, что готовил их тот, кто будет их выполнять. Хотя этот вариант не исключен."

    Следует учитывать риск демотивации того, кто прогоняет просто тесты. Скриптовое тестирование, без разнообразия, может эмоции аналогичные тем, которые появляются во время ручного регрессионного тестированя, одного и того же куска функционала.

    "Верно ли я поняла, что еще два человека - это команда, которая должна дублировать работу первой пары тестировщиков, чтобы получить больше материала для анализа? "

    Я здесь имел ввиду: один человек не предвзято собирает информацию о парной работе тестировщиков. Интуиция мне подсказывает, что не всё может пройти гладко, просаживание по задачам начнется либо у первого либо у второго. Не исключены конфликты (не смертельные, но время менеджера на разрешение этого - уйдет).

    А второй тестировщик - будет делать ту же самую работу, что делают двое. Независимо от них, желательно без общения с ними.

    По результатам можно будет сравнить: качество и количество дефектов, затраченное время.

    Ваш вариант, с 2я парами, тоже интересен, особенно при сработанных парах, при ротации между парами.

    Да, заказчику на такое, добро давать может очень тяжело. К сожалению :)

    ОтветитьУдалить
  20. to Вася,

    у нас отличные тестеры :) инфантильных и стадных не держим :)

    to Сергей Атрощенков,

    насчет демотивации я тоже опасаюсь, поэтому продумываю меры борьбы с нею. Во второй таблице в посте приведены пока только общие идеи. Буду думать дальше.

    Огромное спасибо за объяснение насчет дополнительных людей! Наконец-то я поняла, что имелось в виду! Намотала на ус, если будет случай - попробую применить. Спасибо :)

    ОтветитьУдалить