软件架构设计——需求与质量

软件的属性包括功能属性和质量属性,但是,软件架构重点关注的是质量属性。因为,在大量可能的结构中,可以使用不同的结构来实现同样的功能性,即功能性在很大程度上是独立于结构的,架构设计师面临决策(对结构的选择),而功能性所关心的是它如何与其他质量属性进行交互,以及它如何限制其他质量属性。

2 质量

软件质量特性主要包括:
1.功能性(适合性、准确性、互操作性、依从性、安全性)
2.可靠性(成熟性、容错性、易恢复性)
3.易用性(易理解性、易学性、易操作性)
4.效率(时间特性、资源特性)
5.可维护性(易分析性、易改变性、稳定性、易测试性)
6.可移植性(适应性、易安装性、遵循性、易替换性)

常见的质量属性,可以按照运行期与开发期进行分类:

1 运行期质量属性
性能:性能是指软件系统及时提供相应服务的能力。包括速度、吞吐量和持续高速性三个方面;
安全性:指软件系统同时兼顾向合法用户提供服务,以及阻止非授权使用的能力;
易用性:指软件系统易于使用的程度
可伸缩性:指当前用户数和数量增加时,软件系统维持高服务质量的能力。例如,通过增加服务器来提高能力
互操作性:指本软件系统与其他系统交换数据和相互调用服务的难易程度
可靠性:软件系统在一定的时间内无故障运行的能力
持续可用性:指系统长时间无故障运行的能力。
鲁棒性:指软件系统在一些非正常情况(如用户进行了非法操作、相关软硬件系统发生故障)下仍能正常运行的能力。也称健壮性或容错性。

2 开发期质量属性
易理解性:指设计被开发人员理解的难易程度
可扩展性:软件因适应新需求或需求变化而增加新功能的能力。也称灵活性。
可测试性:对软件测试以证明其满足需求规范的难易程度
可维护性:当需要修改缺陷、增加功能、提高质量属性时,定位修改点并实施修改的难易程度。
可移植性:将软件系统从一个运行环境转移到另一个不同的运行环境的难易程度。

架构师在追求质量属性常常陷入“鱼和熊掌”的两难境地,这就需要架构设计师的决策智慧了。

这里写图片描述

上表中“+”表示促进作用,“-”则相反

3 质量需求怎么描述

在软件系统架构设计中,如何描述软件的质量属性需求呢? 一般采用场景的方式进行描述,主要包括6种场景。

本节“场景”指的是软件系统设计中通用的场景。

场景
质量属性场景包括6个元素。
刺激源:生成该刺激的实体(人、计算机系统或其他励志器);
刺激:刺激达到系统时可能产生的影响(即需要考虑和关注的情况);
环境:该刺激在某条件内发生。如系统可能正处于过载情况;
制品:系统中受刺激的部分;
响应:刺激到达后所采取的行动;
响应度量:当响应发生时,以某种方式对响应的效果进行度量。

通过对每一类质量属性进行场景化描述,然后,分别制定应对各个场景的策略。

3.1 可用性的场景描述以及策略

可用性场景描述

可用性的策略目标是阻止错误发展成故障,至少能够把错误的影响限制在一定范围内,从而使修复成为可能。主要包括:错误检测、错误恢复、错误预防。

3.2 可修改性的场景描述以及策略

可修改性的场景描述如下
可修改性场景描述

为了应对系统的可修改性需求,主要有三种方法:
1. 局部修改。在软件架构设计的时候,对系统进行分解,将预期的变更限定在一定的范围内,从而降低修改的成本。
2. 防止连锁反应。模块之间往往存在依赖性,在修改时要保持接口的一致性。通过限制模块间的通信线路,可以在修改某模块后再恢复通行线路。
3. 推迟绑定时间。系统在运行时进行绑定并允许非开发人员进行修改(配置)。
运行时注册、配置文件、多态(在方法调用的后期绑定)、构件更换(允许载入时绑定)。

3.3 性能的场景描述以及策略

性能主要与时间有关,影响事件的响应时间有两个基本因素:资源消耗,闭锁时间(指事件处理碰到资源争用、资源不可用或对其他计算的依赖等情况,产生的等待)。

针对性能要求主要有一下几种应对策略:

  1. 资源需求
    ①减少处理事件流所需的资源:提高计算效率、减少计算开销
    ②减少处理事件的数量:管理事件率、控制采样频率。
    ③控制资源的使用:限制执行时间(如减少迭代次数)、限制队列大小

  2. 资源管理
    引入并发:并发对负载平衡很重要
    维持数据或计算的多个副本:C/S结构中客户机C就是计算的副本,它能减少服务器计算的压力;高速缓存可以存放数据副本。
    增加可用资源:在成本允许时,尽量使用速度更快的处理器、内存和网络。

  3. 资源仲裁
    资源仲裁是通过如下调度策略来实现的:
    ①先进先出FIFO
    ②固定优先级调度
    ③动态优先级调度,轮转调度、时限时间最早优先
    ④静态调度,离线确定调度

3.4 安全性的场景描述以及策略

安全性的场景描述

针对安全性要求的策略主要包括:
1. 抵抗攻击
对用户进行身份验证:动态密码、一次性密码、数字证书、生物识别
对用户进行授权:即对用户的访问进行控制管理
维护数据的机密性:一般通过对数据和通信链路进行加密来实现
维护完整性:对数据添加校验或哈希值;限制暴露的信息
限制访问:如用防火墙、DMZ策略

  1. 检测攻击
    一般通过“入侵检测”系统进行过滤、比较通信模式与历史基线等方法。

  2. 从攻击中恢复
    恢复:与可用性中的战术相同;
    识别攻击者:作为审计追踪,用于预防性或惩罚性目的。

3.5 可测试性的场景描述以及策略

可测试性场景描述

可测试性策略:
1. 输入/输出
①记录/回放:指捕获跨接口的信息,并将其作为测试专用软件的输入;
②接口与实现分离:允许使用实现的替代(模拟器)来支持各种测试目的;
2. 内部监控
当监视器处于激活状态时,记录时间(如通过接口的信息)。

3.6 易用性的场景描述以及策略

易用性的场景描述

针对易用性要求的策略,主要包括:
1. 运行时策略
任务模型:维护任务的信息,使系统了解用户试图做什么,并提供各种协助;
用户模型:维护用户的信息,例如使用以用户可以阅读页面的速度滚动页面
系统的模型:维护系统的信息,它确定了期望的系统行为,并向用户提供反馈。

  1. 设计时策略
    将用户接口与应用的其余部分分离开来,预计用户接口会频繁发生变化,因此,单独维护用户接口代码将实现变更局部化。

  2. 用户主动操作
    支持用户的主动操作,如支持“取消”、“撤销”、“聚合” 和“显示多个视图”

Logo

开源、云原生的融合云平台

更多推荐