Записи с метками QA

Про обман заказчиков на продаже качества

обман заказчиков

Недавно у меня появился аккаунт на Хабре и я опубликовал на статью «Не обманывайте своих заказчиков». Было много обсуждений в комментариях и я решил сделать более детальное рассмотрение данной темы.

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

Корень проблемы

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

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

Ну и где же тут обман?

Все очень просто — отдавая заказчику «готовую» работу мы не даем ему способа бесплатно и легко контролировать ее работоспособность в будущем. Утрируя, это может звучать так: «Мы закончили работать над X, Y и Z. Но уже через пару недель есть шансы, что они перестанут работать нормально…» Но как же так? Ведь заказчик заплатил за полное завершение работ. Как же ему теперь быть? Ему предлагается очень простое решение — плати нам постоянно дополнительную плату за то, что мы будем контролировать работоспособность на протяжении жизни продукта.

Получается, что стоимость одной конкретной функциональности будет продолжать расти на протяжении всего проекта. И чем быстрее работает команда, тем быстрее будет расти стоимость затрат на поддержание регрессии. Это же нечестно! В жизни бы мы никогда не согласились на такое. Представляете, вы заказываете ремонт, а вам предлагают платить дополнительные деньги за то, чтобы при работе над кухней не развалилась гостиная…

Кому это все нужно?

Почему же при всей ущербности подобной модели она не перестанет применяться? Тут есть несколько причин:

  • Эта модель выгодна аутсорсинговым компаниям. Ведь в этом случае заказчик «попадает в рабство» и постоянно платит даже за то, что уже давно оплачено и должно работать. А как только регрессионная спираль выходит на новый большой виток, то можно нанять еще тестировщиков, к ним тест-лида, тест-менеджера и понеслась…
  • Многим заказчикам объясняют, что «это нормальный подход в IT» и так все работают. Многие из них даже не догадываются об обмане и соответственно не пытаются с ним бороться.
  • Так исторически сложилось в компании и она делает все проекты «по накатанной». Никто не пытается проанализировать варианты улучшения процесса разработки, а уж тем более воплотить их в жизнь.

При этом, во многих современных продуктовых компаниях к такого рода затратам относятся скептически и не поддерживают идею ручного регрессионного тестирования. В таких компаниях нет позиции monkey тестировщика, так привычной для рынка аутсорсинга.

Решение проблемы

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

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

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

Дальше хорошая команда снабжает эти критерии приемки конкретными примерами, данными и «прикручивает» к работающему продукту. Таким образом, добавляется возможность с помощью приемочных тестов в любой момент времени проверить, работает ли та или иная функциональность в продукте после любых изменений. Запустить эти автоматизированные приемочные тесты может любой, обычно они добавляются к Continuous Integration серверу и запускаются на каждое изменение или в ручном режиме.

Почитайте как работает на примере одной команды командное написание приемочных тестов и про эволюцию необходимости таких тестов к запуску в облаке.

Но ведь есть же модульные тесты? Зачем еще раз делать ту же работу? Модульными тестами хороший разработчик покрывает код, чтобы убедиться, что его точечная идея для класса, функции, метода или их связки работает правильно. К сожалению, модульные тесты не способны обеспечить проверку даже возможности запуска приложения, не говоря уже о его функциях. Плюс, приемочные тесты написаны на языке, понятном заказчику, в отличии от модульных тестов. Если искать связь, то модульные тесты рождаются из приемочных, в то же время играя роль приемочных тестов на уровне кода.

Преимущества

И теперь никто не тратит время на ручное регрессионное тестирование. Это время тратится на исследовательское тестирование, на помощь команде разработки завершить свою работу вовремя и с высоким уровнем качества, на обеспечение работоспособности канала донесения требований от заказчика к команде разработки. Заказчик при этом имеет под рукой мощный инструмент контроля качества и работоспособности своего продукта, при этом понимая, что заплатил за это не напрасно.

Кто-то может подметить, что понадобится время на написание и поддержку такого рода автоматизированных тестов. Затраты на написание конечно же включаются в оценки выполнения работ по разработке. А вот стоимость поддержки будет зависеть напрямую от уровня команды. Грамотно написанные тесты будут основаны на правильных инструментах и фреймворках, которые абстрагируют тестовую логику от деталей вашего продукта и дают возможность изменять что-то только при серьезных изменениях в продукте. И пусть себе требования на здоровье меняются, но скорее всего не вся функциональность перепиливается каждую неделю, особенно в большом проекте.

