суббота, 13 июля 2013 г.

Мысли об основах тестирования

> Следующее сообщение по теме обучения: Мысли об основах тест дизайна

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

За дело я принялся с энтузиазмом, потому что очень интересуюсь обучением тестеров последние год-полтора. Все началось с того, что на прошлом месте работы мы периодически, раз в 2-3 недели, устраивали внутренние обучения в нашей команде. Мне понравился сам процесс подготовки к этим мероприятиям: подбор материала, придумывание практических занятий, которые могут быть интересны с одной стороны и полезны в работе с другой. Также было здорово смотреть за ребятами, когда они явно превосходили ожидания и управлялись с моими заданиями за 10-15 минут, хотя я рассчитывал на гораздо более долгое время.

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

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

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



Вступление

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

План тренинга будет таким:
  • Сначала мы дадим определение тестированию
  • Попробуем сформулировать цели тестирования
  • Дадим определение качеству
  • Обсудим критерии качества
  • Поговорим о заинтересованных лицах
  • Выясним, почему качество субъективно
  • Сделаем вывод о том, как тестировщик должен учитывать субъективность качества (расставлять приоритеты)
  • Рассмотрим задачи, которые выполняют тестировщики
  • Поговорим о распределении задач в команде
  • В заключение, мы обсудим плюсы профессии тестировщика

 

Основная часть

 

Что такое тестирование

Давайте для начала попробуем ответить на вопрос: что такое тестирование? Что вы можете об этом сказать? У вас наверняка есть свои ощущения и мнения, постарайтесь их сформулировать.

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

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

Но есть общепринятые понятия о тестировании, которые чаще всего справедливы для каждой компании.Обычно под тестированием понимают:
  1. Процесс оценки продукта с целью предоставления информации о его качестве заинтересованным лицам. Кто такие заинтересованные люди (или stakeholders) - мы еще поговорим далее.
  2. Процесс поиска ошибок на ранних стадиях разработки.
  3. Процесс обеспечения процесса разработки, который минимизирует вероятность возникновения ошибок.

Цели тестирования

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

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

 

Что такое качество

Наверное, вы обратили внимание на то, что мы уже не раз упомянули понятие качества, но ни разу не объяснили, что это такое.

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

Существует несколько общедоступных определений качества, сделанных разными людьми и организациями:
  1. Качество – это соответствие продукта требованиям (Филипп Кросби). Имеются в виду не только письменные требования, но и неписаные правила.
  2. Качество – это пригодность продукта для использования (Джозеф Юран).
  3. Качество – набор функций и характеристик продукта, который обеспечивает удовлетворение нужд пользователей (Американское Общество Качества).
  4. Качество – это ценность продукта для определенного человека (Джеральд Вейнберг).
Вы видите, что определений несколько, и вы можете выбрать любое, которое вам нравится.

Мне кажется, что четвертое определение лучше всего, потому что оно помогает нам сфокусироваться на людях.

Давайте сделаем выводы из него:
  • Все, что уменьшает ценность продукта в глазах людей, уменьшает и качество.
  • Качество - субъективно. Каждый человек делает вывод о ценности продукта для себя по разным принципам. Мы еще вернемся к этому заключению позднее.
Заметьте, пожалуйста, что мы говорим о качестве не только по отношению к пользователям, но и к другим заинтересованным лицам: программистам, менеджерам по продажам продукта, операторам службы поддержки.

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

 

Критерии качества


Критериев качества (или характеристик продукта) можно придумать много. Давайте перечислим наиболее общие критерии. Часть этих характеристик применима только для программных продуктов, часть – для любых продуктов в принципе.
  • Функциональная полнота (Capability). То есть, способность продукта выполнять свои функции.
  • Надежность (Reliability). То есть устойчивость и бесперебойность работы продукта.
  • Удобство использования (Usability). Насколько легко пользоваться продуктом?
  • Безопасность (Security). Насколько продукт устойчив к неавторизованному доступу и несанкционированному использованию?
  • Масштабируемость (Scalability). Легко ли продукт расширяется или сужается?
  • Быстродействие (Performance). Насколько быстро продукт работает и отвечает на действия пользователя.
  • Легкость установки (Installability). Насколько легко может быть установлен продукт?  
  • Совместимость (Compatibility). Как продукт работает с окружающей его средой и другими продуктами?
  • Легкость поддержки пользователей (Supportability). Насколько экономичной будет поддержка пользователей при использовании продукта?
  • Приспособленность для тестирования (Testability). Насколько продукт приспособлен для тестирования?
  • Легкость в разработке, исправлении, улучшении (Maintainability). Насколько продукт прост в доработке, изменении, исправлении?
  • Переносимость на другие платформы (Portability). Насколько легко продукт может быть перенес на другие платформы?
  • Легкость адаптации для разных пользователей (Localizability). Насколько легко адаптировать продукт для использования в другой стране, на другом языке, в другой культурной среде?
