Мой путь к более глубокому пониманию функционального и модульного разбиений

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

Первое что меня смутило, запутало, это то, что в учебнике системное разбиение объясняется на примере модульного (глава Системное разбиение), а у меня задача была составить функциональное. Из-за этого в одном разбиении у меня были и функции, и модули. И свою большую софтверную систему (как модуль) я пытался включить в состав какой-то функциональной системы.

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

  • Физичность. Существование, т.е. занимание некоторого объема пространства-времени.
  • Функциональность. Система должна выполнять какую-то функцию.
  • Наличие заинтересованного лица. Если "система" никому не нужна, то это не система.
  • Делимость на части. Система должна состоять из подсистем. Ее можно разделить на части.
  • Надсистема. У системы должна быть надсистема. Т.е. она должна являться частью какой-либо системы.
  • Наличие эмерджентности (системный эффект). Т.е. части системы как целое проявляют эмерджентность.

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

Функциональное

  1. Транспортная система (перемещение людей и грузов любым способом)
    1. Дорожная транспортная система (функция - перемещение людей и грузов по дорогам)
      a. Личный автомобиль (функция - перемещение людей и небольших грузов)
      i. Система производства энергии
      ii. Система передачи энергии к движителю
      iii. Движитель (функция - превращение поданной на вход энергии в поступательное движение)
      iv. Система освещения дороги
      v. Система указателей (стоп, повороты)
      vi. Система управления
      1) Систем управления скоростью
      a) Система торможения
      b) Система газа
      2) Система управления курсом
      vii. Система обзора
      1) Передний обзор
      2) Боковой обзор
      3) Задний обзор
      viii. Система обеспечения курсовой устойчивости
      ix. Система обеспечения комфорта
      1) Обеспечение плавности хода (базовый модуль - подвеска)
      2) Система поддержания микроклимата салона
      3) Аудиосистема
      x. Навигационная система
      xi. Система оперативных метрик автомобиля
      1) Система сбора метрик
      2) Система отображения показателей метрик
      xii. Система размещения людей
      1) Система размещения пассажиров
      2) Система размещения водителя
      xiii. Система размещения грузов
    2. Железнодорожная транспортная система (перемещение людей и грузов по ЖД)
    3. Водная транспортная система
    4. Воздушная транспортная система

Синтез функционального и модульного разбиения

Также я составил таблицу назначения функции на модуль. На самом деле, как я понял потом, составление такой таблицы и есть одна из главных задач системного мышления.

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

Функция Модуль(и)
1 1.1.a.i Система производства энергии Двигатель
Система питания двигателя
2 1.1.a.ii Система передачи энергии к движителю Трансмиссия
3 1.1.a.iii Движитель Колесо
4 1.1.a.iv Система освещения дороги Фары ближнего и дальнего света Противотуманные фары
5 1.1.a.v Система указателей Стоп-фары Указатели поворотов (все 4 разные)
6 1.1.a.vi.1.a Система торможения Тормозная система
7 1.1.a.vi.1.b Система газа Система питания двигателя
8 1.1.a.vi.2 Система управления курсом Рулевая система
9 1.1.a.vii.1 Система переднего обзора Лобовое стекло
10 1.1.a.vii.2 Система бокового обзора Боковые стекла
11 1.1.a.vii.3 Система заднего обзора Заднее стекло
Зеркало заднего вида
Боковые зеркала
12 1.1.a.viii Система обеспечения курсовой устойчивости Подвеска колес
13 1.1.a.ix.1 Система обеспечения плавности хода Подвеска колес
14 1.1.a.ix.2 Система поддержки микроклимата салона Система поддержки микроклимата салона
15 1.1.a.ix.3 Аудиосистема Мультимедиасистема
16 1.1.a.x Навигационная система Мультмедиасистема
17 1.1.a.xi.1 Система сбора метрик Датчик давления масла Датчик оборотов коленчатого вала Датчик скорости вращения колеса
18 1.1.a.xii.1 Система размещения пассажиров Пассажирские кресла
19 1.1.a.xii.2 Система размещения водителя Водительские кресла
20 1.1.a.xiii Система размещения грузов Багажник

Модульное

  1. Автопарк
    1. Автомобиль
      a. Двигатель
      i. Поршень
      ii. Шатун
      iii. Коленчатый вал
      iv. …
      v. Датчик оборотов коленчатого вала
      vi. Система смазки двигателя
      1) Датчик давления масла
      2) …
      3) Масляный насос
      b. Система питания двигателя
      i. Педаль газа
      ii. Карбюратор (если ДВС бензиновый)
      iii. …
      c. Трансмиссия
      i. Коробка переключения передач
      ii. Педаль сцепления
      iii. Рычаг переключения передач
      d. Колесо
      e. Фары ближнего и дальнего света
      f. Противотуманные фары
      g. Стоп-фары
      h. Указатели поворотов
      i. Тормозная система
      i. Педаль тормоза
      ii. Тормозной цилиндр
      iii. Бачок с тормозной жидкостью
      iv. Система тормозных магистралей
      v. Суппорта
      vi. Тормозные диски
      j. Рулевая система
      i. Рулевое колесо
      ii. Рулевая рейка
      iii. Рулевой усилитель
      iv. Рулевой кардан
      k. Кузов
      i. Лобовое стекло
      ii. Боковые стекла
      iii. Заднее стекло
      iv. Зеркала заднего вида
      v. …
      vi. Сам кузов
      vii. Бампера
      l. Подвеска колес
      m. Салон
      i. Мультимедиа система
      1) Колонки, расположенные в салоне
      2) Планшетный компьютер, встроенный переднюю панель
      ii. Водительское кресло
      iii. Пассажирские кресла
      n. Система поддержки микроклимата салона
      i. Печка
      ii. Кондиционер
      iii. Воздуховоды
      iv. Фильтр салона
      v. Элементы управления
      o. Багажник
      i. Дверь багажника
      1) Замок
      2) Ручка открытия
      ii. Лампа багажника
      iii. Коврик

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