Не все легко покрыть автотестами. Но из моего опыта, люди зачастую просто не знают, не хотят или не умеют этого делать. Для веб проектов есть Selenium, для совершенно произвольных есть Sikuli. А еще уйма специализированных инструментов. Можно замечательно с помощью Selenium тестировать UI (расположение элементов, верстку, отработку JavaScript). Советую посмотреть мое выступление на одной из конференций по поводу подобного тестирования. В разделе материалов можно найти больше на эту тему. Если не получается протестировать через конечный пользовательский UI, то можно тестировать API бизнес логики. Это все равно будет лучше чем ничего. Тогда ручное тестирование может быть сосредоточено больше на тестировании UI слоя.

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

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

Заключение

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

Не хочешь пропускать ничего интересного? Подпишись на ленту RSS или следи за нами в Twitter!

Запись моего выступления на конференции SQA Days #12

В последнее время не хватает времени на полноценные статьи. Это связано с подготовкой конференции Selenium Camp 2013. Мы впервые проводим конференцию в двухдневном формате и поставили себе целью собрать интереснейшую программу для тестировщиков-автоматизаторов и просто любителей Selenium/WebDriver. Поэтому пока другие активности несколько приостановлены… :)

Недавно появился отголосок конференции SQA Days #12, которая в этом году проходила в Минске. Организаторы опубликовали видео докладов и я могу поделиться своим выступлением. Оно как обычно было посвящено автоматизации тестирования, в этот раз пользовательского интерфейса. Вот запись:

А вот и презентация доклада:

Смотрите на здоровье и набирайтесь знаний!

Не хочешь пропускать ничего интересного? Подпишись на ленту RSS или следи за нами в Twitter!

Код LISA. Определи свой стиль тестировщика.

«Каждый человек – индивидуум»

Многие ученые пытались разделить людей на группы, чтобы можно было как-то классифицировать каждого человека. Это гороскопы, психотипы, все различные типы личности (по Юнгу, Майерс-Бриггсовскому, Хорни, Лоурэна, Кречмера и других).

Я не хочу сейчас рассуждать о правильности и неправильности каждого из подходов. В любом случае, на все 100% невозможно определить тип человека, так как на это влияет неимоверное количество всевозможных факторов. А полученная информация меняется настолько динамично, что формализованный тип перестанет отражать реальность спустя год, месяц, неделю или даже при изменении контекста.

В этой статье я хочу поделиться своими мыслями по определению типа и стиля работы тестировщика, опираясь на личные наблюдения и два источника, которые помогли оформить это в виде статьи (это PAEI модель Ицаха Адизеса, и статья Джонатана Кохла о Exploratory Testing).

Определим 4 «основных» стиля работы тестировщика программного обеспечения: Learner, Intuit, Systematic, Automator.

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

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

Systematic – стиль, при котором тестировщик непрерывно собирает полученную информацию в некую систему, которую сам и определяет.

Automator – стиль, при котором тестировщик использует всевозможные инструменты для автоматизации своей работы чтобы защитить себя от повторяющихся действий.

Наложим PAEI модель Ицаха Адизеса, где каждая составляющая может присутствовать в трех типах:

БОЛЬШАЯ БУКВА - доминантный навык;

Маленькая буква – начальный уровень развития навыка;

«-» (прочерк) – навык отсутствует вовсе и не применяется.

Можем получить наборы разных типов, например:

-I-a – тестировщик руководствуется только интуицией во время тестовой сессии и использует минимально простой сценарий с возможностью подстановки тестовых данных. Это позволяет ему по максимуму использовать свой творческий потенциал чтобы сфокусироваться на поставленной задаче.

LiS- – тестировщик, который схватывает новую информацию на лету и пытается «разложить все по полочкам». Он хочет видеть полную картину происходящего и сохранять иллюзию контроля. Он слушает свой внутренний голос для поиска новых идей и тут же добавляет их в свою систему.

L-sA – тестировщик, который быстро обучается и применяет последние технические навыки для максимальной автоматизации своей работы. При этом не доверяет необоснованным порывам и эмоциям.

Бывают же случаи, когда человеку очень хочется верить в то, что его любимый навык у него доминантный, но что-то не дает на 100% согласиться с этим. Для таких случаев, на одном из тренингов по Exploratory Testing, мы договорились применять знак ↑. Который означает, что человек стремиться повысить уровень владения этим навыком.

Список можно продолжить, описывая всевозможные комбинации, а их 81. Но цель статьи – ознакомить с идеей и подходом для определения кодов самостоятельно.

Эта методика может помочь для:

  1. понимания сильных и слабых сторон каждого члена команды;
  2. поиска нового тестировщика, например на собеседовании;
  3. обмена опытом и обучения.

Эти примеры вовсе не говорят о том, что нужно в лоб спрашивать каждого тестировщика «какой у тебя код?». Лучше попытайтесь проанализировать и понять какой код подойдет этому человеку. Для этого можете придумать практические задачи и посмотреть, как человек будет их решать. Какими инструментами, вспомогательными средствами он пользуется, да и вообще, чем он будет руководствоваться в момент принятия решений.

