понедельник, 1 июля 2019 г.

Конструкция, поведение, функция и сервис

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

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

Теперь разберемся в том, что такое функция и чем она отличается от поведения. Представьте, что вы положили на кресло автомобиля мешок со свинцовыми чушками весом 500 кг. Оно прогнется так, что подушки сиденья лопнут, а может и пружины порвутся. Если в обычной квартире устроить бассейн на 5 кубометров, то пол провалится. Если телефон унести далеко от станции базовой станции, то он потеряет сигнал и по нему нельзя будет позвонить. То, что кресло ломается, пол дома проваливается, а телефон перестает обеспечивать связь - это тоже поведение. Но это поведение за рамками контекста эксплуатации. У каждой конструкции есть какие-то рамки контекста, в которых его поведение будет полезным и его можно будет использовать по назначению. Чтобы отделить полезное поведение продукта от поведения конструкции вообще, есть понятие функции.
Поведение конструкции автомобиля (набор состояний) вне контекста эксплуатации

Функция - полезное поведение конструкции в рамках контекста эксплуатации.

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

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

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

Инженеры разделяют рассмотрение конструкции и функции. Функциональное рассмотрение позволяет обсуждать логику поведения и использования системы, а конструктивное рассмотрение позволяет принимать такие проектные решения,  которые наилучшим образом реализуют согласованные командой проектировщиков функции. И вот конструкция, отвечающая заданным требования (point design) и есть такое конструктивное исполнение, которое обеспечивает такое наилучшее поведение.

При проектировании инженеры разбивают автомобиль на части целого - он состоит из кузова, шасси, электрики с электроникой, отделки салона, стекол; и функционально - автомобиль должен ездить вперед и назад, разгоняться и тормозить, поворачивать вправо и влево, защищать от погоды и столкновений. Такие разбиения называются конструктивными, или PBS, plant breakdown structure, и функциональными, или FBS, functional breakdown structure.

Теперь "склеим" конструкцию и функцию. Вот есть автомобиль в контексте использования - есть дорога, заправки, водитель, пассажиры и грузы. Функция автомобиля - перемещение пассажиров и грузов. Эта функция одинакова для Феррари и Газика, они оба перемещают пассажиров и грузы. Но вот сервис эти двух автомобилей разный, это очевидно. Сервис - это выполнение функции с каким-то уровнем (уровнем сервиса, service level) на каких-то условиях (соглашение об уровне обслуживания, service level agreement). И сервис, конечно, является поведением продукта, но мы фиксируем как уровень сервиса так и контракт на выполнение сервиса только для определенной точки пространства и времени. Эта точка называется "интерфейсом". Вы не можете получить обслуживание в МакДональдс, если сядете на скамеечке рядом, вам надо будет подойти к стойке и сделать заказ по определенным правилам. Вы не можете уехать с вокзала или улететь на самолете, сидя у себя дома, вам надо прибыть на вокзал или в аэропорт и занять свое место по строгим правилам. Вы не можете отправлять сообщения в WhatsApp силой мысли и в зоне плохого приема.

Сервис - это функция с определенным уровнем исполнения этой функции, у которой есть контракт на ее исполнение, и которая оказывается в определенной точке пространства и времени.

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

Комментариев нет:

Отправить комментарий