Эти характеристики могут пересекаться и зависеть друг от друга. Они могут сужаться до более конкретных характеристик. Например, удобство использования можно при желании сузить до удобства пользовательского интерфейса.

Заинтересованные лица


Ранее мы выяснили, что качество – это ценность для конкретного человека и что вследствие этого оно субъективно. И мы собирались поговорить о заинтересованных лицах, по отношению к которым мы будем говорить о качестве.
Заинтересованные лица

Иначе их еще называют stakeholders. Это люди, которые заинтересованы в успехе продукта.

Например, к ним относятся:
  • Пользователи
  •  Менеджеры по продажам
  • Служба поддержки
  • Программисты
  • Тестировщики
  • И многие другие
Все эти люди смотрят на продукт с разных сторон. Все они имеют свои интересы, и мы должны это учитывать при тестировании.
Естественно, для всех этих людей критерии качества будут разными. Вернее, критерии качества будут иметь для них разный приоритет. Давайте это проследим.

 

Субъективность качества

Начнем с программистов. Давайте предположим, что наиболее важными для них будут следующие критерии качества:
  • Легкость в разработке, исправлении, улучшении (Maintainability). Чем легче работать с кодом, тем лучше разработчику.
  • Легкость поддержки пользователей (Supportability). Так как программисты обычно задействованы в исправлении ошибок пользователей, они заинтересованы в том, чтобы этих ошибок было меньше.
  • Переносимость на другие платформы (Portability). Вполне может случиться так, что программистов попросят перенести продукт на другую платформу, так что они заинтересованы и в этом качестве.
Конечно, разработчики заинтересованы в других характеристиках продукта, но они могут иметь более низкий приоритет в их глазах.

Давайте теперь поговорим о тестировщиках и предположим, что наиболее важными для них будут следующие критерии качества:
  • Функциональная полнота (Capability).Тестировщик ценит то, что все функции продукта работают.
  • Приспособленность для тестирования (Testability). Также тестировщик заинтересован в том, чтобы продукт можно было тестировать без препятствий.
  • Удобство использования (Usability).
Как мы видим, эти критерии качества отличаются от наиболее важных критериев качества по мнению разработчиков. И это нормально.

Давайте попробуем предположить, какие критерии качества наиболее важны для пользователей:
  • Удобство использования (Usability).
  • Быстродействие (Performance).
  • Легкость установки (Installability).
Но, опять же, это просто предположение. Пользователей много и они могут иметь разные требования к критериям качества.

Давайте подведем итоги по отношению субъективности качества:
  • Разные люди используют разные функции продукта.
  • Для разных людей важны разные критерии качества.
  • Следовательно, один человек может считать качество продукта хорошим, а другой – плохим.

 

Необходимость расстановки приоритетов

Какой вывод из субъективности качества может сделать тестировщик? Реально ли тестировать все критерии качества и проверять все функции, которые используют разные пользователи? Хватит ли для этого времени? Как можно тестировать эффективнее?

Можно сделать вывод, что без расстановки приоритетов в тестировании не обойтись.

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

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

 

Задачи тестировщика

После того, как мы узнали, что такое тестирование и что такое качество, давайте конкретнее поговорим о том, с какими задачами сталкиваются тестировщики.
Можно условно разбить их на категории:
  1. Планирование тестирования.
  2. Разработка тестов (тест дизайн).
  3. Выполнение тестов.
  4. Анализ результатов.
А какие задачи входят в каждую категорию?
Задачи тестирования

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

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

Распределение задач в команде


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

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

А в маленьких командах у вас есть шанс попробовать себя во всех категориях задач.

 

Плюсы профессии тестировщика

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

Во-первых, это сравнительно молодая и востребованная профессия.
  • Она формируется на наших глазах и у нас есть шанс в этом поучаствовать. Насколько я знаю, специальности тестировщика не учат в университетах, по крайней мере в России. Есть множество курсов разной длительности (онлайн и оффлайн), которые проводят обучение профессии.  Но, в основном, тестировщики – самоучки. Часто люди приходят из других профессий и остаются в тестировании.
  • Сейчас тестировщики очень востребованы. Рынок в них очень нуждается, вы можете проследить это по сайту hh, где ежедневно в Москве появляется около 30 вакансий. Такая ситуация уже несколько лет, и похоже, что профессия не потеряет популярность в ближайшее время.
Во-вторых, начать работать тестировщиком сравнительно несложно.
  • Если сравнивать с позицией программиста начального уровня, то тестировщику начального уровня как правило нужно меньше знаний и навыков.
  • В принципе, для того, чтобы тестировать, вообще не нужно специальных навыков.
  • Но для того, чтобы тестировать хорошо, нужно очень много учиться и постоянно развиваться. Для тестировщика это очень важно.