1. Функциональное разбиение не совпадает с модульным!
Если мы систему управления, систему обеспечения курсовой устойчивости и систему комфорта разносим по разным системам (у всех трех один из модулей - подвеска), то подвеска предоставляет сервис! Железные системы тоже предоставляют сервис? Да, все системы предоставляют сервис, ведь сервис это функция с обратной стороны взгляда!
А что меня собственно так насторожило здесь? Функциональное и модульное разбиения могут не совпадать, скорее даже и не должны совпадать. Да, один модуль может выполнять несколько функций. Да, он предоставляет сервисы. Да, колесо - предоставляет сервис движителя и сервис управления. Само колесо то не входит в функциональное разбиение. В функциональное входят именно функции колеса, сколько угодно много.

2. Отношение в функциональном разбиение - включение всех функций и подфункций в надсистему.
Но можно ли сказать, что в функциональное разбиение входят части системы (модуля) Колесо? Скорее нет. Тогда можно ли говорить, что функциональное разбиение физично? Вот это пока вопрос. Скорее всего можно, т.к. под физичностью в функциональном разбиении (т.е. под отношением "часть-целое" в функциональном разбиении) подразумевается что-то другое. Не включение всех молекул в надсистему. А включение всех функций и подфункций в надсистему. И полное описание функции описывается ее подсистемами (подфункциями).
Здесь стоит привести пример.

vi. Система управления
1) Систем управления скоростью
a) Система торможения
b) Система газа

Система торможения (из функционального разбиения) предназначена только для того, чтобы тормозить, т.е. управлять скоростью (при этом в систему управления скоростью входит и система газа). Система управления скоростью полностью входит в уровень Система управления, т.к. ни для чего она более не предназначена, кроме как управлять автомобилем.

3. Модули объединяются в надсистему только при наличии эмерджентности надсистемы.
Модули нужно объединять в надсистему только в том случае, если они физически входят в какой-то общий модуль, выделяемый не по функциональному назначению, а по отношению часть-целое. При этом этот общий модуль (тобишь надсистема, тобишь системный уровень) должен обладать эмерджентностью! Именно по этой причине поршень, цилиндр, картер, головка блока цилиндров и т.д. имеют надсистему по названию Двигатель и не рассматриваются как отдельные части автомобиля. У двигателя (ДВС) есть эмерджентность - преобразовывание топлива во вращательное движение коленчатого вала с возможность осуществления полезной работы этим вращением. Но вот фары ближнего света и противотуманные фары мы не объединяем в некий модуль "Система освещения дороги", потому что нового свойства, новой функции не появляется, нет эмерджентности. Функция освещения дороги есть и у фары, и у противотуманной фары. Да, два вида фар вместе улучшают их существующие функции, улучшают освещение дороги, но это не эмерджентность, это синергия. Вот если бы они вместе, например, рисовали (проецировали) на дороге рекомендуемую траекторию движения - тогда это был бы отдельный модуль, с отдельной новой функцией.

4. При составлении функционального разбиения какой-то системы полезно задавать вот такой вопрос: а что должно делаться, чтобы система выполняла свою функцию? Из этого можно строить нижележащее функциональное разбиение. Только стоит не забывать, что таким образом, определится минимум функций, но часто в системах функций больше. Например, кондицинер (охлаждение воздуха в салоне!) не является обязательной функцией автомобиля, но часто в него входит.

Итого я выделил для себя следующие правила построения функционального и модульного разбиения:

  1. Каждую функцию, каждый модуль рассматриваем как систему. Проверяем, удовлетворяет ли модуль / функция критериям системы.
  2. Модульное и функциональное разбиения могут и почти всегда не совпадают. Модуль может выполнять несколько функций.
  3. Отношение в функциональном разбиении - включение функции уровня и его подфункций в надфункцию (надсистему).
  4. Модули (да и функции) объединяются в надсистему только при наличии эмерджентности надсистемы.
  5. Подуровни функции могут быть найдены вопросом "что должно делаться, чтобы система выполняла свою функцию"

Скорее всего, в моем разбиении есть ошибки, несоответствия этим правилам. Не доводил его до идеального состояния, т.к. цель все-таки была понять принцип и выделить для себя некоторые правила. Могу сказать, что цель достигнута.

Вот это круто! 

Помимо того, что такой разбор круто, ещё и мысль родилась только что:

функция == эмерджентность

я не уверен, что это так, а может это напротив, очевидно всем, кроме меня.

Пойду проверять на примере. 

cool

Сергей, спасибо, всегда приятно читать твои комментарии!)

Спасибо за описание. Тоже показалась интересной мысль про функции и эмерджентность. Можно ли дополнительно пояснить, почему этот критерий важен? Возвращаясь к примеру с фарами, что плохого произошло бы, если бы фары ближнего света и противотуманные фары все-таки были бы объединены в модуль «Система освещения дороги»?