Как можно улучшить эту методику? Чтобы более широко развить эту тему можно попытаться описать каждую из комбинаций кода и проводить аналогии с реальной жизнью. Может быть, какой-то из стилей придется убрать или заменить на другой чтобы более четко отразить этот код. Давайте будем практичными в этом отношении и попробуем поэкспериментировать.

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

Эта статья – лишь попытка формализовать мои мысли за время наблюдений и работы тестировщиком. Эта тема очень широкая и потребует немалого времени для ее полного изучения, раскрытия и находится далеко за пределами области разработки программного обеспечения.

Но, пока есть базовая теория, постарайтесь подумать и решить, каким же стилем обладаете вы?

Не хочешь пропускать ничего интересного? Подпишись на ленту RSS или следи за нами в Twitter!

Что не есть Exploratory Testing?

Эта статья – вольный пересказ статей Майкла Болтона на тему, что не является исследовательским тестированием.

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

Заблуждение 1. «Исследовательское тестирование – это выполнение проверок посредством прохождения по турам.»

Что не так с этой трактовкой? Давайте представим как происходит процесс тестирования по так называемому “туру”. Любимый пример Джеймса Виттакера (автора книги Exploratory Software Testing):

Вы турист, летите на самолете в Лондон, чтобы отправиться за покупками. Вы читаете карту и отмечаете места, в которых хотели бы побывать, при этом рассчитываете маршрут и время, чтобы успеть в каждый магазин. По прилету в Лондон вы начинаете следовать намеченному плану. Вы заходите в каждый магазин, следуя своему маршруту. Выбираете вещи, некоторые покупаете, некоторые нет. Также находите бракованные вещи и показываете их менеджерам магазина. И так далее пока не дойдете до последнего магазина, или пока у вас не закончатся деньги.

Давайте спроецируем это пример на тестирование. Что получается? У нас есть набор чекпоинтов, быть может чеклист end-2-end набор тестов, который указывает нам на порядок выполнения действий. Не нужно долго думать, чтобы ответить на вопрос “На что похоже такое тестирование?”. Конечно же – это скриптовый подход к тестированию.

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

Заблуждение 2. «Мы проводим исследовательское тестирование целый день, после того как все новые задачи проверены.»

Бред, вранье и полная чушь! Одно из самых частых заблуждений относительно исследовательского тестирования. Чаще все встречается у неграмотных Agile тестировщиков. Как вы можете заниматься исследованием лишь один раз в неделю? А чем же вы тогда занимались остальное время – тестировали? Нет, тогда вы не тестировали – вы проверяли на соответствие (checking). Исследовательское тестирование – всеохватывающий процесс, это подход к тестированию, а не одна из доступных техник. В пример этого заблуждения можно принести всем известные Agile квадраты.

Очень глупо было размещать Exploratory Testing в квадрате Q3. Почему? Давайте подумаем, можем ли мы делать исследования на этапе написания unit-тестов? Можем. Разработчики тоже могут исследовать код приложения, чтобы написать больше тестов. Проведение code review тоже можно отнести к исследованиям. Тоже самое касается остальных типов тестов. Например, вы можете записать в режиме исследования скрипт для нагрузочного тестирования, используя BadBoy. И запускать его при помощи JMeter с разными типами нагрузок. Кому интересно детальное опровержение этой матрицы – посмотрите выступление Элизабет Хендриксон на последней конференции CAST.

Заблуждение 3. «Exploratory Testing – это ручное тестирование.»

Если вы когда-то услышите эту фразу – смело ругайте этого человека. Какие инструменты можно применять для проведения исследовательского тестирования? Да любые! Это и скриншоттеры, и рекордеры, и логгеры. Используя автоматизированные скрипты можно подставлять разные массивы данных и тем самым заниматься исследованием системы автоматически, конфигурируя текстовые или xml-файлы. Тот же Selenium IDE и прочие record-and-play инструменты могут облегчить работу тестировщику во время проведения тестовой сессии.

Заблуждение 4. «Быстрые проверки – это и есть исследовательское тестирование.»

Еще одно из часто упоминаемых заблуждений. Быстрые проверки или, как их еще принято называть, quick tests могут проводиться как в исследовательском, так и скриптовом режимах. Для примера скриптового подхода, вы можете описать набор smoke или sanity тест кейсов для вашего приложения и тестировать по ним. В исследовательском тестировании же можно использовать мнемоники и туры для проведения быстрого тестирования. Но обратите внимание, что не все туры бывают быстрыми, и не все быстрые проверки – это туры. Полный список – на сайте Майкла Болтона.

Заблуждение 5. «Exploratory testing – это недокументированный процесс.»

