【软件系统架构】系列十三:系统架构设计——系统质量属性与架构评估

一、软件系统质量属性
1.定义
软件质量:软件系统与明确/隐含需求一致的程度。
维度划分(六大方面):
-
功能性:适合性、准确性、互操作性、依从性 -
可靠性:容错性、易恢复性、成熟性 -
易用性:易学性、易理解性、易操作性 -
效率:时间特性、资源特性 -
维护性:可测试性、可修改性、稳定性、易分析性 -
可移植性:适应性、安装性、一致性、替换性
2.分类
-
开发期质量属性:易理解性、可扩展性、可重用性、可测试性、可维护性、可移植性 -
运行期质量属性:性能、安全性、可伸缩性、互操作性、可靠性、可用性、鲁棒性
二、面向架构的质量属性与设计策略
| 属性 | 关注点 | 常见度量 | 架构设计策略 | 验证方法 | 常见误区 |
|---|---|---|---|---|---|
| 性能 |
|
|
|
|
|
| 可靠性 |
|
|
|
|
|
| 可用性 |
|
|
|
|
|
| 安全性 |
|
|
|
|
|
| 可修改性 |
|
|
|
|
|
| 功能性 |
|
|
|
|
|
| 可变性 |
|
|
|
|
|
| 互操作性 |
|
|
|
|
|
解析要点:
1.质量属性之间的权衡关系
-
性能 vs 一致性:缓存/异步提升性能,但可能牺牲数据实时一致性。 -
可用性 vs 成本:冗余/多活架构提升可用性,但带来资源和运维成本。 -
安全性 vs 易用性/性能:强认证与加密增加交互复杂度与延迟,需要设计平衡方案(如硬件加速、单点登录)。 -
可修改性 vs 稳定性:频繁改动可能引入不稳定;需通过特性开关与灰度策略降低风险。
2.QAS(质量属性场景)化
每一个质量目标必须用 QAS 模板表述,才能进入架构评审和测试:
在【环境】下,当【刺激源】发出【刺激】作用于【制品】时,系统应【响应】,并以【响应度量】验证。
例:在高峰期(环境),用户请求下单(刺激源+刺激)作用于订单服务(制品),系统应返回成功响应并写入日志(响应),并保证 P95 延迟<200ms,错误率<0.1%(度量)。
3.落地清单
-
每个属性都有 度量指标 + 架构战术 + 验证手段 -
为运行期属性绑定 SLO/错误预算 -
为开发期属性建立 ADR(架构决策记录)+演练(变更/兼容) -
在 CI/CD 中集成 契约测试、性能压测、安全扫描、混沌工程 -
定期复盘质量属性的权衡点与敏感点(ATAM 方法)
三、质量属性场景(QAS)
场景六要素:刺激源 → 刺激 → 环境 → 制品 → 响应 → 响应度量
常见场景示例
-
可用性:系统在高负载下故障,需在 5 分钟内恢复,并通知管理员。 -
性能:正常模式下用户请求响应 <200ms,吞吐量 ≥1000 req/s。 -
安全性:非法访问尝试应 3 秒内阻断,并记录审计。 -
可修改性:新增功能修改应在 1 天内完成,且不影响现有功能。 -
易用性:新用户 30 分钟内掌握核心操作,错误率 <5%。
四、系统架构评估方法
1.SAAM(场景驱动架构分析)
-
最早的方法,侧重 可修改性 -
流程:场景开发 → 架构描述 → 单场景评估 → 场景交互 → 总体评估
2.ATAM(架构权衡分析)
-
核心工具:效用树(Utility Tree) -
目标:识别敏感点、权衡点、风险点 -
适用属性:性能、可用性、安全性、可修改性 -
场景类型:用例场景、增长场景、探测场景
3.CBAM(成本效益分析)
-
在 ATAM 基础上引入 ROI
-
步骤:
-
整理并优先级化场景
-
策略-场景-响应对应关系
-
分配效用并计算收益
-
扣除成本,选择 ROI 最高的架构策略
4.其他方法
-
SAEM:内部/外部质量属性双重视角 -
SAABNet:基于 BBN 的定性推理 -
SACMM:修改性度量 -
SASAM:架构静态对比 -
ALRRA:可靠性风险评估(基于 FMEA) -
AHP:层次分析法,定性问题定量化 -
COSMIC+UML:维护性度量与演化方案验证
五、架构评估关键要点
1. 敏感点(Sensitivity Points)
定义
敏感点是指 架构中对某一特定质量属性非常敏感的组件、模块或设计特性。一旦这些部分发生变化或失效,就会显著影响该质量属性。
特征
-
仅影响 单一或少数几个质量属性 -
对性能、可用性、可扩展性等某一方面非常关键 -
变化会造成 局部性能或行为明显波动
识别方法
-
基于场景(Scenario-Driven):分析具体使用场景中哪些组件承载了核心功能。 -
历史经验:查看类似系统中,哪些模块容易成为瓶颈。 -
建模分析:性能分析(如负载、响应时间)、可靠性分析(MTBF)等。
示例
-
缓存模块:对性能敏感,如果缓存策略设计不当,可能导致响应延迟增大。 -
数据库连接池:对吞吐量敏感,池配置不足会导致请求阻塞。 -
安全认证模块:对安全性敏感,缺陷可能导致系统被攻破。
2. 权衡点(Trade-off Points)
定义
权衡点是指 架构中对多个质量属性存在相互影响的设计决策点。优化一个属性可能会牺牲另一个属性。
特征
-
同时影响多个质量属性(性能、成本、可用性、可维护性等) -
需要权衡不同目标,做出折中决策 -
常见于跨层设计、系统级决策
识别方法
-
列出系统主要质量属性及优先级 -
对设计方案进行”多属性影响分析” -
使用效用树(Utility Tree)或权衡矩阵分析不同设计方案对质量属性的影响
示例
-
冗余设计:增加冗余节点提高可用性,但增加成本和运维复杂度 -
异步消息队列:提高吞吐量和可伸缩性,但可能增加系统延迟和一致性复杂性 -
加密策略:增强安全性,但可能降低性能
3. 风险点(Risk Points)
定义
风险点是指 可能导致架构失败或严重质量问题的潜在隐患。风险点通常是系统最脆弱的地方,需要重点关注和缓解。
特征
-
可能对多个质量属性产生负面影响 -
通常难以通过单次测试发现 -
与复杂性、技术成熟度、依赖外部组件相关
识别方法
-
技术成熟度分析:新技术或组件的集成风险高 -
架构复杂性分析:高度耦合或依赖链长的模块是高风险点 -
历史问题分析:参考过往系统故障记录 -
敏感点与权衡点的交叉:敏感点+权衡点可能成为潜在风险点
示例
-
单点故障:核心服务节点出现故障会导致系统不可用 -
第三方库依赖:第三方库漏洞可能导致安全风险 -
复杂事务流程:跨系统事务失败可能影响数据一致性
小结:
| 类型 | 关注点 | 识别方式 | 示例 |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
六、总结
-
质量属性是架构评估的核心,决定架构设计成败。 -
**场景化(QAS)**是从抽象需求到可验证标准的关键。 -
SAAM → ATAM → CBAM 构成了逐步深入的评估链条: -
SAAM:分析单一属性 -
ATAM:识别权衡与风险 -
CBAM:加入 ROI 做决策 -
架构评估 ≠ 测试,而是设计阶段的风险识别与权衡决策工具。
夜雨聆风