Всем привет! Меня зовут Вадим, и я QA-инженер в IT-компании Intelsy. С техническим заданием, и в частности с требованиями, лично я имею дело постоянно, поэтому собрал полезную для начинающих и продолжающих специалистов информацию по требованиям к IT-продукту, их видам, техникам и метрикам тестирования требований. На эту инфу стоит ориентироваться не только аналитикам и тестировщикам, но и остальным членам команды.
Что такое требования?
Требования служат фундаментом для каждого проекта и необходимы для глубокого понимания командой всех аспектов предстоящей работы. Ошибки и неточности в документации требований могут привести к проблемам в самый неожиданный момент. Внести пару правок в требования на первоначальном этапе гораздо проще, нежели вносить изменения в тысячи строк кода. Поэтому тщательное тестирование требований является критичным элементом процесса разработки, который помогает оптимизировать работу команды, предотвратить недопонимания и оценить выполнимость требований в установленных рамках времени, бюджета и доступных ресурсов.
Благодаря высокому качеству сформулированных требований достигается высокое качество конечного программного продукта. Процесс тестирования требований направлен на выявление и исправление потенциальных ошибок на ранних этапах проектирования, что в долгосрочной перспективе позволяет:
существенно снизить итоговую стоимость проекта;
повысить качество продукта;
сохранить нервы всей команде.
Что же включает в себя процесс тестирования требований?
Виды требований
При разработке продукта выделяют следующие виды требований:
Бизнес-требования определяют цели, ради которых разрабатывается продукт. Они устанавливают, какую ценность должен принести продукт и каковы пути получения прибыли с его помощью. Эти требования фиксируются в документе, который представляет общее видение и границы проекта, без детального описания системы или других технических характеристик.
Пользовательские требования описывают взаимодействие конечных пользователей с продуктом и выгоды, которые они получают. Пользовательские требования описывают, что пользователь может делать с продуктом и какие преимущества он получает (рабочие сценарии, реакция системы). Они часто представлены в форме пользовательских историй (user stories) и сценариев использования (use cases).
Бизнес-правила включают в себя набор ограничений и правил, которые регулируют определённые процессы в рамках выбранной области деятельности. Это могут быть корпоративная политика компании, государственные законодательные акты, отраслевые стандарты и т.д.
Функциональные требования описывают функциональные возможности продукта, а также поведение системы в различных ситуациях.
Нефункциональные требования описывают качественные характеристики продукта: удобство использования, безопасность, надежность, производительность, масштабируемость и другие атрибуты, а также различные технологические и эксплуатационные ограничения.
Тестирование требований в жизненном цикле разработки ПО
Жизненный цикл тестирования ПО — это процесс выполнения различных действий в ходе проведения тестирования. Каждая модель жизненного цикла тестирования программного обеспечения состоит из следующих шести ключевых этапов:
Анализ требований
Подготовка к тестированию
Создание тестовой документации
Настройка тестовой среды
Выполнение тестирования
Завершение цикла тестирования
Анализ и тестирование являются важнейшим и в то же время наименее затратным по времени этапом работ. По этой причине важно начинать тестирование с момента разработки технической спецификации. Задача тестирования требований – устранить как можно больше ошибок на ранних стадиях проектирования системы.
Тестирование требований
Для обеспечения высокого качества разработки программного обеспечения важно точно и ясно сформулировать требования к нему. Основные критерии, по которым тестировщики проводят анализ требований:
Полнота: все необходимые для реализации продукта детали должны быть включены в требования. Хорошей практикой является написание чек-листа проверок сразу при прочтении документа, чтобы не пропустить ничего важного.
Однозначность: требования должны быть сформулированы так, чтобы исключить возможность разночтений и различий в понимании среди всех участников процесса. Пример: если для поля с суммой дохода нужно установить значение по умолчанию, это должно быть четко указано. В противном случае аналитик может предположить, что значение будет равно 0, в то время как разработчик оставит его пустым, считая, что требования не уточняют это. Это может привести к ошибкам. Лучше избегать ситуаций, которые могут быть истолкованы по-разному.
Непротиворечивость: требования должны быть согласованными и не противоречить друг другу, даже если их много. Например, возникает инцидент, когда автор неоднократно упоминает один и тот же параметр, но в разных контекстах и с разным поведением. Или наличие общего требования без возможности исключений: например, требование 1 (из раздела функциональности спец-кнопок): когда активен режим «Mute», телефон не должен издавать никаких звуков. Требование 245 (из раздела интерфейса): когда пользователь снимает трубку, телефон должен издавать тоновые гудки. Имеем противоречивость в случае активного режима Mute и снятой трубки.
Атомарность: каждое требование должно быть самостоятельным, полным и описывать только один аспект функционала.
Корректность: требования должны точно отражать потребностям заинтересованных сторон, предметную область и пользовательские ожидания.
Тестируемость: подразумевает конечную и разумную по стоимости возможность провести ручную или автоматизированную проверку на предмет соответствия программного обеспечения требованию. Например, требование нельзя проверить на тестовом стенде, т.к. у него мало мощности и нет реальных (боевых) данных, а установка такого стенда будет дороже, чем потенциальная прибыль от разработки данного требования.
Техники тестирования требований
Тестирование документации и требований является частью общего процесса нефункционального тестирования, для чего применяются разнообразные методики:
1. Взаимный просмотр (PEER REVIEW):
Рецензирование или взаимный просмотр — одна из самых используемых техник при тестировании требований. Эта техника представляется в одной из следующих форм (по мере увеличения сложности и цены):
Беглый просмотр — это показ автором своей работы коллегам с целью установления общего понимания, получения обратной связи и обмена результатами работы между несколькими авторами, чтобы они выразили свои вопросы и замечания. Он является наиболее быстрым, экономичным и часто используемым видом просмотра.
Технический просмотр — группа специалистов осуществляет технический осмотр, в рамках которого каждый член команды представляет свою сферу компетенции, включая аналитика, разработчика и тестировщика. Продукт, который проходит такой технический осмотр, не может считаться достаточно высококачественным, пока у хотя бы одного из участников остаются замечания.
Формальная инспекция — это структурированный, систематизированный и документируемый метод исследования документации. Он требует участия большого количества экспертов и занимает много времени, поэтому его используют редко, например, когда другая компания была ответственна за первоначальный этап работы над проектом, и необходимо внести изменения или улучшения.
2. Тест-кейсы и чек-листы
ПРОДУМЫВАНИЕ ТЕСТ-КЕЙСОВ И ЧЕК-ЛИСТОВ
Хорошее требование должно быть проверяемым, то есть должен быть объективный способ определить, выполнено ли оно. Создание чек-листов или полноценных тестовых сценариев в процессе анализа требований помогает убедиться в их проверяемости. Наличие нескольких пунктов в чек-листе еще не означает, что требование выполнено полностью (например, возможно наличие противоречий с другими требованиями). Рекомендуется сначала убедиться, что вы полностью понимаете требование (включая чтение соседних требований и обсуждение с коллегами). Изучение других требований поможет лучше понять конкретное требование. Однако, если это не работает, требование должно быть пересмотрено.
ИССЛЕДОВАНИЕ ПОВЕДЕНИЯ СИСТЕМЫ
Этот метод является продолжением предыдущего и предполагает проверку не одного требования, а группы. Тестировщик создает модель поведения пользователя с системой для выявления возможных проблем или недоработок. Этот метод требует высокой квалификации и опыта от тестировщика, однако позволяет обнаружить ошибки, которые могли бы остаться незамеченными при проверке каждого требования по отдельности.
ГРАФИЧЕСКОЕ ПРЕДСТАВЛЕНИЕ
Для обобщенного представления требований эффективно использовать графические элементы, такие как рисунки, схемы, диаграммы, интеллект-карты и другие. В этом случае на помощь к тестировщикам приходят аналитики. Текстовое описание базы данных может быть громоздким и сложным для восприятия. Графическое представление упрощает понимание, позволяет быстро выявить несоответствия и недостающие элементы. Использование общепринятых нотаций, таких как язык UML, обеспечивает дополнительное преимущество: схема становится доступной для понимания и доработки коллегами, и в результате может стать ценным дополнением к текстовым требованиям.
ПРОТОТИПИРОВАНИЕ
После создания графического представления и анализа поведения системы часто создается прототип. Используя специальные инструменты, можно быстро создать наброски пользовательского интерфейса, оценить различные решения и даже создать основу для дальнейшей разработки. Возможно, прототип после небольших доработок будет удовлетворять требованиям заказчика.
Метрики покрытия требований
Метрики используются для отслеживания усилий по обеспечению качества выпускаемого программного кода. С их помощью удаётся в численном выражении получить представлении о достижении заданного уровня качества или поставленных целей. Существуют следующие метрики:
Тестовое покрытие требования
Матрица трассировки
Степень взаимосвязанности
Коэффициент стабильности требований
Выводы
Важным аспектом в тестировании требований является единое их понимание всеми участниками проектной команды, что предотвращает лишние правки уже реализованного функционала. В этом случае рекомендуется использовать метод технического просмотра. Это снизит риск возникновения внутренних разногласий, связанных с расхождениями в трактовании требований между разработчиками, аналитиками и тестировщиками, а также ускорит написание тестовой документации.
Качество проверки документации в значительной степени определяется квалификацией проверяющего. Поэтому целесообразно выделить опытного специалиста с экспертизой в области тестирования требований на данную роль. Кроме того, предпочтительно, чтобы документацию проверяли представители и других направлений: тестировщики, разработчики. Это позволит им задавать более точные и профессиональные вопросы, что повысит шансы на успешную реализацию требований.
Аналитикам полезно чаще пользоваться методами графического представления при разработке требований, чтобы улучшить процесс понимания требований разными членами команды. Это, в свою очередь, способствует ускорению процессов разработки и тестирования функционала.
super_botan
Статья понравилась, спасибо!
Хочу отметить, что есть проекты с разной степенью готовности к наличию требований. Очень часто нужно проверить гипотезу или сделать "хоть как-нибудь, лишь бы заработало". Прежде чем утверждать что требования нужны, стоит всегда задавать вопрос а зачем? Стоит ли время потраченное на описание и соблюдение требований меньше чем цена положительного эффекта от этих требований?
Есть классный принцип DDD. У него есть 2 варианта расшифровки:
Давай давай деплой и в этом случае требований нет, есть бизнес необходимость или научный интерес.
Предметно-ориентированное проектирование и в этом случае часто требования описываются уже при описании общего языка.
К чему это я. Мне не понравилась фраза "Требования служат фундаментом для каждого проекта и необходимы для глубокого понимания командой всех аспектов предстоящей работы.". По моему мнению фундамент для каждого проекта это экономическая выгода или "научный" интерес. А понимание аспектов предстоящей работы основывается на глубоком вникании в суть предстоящей работы и начинается с того, что язык общения всех членов команды сводится к единому и понятному набору слов и понятий.
А вот требования это уже суррогат, который необходим для того, что не забыть о чем договорились или чего хотели изначально и к чему пришли в процессе работы. Требования вторчны по отношению к целям проекта, а не фундамент.
Vadimka_9 Автор
Спасибо большое за обратную связь!
А разве цель проекта одновременно не является требованием к этому проекту?
Ведь если проект не отвечает цели, ради которой его создавали, то проект закроют или исправят. Так же как и функционал, который не отвечает требованиям. Более того к формулировке цели есть свои требования. Например, цель должна:
Быть достижима в рамках этого проекта
Предусматривать итоговый результат
Если цель предполагает получение прибыли, то должна быть возможность количественной оценки объемов, сроков и размеров прибыли и т.д.
А разве бизнес необходимость не является бизнес требованием? Да, соглашусь, что могут быть проекты, где разработка требований будет дороже, чем разработка функционала. Но я убежден, что не существует проектов без требований. Я думаю, что не может быть вторично то, что лежит в основе проекта.
Поясню. Ни что на проекте не делается просто так. Любая задача появляется из-за какого-то требования:
Нужна новая кнопка. Зачем? Что бы пользователям было удобнее.
Нужен новый дизайн. Зачем? Что бы привлекать больше пользователей.
Нужен рефакторинг кода. Зачем? Что бы сделать его быстрее, качественнее, надёжнее и т.д.
Да пусть они не формализованы, не протестированы, может даже не записаны, но все равно это требования и на основе этих требований будет проходить разработка.
А вот формализовать требования нужно, в том числе, что бы не сделать вместо зелёного квадратное в конце проекта.
Boethiah
Только в реальной жизни требования являются важной составляющей практически любого проекта, особенно больших и в критически важных сферах, потому как наличие требований позволяет как минимум устранить разночтение