Напоследок – самое сладкое заблуждение, которое полно необоснованных убеждений. Все тестировщики, по долгу службы, привыкли к стандартному течению обстоятельств. Читаем требования, пишем тест кейсы, ждем пока разработчики что-то напишут и уже по этим тест кейсам приступаем к тестированию. Я не говорю, что тестирование по тест-кейсам это плохо. Напротив, в некоторых контекстах без них никуда: медицинское, авиа, банковское ПО. Но везде должен быть разумный предел того, что документировать, а что – нет. Самый ценный совет, который можно здесь дать – «Документируйте только то, что нужно». Узнайте у членов вашей команды, менеджеров – какие документы им нужны, чтобы контролировать выполнение ваших обязанностей без постороннего вмешательства? Подумайте сами, какие документы вам необходимы для проведения тестирования. Но всегда держите в голове – «Keep it simple». Кстати, то же самое имелось ввиду в Agile манифесте «Working software over comprehensive documentation». Тестировщику нужно заниматься тестированием, а не администрированием процесса, точно так же как программисту – написанием кода, а не спецификаций. Но везде должен быть баланс. Если для поддержания рабочего процесса необходим документ – лучше его написать. В исследовательском подходе к тестированию документировать можно что угодно и сколько угодно. Главное договориться о том, что должно попасть в отчет тестовой сессии и какие сценарий следует формализовать.

Будьте готовы принять вызов и отстоять точку зрения о правильном исследовательском тестировании. Приводите примеры из своих контекстов. Задавайте вопросы и критикуйте, ведь этих пяти примеров может быть недостаточно, чтобы полностью ответить на вопрос «Что не есть Exploratory Testing?»

Хотите научится применять этот подход на практике? 26-27 октября в Киеве будет проходить тренинг «Exploratory Testing». На множестве практических заданий под руководством опытного тренера вы освоите исследовательское тестирование и сможете применять его в своей работе.

Не хочешь пропускать ничего интересного? Подпишись на ленту RSS или следи за нами в Twitter!

Почему тестирование занимает так много времени

25 сентября я принял участие в онлайн конференции Chief ConfeT&QA с докладом «Почему тестирование занимает так много времени». Теперь я могу смело опубликовать материалы доклада, потому что по результатам зрительского голосования он занял первое место. Мой доклад выбрало больше 50% проголосовавших участников. Спасибо всем, кто за меня голосовал. Я рад, что сумел донести до вас полезные мысли.

На этот доклад меня вдохновила статья Болтона, которая в далеком 2009 году заставила меня пересмотреть взгляды на тестирование и помогла в дальнейшем избегать очень многих проблем: часть 1, часть 2. С тех пор эта тема является обязательным блоком моего тренинга «QA в Agile».

О содержании доклада говорить нет смысла – проще просто его посмотреть. Есть версия слайдкаста:

Есть вариант видео:

Участники задавали много вопросов. Ответы на самые интересные я приведу тут:

Вопрос: Работали ли вы когда-нибудь тестировщиком?

Нет, я не работал тестировщиком. Но мне не раз приходилось ставить процесс тестирования на проекте с нуля, а также много-много раз консультировать компании по вопросам тестирования и проводить тренинги на эту тему.

Вопрос: Николай, так вроде бы это ты тот человек, у которого в проекте нет тестировщиков. Два предположения, это только предположения или все таки опыт?

От вас ничего не утаить. ;) Да, на текущем проекте мы уже 3 года живем без тестировщиков. Параллельно с этим и до этого проекта мы работали совершенно разными составами команд и там было разное количество тестировщиков. Все, что я рассказываю, из личного опыта. К сожалению, не всегда приятного. :)

Вопрос: Где написание/поддержка тесткейсов?

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

Вопрос: Как эстимировать работу тестировщика? Имеется в виду, что время на работу очень сильно зависит от качества работы девелоперов.

Если вы не делаете оценки в стиле Agile, то в тестировании вы полагаетесь сугубо на интуицию и попытки обезопасить себя буферами времени. В Agile команде вы не оцениваете тестирование как активность, вместо этого вы оцениваете насколько сложно/долго команде сделать ДО КРИТЕРИЯ ГОТОВНОСТИ определенную функцию продукта. А кто и как в команде будет что делать вас мало интересует. Тестирование должно оставаться в рамках каждой задачи, а не быть отдельной фазой в этом процессе. Посмотрите в материалах выступлений мой старый доклад «QA в Agile».

Вопрос: Обычно верификация багов, найденных на данной итерации, переносится в следующую итерацию и нагрузка планируется, чтобы таких завалов не было.

О! Это очень долгая тема. У меня несколько другое отношение к понятию бага. Детальнее можно прочитать в этой статье.

Вопрос: Как-то непонятно. Неужели в планировании не было учтено, что вообще найдут баги?

