| Тестирование и тестировщики | содержание | Виды и методы тестирования |
Следуя общей логике итеративности, превалирующей во всех современных моделях разработки ПО, жизненный цикл тестирования также выражается замкнутой последовательностью действий.
Важно понимать, что длина такой итерации (и, соответственно, степень подробности каждой стадии) может варьироваться в широчайшем диапазоне — от единиц часов до десятков месяцев. Как правило, если речь идёт о длительном промежутке времени, он разбивается на множество относительно коротких итераций, но сам при этом «тяготеет» к той или иной стадии в каждый момент времени (например, в начале проекта больше планирования, в конце — больше отчётности).
Также ещё раз подчеркнём, что приведённая схема — не догма, и вы легко можете найти альтернативы, но общая суть и ключевые принципы остаются неизменными. Их и рассмотрим.
Стадия 1 (общее планирование и анализ требований) объективно необходима как минимум для того, чтобы иметь ответ на такие вопросы, как: что нам предстоит тестировать; как много будет работы; какие есть сложности; всё ли необходимое у нас есть и т.п. Как правило, получить ответы на эти вопросы невозможно без анализа требований, т.к. именно требования являются первичным источником ответов.
Стадия 2 (уточнение критериев приёмки) позволяет сформулировать или уточнить метрики и признаки возможности или необходимости начала тестирования (entry criteria), приостановки (suspension criteria) и возобновления (resumption criteria) тестирования, завершения или прекращения тестирования (exit criteria).
Стадия 3 (уточнение стратегии тестирования) представляет собой ещё одно обращение к планированию, но уже на локальном уровне: рассматриваются и уточняются те части стратегии тестирования (test strategy), которые актуальны для текущей итерации.
Стадия 4 (разработка тест-кейсов) посвящена разработке, пересмотру, уточнению, доработке, переработке и прочим действиям с тест-кейсами, наборами тест-кейсов, тестовыми сценариями и иными артефактами, которые будут использоваться при непосредственном выполнении тестирования.
Стадия 5 (выполнение тест-кейсов) и стадия 6 (фиксация найденных дефектов) тесно связаны между собой и фактически выполняются параллельно: дефекты фиксируются сразу по факту их обнаружения в процессе выполнения тест-кейсов. Однако зачастую после выполнения всех тест-кейсов и написания всех отчётов о найденных дефектах проводится явно выделенная стадия уточнения, на которой все отчёты о дефектах рассматриваются повторно с целью формирования единого понимания проблемы и уточнения таких характеристик дефекта, как важность и срочность.
Стадия 7 (анализ результатов тестирования) и стадия 8 (отчётность) также тесно связаны между собой и выполняются практически параллельно. Формулируемые на стадии анализа результатов выводы напрямую зависят от плана тестирования, критериев приёмки и уточнённой стратегии, полученных на стадиях 1, 2 и 3. Полученные выводы оформляются на стадии 8 и служат основой для стадий 1, 2 и 3 следующей итерации тестирования. Таким образом, цикл замыкается.
В жизненном цикле тестирования пять из восьми стадий так или иначе связаны с управлением проектами, рассмотрение которого не входит в наши планы, а потому обо всём, что касается планирования и отчётности, мы кратко поговорим в главе «Оценка трудозатрат, планирование и отчётность». А сейчас мы переходим к ключевым навыкам и основным видам деятельности тестировщиков и начнём с работы с документацией.
Как мы только что рассмотрели в главе, посвящённой жизненному циклу тестирования, всё так или иначе начинается с документации и требований.
Требование (requirement) — описание того, какие функции и с соблюдением каких условий должно выполнять приложение в процессе решения полезной для пользователя задачи.
Требования являются отправной точкой для определения того, что проектная команда будет проектировать, реализовывать и тестировать. Элементарная логика говорит нам, что если в требованиях что-то «не то», то и реализовано будет «не то», т.е. колоссальная работа множества людей будет выполнена впустую. Эту мысль иллюстрирует рисунок.
Брайан Хэнкс, описывая важность требований, подчёркивает, что они:
Вне зависимости от того, какая модель разработки ПО используется на проекте, чем позже будет обнаружена проблема, тем сложнее и дороже будет её решение. А в самом начале («водопада», «спуска по букве v», «итерации», «витка спирали») идёт планирование и работа с требованиями.
Если проблема в требованиях будет выяснена на этой стадии, её решение может свестись к исправлению пары слов в тексте, в то время как недоработка, вызванная пропущенной проблемой в требованиях и обнаруженная на стадии эксплуатации, может даже полностью уничтожить проект.
Если графики вас не убеждают, попробуем проиллюстрировать ту же мысль на простом примере. Допустим, вы с друзьями составляете список покупок перед поездкой в гипермаркет. Вы поедете покупать, а друзья ждут вас дома. Сколько «стоит» дописать, вычеркнуть или изменить пару пунктов, пока вы только-только составляете список? Нисколько. Если мысль о несовершенстве списка настигла вас по пути в гипермаркет, уже придётся звонить (дёшево, но не бесплатно). Если вы поняли, что в списке «что-то не то» в очереди на кассу, придётся возвращаться в торговый зал и тратить время. Если проблема выяснилась по пути домой или даже дома, придётся вернуться в гипермаркет. И, наконец, клинический случай: в списке изначально было что-то уж совсем неправильное (например, «100 кг конфет — и всё»), поездка совершена, все деньги потрачены, конфеты привезены и только тут выясняется, что «ну мы же пошутили».
Ещё одним аргументом в пользу тестирования требований является то, что, по разным оценкам, в них зарождается от ½ до ¾ всех проблем с программным обеспечением. В итоге есть риск, что получится так, как показано на рисунке.
Поскольку мы постоянно говорим «документация и требования», а не просто «требования», то стоит рассмотреть перечень документации, которая должна подвергаться тестированию в процессе разработки ПО (хотя далее мы будем концентрироваться именно на требованиях).
В общем случае документацию можно разделить на два больших вида в зависимости от времени и места её использования
В некоторых классификациях часть документов из продуктной документации может быть перечислена в проектной документации — это совершенно нормально, т.к. понятие проектной документации по определению является более широким. Поскольку с этой классификацией связано очень много вопросов и непонимания, отразим суть ещё раз — графически — и напомним, что мы договорились классифицировать документацию по признаку того, где (для чего) она является наиболее востребованной.
Степень важности и глубина тестирования того или иного вида документации и даже отдельного документа определяется большим количеством факторов, но неизменным остаётся общий принцип: всё, что мы создаём в процессе разработки проекта (даже рисунки маркером на доске, даже письма, даже переписку в скайпе), можно считать документацией и так или иначе подвергать тестированию (например, вычитывание письма перед отправкой — это тоже своего рода тестирование документации).
Требования начинают свою жизнь на стороне заказчика. Их сбор (gathering) и выявление (elicitation) осуществляются с помощью следующих основных техник
Интервью. Самый универсальный путь выявления требований, заключающийся в общении проектного специалиста (как правило, специалиста по бизнес-анализу) и представителя заказчика (или эксперта, пользователя и т.д.). Интервью может проходить в классическом понимании этого слова (беседа в виде «вопрос-ответ»), в виде переписки и т.п. Главным здесь является то, что ключевыми фигурами выступают двое — интервьюируемый и интервьюер (хотя это и не исключает наличия «аудитории слушателей», например, в виде лиц, поставленных в копию переписки).
Работа с фокусными группами. Может выступать как вариант «расширенного интервью», где источником информации является не одно лицо, а группа лиц (как правило, представляющих собой целевую аудиторию, и/или обладающих важной для проекта информацией, и/или уполномоченных принимать важные для проекта решения).
Анкетирование. Этот вариант выявления требований вызывает много споров, т.к. при неверной реализации может привести к нулевому результату при объёмных затратах. В то же время при правильной организации анкетирование позволяет автоматически собрать и обработать огромное количество ответов от огромного количества респондентов. Ключевым фактором успеха является правильное составление анкеты, правильный выбор аудитории и правильное преподнесение анкеты.
Семинары и мозговой штурм. Семинары позволяют группе людей очень быстро обменяться информацией (и наглядно продемонстрировать те или иные идеи), а также хорошо сочетаются с интервью, анкетированием, прототипированием и моделированием — в том числе для обсуждения результатов и формирования выводов и решений. Мозговой штурм может проводиться и как часть семинара, и как отдельный вид деятельности. Он позволяет за минимальное время сгенерировать большое количество идей, которые в дальнейшем можно не спеша рассмот-реть с точки зрения их использования для развития проекта.
Наблюдение. Может выражаться как в буквальном наблюдении за некими процессами, так и во включении проектного специалиста в эти процессы в качестве участника. С одной стороны, наблюдение позволяет увидеть то, о чём (по совер-шенно различным соображениям) могут умолчать интервьюируемые, анкетируе-мые и представители фокусных групп, но с другой — отнимает очень много времени и чаще всего позволяет увидеть лишь часть процессов.
Прототипирование. Состоит в демонстрации и обсуждении промежуточных версий продукта (например, дизайн страниц сайта может быть сначала представ-лен в виде картинок, и лишь затем свёрстан). Это один из лучших путей поиска единого понимания и уточнения требований, однако он может привести к серьёз-ным дополнительным затратам при отсутствии специальных инструментов (позво-ляющих быстро создавать прототипы) и слишком раннем применении (когда требо-вания ещё не стабильны, и высока вероятность создания прототипа, имеющего мало общего с тем, что хотел заказчик).
Анализ документов. Хорошо работает тогда, когда эксперты в предметной области (временно) недоступны, а также в предметных областях, имеющих обще-принятую устоявшуюся регламентирующую документацию. Также к этой технике от-носится и просто изучение документов, регламентирующих бизнес-процессы в предметной области заказчика или в конкретной организации, что позволяет при-обрести необходимые для лучшего понимания сути проекта знания.
Моделирование процессов и взаимодействий. Может применяться как к «бизнес-процессам и взаимодействиям» (например: «договор на закупку формиру-ется отделом закупок, визируется бухгалтерией и юридическим отделом…»), так и к «техническим процессам и взаимодействиям» (например: «платёжное по-ручение генерируется модулем “Бухгалтерия”, шифруется модулем “Безопас-ность” и передаётся на сохранение в модуль “Хранилище”»). Данная техника тре-бует высокой квалификации специалиста по бизнес-анализу, т.к. сопряжена с обра-боткой большого объёма сложной (и часто плохо структурированной) информации.
Самостоятельное описание. Является не столько техникой выявления тре-бований, сколько техникой их фиксации и формализации. Очень сложно (и даже нельзя!) пытаться самому «придумать требования за заказчика», но в спокойной обстановке можно самостоятельно обработать собранную информацию и акку-ратно оформить её для дальнейшего обсуждения и уточнения.
Форма представления, степень детализации и перечень полезных свойств требований зависят от уровней и типов требований67, которые схематично пред-ставлены на рисунке
Бизнес-требования (business requirements) выражают цель, ради которой разрабатывается продукт (зачем вообще он нужен, какая от него ожидается польза, как заказчик с его помощью будет получать прибыль). Результатом выявления тре-бований на этом уровне является общее видение (vision and scope70) — документ, который, как правило, представлен простым текстом и таблицами. Здесь нет дета-лизации поведения системы и иных технических характеристик, но вполне могут быть определены приоритеты решаемых бизнес-задач, риски и т.п.
Несколько простых, изолированных от контекста и друг от друга примеров бизнес-требований:
Пользовательские требования (user requirements) описывают задачи, ко-торые пользователь может выполнять с помощью разрабатываемой системы (ре-акцию системы на действия пользователя, сценарии работы пользователя). По-скольку здесь уже появляется описание поведения системы, требования этого уровня могут быть использованы для оценки объёма работ, стоимости проекта, времени разработки и т.д. Пользовательские требования оформляются в виде ва-риантов использования (use cases72), пользовательских историй (user stories), пользовательских сценариев (user scenarios). (Также см. создание пользовательских сценариев в процессе выполнения тестирования.)
Несколько простых, изолированных от контекста и друг от друга примеров пользовательских требований:
Бизнес-правила (business rules) описывают особенности принятых в пред-метной области (и/или непосредственно у заказчика) процессов, ограничений и иных правил. Эти правила могут относиться к бизнес-процессам, правилам работы сотрудников, нюансам работы ПО и т.д.
Несколько простых, изолированных от контекста и друг от друга примеров бизнес-правил:
Атрибуты качества (quality attributes) расширяют собой нефункциональ-ные требования и на уровне пользовательских требований могут быть представ-лены в виде описания ключевых для проекта показателей качества (свойств про-дукта, не связанных с функциональностью, но являющихся важными для достиже-ния целей создания продукта — производительность, масштабируемость, восста-навливаемость). Атрибутов качества очень много77, но для любого проекта реально важными является лишь некоторое их подмножество.
Несколько простых, изолированных от контекста и друг от друга примеров атрибутов качества:
Функциональные требования (functional requirements) описывают поведе-ние системы, т.е. её действия (вычисления, преобразования, проверки, обработку и т.д.). В контексте проектирования функциональные требования в основном вли-яют на дизайн системы.
Стоит помнить, что к поведению системы относится не только то, что система должна делать, но и то, что она не должна делать (например: «приложение не должно выгружать из оперативной памяти фоновые документы в течение 30 минут с момента выполнения с ними последней операции»).
Несколько простых, изолированных от контекста и друг от друга примеров функциональных требований:
Нефункциональные требования (non-functional requirements) описывают свойства системы (удобство использования, безопасность, надёжность, расширяе-мость и т.д.), которыми она должна обладать при реализации своего поведения. Здесь приводится более техническое и детальное описание атрибутов качества. В контексте проектирования нефункциональные требования в основном влияют на архитектуру системы.
Несколько простых, изолированных от контекста и друг от друга примеров нефункциональных требований:
Следующие требования в общем случае могут быть отнесены к нефункцио-нальным, однако их часто выделяют в отдельные подгруппы (здесь для простоты рассмотрены лишь три таких подгруппы, но их может быть и гораздо больше; как правило, они проистекают из атрибутов качества, но высокая степень детализации позволяет отнести их к уровню требований к продукту).
Ограничения (limitations, constraints) представляют собой факторы, ограни-чивающие выбор способов и средств (в том числе инструментов) реализации про-дукта.
Несколько простых, изолированных от контекста и друг от друга примеров ограничений:
Требования к интерфейсам (external interfaces requirements) описывают особенности взаимодействия разрабатываемой системы с другими системами и операционной средой.
Несколько простых, изолированных от контекста и друг от друга примеров требований к интерфейсам:
Требования к данным (data requirements) описывают структуры данных (и сами данные), являющиеся неотъемлемой частью разрабатываемой системы. Ча-сто сюда относят описание базы данных и особенностей её использования.
Несколько простых, изолированных от контекста и друг от друга примеров требований к данным:
Спецификация требований (software requirements specification, SRS) объ-единяет в себе описание всех требований уровня продукта и может представлять собой весьма объёмный документ (сотни и тысячи страниц).
Поскольку требований может быть очень много, а их приходится не только единожды написать и согласовать между собой, но и постоянно обновлять, работу проектной команды по управлению требованиями значительно облегчают соответ-ствующие инструментальные средства (requirements management tools).
В процессе тестирования требований проверяется их соответствие опреде-лённому набору свойств
Завершённость (completeness). Требование является полным и закончен-ным с точки зрения представления в нём всей необходимой информации, ничто не пропущено по соображениям «это и так всем понятно».
Типичные проблемы с завершённостью:
| Способы обнаружения проблем | Способы устранения проблем |
|---|---|
| Применимы почти все техники тестиро-вания требований{48}, но лучше всего по-могает задавание вопросов и использо-вание графического представления раз-рабатываемой системы. Также очень по-могает глубокое знание предметной об-ласти, позволяющее замечать пропу-щенные фрагменты информации. | Как только было выяснено, что чего-то не хватает, нужно полу-чить недостающую информа-цию и дописать её в требова-ния. Возможно, потребуется не-большая переработка требова-ний. |
Атомарность, единичность (atomicity). Требование является атомарным, если его нельзя разбить на отдельные требования без потери завершённости и оно описывает одну и только одну ситуацию.
Типичные проблемы с атомарностью:
| Способы обнаружения проблем | Способы устранения проблем |
|---|---|
| Обдумывание, обсуждение с колле-гами и здравый смысл: если мы счи-таем, что некий раздел требований перегружен и требует декомпози-ции, скорее всего, так и есть. | Переработка и структурирование требований: разбиение их на раз-делы, подразделы, пункты, под-пункты и т.д. |
Непротиворечивость, последовательность (consistency). Требование не должно содержать внутренних противоречий и противоречий другим требованиям и документам.
Типичные проблемы с непротиворечивостью:
| Способы обнаружения проблем | Способы устранения проблем |
|---|---|
| Лучше всего обнаружить противоречи-вость помогает хорошая память , но даже при её наличии незаменимым ин-струментом является графическое пред-ставление разрабатываемой системы, позволяющее представить всю ключевую информацию в виде единой согласован-ной схемы (на которой противоречия очень заметны). | После обнаружения противо-речия нужно прояснить ситуа-цию с заказчиком и внести не-обходимые правки в требова-ния. |
Недвусмысленность (unambiguousness89, clearness). Требование должно быть описано без использования жаргона, неочевидных аббревиатур и расплывча-тых формулировок, должно допускать только однозначное объективное понимание и быть атомарным в плане невозможности различной трактовки сочетания отдель-ных фраз.
Типичные проблемы с недвусмысленностью:
| Способы обнаружения проблем | Способы устранения проблем |
|---|---|
| Увидеть в требованиях двусмыслен-ность хорошо помогают перечислен-ные выше слова-индикаторы. Столь же эффективным является проду-мывание проверок: очень тяжело придумать объективную проверку для требования, допускающего раз-ночтение. | Самый страшный враг двусмыслен-ности – числа и формулы: если что-то можно выразить в формульном или числовом виде (вместо словес-ного описания), обязательно стоит это сделать. Если это невозможно, стоит хотя бы использовать макси-мально точные технические тер-мины, отсылки к стандартам и т.п. |
Выполнимость (feasibility). Требование должно быть технологически вы-полнимым и реализуемым в рамках бюджета и сроков разработки проекта.
Типичные проблемы с выполнимостью:
| Способы обнаружения проблем | Способы устранения проблем |
|---|---|
| Увы, здесь есть только один путь: максимально нарабатывать опыт и исходить из него. Невозможно по-нять, что некоторое требование «стоит» слишком много или вовсе невыполнимо, если нет понимания процесса разработки ПО, понима-ния предметной области и иных со-путствующих знаний. | При обнаружении невыполнимости требования не остаётся ничего дру-гого, как подробно обсудить ситуа-цию с заказчиком и или изменить требование (возможно – отказаться от него), или пересмотреть условия выполнения проекта (сделав выпол-нение данного требования возмож-ным). |
Обязательность, нужность (obligatoriness) и актуальность (up-to-date). Если требование не является обязательным к реализации, оно должно быть просто исключено из набора требований. Если требование нужное, но «не очень важное», для указания этого факта используется указание приоритета (см. «проранжирован-ность по…»). Также исключены (или переработаны) должны быть требования, утра-тившие актуальность.
Типичные проблемы с обязательностью и актуальностью:
| Способы обнаружения проблем | Способы устранения проблем |
|---|---|
| Постоянный (периодический) пере-смотр требований (желательно – с участием заказчика) позволяет за-метить фрагменты, потерявшие ак-туальность или ставшие низкоприо-ритетными. | Переработка требований (с устране-нием фрагментов, потерявших акту-альность) и переработкой фрагмен-тов, у которых изменился приоритет (часто изменение приоритета ведёт и к изменению формулировки требо-вания). |
Прослеживаемость (traceability). Прослеживаемость бывает вертикаль-ной (vertical traceability94) и горизонтальной (horizontal traceability95). Вертикальная позволяет соотносить между собой требования на различных уровнях требований, горизонтальная позволяет соотносить требование с тест-планом, тест-кейсами, ар-хитектурными решениями и т.д.
Для обеспечения прослеживаемости часто используются специальные ин-струменты по управлению требованиями (requirements management tool96) и/или матрицы прослеживаемости (traceability matrix97).
Типичные проблемы с прослеживаемостью:
| Способы обнаружения проблем | Способы устранения проблем |
|---|---|
| Нарушения прослеживаемости ста-новятся заметны в процессе работы с требованиями, как только у нас возникают остающиеся без ответа вопросы вида «откуда взялось это требование?», «где описаны сопут-ствующие (связанные) требова-ния?», «на что это влияет?». | Переработка требований. Воз-можно, придётся даже менять струк-туру набора требований, но всё точно начнётся с расстановки мно-жества перекрёстных ссылок, позво-ляющих осуществлять быструю и прозрачную навигацию по набору требований. |
Модифицируемость (modifiability). Это свойство характеризует простоту внесения изменений в отдельные требования и в набор требований. Можно гово-рить о наличии модифицируемости в том случае, если при доработке требований искомую информацию легко найти, а её изменение не приводит к нарушению иных описанных в этом перечне свойств.
Типичные проблемы с модифицируемостью:
| Способы обнаружения проблем | Способы устранения проблем |
|---|---|
| Если при внесении изменений в набор требований, мы сталкиваемся с проблемами, характерными для ситуации потери прослеживаемо-сти, значит – мы обнаружили про-блему с модифицируемостью. Также модифицируемость ухудша-ется при наличии практически лю-бой из рассмотренных в данном раз-деле проблем с требованиями. | Переработка требований с перво-степенной целью повысить их про-слеживаемость. Параллельно можно устранять иные обнаружен-ные проблемы. |
Проранжированность по важности, стабильности, срочности (ranked for importance, stability, priority). Важность характеризует зависимость успеха про-екта от успеха реализации требования. Стабильность характеризует вероятность того, что в обозримом будущем в требование не будет внесено никаких изменений. Срочность определяет распределение во времени усилий проектной команды по реализации того или иного требования.
Типичные проблемы с проранжированностью состоят в её отсутствии или не-верной реализации и приводят к следующим последствиям.
| Способы обнаружения проблем | Способы устранения проблем |
|---|---|
| Как и в случае с актуальностью и обяза-тельностью требований, здесь лучшим способом обнаружения недоработок яв-ляется постоянный (периодический) пе-ресмотр требований (желательно – с участием заказчика), в процессе кото-рого можно обнаружить неверные значе-ния показателей срочности, важности и стабильности обсуждаемых требований. | Прямо в процессе обсуждения требований с заказчиком (во время пересмотра требований) стоит вносить правки в значе-ния показателей срочности, важности и стабильности об-суждаемых требований. |
Корректность (correctness) и проверяемость (verifiability). Фактически эти свойства вытекают из соблюдения всех вышеперечисленных (или можно ска-зать, что они не выполняются, если нарушено хотя бы одно из вышеперечислен-ных). В дополнение можно отметить, что проверяемость подразумевает возмож-ность создания объективного тест-кейса (тест-кейсов), однозначно показывающего, что требование реализовано верно и поведение приложения в точности соответ-ствует требованию.
К типичным проблемам с корректностью также можно отнести:
| Способы обнаружения проблем | Способы устранения проблем |
|---|---|
| Поскольку здесь мы имеем дело с «интегральной» проблемой, обнару-живается она с использованием ра-нее описанных способов. Отдель-ных уникальных методик здесь нет. | Внесение в требования необходи-мых изменений – от элементарной правки обнаруженной опечатки, до глобальной переработки всего набора требований. |
Тестирование документации и требований относится к разряду нефункцио-нального тестирования (non-functional testing103). Основные техники такого тестиро-вания в контексте требований таковы.
Взаимный просмотр (peer review104). Взаимный просмотр («рецензирова-ние») является одной из наиболее активно используемых техник тестирования тре-бований и может быть представлен в одной из трёх следующих форм (по мере нарастания его сложности и цены):
Вопросы. Следующей очевидной техникой тестирования и повышения каче-ства требований является (повторное) использование техник выявления требова-ний, а также (как отдельный вид деятельности) — задавание вопросов. Если хоть что-то в требованиях вызывает у вас непонимание или подозрение — задавайте вопросы. Можно спросить представителей заказчика, можно обратиться к справоч-ной информации. По многим вопросам можно обратиться к более опытным колле-гам при условии, что у них имеется соответствующая информация, ранее получен-ная от заказчика. Главное, чтобы ваш вопрос был сформулирован таким образом, чтобы полученный ответ позволил улучшить требования.
Поскольку здесь начинающие тестировщики допускают уйму ошибок, рас-смотрим подробнее. В следующей таблице приведено несколько плохо сформулирован-ных требований, а также примеров плохих и хороших вопросов. Плохие вопросы провоцируют на бездумные ответы, не содержащие полезной информации.
| Плохое требование | Плохие вопросы | Хорошие вопросы |
|---|---|---|
| «Приложение должно быстро запускаться». | «Насколько быстро?» (На это вы рискуете получить ответы в стиле «очень быстро», «макси-мально быстро», «нууу… просто быстро»). «А если не получится быстро?» (Этим вы рискуете просто уди-вить или даже разозлить заказ-чика.) «Всегда?» («Да, всегда». Хм, а вы ожидали другого ответа?) |
«Каково максимально допусти-мое время запуска приложения, на каком оборудовании и при ка-кой загруженности этого обору-дования операционной системой и другими приложениями? На до-стижение каких целей влияет скорость запуска приложения? Допускается ли фоновая за-грузка отдельных компонентов приложения? Что является кри-терием того, что приложение за-кончило запуск?» |
| «Опционально должен поддерживаться экспорт документов в формат PDF» | «Любых документов?» (Ответы «да, любых» или «нет, только от-крытых» вам всё равно не помо-гут.) «В PDF какой версии должен производиться экспорт?» (Сам по себе вопрос хорош, но он не даёт понять, что имелось в виду под «опционально».) «Зачем?» («Нужно!» Именно так хочется ответить, если вопрос не раскрыт полностью.) |
«Насколько возможность экс-порта в PDF важна? Как часто, кем и с какой целью она будет ис-пользоваться? Является ли PDF единственным допустимым фор-матом для этих целей или есть альтернативы? Допускается ли использование внешних утилит (например, виртуальных PDF-принтеров) для экспорта доку-ментов в PDF?» |
| «Если дата события не указана, она выбирается автоматически» | «А если указана?» (То она ука-зана. Логично, не так ли?) «А если дату невозможно вы-брать автоматически?» (Сам во-прос интересен, но без поясне-ния причин невозможности зву-чит как издёвка.) «А если у события нет даты?» (Тут автор вопроса, скорее всего, хотел уточнить, обязательно ли это поле для заполнения. Но из самого требования видно, что обязательно: если оно не запол-нено человеком, его должен за-полнить компьютер.) |
«Возможно, имелось в виду, что дата генерируется автоматиче-ски, а не выбирается? Если да, то по какому алгоритму она гене-рируется? Если нет, то из какого набора выбирается дата и как ге-нерируется этот набор? P.S. Воз-можно, стоит использовать теку-щую дату?» |
Тест-кейсы и чек-листы. Мы помним, что хорошее требование является проверяемым, а значит, должны существовать объективные способы определения того, верно ли реализовано требование. Продумывание чек-листов или даже пол-ноценных тест-кейсов в процессе анализа требований позволяет нам определить, насколько требование проверяемо. Если вы можете быстро придумать несколько пунктов чек-листа, это ещё не признак того, что с требованием всё хорошо (напри-мер, оно может противоречить каким-то другим требованиям). Но если никаких идей по тестированию требования в голову не приходит — это тревожный знак.
Рекомендуется для начала убедиться, что вы понимаете требование (в том числе прочесть соседние требования, задать вопросы коллегам и т.д.). Также можно пока отложить работу с данным конкретным требованием и вернуться к нему позднее — возможно, анализ других требований позволит вам лучше понять и это конкретное. Но если ничто не помогает — скорее всего, с требованием что-то не так. Справедливости ради надо отметить, что на начальном этапе проработки требований такие случаи встречаются очень часто — требования сформированы очень поверхностно, расплывчато и явно нуждаются в доработке, т.е. здесь нет необходимости проводить сложный анализ, чтобы констатировать непроверяе-мость требования. На стадии же, когда требования уже хорошо сформулированы и протестиро-ваны, вы можете продолжать использовать эту технику, совмещая разработку тест-кейсов и дополнительное тестирование требований.
Исследование поведения системы. Эта техника логически вытекает из предыдущей (продумывания тест-кейсов и чек-листов), но отличается тем, что здесь тестированию подвергается, как правило, не одно требование, а целый набор. Тестировщик мысленно моделирует процесс работы пользователя с систе-мой, созданной по тестируемым требованиям, и ищет неоднозначные или вовсе неописанные варианты поведения системы. Этот подход сложен, требует доста-точной квалификации тестировщика, но способен выявить нетривиальные недора-ботки, которые почти невозможно заметить, тестируя требования по отдельности.
Рисунки (графическое представление). Чтобы увидеть общую картину тре-бований целиком, очень удобно использовать рисунки, схемы, диаграммы, интел-лект-карты108 и т.д. Графическое представление удобно одновременно своей наглядностью и краткостью (например, UML-схема базы данных, занимающая один экран, может быть описана несколькими десятками страниц текста). На рисунке очень легко заметить, что какие-то элементы «не стыкуются», что где-то чего-то не хватает и т.д. Если вы для графического представления требований будете исполь-зовать общепринятую нотацию (например, уже упомянутый UML), вы получите до-полнительные преимущества: вашу схему смогут без труда понимать и дорабаты-вать коллеги, а в итоге может получиться хорошее дополнение к текстовой форме представления требований.
Прототипирование. Можно сказать, что прототипирование часто является следствием создания графического представления и анализа поведения системы. С использованием специальных инструментов можно очень быстро сделать наброски пользовательских интерфейсов, оценить применимость тех или иных ре-шений и даже создать не просто «прототип ради прототипа», а заготовку для даль-нейшей разработки, если окажется, что реализованное в прототипе (возможно, с небольшими доработками) устраивает заказчика.
Поскольку наша задача состоит в том, чтобы сформировать понимание ло-гики анализа и тестирования требований, мы будем рассматривать предельно крат-кий и простой их набор.
Допустим, что у некоего клиента есть проблема: поступающие в огромном количестве его сотрудникам текстовые файлы приходят в разных кодировках, и со-трудники тратят много времени на перекодирование («ручной подбор кодировки»). Соответственно, он хотел бы иметь инструмент, позволяющий автоматически при-водить кодировки всех текстовых файлов к некоей одной. Итак, на свет появляется проект с кодовым названием «Конвертер файлов».
Уровень бизнес-требований. Бизнес-требования (см. главу «Уровни и типы требований»{36}) изначально могут выглядеть так: «Необходим инструмент для ав-томатического приведения кодировок текстовых документов к одной».
Здесь мы можем задать множество вопросов. Для удобства приведём как сами вопросы, так и предполагаемые ответы клиента.
Даже таких вопросов и ответов достаточно, чтобы переформулировать биз-нес-требования следующим образом (обратите внимание, что многие вопросы были заданы на будущее и не привели к появлению в бизнес-требованиях лишней технической детализации).
Суть проекта: разработка инструмента, устраняющего проблему множе-ственности кодировок в текстовых документах, расположенных в локальном диско-вом хранилище.
Цели проекта:
Метрики достижения целей:
Риски:
Почему мы решили, что среднее время на подбор кодировки составляет 1–2 минуты? Мы провели наблюдение. Также мы помним ответы заказчика на вопросы об исходных форматах документов, исходных и конечной кодировках (заказчик честно сказал, что не знает ответа), а потому мы попросили его предоставить нам доступ к хранилищу документов и выяснили:
На данном этапе мы вполне можем решить, что стоит заняться детализацией требований на более низких уровнях, т.к. появившиеся там вопросы позволят нам вернуться к бизнес-требованиям и улучшить их, если в этом возникнет необходи-мость.
Уровень пользовательских требований. Пришло время заняться уровнем пользовательских требований (см. главу «Уровни и типы требований»{36}). Проект у нас несколько специфичный — результатами работы программного средства будет пользоваться большое количество людей, но само программное средство при этом они использовать не будут (оно будет просто выполнять свою работу «само по себе» — запущенное на сервере с хранилищем документов). Потому под пользова-телем здесь мы будем понимать человека, настраивающего работу приложения на сервере.
Для начала мы создадим небольшую диаграмму вариантов использования, представленную на рисунке 2.2.g (да, иногда её создают после текстового описа-ния требований, но иногда и до — нам сейчас удобнее сделать это сначала). В реальных проектах подобные схемы могут быть на несколько порядков более слож-ными и требующими подробной детализации каждого варианта использования. У нас же проект миниатюрный, потому схема получилась элементарной, и мы сразу переходим к описанию требований.
Внимание! Это — ПЛОХИЕ требования. И мы далее будем их улучшать.
Системные характеристики
Пользовательские требования
ПТ-3: Просмотр журнала работы приложения.
Бизнес-правила
Атрибуты качества
Как будет сказано в главе «Типичные ошибки при анализе и тестировании требований»{60}, не стоит изменять исходный формат файла и форматирование до-кумента, потому мы используем встроенные средства Word для отслеживания из-менений и добавления комментариев. Примерный вид результата показан на ри-сунке
К сожалению, мы не можем в данном тексте применить эти средства (резуль-тат будет отображаться некорректно, т.к. вы сейчас, скорее всего, читаете этот текст не в виде DOCX-документа), а потому применим второй классический способ — будем вписывать свои вопросы и комментарии прямо внутрь текста требований.
Проблемные места требований отмечены жирным курсивом, наши вопросы отмечены курсивом, предполагаемые ответы заказчика (даже, если точнее, техни-ческого специалиста заказчика) — жирным. В процессе анализа текст требований примет вот такой вид.
Системные характеристики
Пользовательские требования
Также см. диаграмму вариантов использования.
- ПТ-1: Запуск и остановка приложения.
- ПТ-1.1: Запуск приложения производится из консоли командой PHP (возможно, здесь опечатка: должно быть php (в нижнем регистре)) (Да, OK.) converter.php параметры».
- Какие параметры передаются скрипту при запуске? (Каталог с исходными файлами, каталог с конечными файлами.)
- Какова реакция скрипта на:
- отсутствие параметров; (Пишет хелп.)
- неверное количество параметров; (Пишет хелп и пояс-няет, что не так.)
- неверные значения каждого из параметров. (Пишет хелп и поясняет, что не так.)
- ПТ-1.2: Остановка приложения производится выполнением команды Ctrl+C (предлагаем дополнить это выражение фразой «в окне кон-соли, из которого было запущено приложение») (Да, OK.)
- ПТ-2: Конфигурирование приложения.
- ПТ-2.1: Конфигурирование приложения сводится к указанию путей в файловой системе.
- Путей к чему? (Каталог с исходными файлами, каталог с ко-нечными файлами.)
- ПТ-2.2: Целевой кодировкой является UTF8.
- Предполагается ли указание иной целевой кодировки, или UTF8 используется в качестве целевой всегда? (Только UTF8, других не надо.)
- ПТ-3: Просмотр журнала работы приложения.
- ПТ-3.1: В процессе работы приложение должно выводить журнал своей работы в консоль и лог-файл.
- Каков формат журнала? (Дата-время, что и с чем делали, что получилось. Гляньте в логе апача, там нормально напи-сано.)
- Различаются ли форматы журнала для консоли и лог-файла? (Нет.)
- Как определяется имя лог-файла? (Третий параметр при за-пуске. Если не указан — пусть будет converter.log рядом с php-скриптом.)
- ПТ-3.2: При первом запуске приложения лог-файл создаётся, а при последующих — дописывается.
- Как приложение различает свой первый и последующие за-пуски? (Никак.)
- Какова реакция приложения на отсутствие лог-файла в слу-чае, если это не первый запуск? (Создаёт. Тут идея в том, чтобы оно не затирало старый лог — и всё.)
Бизнес-правила
Атрибуты качества
Здесь есть несколько важных моментов, на которые стоит обратить внима-ние:
Уровень продуктных требований (см. главу «Уровни и типы требова-ний»). Применим т.н. «самостоятельное описание» (см. главу «Источники и пути выявления требований») и улучшим требования. Поскольку мы уже получили много специфической технической информации, можно параллельно писать полно-ценную спецификацию требований. Во многих случаях, когда для оформления тре-бований используется простой текст, для удобства формируется единый документ, который интегрирует в себе как пользовательские требования, так и детальные спе-цификации. Теперь требования принимают следующий вид.
Системные характеристики
Пользовательские требования
Также см. диаграмму вариантов использования.
- ПТ-1: Запуск и остановка приложения.
- ПТ-1.1: Запуск приложения производится из консоли командой
php converter.php SOURCE_DIR DESTINATION_DIR [LOG_FILE_NAME](описание параметров приведено в разделе ДС-2.1, реакция на ошибки при указании параметров приведена в разделах ДС-2.2, ДС-2.3, ДС-2.4).- ПТ-1.2: Остановка приложения производится выполнением команды
Ctrl+Cв окне консоли, из которого было запущено приложение.- ПТ-2: Конфигурирование приложения.
- ПТ-2.1: Конфигурирование приложения сводится к указанию параметров командной строки (см. ДС-2).
- ПТ-2.2: Целевой кодировкой преобразования текстов является кодировка UTF8 (также см. О-5).
- ПТ-3: Просмотр журнала работы приложения.
- ПТ-3.1: В процессе работы приложение должно выводить журнал своей работы в консоль и лог-файл (см. ДС-4), имя которого опреде-ляется правилами, указанными в ДС-2.1.
- ПТ-3.2: Формат журнала работы и лог файла указан в ДС-4.1, а реак-ция приложения на наличие или отсутствие лог-файла указана в ДС-4.2 и ДС-4.3 соответственно.
Бизнес-правила
Атрибуты качества
Ограничения
Созданные на основе таких пользовательских требований детальные специ-фикации имеют следующий вид.
Детальные спецификации
converter.php);USAGE converter.php SOURCE_DIR DESTINATION_DIR LOG_FILE_NAME.Итак, мы получили набор требований, с которым уже вполне можно работать. Он не идеален (и никогда вы не встретите идеальных требований), но он вполне пригоден для того, чтобы разработчики смогли реализовать приложение, а тести-ровщики — протестировать его.
Для лучшего понимания и запоминания материала рассмотрим типичные ошибки, совершаемые в процессе анализа и тестирования требований.
Изменение формата файла и документа. По какой-то непонятной причине очень многие начинающие тестировщики стремятся полностью уничтожить исход-ный документ, заменив текст таблицами (или наоборот), перенеся данные из Word в Excel и т.д. Это можно сделать только в одном случае: если вы предварительно договорились о подобных изменениях с автором документа. В противном случае вы полностью уничтожаете чью-то работу, делая дальнейшее развитие документа крайне затруднительным.
Самое худшее, что можно сделать с документом, — это сохранить его в итоге в некоем формате, предназначенном скорее для чтения, чем для редактирования (PDF, набор картинок и тому подобное).
Если требования изначально создаются в некоей системе управления требо-ваниями, этот вопрос неактуален, но высокоуровневые требования большинство заказчиков привыкли видеть в обычном DOCX-документе, а Word предоставляет такие прекрасные возможности работы с документом, как отслеживание изменений и комментарии.
И ещё два маленьких, но неприятных момента относительно таблиц:
Отметка того факта, что с требованием всё в порядке. Если у вас не воз-никло вопросов и/или замечаний к требованию — не надо об этом писать. Любые пометки в документе подсознательно воспринимаются как признак проблемы, и та-кое «одобрение требований» только раздражает и затрудняет работу с документом — сложнее становится заметить пометки, относящиеся к проблемам.
Описание одной и той же проблемы в нескольких местах. Помните, что ваши пометки, комментарии, замечания и вопросы тоже должны обладать свой-ствами хороших требований (настолько, насколько эти свойства к ним применимы). Если вы много раз в разных местах пишете одно и то же об одном и том же, вы нарушаете как минимум свойство модифицируемости. Постарайтесь в таком слу-чае вынести ваш текст в конец документа, укажите в нём же (в начале) перечень пунктов требований, к которым он относится, а в самих требованиях в коммента-риях просто ссылайтесь на этот текст.
Написание вопросов и комментариев без указания места требования, к которым они относятся. Если ваше инструментальное средство позволяет ука-зать часть требования, к которому вы пишете вопрос или комментарий, сделайте это (например, Word позволяет выделить для комментирования любую часть тек-ста — хоть один символ). Если это невозможно, цитируйте соответствующую часть текста. В противном случае вы порождаете неоднозначность или вовсе делаете вашу пометку бессмысленной, т.к. становится невозможно понять, о чём вообще идёт речь.
Задавание плохо сформулированных вопросов. Эта ошибка была по-дробно рассмотрена выше (см. раздел «Техники тестирования требований». Однако добавим, что есть ещё три вида плохих вопросов:
И ещё раз напомним о точности формулировок: иногда одно-два слова могут на корню уничтожить отличную идею, превратив хороший вопрос в плохой. Срав-ните: «Что такое формат даты по умолчанию?» и «Каков формат даты по умолча-нию?». Первый вариант просто показывает некомпетентность автора вопроса, то-гда как второй — позволяет получить полезную информацию.
К этой же проблеме относится непонимание контекста. Часто можно увидеть вопросы в стиле «о каком приложении идёт речь?», «что такое система?» и им по-добные. Чаще всего автор таких вопросов просто вырвал требование из контекста, по которому было совершенно ясно, о чём идёт речь.
Написание очень длинных комментариев и/или вопросов. История знает случаи, когда одна страница исходных требований превращалась в 20–30 страниц текста анализа и вопросов. Это плохой подход. Все те же мысли можно выразить значительно более кратко, чем сэкономить как своё время, так и время автора ис-ходного документа. Тем более стоит учитывать, что на начальных стадиях работы с требованиями они весьма нестабильны, и может получиться так, что ваши 5–10 страниц комментариев относятся к требованию, которое просто удалят или изменят до неузнаваемости.
Критика текста или даже его автора. Помните, что ваша задача — сделать требования лучше, а не показать их недостатки (или недостатки автора). Потому комментарии вида «плохое требование», «неужели вы не понимаете, как глупо это звучит», «надо переформулировать» неуместны и недопустимы.
Категоричные заявления без обоснования. Как продолжение ошибки «критика текста или даже его автора» можно отметить и просто категоричные заяв-ления наподобие «это невозможно», «мы не будем этого делать», «это не нужно». Даже если вы понимаете, что требование бессмысленно или невыполнимо, эту мысль стоит сформулировать в корректной форме и дополнить вопросами, позво-ляющими автору документа самому принять окончательное решение. Например, «это не нужно» можно переформулировать так: «Мы сомневаемся в том, что дан-ная функция будет востребована пользователями. Какова важность этого требова-ния? Уверены ли вы в его необходимости?»
Указание проблемы с требованиями без пояснения её сути. Помните, что автор исходного документа может не быть специалистом по тестированию или биз-нес-анализу. Потому просто пометка в стиле «неполнота», «двусмысленность» и т.д. могут ничего ему не сказать. Поясняйте свою мысль.
Сюда же можно отнести небольшую, но досадную недоработку, относящуюся к противоречивости: если вы обнаружили некие противоречия, сделайте соответ-ствующие пометки во всех противоречащих друг другу местах, а не только в одном из них. Например, вы обнаружили, что требование 20 противоречит требованию 30. Тогда в требовании 20 отметьте, что оно противоречит требованию 30, и наоборот. И поясните суть противоречия.
Плохое оформление вопросов и комментариев. Старайтесь сделать ваши вопросы и комментарии максимально простыми для восприятия. Помните не только о краткости формулировок, но и об оформлении текста (см., например, как на рисунке 2.2.j вопросы структурированы в виде списка — такая структура воспри-нимается намного лучше, чем сплошной текст). Перечитайте свой текст, исправьте опечатки, грамматические и пунктуационные ошибки и т.д.
Описание проблемы не в том месте, к которому она относится. Класси-ческим примером может быть неточность в сноске, приложении или рисунке, кото-рая почему-то описана не там, где она находится, а в тексте, ссылающемся на со-ответствующий элемент. Исключением может считаться противоречивость, при ко-торой описать проблему нужно в обоих местах.
Ошибочное восприятие требования как «требования к пользователю». Ранее (см. «Корректность» в «Свойства качественных требований») мы говорили, что требования в стиле «пользователь должен быть в состоянии отправить сооб-щение» являются некорректными. И это так. Но бывают ситуации, когда проблема намного менее опасна и состоит только в формулировке. Например, фразы в стиле «пользователь может нажать на любую из кнопок», «пользователю должно быть видно главное меню» на самом деле означают «все отображаемые кнопки должны быть доступны для нажатия» и «главное меню должно отображаться». Да, эту недо-работку тоже стоит исправить, но не следует отмечать её как критическую про-блему.
Скрытое редактирование требований. Эту ошибку можно смело отнести к разряду крайне опасных. Её суть состоит в том, что тестировщик произвольно вно-сит правки в требования, никак не отмечая этот факт. Соответственно, автор доку-мента, скорее всего, не заметит такой правки, а потом будет очень удивлён, когда в продукте что-то будет реализовано совсем не так, как когда-то было описано в требованиях. Потому простая рекомендация: если вы что-то правите, обязательно отмечайте это (средствами вашего инструмента или просто явно в тексте). И ещё лучше отмечать правку как предложение по изменению, а не как свершившийся факт, т.к. автор исходного документа может иметь совершенно иной взгляд на си-туацию.
Анализ, не соответствующий уровню требований. При тестировании тре-бований следует постоянно помнить, к какому уровню они относятся, т.к. в против-ном случае появляются следующие типичные ошибки:
| Тестирование и тестировщики | содержание | Виды и методы тестирования |