Некоторые замечания по вопросу сбора требований при разработке программного обеспечения

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

В русском языке осталась небольшая область, где требуется его доведение до современных реалий. Это касается западных практик в области управления людьми и коллективами. Они слабо изучались советской наукой, при этом в 90-х началось их ускоренное внедрение людьми, которые совсем недавно считали их идеологически неверными. Так было с экономикой и в более специфических областях, например, касающихся производства программного обеспечения.
Писать отменный программный код у нас умели всегда. Но бизнес в сфере ПО шире простого наемного программирования — это торговля знаниями. А раз так, то требуется производство и его организация. Здесь ключевую роль играют системы управления сбором требований, где производственный процесс приходится выстраивать, опираясь на западный опыт.

Далее в статье разбираются типичные ошибки заимствования на примерах из перевода книги Карла И. Вигерса «Разработка требований к программному обеспечению». В конце обсуждаемый материал обобщается с помощью V-модели жизненного цикла проектных требований к ПО.
Безусловно любопытная книга Карла И. Вигерса «Разработка требований к программному обеспечению» (далее РТкПО) становится в российском информационном сообществе неким стандартом. Но использование положений из этой книги (заимствованных, оригинальных, переведенных) вне авторской концепции вызывает вопросы, в которых хотелось бы разобраться.
getj6bsmnt__3vbwi-oe-7iucn8.png
Это — иллюстрация развития требований по мере выполнения проекта сверху вниз, через три документа:»Документ об образе и границах проекта»,»Документ о вариантах использования»,»Спецификация требований к ПО». В 3-ем издании два первых документа представлены как »Документ концепции и границ» и »Документ пользовательских требований»

Для создания правильного документа надо, прежде всего, понимать его суть. Кажется, дело в разгадке таинственного »образ и границы проекта»: разгадал — и можно без ограничений и с большой выгодой пользоваться уже готовой практикой. К сожалению, это работает только с простыми технологиями, купленными у третьих лиц. Аспекты управления коллективами непосредственно связанны с особенностями чужой культуры, и там все совсем не просто. Культурные отличия есть видимая часть айсберга всей системы подсознательных этнических стереотипов поведения. А область бессознательного мы не контролируем совсем или контролируем только отчасти.

Тем не менее, не все так безнадежно. Нужно найти ассоциации их терминологии с нашей практикой. Разберем »Документ об образе и границах проекта». Границы проекта — project scope. Это следует переводить как »объем работ». Нет в словаре? Увы. Можно заглянуть в английский справочник: project scope — часть планирования проекта, включающая процесс определения, а затем и документирования конкретных целей проекта, результатов, задач, затрат и сроков. Есть конкретная процедура, почему бы ее не назвать »границами проекта»? В этом случае появятся проблемы с интеграцией собственного прошлого опыта: ведь мы и раньше занимались планированием и, в частности, определением объема работ.

Когда не получается перевод по словарю, надо поискать простую понятийную модель, иллюстрирующую применение спорного термина в близкой предметной области. Дальнейший перенос такой простой модели раскрытия на родную почву позволяет найти языковые соответствия. Модель «Ограничения треугольника» (triple constrains) — вводная в области управления проектами.

_iujrxi1jspamoun_eshj8exwy8.png

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

Project Vision иногда переводят не как »образ проекта», а как »концепция проекта», но ясности это не добавляет. Project Vision Statement в справочнике определен как »идеалистический взгляд на желаемые бизнес-результаты, которые будут получены при успешном завершении проекта». Мы обычно используем термин »задачи проекта» и формулируем эти задачи с долей отечественного пессимизма. Если назовем »образом проекта», вряд ли это поможет проявиться западному оптимизму на родной почве. Итого, первый документ можно назвать »Цели проекта и объем работ». И ничего загадочного.

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