Учтено то может и было, но как учесть сколько найдут. Это ведь зависит от разработчиков. Можно использовать накопленную за большой срок статистику, но ее еще надо накопить. И от колебаний в 20-30% она не защитит (на примере второй команды, которая делала мало багов). А это значит, что тестирование может не влезть в итерацию и снова проблемы…

Вопрос: А разве тестировщик виноват в том, что так много багов?

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

Вопрос: Кажется, хорошо так себя мотивировать, но рассчитывать на отсутствие дефектов – странно.

Так я не призываю на это рассчитывать. Над этим надо работать. Настоящая работа QA инженера – не допустить дефектов. Работа тестировщика (QC инженера) – проверять работу продукта, когда на его качество уже не повлиять. Поэтому мне ближе QA инженеры, часто в лице разработчиков. :)

Вопрос: Хорошее качество кода будет стоить достаточно дорого, дороже чем долгое тестирование. И часто заказчик выбирает именно долгое и более дешёвое тестирование и ре-тест, чем оплатить дорогущих девелоперов.

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

Вопрос: Понятно, что внедрившись ранее – ошибок будет меньше. И все же, как это спасет от того, что ошибки таки есть и «производительность» по сравнению с идеалм меньше в 5 раз?

Ну вот тут от вас и зависит как сделать чтобы «меньше» означало не в 5 раз, а на 5-10% к примеру. :)

Вопрос: Код ревью – не панацея. Ревьювить можно отступы и стилистику написания кода. На дев машине никто не гарантирует стабильность и следовательно время будет тратиться больше, что тоже не даст достаточный профит.

Из моего опыта, ревью кода устраняет огромное количество проблем, если оно делается обязательным для каждой задачи. В моих проектах это так уже больше 5 лет. В результате, мы можем работать без тестировщиков и выпускать отличный продукт, которым, без преувеличений, пользуются миллионы людей и множество компаний. Но для этого надо знать, как правильно делать ревью. Об этом мы рассказывали не раз в докладе «Code Review», запись которого можно найти в материалах выступлений. По поводу стабильности на машине разработчика – тут все зависит от его стиля разработки. Если он работает, разбивая задачу на законченные куски, то с чего тут взяться нестабильности? Да и речь идет о первичном тестировании, которое не должно быть слишком детальное. Его задача – найти быстро наиболее видимые проблемы.

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

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

Вопрос: Что делать, если тебя «не пускают» в ранние этапы?

Для вас это означает, что вы не можете влиять на качество, а значит, предсказать продолжительность тестирования. Вам надо продать идеи руководству, команде, менеджерам. Продажа никогда не была простым делом. Но без нее никуда. Отличное место для продажи – это ретроспектива (у вас же она есть?). Давите на «больные мозоли», забрасывая идеи по избеганию проблем. Предлагайте попробовать и делайте все от вас зависящее, чтобы команда в этих попытках не разочаровалась. А для этого вам важно полностью понимать какие могут быть подводные камни и как их обходить.

Вопрос: Какие есть реальные примеры коротких циклов обратной связи, что конкретно надо применять?

Писал об этом чуть выше. Договаривайтесь с разработчиком о разбиении его работы на стадии и раннем легковесном тестировании результатов. Обсуждайте с ним тестовые сценарии, чтобы он вложил их в модульные тесты.

Вопрос: Автотесты «глупые», да, они много покрывают, но! Всегда есть «непокрытые2 участки, которые не заметили сразу. Как же не проверить еще раз в регрессии?

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

Вопрос: Если регрессию нельзя автоматизировать, то что тогда?

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

Вопрос: Что делать в ситуации когда разработчики отдают новый функционал на тестирование за несколько часов до демо? Тестирование на локальных машинах не всегда возможно и не всегда имеет смысл (тк могут быть блокировки).

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

Вопрос: А как насчет эксплоратори в регрессии?

Я только за, но делать его нужно в определенные запланированные моменты. Проверки основные стоит автоматизировать, чтобы регрессию можно было делать сотни раз за итерацию и она не допускала ошибок.

Не хочешь пропускать ничего интересного? Подпишись на ленту RSS или следи за нами в Twitter!

Опасная практика использования буферов в Scrum

буфера в оценках

Прочитал статью Тима Евграшина «Когда подстилать соломку или планирование Спринта с учетом вашей реальности» и понял, что в этом вопросе наши мнения и опыт сильно расходятся. :) Мои комментарии были слишком большими и я решил вынести их в отдельную статью.

Разделение элементов бэклога по типам и комбинирование их в спринте – это классная техника, которую я всем советую попробовать. Это помогает визуализировать бэклог и на ранней стадии увидеть перекосы, не позволяя разрастись технической задолженности или списку дефектов. Визуализация – наше все в Agile подходах!

