一、质量属性树的核心作用
- 需求转化
将客户模糊的“声音”(VoC)转化为具体的技术指标。例如,客户要求“系统快速响应”可分解为“响应时间≤0.5秒”“吞吐量≥1000TPS”等可测量的属性。 - 优先级排序
通过权重分配(如性能占30%、可靠性占40%)确定不同属性的优先级,指导资源分配。 - 风险与权衡分析
识别敏感点(如数据库选型对性能的影响)、权衡点(如安全性与性能的冲突)及风险点(如高并发下的稳定性风险)。
二、质量属性树的构建步骤
1. 需求收集与分类
- 功能性需求:如订单支付、用户注册等业务功能。
- 非功能性需求:如性能、可靠性、安全性、可维护性等质量属性。
示例:某电商平台需求中,“支持高并发促销”属于性能属性,“用户数据加密”属于安全性属性。
2. 属性分解与层级化
- 第一层:核心质量属性(如性能、可靠性)。
- 第二层:子属性(如性能→响应时间、吞吐量;可靠性→容错、恢复时间)。
- 第三层:具体指标与战术(如响应时间≤0.5秒→采用缓存机制、负载均衡)。
案例:在文章9的电商案例中,“灵活性”被分解为“可修改性”和“扩展性”,再细化为“规则配置时间≤1小时”“横向扩展支持4人天内完成”。
3. 权重与效用函数定义
- 为每个属性分配权重(如性能40%、安全性30%)。
- 定义效用函数(如响应时间每降低0.1秒,效用提升5%),用于量化评估方案。
4. 敏感点与权衡点识别
- 敏感点:直接影响属性的关键设计(如数据库索引优化对查询性能的影响)。
- 权衡点:影响多个属性的设计选择(如加密级别提高会牺牲性能)。
示例:文章5指出,加密级别调整可能同时影响安全性和性能,需在效用树中标注为权衡点。
三、实际案例分析
案例背景
某社交平台需设计消息推送系统,客户提出以下需求:
- 用户消息需实时到达(性能)。
- 即使服务器故障,消息仍可最终送达(可靠性)。
- 防止恶意用户发送垃圾信息(安全性)。
质量属性树构建
- 第一层属性:性能、可靠性、安全性。
- 第二层子属性:
- 性能→响应时间≤1秒、吞吐量≥10万条/秒。
- 可靠性→消息持久化、故障恢复时间≤1分钟。
- 安全性→内容过滤、权限验证。
- 第三层战术与指标:
- 性能:采用Kafka异步消息队列、Redis缓存热点数据。
- 可靠性:引入RabbitMQ镜像队列、备份服务自动切换。
- 安全性:集成正则表达式过滤敏感词、OAuth 2.0鉴权。
权衡分析
- 性能 vs 可靠性:消息持久化可能增加存储延迟,需通过分布式文件系统(如HDFS)优化。
- 安全性 vs 性能:内容过滤可能占用计算资源,需采用硬件加速(如GPU)或异步校验。
四、考试答题策略
- 结构化表达
- 按“需求收集→属性分解→权重分配→敏感点/权衡点分析”分步骤作答。
- 使用表格或树状图展示层级关系(如文章9中的填空题解析)。
- 结合具体战术
- 为每个属性提供至少1-2个技术实现方案(如性能→负载均衡、数据库分库分表)。
- 量化评估
- 引用指标数据(如“响应时间从1.2秒优化至0.8秒”)或效用函数(如“可用性提升10%”)。
五、总结
质量属性树通过结构化分解需求,帮助架构师在设计初期识别风险、优化资源分配,并为技术选型提供依据。在考试中,需熟练掌握其构建步骤、常见属性分类及权衡分析方法,结合案例灵活应用。