这两天开始读由Edward Crawley(爱德华 克劳利)、Bruce Cameron(布鲁斯 卡梅隆)、Daniel Selva(丹尼尔 塞尔瓦)著做的系统架构,一开始看目录觉得是介绍系统软件架构的书,也是我买它的原因,但粗略看完序和第一章第二章后不经肃然起敬,这本书是真的好,该书面向对象是适用于全部须要系统架构行业而不仅仅是软件行业。它系统地介绍了系统的概念,组成,功能,如何分解系统,抽象系统,组合系统等相关的理论,相信无论什么学科什么专业什么行业读这本书都会有所收获。决心仔细研读一遍。算法
有的书传播知识,有的书介绍技能,有的书娱乐大众,而优秀的书传播优秀的思想,本书就是。编程
这篇是第一部分读书笔记,介绍了写系统架构理念,系统分析必备思路,系统架构所用的思惟模式。数组
架构的概念:对系统中实体以及实体之间关系所进行的抽象描述。安全
架构的目的:找出系统架构得以确立的决策点,并谨慎作出决策。不良的架构决策则会使得大型的研发活动从刚开始就变得难以推行。架构
核心观点:一些早期的决策能够加依分析和处理,在不知道各个组件的详细设计状况下,系统架构依然能经得起检验。不要指望直接设计出最优的架构,而仅仅是结构良好的创造活动要优于毫无结构的创造活动。目标当下。框架
学习目标:造成一套思考并建立系统架构的方式。编程语言
系统思惟:与其余一些思惟模式相并立,如批判思惟,分析思惟,创新思惟。把某一种疑问、情况或难题明确视为系统是思惟方式。模块化
系统:由一组实体和这些实体之间的关系所构成的集合,其功能要大于这些集体各自的功能之和。其由有两个重点函数
实体:构成全体的小块,也称之为部件、模块、例程、配件等工具
实体关系:能够是静态的(链接关系),也能够是动态并交互的(货物的交换关系)。
哪些能够视为系统:任何一组实体均可以解读为一个系统。Complex做为
系统和产品:产品是可以交换或具备交换潜力的事物,有些事物是产品不是系统(大米),有些事物既是产品(可供交换)也是系统(含有不少相互联系的实体)
架构:对系统种的实体及实体之间的关系所进行的抽象描述。
一组实体及其关系的集合,其功能大于这些实体各自功能之和。
涌现:系统在运做时所表现、呈现或浮现出的东西。为何要构建系统就是要为了取得满意的涌现物。对涌现的理解,是系统思惟的目标,也是系统的艺术。
功能:是系统最明显和最关键的涌现物。是系统所做的事情,也就是系统的动做、产出或输出。
功能/涌现物有四种分类(以汽车为例):
预期的涌现 | 意外的涌现 | |
---|---|---|
使人满意的 | 汽车能够载人 汽车内可使人感到温暖或凉爽 汽车使人感到愉悦 |
汽车创造一种我的自由的感受 |
不和人意的 | 汽车燃烧碳氢化合物 | 汽车能够致人死亡 |
性能:系统涌现物:是系统运做或执行其功能的好坏程度。系统功能的一项属性。
原则:一种长期有效的道理,可以适用于各类问题。
涌现原则:当各实体拼合成一个系统时,实体之间的交互会把功能、行为、性能和其余内在属性涌现出来。将探寻系统所涌现出的预期属性和意外属性。名人名言
系统还会涌现出其余属性:可靠性,可维护性,可操做性,安全性,健壮性,鲁棒性。这些属性与性能不一样,这些属性不是马上就能创造出价值,而是经过系统在整个生命期种的运做状况来体现。
不合人意的意外涌现被称之为紧急情况。
价值:是有着必定成本的利益。构建系统就是为了得到利益。
系统思惟的第一任务:肯定系统及其形式与功能。
形式:系统是什么,具备必定的形状、配置、编排及布局,是一种已然存在或有可能存在的物之载体或信息载体。形式在一段时间内是静止固定的。系统必定具有必定的形式。
功能:系统作什么,可以引起并创造某种性能,是对性能有所贡献的活动、操做及转换行为。是使某物得以存在或得以体现其用途的一种动做。涌现物出如今功能领域。由过程和操做数组成。
功能与形式:功能须要以形式的手段来展示。功能比形式更抽象,功能涉及转变,比形式更难以描述。
过程:功能中纯粹标识动做或转换的那一部分,改变操做数状态的那一部分。
操做数:其状态会在过程当中发生改变的事物。
例子:
形式和功能的区别:相似于商业活动中的商品和服务,商品是有形的产品(称为形式),而服务则是相对较为无形,面向过程的产品(称之为功能)。
每一种系统都具有形式、过程与操做数着三项特征。
名词-动词-名词:第一个名词充当执行动做全部的工具(形式),动词用来描述该动做(过程),第二个名词用来标识动做对象(操做数)。
系统思惟的第二任务:肯定系统中的实体、实体的形式和功能,以及系统边界和系统所处的环境。
系统是由一组实体所构成的。系统中的每一个实体都有其形式和功能。
当功能按某种次序执行时,会涌现出更加动态的行为。
一个系统能够分解为更小的系统,能够扩展成更大的系统,定义系统的实体和系统的边界,是一件很是重要而又比较困难的事情。
系统思考须要面对5个问题:
难点在于:系统究竟属于互不相同的元素所组成的系统,仍是模块化或集成系统。
若是系统由界限清楚的实体组成,能够用一种很是清晰的方式来分解。系统确实是由彼此较为独立的一些实体所汇集并定义而成的。舰队、马群、树林、图书馆
模块化的系统 :各个模块之间(尤为在功能上)相对独立。模块内部的关系比较密集,模块之间的关系比较稀疏。放大电路
集成系统:系统系统很难在不影响其功能的前提下进行简单分解,通常都是内部高度互联的系统。汽车转向装置系统,集成电路。
总体论:强调总体概念,从总体上把握事物之间的紧密联系。
总体思惟:发现对系统可能有重要意义的所有实体。经过总体思惟促使发现与系统交互的每同样东西,并考量给系统的影响和后果。
已知不肯定和未知不肯定:已知不肯定是知道但不了解,未知不肯定是连有没有都不知道的事物。
总体思惟的目标是尽量找出位置不肯定的事物。
总体原则:每一个系统都做为某一个或某些个大系统的一小部分而运做,同时,每一个系统总中也都包含着更小的一些系统。总体思考这些关系,并研发出与上级系统、下级系统和平级系统相协调的架构。
激发总体思惟:结构化和非结构化头脑风暴,研发框架来保证相关问题能够获得考虑,从多个视角进行思考,把系统明确地放在大环境下进行思考。
聚焦:把与当前问题有关的重要事物找出来
聚焦原则:在任何一个点上,都唔那个发现不少影响系统的问题,而其数量已经超出了人的理解能力。所以,必须找出其中最关键,最重要的哪些问题,并集中精力思考它们。
聚焦过程当中,把疑问、情况或难题肯定出来,把其中重要方面凸显出来。更具体就是利益相关的东西是什么,
面对实体问一个简单的问题:这个实体对关系的成果或涌现物来讲是否重要。通常来讲把握其交互关系的前提下,人脑能够同时思考的事情优先,通常数量是7浮动2。列出对系统重要的事物通常为7个,把这些事物替换掉对系统的影响。
抽象:抽离于物体的性质描述,只含本质不含细节。好的抽象能够促进思考,很差的抽象会阻碍思考。
例子:
实际放大器:
抽象机制指导原则:
违背第一条,可能会把放大器抽象成热源,不能凸显放大的过程,若是违背第三条,可能会在抽象过程当中覆盖过多的细节。
系统边界能够清晰地划分出系统与其外围事物之间的界限。定义系统边界就等于将系统与其外围环境区隔,
外围环境:围绕在系统外围的东西。
系统边界:位于系统和大环境之间。划定边界考虑下列问题
外部接口:当某个关系跨越系统边界的时候,系统与大环境之间定义了一个外部接口
例子:若是认为Team X 的任务是制做设计方案,那么把john、susan和amy放在系统内,把市场人员和操做人员放在系统以外就是一种较为合理的边界划分方式。用虚线表示系统边界。
例子中第二项任务:找出系统的实体,实体的形式与功能,以及系统边界及外围环境后的结果:
系统思惟的第三任务:找出系统内及系统边界处实体之间所具有的关系,以及那些关系的形式与功能。
关系按特征分类:功能关系和形式关系。
功能关系:用来完成某件事情的实体之间所具有的关系,此关系可能涉及实体之间对某物的操做、传输或交换。功能关系具备动态性,因此其也成为交互关系。交互过程当中,相关实体可能交换操做数,也可能协同对操做数执行操做。
形式关系:在某段那时间内稳定存在或有可能稳定存在的实体之间所具有的关系。其一般体现为链接关系或几何关系。为了强调其静态性也称为结构关系
功能关系与形式关系:功能关系一般以形式关系为前提。形式关系是功能关系的载体。例子:心脏不与肺相连,就没法同肺部交换血液。
形式关系与功能关系能够表示为关系图或N×N表。
关系图例子:系统内两个实体与系统外围环境中一个实体之间的关系。
放大器关系图:黑色表示功能关系,灰色表示形式关系。
电路图:把结构化链接或形式关系称为电气链接,功能交互中的箭头,在电路图中指的是电流的流动。
N×N表:表的上方和左侧都写了N个实体,第一张表列出形式关系,第二张表列出功能关系。表中虚线左边是表示系统边界内部实体。位于对角线以外的每个单元格都表示一种内部关系或外部关系
关系图能够更加直观,N×N可以体现更多的细节,当节点和链接数量变多以后不会显得特备杂乱。
形式关系通常比较具体,刚开始思考关系的时候能够从形式关系入手,再思考的同时再考虑其承载的功能。形式关系的重要性,主要体如今对功能关系的曾在上。涌现物出如今功能领域,因此功能交互才是真正重要的。
外部接口:系统内部的实体和系统外围环境中的实体之间。无论是形式关系仍是功能关系都有可能跨越系统边界。
系统思惟第四项任务:基于实体的功能以及实体之间的功能互动,来肯定系统的涌现属性。
系统是奇妙之处在于涌现。系统各个实体组合一块儿后,实体的功能与实体之间的功能交互造成的组合涌现出更多的功能。
在形式领域中不会发成涌现。在功能领域中则会复杂不少,就涌现出不少其余的功能。
系统思惟的主要目标:努力了解并预测涌现物以及涌现物带给系统的强大能力。
系统故障就是因为预测涌现物没有出现。
预期涌现物没有出现:预期的良好涌现物未能出现,意外的涌现物出现
预测的难点在于不知道系统会涌现出何种功能。
三种方式来预测:
涌现物依赖于系统各实体的功能以及实体之间的功能交互。形式是功能交互的载体,形式于形式之间的关系(结构)对预测物有着重要意义。
三个例子,过滤器,杠杆,语句:
机械杠杆:杠杆和支点组成,支点放在远离操做者就是良好涌现方法,若改变支点位置,良好涌现物就消失了。
形式关系对于涌现物起着关键做用,对特定的功能交互起着重要引导做用。
系统思惟就是把某个疑问、情况或难题明确当成系统来思考。
复杂的系统:由不少高度相关、高度互联或高度混杂的元素或实体所组成的系统。
为何会复杂:
复杂度衡量法:经过一些复杂度的指标来衡量系统的复杂性。
难懂:系统的复杂度超越了人类由先的观察和理解呢能力,难懂的事物具备较高的表面复杂度。
架构师训练本身的思惟:去理解复杂的系统,令那些系统再也不那么难懂,应努力构建易懂的架构。
良好的系统架构:构建一套具有必要复杂度同时又不难懂的系统。
Team XT是Team X的扩展,角色仍然是制做设计方案。
分析一个系统先提出三个问题:
第一项任务:肯定系统及其形式与功能。经过仔细观察,普遍经验,每位成员谈话等手段。
第二项任务:肯定系统中的实体、实体的形式和功能,以及系统边界和系统所处的环境。
划定系统边界,虚线如下的部分是系统的外部环境。
第三项任务:找出系统内及系统边界处实体之间所具有的关系,以及那些关系的形式与功能。
第四项任务:基于实体的功能以及实体之间的功能互动,来肯定系统的涌现属性。
分解:就是把实体分红小的部件或组成部分。分而治之。
分解的难点:分解出来的实体构建整个系统的这一过程,这一过程一般称为整合。
整合:把各个部件所具有的形式聚合起来。
分解方式:取决于系统元素的构成状况。不一样元素构成的系统,把team XT按照成员进行分解。元素的形式不肯定,能够考虑按照功能来分解(例如,转向机制,压缩机,排序算法)。按照功能分解比较好。
体系:一种其实体均处在某个层次或某个位阶的系统,这些层次按照上下顺序排列起来。
元素在体系上有位阶的缘由:
该图没有体现出三位小组长之间的区别
能够清楚的看到三个组长之间不一样的分工。每一个节点所统领的下层节点数量限制在7个之内,不超越认知能力。
组是一种有用的抽象单元,但不是惟一的分解方式,还能够按照地理位置,链接性或功能关系等分解。
如何肯定分解结束:底层元素是不便于分解的原子部件。
简单系统:只须要分解一次,分解出来的这一层中元素不超过7个。
复杂度适度系统:通过两次分解,每一个上级部件统领的夏季部件不超过7个,最低层数量不超过81个,如Team XT。
复杂系统:分解层级数超过3层。不多有这样的系统。
系统自己称为第0层,分解出来的那些层分别称为系统之下的第1层,第2层。系统之下的那些层能够叫作:
系统之上的那些层:
原子部件:不能拆解的东西,凡是一经拆解就是去意义的东西。
类:一种结构,用来描述某种事物所共有的特征。
实例:类的具体表现。类的实例化。
特化/泛化关系:通用的物体与一组特殊的物体之间的关系。
特化在编程语言中相似于继承:某个通用的类中建立子类,使得子类继承通用类中的某些属性及功能。
递归:某套过程或某个对象把本身包括进来。以一种于自身类似的方式来使用实体或关系的现象。
自顶而下或自底而上思考:使用最多的是自顶而下,从系统的目标开始,思考概念和高层架构。
由外向内思考。
现实工做是由内向外,最经常使用的方法是:从系统中选一个点,而后由这个点开始想上或向下探索1~2层。
交替思考:在思考系统时:思惟会在形式领域和功能领域之间来回切换。以team XT为例:先从功能领域:研发设计方案,到形式领域:肯定小组这一形式:功能领域:思考小组都要完成功能,思考研发设计方案这一功能如何涌现。
架构展现有两种方法:
对象过程方法(object process methodology , OPM):把形式、功能、实体及关系有关的信息不都融入同一个模型中。
系统建模语言(System Modeling Language ,SysML)和美国国防部架构框架(Department of Defense Architecture Framework,DoDAF):采用不一样视图来表示信息。
SysML:对软件工程中的统一建模语言进行改编
OPM:将面向对象的图表与面向过程的图表合并到同一套方法中,以便对系统进行描述。
在OPM中,对象用方框表示,过程用椭圆表示,其特色:并不会针对系统建立多个不一样的视图,或多种不一样类型的图表,只会为系统建立一个继承模型,多个SysML图能够融合到一张含有对象、过程及关系的OPM图中。