软件体系结构是具有一定形式的结构化元素。
软件体系结构分为component(组件)、connector(连接件)、constraint(约束)。
软件体系结构 = 组件 + 连接件 + 约束
数据到达即被激活,无数据时不工作
Component:数据处理
Connector:数据流
适用于数据 近线性数据流、在限度内的循环数据流。
不适用于数据自由流动 杂乱无章的情况。
实例:基于Eclipse的代码重复检测工具
自来水处理
场景:数据源源不断产生,系统需要对这些数据进行若干处理
每个处理步骤(过滤器)都有一组输入和输出,过滤器从管道中读取输入数据流,经过内部处理,然后产生输出数据流并写入管道中。
component:filter过滤器——处理数据流
connector:pipe管道——连接一个源和一个目的过滤器
数据到来时便被处理,不是收集然后处理,即在输入被完全消费之前,输出便产生了。(与批处理不同)
实例:compiler(编译器)、Unix pipes(Unix管道)、Image processing(图像处理)、Signal processing(信号处理)
优点:构件具有良好的隐蔽性和高内聚、低耦合的特点。
支持软件复用。
系统维护和增强系统性能简单
允许对吞吐量、死锁的分析
支持并行执行
缺点:不适合处理交互的应用
系统性能不高
特点:主程序/子程序风格 功能分解
抽象数据类型(ADT)
面向对象 封装、交互、多态、继承、复用和维护
组件
主程序/子程序风格
模块分解
封装/信息隐藏
数据抽象/面向对象
风格变种:Client-server、Tiered(分层)、component
案例:操作系统、计算机网络
注册表(Windows Registry)
注册表中存在着系统的所有硬件和软件配置信息。
共享仓库
剪切板(Clipboard)
一个用来进行短时间的数据存储 并可以进行数据传递和交换的软件程序
仓库是存储和维护数据的中心场所
component:中心数据结构、若干对中心数据进行操作的独立构件
connector:仓库与独立构件之间的交互
两种交互机制:数据库方式、黑板结构
案例:数据处理、软件开发环境、数据库、编译器(符号表)
黑板、知识源、控制器
全局数据库 不同领域的知识
知识源:独立的求解程序
控制器:根据当前状态决定知识源的执行次序
黑板:保存求解状态
案例:人工智能、自然语言处理、语音识别、模式识别、图像处理
Interpreter(解释器) rule-based system(规则系统)
优势:可测试、灵活性高、功能
劣势:效率低、软件测试多一层
案例:解释型语言、通信协议、用户输入
Drools体系结构
event(事件)
隐式调用
特点:事件相互保持独立
不能假定构件的处理顺序
构件之间独立存在,通过对事件的发布和注册实现关联
分离:事件发布者不会意识到事件订阅者的存在
支持异步
一个事件可以影响到多个订阅者
事件源、事件处理器、事件管理器
案例:调试点断点处理、美团用户点单
事件系统派遣机制:有无独立调度派遣模块的事件管理器
无独立调度模块的事件系统:被观察者/观察者
有独立事件派遣模块的事件系统:The dispatcher module事件派遣模块
全广播式(all broadcasting) 选择广播式(selected broadcasting):点对点、发布-订阅
案例:“股票交易平台”的事件调度机制设计
软件体系结构描述文档原则:
视图:一组架构元素及其关联关系的表示
分解视图、使用视图、分层视图、类/泛化视图、进程视图、并发视图、共享数据视图、客户端-服务端视图、部署视图、实施视图、工作分配视图
软件应用程序体系结构的规范称为体系结构描述
4+1视图
逻辑视图、进程视图、物理视图、开发试图、场景视图
场景(用例)视图:从外部世界的角度描述正在建模的系统的功能,通常包含用例图,描述和概述图
逻辑视图:描述系统各部分的抽象描述,通常包括类图、对象图、状态图和协作图
过程视图:描述系统的进程 活动图
开发视图:描述系统的各部分如何被组织为模块和组件 包图、组件图
物理视图:描述如何将前三个视图中所述的系统设计实现为一组现实世界的实体。 部署图
用例图(Use Case)
用于表示若干角色以及这些角色与系统提供的用例之间的连接关系,代表了系统的外部视图
类图(Class Diagram)
类图表示系统中的类和类类与类之间的关系,他是对系统静态结构的描述
对象图(Object Diagram)
对象图是某个时间点系统中对象的快照,显示实例而不是类,通常称为示例图。
状态图(State Diagram)
描述类的对象所有可能的状态以及事件发生时状态的转移条件。 类图的补充
协作(通信)图(Communication Diagram)
一种交互图,强调发送和接受消息的对象之间的组织结构
序列图(Sequence Diagram)
序列图是对象交互的一种表现方式 按照交互的发生的顺序,显示对象之间的这些交互
活动图(Activity Diagram)
描述满足用例要求所要进行的活动以及活动间的约束关系,有利于识别并行活动
包图(Package Diagram)
包是在UML中用类似文件夹的符号表示的模型元素的组合 包可用于UML的任何部分
组件图(Component Diagram)
组件图描述代码构建的物理结构及各构件之间的依赖关系
部署图(Deployment Diagram)
部署图定义系统中软硬件的物理体系结构
复合结构(Composite Structure)
UML2新增功能 分层的将类分解为内部结构 将一个复杂的对象分解为多个部分
交互概述图(Interaction Diagram)
活动图和序列图的结合
时序图(Timing Diagram)
交互图的另一种形式 重点在于时序约束
属于非功能性需求,并不被功能所决定
不同的软件项目关注不同的质量属性
质量属性之间可能互相抑制
必须结合设计、实现、部署3方面才能满足
描述系统如何对刺激做出反应
组成:刺激源(source)、刺激(stimulus)、制品(artifact)、环境(environment)、响应(response)、相应衡量指标(response measure)
在要求的外部资源得到保证的前提下,产品在规定的条件下和规定的时刻或时间区间内处于可执行规定功能状态的能力。是产品可靠性、维修性和维修保障性的综合反映
关注点:是否发生故障 故障的后果
衡量指标:可用时间百分比、修复故障所需的时间、平均无故障时间
场景:
策略 Tactics:
目标:降低故障造成的影响
关注点:
衡量指标:
场景:
策略:
目标:降低修改的时间和成本
关注点:响应事件的速度、和事件的数量和到达模式有关
事件的来源:用户的请求、系统内部或者外部
到达模式:随机、在特定时间尺度有规律
场景:
策略:
目标:限定时间内响应事件、获取资源+使用资源
**关注点:**抵抗对系统的攻击
场景:
策略:
为了发现错误
关注点:
场景:
策略:
目标:让测试更轻松
**测试工具:**Appium(App UI测试) Selenium(Web UI测试)JMeter(接口测试、性能测试)
关注点:让用户使用软件的难度降低
场景:
策略:
目标:让用户轻松
运行时策略
设计时策略
把用户界面和系统其他部分隔离开
MVC模式
…
参与人员:评估小组、项目决策者、构架涉众
四个阶段:Phase0~3
Utility Tree 效用树 自顶向下
Risk Tradeoff Sensitivitity Non-Risk