А вот по поводу буферов я категорически не согласен. На мой взгляд, данная техника является чуть ли не самой опасной. Во-первых, это попытка не учиться на своих ошибках, а обложиться буферами, чтобы минимизировать их влияние. Вспомните как раньше делали оценки – менеджер закладывал буфер в магические X% от оценки команды, чтобы «обезопасить себя от этих имбицилов». Мы же в Scrum пытаемся научиться давать надежные оценки на короткий срок. Спрятавшись за буферами, трудно будет найти свои ошибки и их исправить. Для этого понадобится анализ использования буфера, что приведет к дополнительной работе над сбором и анализом метрик.

Во-вторых, буфер на исправление ошибок в спринте – одна из самых нелогичных вещей в IT. Вводя такой буфер, мы как бы говорим: «Мы заранее знаем, что напишем код с багами!». А как же критерий готовности, забота о качестве (quality assurance), инженерные практики и надежная поставка? Неужели кто-то может оценить с такой позиции сколько займет фикс багов для задач в спринте? Это же оценки пальцев в небо! Нельзя оценить то, объем чего тебе неизвестен. Зато можно попытаться оценить усилия на предотвращение багов и включить их в изначальную оценку задачи. Ведь на планировании мы все задачи разобрали в деталях и знаем о них все!

Еще любой буфер приводит к усилению действия закона Паркинсона, который гласит: «Работа заполняет время, отпущенное на неё». Так как в спринте использование буфера размазывается по всей итерации (ведь баги же постепенно появляются), то буфер будет использован целиком в любом случае. Даже если багов не будет, его найдут чем заполнить, причем явно не дополнительными задачами из бэклога.

Буфер на выплату технического долга также противоречит идее «разноцветному бэклогу». Для выплаты технического долга должны создаваться такие же задачи на спринт как и для других элементов бэклога. И их тоже нужно оценивать. Фиксированный буфер приведет к тому, что работа может быть недоделана либо занята часть времени из основного времени спринта. Ни один из этих исходов не является позитивным.

Последний тип буфера (у Тима он упоминается первым) – время на погрешность в оценках. У него практически те же минусы, что у предыдущих буферов, но существует подход, который действительно может обезопасить вас от неверных оценок безвредно. Просто выбросите последний день итерации из доступного времени, введя правило «никакой работы над задачами в последний день итерации». Если в итерации что-то пошло не так, то это критическая ситуация и данный день послужит буфером. Но это нарушение правила команды и ставит вопрос на ретроспективу для обсуждения. Если же все нормально, то в этот день можно будет качественно подготовить демо, закрыть мелкие дефекты по задачам в итерации, отдать часть технического долга или даже начать работать над новыми задачами из бэклога.

Еще один способ обезопасить себя с оценками – «принцип 80 на 20″. Но применять его стоит только если вы уж так неточно делаете оценки и хотите выделить несколько спринтов на адаптацию. Для этого на митинге по планированию выделите 80% задач, для которых вы на 100% уверены в готовности к концу спринта. Оставшиеся 20% задач будут вашим буфером на случай неудачного стечения обстоятельств. Но тем буфером, о котором будет знать заказчик и который вы сможете обсудить на ретроспективе.

А вообще, Agile подходы несут в себе прозрачность, предсказуемость и постоянный самоанализ в качестве основных ценностей. Любой буфер идет в разрез с этими принципами и пытается «замазать» проблемы и скрыть их. Поэтому будьте осторожны и не используйте их в своей работе!

Не хочешь пропускать ничего интересного? Подпишись на ленту RSS или следи за нами в Twitter!

Наши планы на осень

Мы уже начали готовить планы на осень. Она будет насыщенной конференциями.

Начнется все 1 сентября. Когда все дети пойдут в школу, IT-шники соберутся в Киеве на ежегодную тусовку IT-Jam. В этом году мероприятие обрело новый формат – будут представлены локальные сообщества, каждое из которых будет развлекать пришедших участников. Мы будем представлять наш «Клуб анонимных разработчиков». Приходите в гости! После основной части программы запланировано афтепати с участием IT-шных музыкальных групп, пива и хорошего настроения.

Следующей важной для нас конференцией станет «Поиск и найм IT профессионалов» в рамках платформы онлайн конференций IT Brunch. Конференция пройдет 22 сентября и как всегда будет совершенно БЕСПЛАТНОЙ. Тема выбрана не случайно – ведь каждый в IT индустрии хоть раз устраивался на работу или нанимал других. По одну сторону баррикад кто-то жалуется на рекрутеров, политику отбора кандидатов и проведения собеседований. По другую сторону переживают по поводу перегретого рынка, завышенных ожиданий в отношении условий работы и зарплаты, недостатка квалифицированных специалистов. На конференции мы хотим взглянуть на ситуацию с разных сторон. Мы пригласим докладчиков, которые непосредственно связаны с процессом поиска и отбора кадров, чтобы услышать об их подходах, приемах и полезных практиках. С другой стороны, мы хотели бы послушать советы от профессионалов по поиску работы, прохождению собеседований, составлению резюме и ведению переговоров с компаниями.

