可用性 可修改性 安全 性能 可测试性 易用性
软件体系结构
软件体系结构以组件交互的方式定义的系统,说明需求与系统之间的对应关系,描述系统级别的可伸缩性,能力,吞吐量,一致性和兼容性等属性。软件体系结构由组件,连接件,约束组成。
软件体系结构风格
1描述一类体系结构
2独立于实际问题,强调软件系统中通用的组织结构
3在实践中被多次设计,应用
4是若干设计思想的综合
5具有被熟知的特性,可以复用
体系结构描述语言ADL
ADL是在底层语言模型的支持下,为软件系统的概念体系结构建模提供了具体语法和概念框架,基于语义工具为体系结构的表示,分析,演化,设计过程等提供支持。其三个基本元素是:构件,连接件,体系结构配置。
质量属性Quality Attribute
主要是用来描述软件的非功能性需求。包括可用性,可修改性,性能,安全性,可测试性,易用性。
ATAM分析方法
通过业务驱动,质量属性,情景等方面进行软件体系结构评估方法。
ADD设计方法
逐步的方法,用来系统化地为一个系统生成第一个体系结构设计。
可用性Availability
软件质量属性的一种,关心系统故障和它所带来的后果。
易用性
关注用户完成需要工作的容易程度,为用户提供支持。
学习系统特性,当用户不熟悉系统某方面功能的操作,怎么让用户学习的更容易。高效地使用系统功能。
软件体系结构三大要素
Component组件:具有某种功能的可重用软件模块。(计算单页和存储)
connector连接件:组件之间的相互关系,可以是过程调用,管理和消息等。(管道pipe,过程调用procedure-call,事件广播event broadcast。复杂连接件有客户-服务器(client-server)通信协议,数据库和应用之间SQL连接等)
constraint约束:组件和连接件的拓扑逻辑和约束。
数据流体系结构风格 data flow system
数据到达时被激活,无数据不工作
数据的可用性决定《处理单元》是否执行
系统结构由数据在各处理之间的有序移动决定。
在纯数据流系统中,处理之间除了数据交换没有任何其他的交互。
基本构件:数据处理。
构建接口:输入端口和输出端口。
计算模型:从输入端口读数,经过计算/处理,然后写到输出端口。
连接件:数据流
单向,通常是异步,有缓冲。
接口角色:reader和writer。
计算模型:数据从一个处理的输出端口传送到另一个出入端口。
模式:
近似线性数据流 有限度内的循环数据流
批处理体系解构风格
每个步骤是一个独立的程序
每一步必须在前一步结束后才能开始
数据必须完整,以整体进行传递
管道-过滤器体系结构风格 Pipe-and-Filter
处理由Filter过滤器构件实现
数据传输由管道Pipe负责
特性:数据到来时就被处理而不是收集后处理,未被消耗完全时,输出就会产生。
五种类型:增加,删减,转换,分解,合并。
过滤器是独立的个体。无上下文消息,不保留状态,对其他过滤器没有影响。
优点:软件复用,维护增加性能,并行执行。
缺点:不适合处理交互应用,性能不高。时间消耗在格式转换,不存在数据共享。
调用返回风格
主程序/子程序风格 即功能分解
面向对象 信息隐藏
层次解构 只能和相邻的进行通信
步骤:模块分解,封装(信息隐藏),数据抽象,面向对象(封装,交互,多态,继承,复用和维护)。
变种:client-server 进程是对象,不对称:客户端知晓服务器,反否。
Tiered C/S模式扩展。
Components 支持动态配置的专门协议
计算机网路:层次解构
每层为上一层提供服务,只能与临近层连接。细分问题逐步解决。
层层相调。
双层客户端/服务器风格
客户端进行交互,服务器进行数据管理。缺点:客户端臃肿。
三层客户端/服务器风格
表示层,功能层,数据层。 逻辑独立。
B/S为三层特例。
客户端使用http浏览器即可。安全性低(SQL注入,CSRF,XSS)
服务器负荷大
以数据为中心的体系结构风格
例子:
注册表(Windows Registry)整理后缀为.INI的文件形成共享仓库。
剪贴板(Clipboard)短时间数据存储在文档或应用间进行数据传输交换的软件程序。Copy paste
仓库体系风格结构
仓库是存储和维护数据的中心场所
中心数据结构为当前数据状态
一组对中心数据进行操作的独立构件
连接件:仓库和独立构件之间的交互 两种模式:数据库方式:流入事务类型进行触发执行。黑板模式:触发当前状态中心数据结构选择需要执行的过程
典型应用场合:数据库
黑板体系结构风格
把一个大问题分成若干个子问题
每个求解程序具有某一特定领域的知识
应用场景:人工智能
虚拟机风格
解释器interpreters
规则系统rule-based systems
事件系统
事件驱动
隐式调用 特点:触发者不知道哪些构件会被影响,,相互独立。
不能假设构件处理顺序。事件发布和注册实现关联。
事件触发可能会形成事件链子。
事件委派 dispatcher module
全广播式:无目的的广播,接受者自行决定处理与抛弃。
选择式广播:事件只发送特定模块
选择广播的两种策略:基于事件被执行的方式
体系结构描述方法
输出构件(加工数据),数据构件(被加工的信息),连接构件(连接不同的组件)。
描述文件
读者角度写,避免重复,避免歧义,记录理由,保持文档的时效性。
4+1视图从以上五个角度来描述
可用性-----------------------------------------------------
质量属性 属于 非功能性需求不被功能所决定
功能特性必须给各个模块赋予正确的职责,正确的资源和正确的调度顺序。
质量属性之间可能相互抑制,保证优先级高的质量属性。
设计实现部署3方面全部满足。
质量属性的6个组成部分:
刺激源 source 谁造成的刺激
刺激 stimulus 一个影响系统的因素
制品 artifact 被影响的部分
环境 environment 刺激发生时系统所处的状态
响应 response 刺激产生的结果
响应衡量指标 response measure 如何评估响应
可用性的含义-----------------------------------------------
1当用户使用系统时,系统可用的概率。
2提前确定的停机维护不计入。
关注点:
是否发生了故障 和 故障的后果
衡量指标:
可用百分比 修复故障所需时间 平均无故障时间
刺激源
故障的迹象
刺激
系统出错/崩溃 结果不准时 错误结果
制品
计算 or 存储 or 网络传输
环境
正常状态 or 亚健康状态
响应
记录日志,关闭系统,通知管理员或其他系统
响应衡量指标
故障时间百分比 修复故障所需时间,平均无故障时间
提高可用性策略
Tactics 刺激 à 控制响应的策略 à 响应
方向1 故障检测 方向2 故障修复 方向3 故障避免
故障检测
Ping/echo Heartbeat Exceptions
故障修复
投票 主动冗余类似于NPM和CNPM
被动冗余 A完成运算把结果发送给B ,再把B的状态更新为新的A的状态。A故障时,首先需要确认B状态最新。
重新上线前,都需要进行状态同步。
可修改性---------------------------------------------------
Modifiability
关注点:修改成本 哪部分被修改 修改发生的时间 修改由谁执行
衡量指标:修改完成的时间 修改所花的人力/经济成本
刺激源: 谁进行修改
刺激:具体修改
制品:修改系统的功能or UI or 交互的其他系统。
环境:何时进行修改? 设计期还是开发期 还是运行期
修改的时间越迟,越不利。
响应:操作人员要理解如何修改,进行修改操作,测试,部署。
响应衡量指标:时间,成本。
提升可修改性的策略
方向1限制修改范围 方向2 延迟绑定时间
限制修改范围:
模块高内聚,低耦合
考虑到可能发生的修改
让模块通用
延迟绑定时间:
配置文件
发布-订阅模式
多态
性能-------------------------------------------------------Performance
关注点:系统响应时间的速度,和事件数量和到达模式有关。
事件的来源:用户的请求,本系统内部,系统外部。
刺激源:可能来自系统内部或外部
刺激:事件到来 à 响应
制品:系统提供的服务
环境:系统所处不同模式(正常/紧急/超载)
响应:系统到来的事件,可能会导致状态改变
响应衡量指标:处理事件所花的时间,单位时间内处理事件数目,处理错误率。
提升性能的策略-----
目标:在限定时间内响应事件,获取资源 + 使用资源
方向1 资源需求 方向2资源管理 方向3资源仲裁
提高计算效率:
使用更算法
减少处理事件时对资源的占用
减少要处理数据总量:
控制事件速率
抽取一部分请求处理
限制执行时间:
限制待处理事件队列长度:
利用并发机制:
增加可用资源
先来先服务;固定优先级调度;动态优先级
安全性-----------------------------------------------------
Security
关注点:保证合法用户使用的前提,抵抗对系统的攻击。
攻击(威胁):试图突破安全性防护的尝试。
安全性的不同方面:
不可否认性 私密性 完整性 保证性 可用性 审计
刺激源:攻击可能由人或其他系统发起
刺激:系统攻击 常用形式:窃取/修改信息,获取超权限的服务,降低系统可用性
制品:系统所提供的服务或系统中的数据
环境:系统处于不同的情况下(联网是否,上下线,防火墙内外)
响应:合法用户正常使用,拒绝非法用户 对攻击有威慑
响应衡量指标:发起攻击难度,从攻击中恢复的难度。
提高安全性的策略-----
方向1 抵抗攻击 方向2 检测攻击 方向3 从攻击中恢复
抵抗攻击:用户证实,用户授权,维持数据保密性/完整性,减少暴露
,限制访问,软件和人结合,恢复状态,攻击者的识别。
可测试性---------------------------------------------------Testability
关注点:让软件BUG容易检测,验证软件产品与其需求匹配,
最小成本和工作量来验证软件质量。
重要性:40%的成本用来测试 大型软件项目出故障 à 严重后果。
刺激源:测试人员。
刺激:系统开发到达里程碑,分析/设计/编码/集成阶段的结束,或者完成开发。
制品:设计,代码,系统
环境:系统设计/开发/部署/正常运行时候。
响应:进行测试可以观察到测试结果。无法被观察时,测试难度大。
响应衡量指标:白盒测试覆盖率
提升可测试性的策略:方向1黑盒测试 方向2 白盒测试
总体思路:提供输入 + 捕获输出
记录/回放 把接口和实现分离开
APP/WEB UI测试 接口测试 性能测试
易用性-----------------------------------------------------Usability
关注点:让用户使用软件的难度降低。
不同方面:方便入门,提高用户使用软件效率,降低用户出错影响,
适应用户需求,提高用户自信和舒适度
刺激源:终端用户
刺激:终端用户希望学习系统的使用,提高系统使用效率,减少出错
制品:整个系统
环境:系统处于运行或者配置
响应:系统响应用户的要求
响应衡量指标:用户完成时间,用户出错次数,用户满意度,用户操作成功率
提高易用性的策略:
目标:让用户轻松 方向1 运行时策略 方向2 设计时策略
系统猜测用户要完成的任务---输入法联想,搜索引擎联想
系统给用户适当的反馈---给予用户任务完成进度
提供一致的体验---适应不同的用户—提供不同的鼠标DPI
支持撤销操作
把用户界面和其他操作分离
体系解构评估
开发成本 满足需求 潜在危机