В-третьих, наша профессия напоминает игру. Почему мне так кажется?
  • Процесс тестирования напоминает работу детектива, который по отрывочным сведениям (спецификациям, слухам, требованиям, разговорам с коллегами и пользователями) и уликам (найденным ошибкам) формирует свое представление о продукте и выбирает стратегию тестирования.
  • Успех процесса тестирования во многом зависит от умений тестировщика, но успех также зависит от удачи. Это добавляет интереса и привлекает азартных людей.
  • Успех в профессии зависит от того, как человек учится, развивается, как он общается внутри команды и вне ее.
  • Профессия тестировщика дает возможность развиваться не только в техническом плане, но и в других областях. Например, тестировщик приложения по бронированию туристических услуг имеет хорошую возможность стать специалистом в области туризма.
  • Тестировать весело! Вы согласны? :)

 

Литература

Если у вас возникнет желание почитать что-нибудь про тестирование, могу посоветовать книги:
  • Тестирование программного обеспечения (Канер, Фолк, Нгуен). Это довольно большая книга, но читается она легко. Прочитав ее, вы узнаете основы нашей профессии. В ней описаны основные задачи, с которыми сталкивается тестировщик: от планирования тестирования до тестирования документации. Очень полезная и хорошая книга, советую!
  • Тестирование dot com (Савин). Это книга, с которой люди обычно знакомятся с тестированием. Она написана простым и понятным языком, ее многие хвалят.
  • How we test software at Microsoft. Хоть эта книга и на английском, но она коротко и ясно описывает основные задачи тестировщика: тест дизайн, заведение отчетов об ошибках, взаимодействие с программистами и много чего еще. Тем более, прочитав ее, вы узнаете, как организовано тестирование в одной из самых крупных в мире компаний, где работает несколько тысяч тестировщиков.
Если вам больше нравятся блоги, могу посоветовать ресурсы:
  • http://software-testing.ru/blogs. Это рассылка русскоязычных блогов (более 100 блогов в списке), посвященных тестированию и разработке. Посмотрите, почитайте, вполне возможно вы найдете много интересного для себя.  
  • http://kaner.com. Это блог одного из отцов мирового тестирования, Кема Канера. Этот человек написал несколько классных книг по тестированию, разработал курс по обучению тестировщиков, написал много хороших статей. Если вас не смущает английский язык – почитайте, он очень интересно пишет.
  • http://www.satisfice.com/blog/. Блог еще одного всемирно известного тестировщика, Джеймса Баха. Он разработал несколько популярных техник тестирования, особенно в области исследовательского тестирования. Преподает свой собственный курс по тестированию (Rapid Software Testing). Блог будет очень интересным как начинающему тестеру, так и тестеру с опытом.
  • http://www.developsense.com/blog/. Блог Майкла Болтона, очень талантливого тренера по тестированию, консультанта. Майкл пишет очень подробно и доходчиво. Он помогает нам мыслить как тестировщик, анализировать свои действия, развиваться в своей профессии.
Спасибо за внимание! Буду рад ответить на ваши вопросы в комментах.

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

  1. Я уже читала (и читаю) ряд различных блогов, книг, рассылки и некоторые темы форумов http://software-testing.ru, участвую в обсуждениях.

    Пост понравился своим обобщающим характером + взяла на заметку себе критерии качества (их классификацию), анонс книги How we test software at Microsoft.

    ОтветитьУдалить
    Ответы
    1. Рад, что вам понравилось! Спасибо что написали! How we test software at Microsoft - книга хорошая. Мне особенно было интересно прочитать про Software Developer Engineer in Test (SDET). В этой компании своё понимание того, каким должен быть тестеровщик - он и программист, и тестировщик одновременно. Вроде и в Google тестеров набирают примерно по таким же принципам.

      Удалить
  2. Роман, спасибо за материал.

    Мне понравился стиль изложения - доступно, понятно и последовательно.

    Некоторые книги и я читала.
    Нашла полезные ссылки.

    Благодарю.

    ОтветитьУдалить
  3. Отлично ! Спасибо с большим удовольствием прочёл

    ОтветитьУдалить
  4. Большое спасибо за эту и следующие две статьи, очень помогают «войти в область», понять, как она структурирована и узнать основные термины, по которым можно идти дальше.

    ОтветитьУдалить
    Ответы
    1. Спасибо! Рад, что нашли для себя что-то полезное!

      Удалить
  5. Спасибо автору, для меня полезная статья!
    Но вот тут хотел бы уточнить: "Тестирование это - Процесс обеспечения процесса разработки, который минимизирует вероятность возникновения ошибок"
    Разве тестировщики занимаются обеспечением разработки? это ведь больше к QA. Тетсровщик к этому причастен лишь на стадии тестирования спецификации.

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

      Удалить
  6. Этот комментарий был удален автором.

    ОтветитьУдалить
  7. Хорошо описано. Только вот Канера зовут Сем, а не Кем.

    ОтветитьУдалить
    Ответы
    1. Спасибо! Насчёт Кема и Сема - судя по Википедии, ни я, ни вы - не правы :) https://en.m.wikipedia.org/wiki/Cem_(given_name)

      Удалить