Вот характерный пример из РТкПО:»Требования следует излагать последовательно, например, «система будет…» или «пользователь будет…», затем — активный глагол, а после — наблюдаемый результат… Вы можете использовать «должно» как синоним «будет», но избегайте «следовало бы», «может», «можно было бы» и аналогичных слов, из которых неясно, необходимо ли действие».
Можно подумать, что это готовое руководство к действию. На самом деле, этот перевод не помогает разобраться, а запутывает все еще больше. Более того, английский оригинал — не истина в последней инстанции, а выражение определенного взгляда на модальность английского языка. Взгляд закреплен в стандарте RFC2119**, который уточняет правила использования ключевых слов английского в области управления требованиями (e. g. must, shall, should, may). Например, по этому стандарту must означает,»что определение является абсолютным требованием спецификации». Однако автор встречал шаблоны документов с прямым запрещением использования must (объяснение такой позиции доступно в интернете***).

Следующий уровень детализации требований — »Документ о вариантах использования». В РТкПО, указано, что он определяет варианты использования, сценарии и таблицы »событие — отклик». Перевод »use cases» как »варианты использования» излишне упрощает взгляд на вещи (потому на практике закрепился англицизм юз-кейзы). Современное ПО должно иметь защиту от взлома и защиту от дурака, но считать это вариантом использования — насилие над русским языком. Для перевода предлагается «сценарии взаимодействий».

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

Суть разработки требований этого уровня — создание детальной умозрительной модели ПО, функционирующей в идеализированном внешнем мире. Потому важный пункт — задание ограничений и принятие допущений (assumptions).»Цвет автомобиля может быть любым при условии, что он черный», — так Генри Форд переработал бизнес-требование к цветности автомобиля в допущение. Однако в другой раз для удовлетворения бизнес-требования к чистоте автомобиля оказалось необходимо изготовить неплоское обтекаемое стекло. Инженеры Форда сказали, что это технически невозможно. Форд нашел молодых изобретателей на стороне.

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

Со стороны тестирования определение построить проще:»Функциональные требования — требования, которые тестируются». Это надо понимать, как возможность проверки каждого функционального требования тестом в классическом понимании (c вердиктом — прошел или не прошел). Обратное, строго говоря, неверно: некоторые тесты могут существовать и сами по себе. Но наличие подобных тестов — показатель пропусков в работе над требованиями. Ведь тест проверяет какой-либо участок кода, который появился не сам по себе, а как результат исполнения некого функционального требования.

Современные зрелые процессы разработки ПО пытаются внести измерительную составляющую уже в ранние стадии изготовления программного продукта. Не вдаваясь в подробности — большей частью это всевозможные метрики покрытий. Один из показателей качества будущего продукта — процент покрытия тестами функциональных требований, который подсчитывается с помощью таблицы (матрицы) покрытия (traceability matrix). Включить в матрицу нефункциональное требование можно, но в дальнейшей работе оно будет помечено как нетестируемое, и, главное, тестировщики оценят его как бесполезное. Кажется, что полная »спецификация требований к ПО» со списком нефункциональных требований очень полезна программистам. И это, возможно было бы так, если бы после составления они туда заглядывали, хотя бы время от времени.

Абсолютное большинство нефункциональных требований можно записать функциональным образом. Перефразируя, практически любое нефункциональное требование к системе или программному продукту можно переработать в одно или несколько функциональных требований.
Атрибуты качества в РТкПО частично попадают в функциональные требования, что абсолютно верно. Однако ограничения и внешний интерфейс РТкПО определяет так:»другие нефункциональные требования описывают внешние взаимодействия между системой и внешним миром, ограничения дизайна и реализации. Ограничения (constraints) касаются выбора возможности разработки внешнего вида и структуры продукта». У подсистем связи с внешним миром всегда есть интерфейс, который функционален и подлежит тестированию.

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

Итак,»Функциональные спецификации» — устоявшееся название спецификаций нижнего уровня в виде форматированного документа или в виде базы данных под управлением специализированного ПО.

