13 - 16 апреля был в Бекасово на ежегодной встрече INCOSE по проблемам системной инженерии. Там состоялась очередная дискуссия по онтике сервисов (началась дискуссия еще 5 лет назад).
Вроде разобрался с некоторыми вопросами, которые обсуждались.
1. Сама онтика сервисов. Основной вопрос был про соотношение функций и сервисов. Уже на кофе-брейке договорились, что нужно различать для нашей системы следующее:
- Функции, которые наша система выполняет в надсистеме. Это то же самое что функции нашей системы в надсистеме. Тут сбивает язык: мы говорим, что это функции нашей системы, но это не совсем так, потому что мы порой и не знаем, какие функции наша система будет выполнять в надсистеме. Хотя конечно мы догадываемся.
- Сервисы нашей системы. Вот тут уже мы даже не знаем в какие надсистемы наша система будет включена, но можем описать поведение нашей системы как черного ящика.
- Функции (внутри) нашей системы, которые реализуют сервисы нашей системы. И эти же функции выполняются сервисами подсистем.
2. Что из этого описывает юзкейс? Ответ - все, но не сразу. Практика юзкейсов удивительно всеядна. Она позволяет описать:
- Функции в надсистеме. Причем здесь есть два варианта.
- Первый вариант: Разработчики системы, которая для нашей является надсистемой, выполняют функциональную декомпозицию и привязку. Один из способов это сделать - как раз техники юзкейсов (но не базовые, а варианты Use Case Realization или FAS). Есть и другие варианты это сделать (более распространенная техника - Allocation Matrix).
- Второй вариант: Если система очень сложная, например, самолет, то внутри разработчика надсистемы есть команда, которая разрабатывает концепцию эксплуатации для нашей системы (а для них это подсистема). Обычно вначале там функциональный объект (роль). И эту концепцию они могут делать с помощью юзкейсов. Тут как раз вполне традиционная техника: диаграмма юзкейсов (правда ее как правило не рисуют, а делают табличку-перечень) и для каждого юзкейса его дескрипшен.
- Сервисы нашей системы. Разрабатывая нашу систему мы не можем идти по первому варианту из предыдущего пункта. Нам ведь никто не расскажет деталей архитектуры надсистемы: там есть много того, что нас не касается. К тому же, мы обычно рассчитываем встроиться во множество разных надсистем, в том числе, про которые даже не знаем пока. Поэтому мы делаем концепцию эксплуатации, описывающую сервисы нашей надсистемы, стараясь в контексте описывать функциональные объекты (роли). Здесь тоже традиционно: диаграмма юзкейсов (табличка) и для каждого юзкейса его дескрипшен.
- Функции (внутри) нашей системы - здесь все аналогично функциям в надсистеме. Только теперь мы ее разработчики. А юзкейсы будем использовать точно так же: Use Case Realization или FAS. Это позволит понять, выполнение каких функций нужно реализовать сервисами подсистем.
3. Цепочка встраивания функциональных и конструктивных объектов. Здесь все тоже более-менее понятно. Но нужно это объяснать аккуратно. Потому что в текущих объяснениях это онтика как в старой гамбургер-диаграмме, а не как в ISO 81346. Хотя тут тоже нужно еще разбираться. Кажется с онтикой ISO 81346 тоже все не так хорошо.