5-6 октября на конференцию AgileEE в Киеве соберутся все любители и профессионалы Agile подходов в разработке. Программный комитет пока еще не утвердил поданные заявки на доклады, но уже точно известно об участии таких звезд как Henrik Kniberg, David Hussman, Alistair Cockburn, Lyssa Adkins и других приглашенных докладчиков. В этом году вероятнее всего возродится из пепла русская сцена, где будут радовать участников своими докладами отечественные специалисты.

За неделю до конференции, 29 сентября, мы запланировали провести тренинг «Kanban для управления проектами». Данный тренинг познакомит вас с принципами, лежащими в основе методологии, преимуществами, которые дает ее внедрение. Множество практических упражнений позволит лучше прочувствовать и понять основы, а также интересно провести время. Участники смогут узнать как определиться с выбором методологии, с чего начать использование Kanban, как выполнять основные проектные активности, какие роли и обязанности есть в команде при применении Kanban, какие инструменты и приемы могут помочь в успешном использовании методологии. Также тренер поделится большим практическим опытом и историями о применении Kanban в различных проектах.

12-13 октября пройдет еще один популярный тренинг – «Тестирование веб приложений с WebDriver/Selenium». Он уже второй раз будет проходить в двухдневном формате, а это значит больше практики, более детальное рассмотрение всех особенностей и практик в применении инструмента. Говорить тут особо нечего – лучше всего заглянуть в детальную программу тренинга.

Ноябрь будет для нас ознаменован очень важным событием – в Киеве пройдет наша конференция XP Days Ukraine 2012. В этом году мы решили провести по-настоящему масштабное мероприятие. Целых 4 дня участники смогут учиться, общаться, обмениваться опытом и узнавать что-то новое. Все начнется 14-15 ноября с целой серии тренингов и мастер-классов. Участникам будет из чего выбрать – параллельно будут проходить 9 тренингов от известных зарубежных тренеров и отечественных специалистов. Места на тренинги стремительно разлетаются и более половины уже продано. 15 ноября вечером состоится препати конференции (это пока секрет, но будет очень интересно).

16-17 ноября пройдут основные дни конференции. Мы отбираем только лучшие доклады и программа уже на 50% сформирована. Мы стараемся привезти в Украину известных докладчиков, которым есть чем поделиться с участниками. На данный момент мы получили согласие от John Smart, Simon Brown, David Evans, Johannes Brodwall, Daniel Worthington-Bodart, Paweł Lipiński и других профессионалов. Мы верим, что эта конференция будет лучшей из всего, что мы проводили на данный момент. До 1 октября действует основной этап регистрации по цене 1400 гривен. Торопитесь зарезервировать себе место! После конференции мы планируем провести афтепати, где участники смогут пообщаться в неформальной обстановке и закрепить полученные на конференции знания и впечатления (это пока еще тоже секрет). :)

Очень предстоит насыщенная и интересная. Присоединяйтесь к нам и давайте проведем ее вместе!

Не хочешь пропускать ничего интересного? Подпишись на ленту RSS или следи за нами в Twitter!

Один день из жизни тестировщика. В поисках правды

в поисках правды

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

Контекст:

  • проект разработки портала спортивных новостей;
  • методология – Scrum;
  • 5 программистов и 2 тестировщика;
  • итерации продолжительностью 2 недели;
  • все работают в одной локации;

Первый день второй недели. После утреннего митинга, обсуждения прошедших активностей и планов на текущий день все усаживаются на рабочие места. Тестировщики проводят между собой Debrief, чтобы определить, кто какую задачу берет на себя.

После согласования, оба приступают к тестированию своих User Story.

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

Все 5 попыток повторить действия не увенчались успехом. Напористость тестировщика не позволила ему оставить эту проблему и он позвал второго тестировщика, с просьбой помочь разобраться в проблеме. Спустя минуту, коллега подвинул стул и внимательно выслушал ситуацию. Ребята решили сделать небольшой анализ проблемы и составить некий план, по которому нужно будет найти пути воспроизведения ошибки

Первый тестировщик принялся за тестирование. В это же время второй следил за действиями первого, пытаясь найти новые идеи. Первый тестировщик открыл файл настроек, где изменил параметры пересчета цены. Затем открыл UI часть системы, залогинился, добавил новый товар в систему, зашел под аккаунтом обычного пользователя и совершил две покупки. Проверка оказалась успешной – проблема не была найдена.

«А что если теперь изменить настройки module2 с указанием аналогичных значений и проверить операцию суммирования еще раз с новым созданным товаром?» – предложил второй тестировщик.