Что происходит с требованиями дальше? Кроме разработчиков (программистов) с требованиями будут работать инженеры по тестированию и инженеры QA (Quality Assurance). «Testing» можно перевести как «проверка», но заимствование «тестирование» видимо состоялось. Для перевода QA снова требуется модель раскрытия — здесь, какие принципы лежат в ее основе. Во-первых,»Fit for purpose» (продукт должен быть пригоден для намеченной цели), во-вторых,»right first time»(«с первого раза» — ошибки должны быть устранены) и в-третьих, проектная независимость. Это »Приемка», принципы лежат в основе широко известной военной приемки и легендарной госприемки.

Спецификации требований будут составлять основу дальнейших проектных документов. Как минимум, требования будут использованы при разработке пользовательской документации. Общепринято, что тестирование начинается планом тестирования и заканчивается отчетом тестирования — документами, непосредственно связанными со спецификациями. На рисунок в РТкПО можно посмотреть иначе — как на обобщенную модель процесса разработки ПО (или модель жизненного цикла ПО). В такой модели готовые документы — точки входа/выхода между фазами процесса.

Спецификации требований будут составлять основу дальнейших проектных документов. Как минимум, требования будут использованы при разработке пользовательской документации. Общепринято, что тестирование начинается планом тестирования и заканчивается отчетом тестирования — документами, непосредственно связанными со спецификациями. На рисунок в РТкПО можно посмотреть иначе — как на обобщенную модель процесса разработки ПО (или модель жизненного цикла ПО). В такой модели готовые документы — точки входа/выхода между фазами процесса.

В хронологическом порядке документы будут представлены так: бизнес-требования (как часть project scope), требования к системе (ПO), функциональные требования, план тестирования, отчет тестирования, пользовательская документация. Линия между двумя документами — фаза процесса. Модели часто рисуют в виде повторяющихся циклов или спирали, однако простая хронологическая ось более наглядна. Тогда первая и последняя фаза процесса обозначаются не отрезком, а лучом. В современных презентациях ось времени изгибают в середине фазы кодирования в виде буквы »V», получая так называемую V-модель.

qm-zuq65deejd1wdr5rhrku3bz4.png

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

Но основная функция этих линий — показать возможности скалируемости (упрощения) V-модели. Поддержка всех фаз и документов — всегда дорогое удовольствие, и очень частая причина проигрыша более мобильным конкурентам. Например, индивидуал работает так: бизнес-требования → разработка (кодирование) → пользовательская документация. Это верхняя прерывистая линия отреза. Аутсорсинговые компании, как правило, пропускают нижние фазы, не тратясь на функциональные спецификации и ограничиваясь тем или иным видом системных требований (например, сценариев взаимодействия). Для однотипных продуктов обычно есть стандарт предприятия, а с фазы кодирования выдается некий отчет внутреннего тестирования разработчиков, чтобы начать фазу «QA/приемки».

Основополагающая V-модель помогает уточнить зоны ответственности. Например, работник играет роль инженера по приемке (QA) или инженера по тестированию в зависимости от того, в какой фазе он работает. Неважно, закреплен ли он за конкретным проектом или отделом. То же самое относится к аналитику, проектировщику, разработчику — возможность выполнения всех этих ролей одним человеком не опровергает V-модель. Для инженера по приемке (QA) и аналитика основа — «Требования к системе», они работают с разрабатываемым ПО как с черным ящиком. Для вовлеченных в фазы проектирование, разработку и тестирование — это белый ящик, хоть и в разной мере.

В заключение стоит заметить, что V-модель— все-таки презентационная (в данном случае, иллюстрирующая проектную эволюцию требований). Это не прямое руководство к действию, реальные процессы разработки ПО сложнее. Но ее раскрывающей потенциал трудно преуменьшить.


* Карл И. Вигерс «Разработка требований к программному обеспечению».
** Key words for use in RFCs to Indicate Requirement Level (https://tools.ietf.org/html/rfc2119)
*** Must — Don«t use must because no one has defined how must is different from shall. Also, shall has held up in court, must has not. Granted, must does sounds stronger, right? I mean, if your boss tells you that you «must» do something, well you are going to do it. But, when writing requirements, keep things simple and just use shall (http://www.reqexperts.com/blog/2012/10/using-the-correct-terms-shall-will-should)

© Geektimes