软考-系统架构设计师 软件系统质量属性详细讲解

个人博客:blogs.wurp.top

一、核心概念:什么是质量属性?

  • 定义 :质量属性是影响系统用户体验、开发效率和长期演进的非功能性特征。它们不是系统"做什么",而是系统"做得怎么样"。
  • 与功能需求的区别
    • 功能需求:系统必须完成的具体行为或功能。例如:"系统允许用户通过关键词搜索商品。"
    • 质量属性 :系统在执行这些功能时所表现出来的条件和标准 。例如:"搜索结果的响应时间 95% 以上应小于 2 秒。"(性能 ),"系统应能同时为 10,000 名用户提供搜索服务。"(可扩展性

架构师视角 :功能需求决定了架构的广度 ,而质量属性决定了架构的深度和形状。一个不能满足关键质量属性的架构是失败的架构。


二、质量属性的分类

通常将质量属性分为两大类:运行期质量属性开发期质量属性

(一)运行期质量属性 - 用户和运维人员可直接感知

这些属性与系统的运行时行为密切相关。

1. 性能 (Performance)
  • 定义:系统在给定资源和时间约束下,完成指定任务的能力。
  • 衡量指标
    • 响应时间:从发出请求到收到响应所需的时间(如页面加载时间、API 返回时间)。
    • 吞吐量:单位时间内系统处理的请求数量(如每秒处理的事务数 TPS、每秒查询率 QPS)。
    • 资源利用率:CPU、内存、网络、I/O 等资源的使用情况。
  • 架构策略
    • 引入缓存(Redis, Memcached)减少数据库压力。
    • 使用异步处理(消息队列)削峰填谷。
    • 进行负载均衡,将请求分发到多个服务器。
    • 优化数据库(索引、SQL 优化、读写分离)。
    • 对代码进行性能调优
2. 可用性 (Availability)
  • 定义:系统在需要时能够正常运行和提供服务的概率。
  • 衡量指标可用率 ,通常用"几个 9"来表示。
    • 99.9% (三个九)-> 年停机时间约 8.76 小时。
    • 99.99%(四个九)-> 年停机时间约 52.6 分钟。
    • 99.999%(五个九)-> 年停机时间约 5.26 分钟。
  • 架构策略
    • 消除单点故障:对关键组件进行集群部署。
    • 故障转移:当主节点故障时,能自动切换到备用节点。
    • 冗余:提供额外的组件或系统作为备份。
    • 实现容错弹性设计。
3. 安全性 (Security)
  • 定义:系统保护自身数据和资源,防止未授权访问、恶意攻击,并确保合法用户不被拒绝服务的能力。
  • 衡量指标:漏洞数量、安全事件发生率、渗透测试通过率等。
  • 架构策略
    • 部署防火墙、WAF
    • 实施身份认证与授权(OAuth 2.0, JWT, RBAC)。
    • 对敏感数据加密(传输加密 TLS,存储加密)。
    • 记录并监控审计日志
    • 防止常见攻击(SQL 注入、XSS、CSRF)。
4. 可伸缩性 (Scalability)
  • 定义:系统通过增加资源来提升处理能力的难易程度。
  • 类型
    • 垂直扩展 :提升单个服务器的性能(如增加 CPU、内存)。简单但有上限
    • 水平扩展 :增加服务器的数量。更灵活,是现代架构的主流
  • 架构策略
    • 无状态设计:使请求可以被任何服务器处理,便于水平扩展。
    • 微服务架构:可以针对特定服务进行独立扩展。
    • 使用分布式缓存数据库分库分表
5. 可靠性 (Reliability)
  • 定义 :系统在规定条件下、规定时间内,无故障地执行所需功能的能力。
  • 衡量指标
    • 平均无故障时间:系统连续正常运行的平均时间。
    • 平均修复时间:系统从故障状态恢复到正常状态所需的平均时间。
  • 与可用性的区别
    • 可靠性 关注的是"别出故障"(故障频率)。
    • 可用性 关注的是"出了故障能尽快恢复"(故障后恢复速度)。
    • 高可用性可以通过快速的故障恢复(低 MTTR)来弥补较低的可靠性(低 MTBF)。
6. 易用性 (Usability)
  • 定义:用户学习和使用系统的容易程度。
  • 架构策略:提供清晰的 API 文档、设计直观的用户界面、提供一致的操作体验。虽然主要由 UI/UX 设计师负责,但架构师需要提供技术支持。

(二)开发期质量属性 - 开发与维护人员关注

这些属性与系统的静态结构密切相关,影响开发成本和系统寿命。

1. 可维护性 (Maintainability)
  • 定义 :发现并修复缺陷、改进性能或适应环境变化的难易程度。这是最重要的开发期质量属性
  • 架构策略
    • 高内聚、低耦合的设计原则。
    • 采用分层架构模块化设计。
    • 编写清晰的文档注释
    • 遵循设计模式编码规范
2. 可移植性 (Portability)
  • 定义:系统从一种硬件或软件环境迁移到另一种环境的难易程度。
  • 架构策略
    • 使用跨平台的编程语言(如 Java, Python)。
    • 平台相关的代码进行抽象和封装。
    • 采用容器化技术(如 Docker),实现"一次构建,到处运行"。
3. 可测试性 (Testability)
  • 定义:为系统建立验证准则,并通过测试执行来验证的容易程度。
  • 架构策略
    • 支持单元测试(依赖注入、面向接口编程)。
    • 提供测试驱动模拟能力。
    • 系统模块化,便于隔离测试
4. 可复用性 (Reusability)
  • 定义:系统的组件或架构能在其他项目中重复使用的程度。
  • 架构策略
    • 设计可复用的构件、框架和库
    • 采用面向对象的设计原则(如 SOLID)。
    • 构建领域特定软件体系结构

三、质量属性场景 - 架构师的沟通与分析工具

为了精确描述和分析质量属性,架构师使用质量属性场景这一标准化工具。一个完整的场景包括六个部分:

  1. 刺激源:谁发起了这个刺激?(用户、管理员、外部系统)
  2. 刺激:发生了什么事件?(数据请求、故障、攻击尝试)
  3. 环境:刺激发生时,系统处于什么状态?(正常模式、高负载、降级模式)
  4. 制品:刺激作用于系统的哪个部分?(整个系统、某个组件、数据库)
  5. 响应:系统应该如何应对外部的这个刺激?(处理请求、屏蔽攻击、记录日志)
  6. 响应度量:如何量化地衡量响应是否合格?(在 2 秒内返回结果,阻止 99.9% 的 SQL 注入)

示例(性能场景)

  • 刺激源:注册用户
  • 刺激:提交关键词搜索请求
  • 环境:正常操作模式下,系统并发用户数为 5000
  • 制品:商品搜索服务
  • 响应:系统返回与关键词相关的商品列表
  • 响应度量:在 95% 的情况下,响应时间在 2 秒以内

四、质量属性之间的权衡

没有架构能完美满足所有质量属性,架构师的核心工作就是权衡。

  • 安全性与性能:严格的加密和身份验证会增加系统开销,降低性能。
  • 可用性与一致性:在分布式系统中,要保证所有节点数据强一致性(CP),可能会牺牲可用性(A);而要保证高可用性(AP),则必须接受数据的最终一致性。
  • 可扩展性与可维护性:微服务架构提升了可扩展性,但由于服务数量增多,也增加了运维和监控的复杂性,降低了可维护性。
  • 可复用性与性能:高度抽象和通用的可复用组件,可能无法为特定场景提供最优性能。

架构师必须与利益相关者(如产品经理、客户)沟通,明确哪些质量属性是核心约束,哪些是美好愿望,从而做出合理的决策。


五、软考考点总结与应用

  1. 选择题

    • 直接考查各类质量属性的定义衡量指标
    • 区分易混淆的概念,如可用性 vs 可靠性性能 vs 可伸缩性
    • 给出一个场景,判断其描述的是哪种质量属性。
    • 考查实现特定质量属性的常见架构策略
    • 考查质量属性之间的权衡关系
  2. 案例分析题

    • 题目给出一个系统需求描述,其中包含明确的或隐含的质量属性要求。
    • 问题:请分析该系统应重点关注哪些质量属性,并为你设计架构方案以满足这些属性。
    • 答题套路
      1. 识别质量属性:从案例描述中提取关键词(如"高并发"、"7x24小时"、"安全稳定"、"易于升级"),并将其对应到具体的质量属性(性能、可用性、安全性、可维护性)。
      2. 提出架构策略
        • 为满足性能,建议引入缓存、负载均衡。
        • 为满足可用性,建议采用集群、故障转移。
        • 为满足安全性,建议部署 WAF、实施鉴权。
        • 为满足可扩展性,建议采用微服务架构。
      3. 阐述权衡:说明你的架构方案在权衡不同质量属性时的考虑。
  3. 论文题

    • 可能围绕"论软件系统质量属性及其实现 "、"某系统架构设计中的权衡策略 "、"高可用/高并发/安全系统的设计与实践"等主题。
    • 写作时,必须:
      • 明确点出项目关键的质量属性目标(最好用量化指标)。
      • 详细论述你的架构决策是如何针对这些质量属性进行设计的。
      • 讨论你在权衡不同质量属性时所做的取舍和理由。
      • 分享在保障质量属性过程中遇到的挑战和解决方案

总结

对于软考架构师,掌握软件系统质量属性的关键在于:

  • 精准理解:清晰掌握每个质量属性的内涵、外延和度量方式。
  • 熟练运用场景:能用"质量属性场景"这一工具精确描述需求。
  • 精通策略:对实现每个质量属性的常用架构策略了如指掌。
  • 善于权衡:具备在复杂约束下进行决策和权衡的思维和能力。
相关推荐
张较瘦_3 小时前
从零学会绘制系统架构图:目的、思路与实操指南
架构·系统架构·软件工程
谱写秋天3 小时前
软考-系统架构设计师 软件架构复用详细讲解
系统架构·软考架构师
博一波3 小时前
软考高级-系统架构设计一些概念的串联
微服务·架构·系统架构
谱写秋天5 小时前
软考-系统架构设计师 系统架构评估详细讲解
系统架构·软考架构师
谱写秋天1 天前
软考-系统架构设计师 软件架构风格详细讲解
系统架构
谱写秋天1 天前
软考-系统架构设计师 特定领域软件体系结构详细讲解
系统架构·软考架构师
喜欢吃豆1 天前
多轮智能对话系统架构方案(可实战):从基础模型到自我优化的对话智能体,数据飞轮的重要性
人工智能·语言模型·自然语言处理·系统架构·大模型·多轮智能对话系统
lypzcgf2 天前
Coze源码分析-资源库-编辑数据库-后端源码-安全与错误处理
数据库·安全·系统架构·coze·coze源码分析·ai应用平台·agent平台
武子康3 天前
AI-调查研究-96-具身智能 机器人场景测试全攻略:从极端环境到实时仿真
人工智能·深度学习·机器学习·ai·架构·系统架构·具身智能