Решили осуществить проверку, но опять-таки получили успешный результат. Проверка платежной системы заняла 10 минут, но им все таки удалось найти ошибку и stacktrace в файле логов, где должны собираться все совершенные платежи. Первый тестировщик просто не посмотрел в этот файл, когда тестировал в одиночку, соответственно не смог выявить, на каком шаге возникла ошибка.

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

Тестировщики спросили: «Сколько времени займет, чтобы исправить это?»
«По оптимистическим оценкам – 30-50 минут» – ответил программист.

Недолго думая, единогласно приняли решение, что нужно завести баг и добавить это задачей в колонку TODO этого спринта и связать с тестируемой задачей.

В чем мораль этой истории?

Работая в паре, можно выявить ошибку значительно быстрее, чем пытаться разобраться самому. Узнав у разработчика дополнительные детали, можно описать дефект таким образом, чтобы больше не возникало уточняющих вопросов.

Какие ошибки допустил первый тестировщик в своей работе?

Он тестировал невнимательно, случайным способом, соответственно не смог сказать, в чем именно заключалась найденная проблема.

Как он смог быть решить эту проблему самостоятельно за 5 минут?

Использовать заметки в момент выполнения тестовой сессии в виде чеклистов, интеллект-карт или инструментов для записи экрана. Это поможет пересмотреть результаты и понять, какие шаги спровоцировали проблему.

Дайте свое виденье разрешения проблемы. Как в будущем избежать потерю времени?

Не хочешь пропускать ничего интересного? Подпишись на ленту RSS или следи за нами в Twitter!

Выступление Андрея Дзыни «Software Testing 2.0″ для пропустивших

Многие из вас знают, что наш тренер Андрей Дзыня в последние пару месяцев активно ездил по городам Украины, разнося в массы свои идеи по поводу новой эры тестирования – Software Testing 2.0. Одна из целей данных поездок – активация локальных сообществ тестировщиков. Кажется, Андрею удалось задуманное. Вот отчеты о некоторых из проведенных встреч:

Мы ждем отчета от Херсона и Донецка. На очереди Львов (3 августа). В этот же день состоится тренинг «Exploratory Testing». Еще есть 3 свободных места для желающих его посетить.

Также доступна видеозапись выступления в Харькове для тех, кто не смог придти:

Не хочешь пропускать ничего интересного? Подпишись на ленту RSS или следи за нами в Twitter!

Ukrainian Testing Days приглашает на Automated Testing Dojo

Меньше месяца осталось до нашумевшей конференции тестировщиков Ukrainian Testing Days. Организаторы не перестают радовать интересными мероприятиями, которые будут проходить в рамках конференции. 19 августа, после основного дня конференции, можно будет принять участие в соревнованиях для тестировщиков автоматизаторов и программистов! Да, да, программистов. Ведь программисты очень часто отвечают за автоматизацию в целом и дадут фору любому автоматизатору. Так же многие программисты работают в парах с тестировщиками, что делает автоматизацию еще более продуктивной. Организаторы приглашают всех участников конференции посоревноваться в том, чье кунг-фу сильнее, в режиме обучающих соревнований Automated Testing Dojo.

Аutomated Testing Dojo был разработан Сергеем Зелениным и Александром Баглаем. Ребята очень сильно постарались, чтобы у вас была возможность провести время с фаном, продемонстрировать свой опыт и навыки, которые вы используете каждый день.

Правила игры: Есть веб приложение (а значит, будем автоматизировать с WebDriver). Есть сценарий поведения приложения, описанный как user story. Есть список багов (которые мы, конечно же, тебе не покажем). Баги будут периодически включаться и выключаться. За каждую пойманную вашим тестом багу на твой счет начисляются бонусные очки. За каждую багу, которая осталась без твоего внимания и за каждый тест-лжец начисляются штрафные очки. Сумму очков весело можно наблюдать на одном большом экране.

Аutomated Testing Dojo проводится только для опытных тестировщиков и программистов, потому во время регистрации нужно заполнить форму опросник, которая поможет вам определиться, потяните ли вы это мероприятие.

На Automated Testing Dojo вы получите:

  • опыт автоматизации в симулированных условиях экстремальной среды: баги, меняющиеся требования, частые релизы
  • массу позитивных эмоций от игрового тренинг
  • возможность обсудить с коллегами ряд антипаттернов и рекомендуемых практик относительно качественного и поддерживаемого кода  тестов
  • практический опыт работы с Selenium WebDriver, тестируя web приложение
  • рекомендации по использованию TDD при разработке фреймворка автоматизации

Установка требуемого ПО для участия в Automated Testing Dojo.

Участие в Automated Testing Dojo бесплатное, при условии участия в конференции Ukrainian Testing Days.

Не хочешь пропускать ничего интересного? Подпишись на ленту RSS или следи за нами в Twitter!