Многие методологии требуют сначала описать требования к системе как черному ящику и лишь затем переходить к проектированию и построению моделей. Способам такого описания посвящена инженерия требований. Однако, это присуще и Agile-методам, ведь User Story тоже описывает систему как черный ящик. Целью такого подхода была гарантия, что разработанная система будет пригодна для использования, внедрение пройдет гладко. Проблема в том, что так — не работает. А значит, нет смысла чересчур углубляться в требования, а стоит быстро переходить к моделям системы, которые можно строить по-разному.

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

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

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

Таким образом, мы имеем ситуацию, когда разработчики и заказчики говорят на разных языках, и этот разрыв необходимо преодолеть. Желательно без ошибок и искажений перевода. Был предложен следующий метод: опишем будущую систему как черный ящик на языке требований таким образом, чтобы заказчики смогли по описанию проверить: если система будет удовлетворять требованиям, она будет пригодна для использования. А после проектирования устройства системы проверим, что если систему реализовать по проекту, то требования будут выполнены. Таким образом, всю неопределенность проекта унесем на этап проектирования, и после разработки система, если она удовлетворяет требованиям, окажется пригодна для использования. Схематично это отражено на слайде из моего доклада на SECR-2018 «Мыслить проектно: история и современность»

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

Классическая книга по разработке требований — Карл Вигерс, «Разработка требований к программному обеспечению», 1999

Каким же образом ее предлагали решать? Первый вопрос: а каким образом писать требования? Очень быстро выяснилось, что обычный, естественный язык для этого слабо пригоден, потому что слова неоднозначны, употребление зависит от контекста. А замысел требовал, чтобы была возможность достаточно формальной проверки.

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

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

Описание бизнес-процессов не единственный способ описания бизнес-архитектуры компании. Различным способам описания был посвящен мой доклад на ЛАФ-2022 «Бизнес-архитектура: от цепочки создания ценности до автоматизации бизнес-процессов»

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

Простая схема интерфейсов: таблицы с фильтром для просмотра информационных объектов и выполнения действий над ними, карточки для создания и изменения одного объекта. Позднее, с развитием ООП, такая форма интерфейсов была названа Naked Objects, при этом возможными действиями являются вызовы методов объектов

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

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

Что касается организации кода, то тут предлагается использовать наработанные архитектурные шаблоны. Одна из классических книг, посвященных этому, — Мартин Фаулер, «Шаблоны корпоративного приложения» — опубликована в 2002 и развивает его же книгу 1996 года Analysis Patterns: Reusable Object Models.

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

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

Внимание к интерфейсам породило средство описания — сценарии использования системы пользователем, use case. В них прорабатывается, как именно взаимодействует пользователь с системой для достижения своих целей. Этот метод предложен Иваром Якобсоном в 1987, классическая книга Алистера Коберна была опубликована в 2001, а в 2011 Ивар Якобсон предложил существенное развитие use case 2.0, адаптированное для итеративной разработки.

Классическая книга по написанию use case — Алистер Коберн, Writing effective use cases, в русском переводе «Современные методы описания функциональных требований к системам», 2001

Работа над интерфейсами породила новые специализации: дизайнера интерфейсов, а затем специалиста по эргономике, usability. Много позднее, после широкого распространения public web, появилась следующая специализация — UX-специалист, который отвечает за то, чтобы в интерфейсах не просто было удобно работать, а чтобы эта работа была интуитивно понятна и могла быть освоена пользователями без обучения.

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

Комментарии (5)


  1. beskov
    13.12.2022 12:36
    +4

    Ты мне кажется очень резво перескакиваешь в 1999-й год.

    Работа с требованиями всегда существовала в традиционной инженерии и системной инженерии, только ей кажется не уделялось особого внимания.

    Там насколько я понимаю, была следующая цепочка запросов:

    1. любой более-менее сложный объект невозможно сделать одной организации, нужно сотрудничество нескольких

    2. чтобы сотрудничество получилось, надо выдать партнёрской организации задание на создание части объекта (ТЗ)

    3. чтобы выдать задание на создание части объекта, нужно сначала спроектировать объект целиком

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

    и вот тут были разные школы:

    а) школа духа auftragstaktik — когда постановка на проектирование идёт на уровне цели, критериев успеха и, возможно, ограничений

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

    При этом в системной инженерии задача производства и сборки большого объекта из поставок разных организаций никуда не девалась и появилась целая иерархия уровней требований — а по сути, форматов частей заданий на поставку, например, в ISO 29148:

    1. Business Requirements

    2. Stakeholder Requirements

    3. System Requirements

    4. Software Requirements

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

    -

    Как человек, которому приходилось много раз переделывать свой код, могу сказать, что в такой ситуации возникает естественная гипотеза и запрос — «дайте нормальное ТЗ»! А нормальное ТЗ дать не могут, потому что код типа легко править и нет желания заниматься фазой проектирования. Кто должен проектировать в типовой связке «заказчик» + «младший разработчик»? Никто не проектирует, поэтому остаётся только договариваться о процедуре приёмки, которая в идеале основана на модели использования.

    А модель использования — это серая зона проектирования между заказчиком и разработчиком. Вот и возникает обманчивое желание сделать правильные БИЗНЕС-требования, которые-де станут путеводной звездой для конструктора-непроектировщика.

    А дальше есть отдельная эпопея, как понятие бизнес-требований (по сути это требования к capability организации) оказалось извращено до «идеи о функциях и свойствах софта, которые выдвигают представители бизнеса».

    У меня заняло много лет дойти до понимания, что нормальное БТ — это «организация X должна формировать и отправлять клиентам коммерческое предложение», без упоминания каких-либо систем в явном виде. Может по-этому требования стали больным местом, красной тряпкой и местом споров.


    1. MaximTsepkov Автор
      13.12.2022 18:24
      +1

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


      1. Greesha
        15.12.2022 18:42

        С использованием Word и электронной почты, но без софта. :) Рыбы не знают, что живут в воде.


  1. Aknodx
    13.12.2022 14:15
    +3

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


  1. Ykkks
    15.12.2022 19:42

    Спасибо за наблюдение про разных "бизнес-аналитиков", очень точно! Название одно и то же, а хотят везде разного, в последнее время даже REST и SQL :)