系统架构设计-质量属性

软件系统属性包括功能属性和质量属性

  • 功能属性:客户的需求,软件系统最基本的要求,正常软件开发流程识别即可。
  • 质量属性:大多需要通过分析,才能识别到的需求。

质量属性

  1. 开发期质量属性
    核心:这类属性和"软件开发、维护、测试"相关,影响开发效率和后期维护成本。
    易理解性、可扩展性、可重用性、可测试性、可维护性、可移植性
    (助记:理扩重试维移)(谐音:李扩重试卫衣)
  • 易理解性:开发人员、维护人员能快速理解系统结构、代码逻辑,降低沟通和维护成本(考点:架构设计的清晰性、代码注释规范)。

  • 可扩展性:系统能方便地增加新功能、扩展业务场景(比如电商系统后期新增"直播带货"功能,无需重构整体架构,和可修改性、可变性关联)。

  • 可重用性:系统的构件、模块能重复利用到其他项目或本项目的其他部分(对应咱们之前说的"体系结构级复用",比如分层架构的通用接口可复用)。

  • 可测试性:系统设计便于设计测试用例、开展自动化测试,能快速发现并定位bug(考点:模块化设计、接口标准化,案例题偶考"如何提升系统可测试性")。

  • 可维护性:系统出现故障后,能快速排查、修复,且修改后不影响其他模块(考点:模块化、松耦合,和可用性关联,可用性=可靠性+可维护性)。

  • 可移植性:系统能在不同的硬件、操作系统、环境下正常运行(比如一套系统既能跑在Windows,也能跑在Linux,优化思路:跨平台语言、容器化Docker)。

  1. 运行期质量属性
    核心:这类属性是用户能直接感受到的,也是架构设计的核心目标,每一个都要吃透优化思路,是如何提升某类运行期质量属性的重点:
    性能、安全性、可靠性、可用性、互操作性、可伸缩性、鲁棒性
    (助记:性能、安全、可靠、可用、鲁作伸)
  • 性能:系统"快不快",核心是响应速度、吞吐量、并发用户数(优化:缓存、负载均衡、异步处理、分库分表)。

  • 安全性:系统"安不安全",防止非法访问、数据泄露、恶意攻击(优化:加密、数字签名、防火墙、访问控制、权限管理)。

  • 可靠性:系统"稳不稳",软件系统在一定的时间内持续无故障运行的能力(考点:平均无故障时间MTTF,优化:容错技术、热备/冷备、故障转移)。

  • 可用性:系统"能不能用",软件系统在一定的时间内正常运行时间的占比(比如99.9%可用性,意味着每年故障时间不超过8.76小时,优化:故障自动恢复、定期备份、双机热备)。

  • 互操作性:指本软件系统与其他系统交互数据和项目调用服务的难易程度。

  • 可伸缩性:系统能根据业务量变化,灵活调整资源(比如高峰期并发增加,能快速扩容;低峰期缩容,优化思路:集群、弹性伸缩、云服务器)。

  • 鲁棒性:系统遇到异常情况(比如输入错误、网络中断)时,能正常运行、不崩溃,具备容错能力(比如用户输入非法字符,系统不报错,而是给出提示,优化:异常捕获、边界值处理),也称健壮性或容错性。

面向架构评估的质量属性(架构评估必考,综合知识、案例题高频)

为了评价一个软件系统,特别是软件系统的架构,需要进行架构评估。在架构评估过程中,评估人员所关注的是系统的质量属性,评估方法所普遍关注的质量属性有以下几种:
性能、安全性、可靠性、可用性、互操作性、可修改性、功能性、可变性

核心:架构评估时,评估人员重点关注的属性,涵盖上述两类中的核心,无需重复记忆,重点记"评估时重点关注"这一前提,考试会问"架构评估中重点关注的质量属性有哪些"。

补充重点(易混淆点):

  • 互操作性:不同系统、不同平台之间能正常数据交换、接口调用(比如车载APP对接云端和汽车硬件,优化:标准接口REST API、通用协议HTTP/MQTT)。

  • 可变性:是可修改性的子集,侧重"应对业务需求变化",比如动态调整促销规则,无需重启服务器(优化:配置化设计、规则引擎)。

  • 可修改性:是指能够快速地以较高的性价比对系统进行变更的能力。可修改性包括以下四个方面:可扩展性、可重用性、可维护性、可移植性

  • 功能性:系统实现用户要求的所有功能(基础属性,架构评估中作为辅助,论文中可开篇提及"满足用户功能性需求,同时兼顾各类质量属性")。

质量属性场景描述:6要素模板

案例题常考"描述某类质量属性的场景"

质量属性场景6要素:刺激源、刺激、环境、制品、响应、响应度量

  • 刺激源:谁产生的刺激(用户、系统、外部系统等)
  • 刺激:发生了什么(并发访问、故障、攻击、修改请求等)
  • 环境:系统处于什么状态(正常运行、高负载、故障恢复等)
  • 制品:被影响的部分(整个系统、某个模块、接口、数据库等)
  • 响应:系统如何处理(处理请求、故障转移、拒绝服务、修改完成等)
  • 响应度量:可量化指标(响应时间≤200ms、可用性 99.9%、修改耗时≤2 人天)

补充说明:质量属性场景是一种面向特定质量属性的需求,主要关注性能、安全性、可用性、可修改性、可测试性、易用性等6类质量属性。

举例(性能场景,贴合考试):刺激源(用户)、刺激(1000人并发访问系统)、环境(网络正常、服务器负载50%)、制品(系统接口)、响应(系统处理请求并返回结果)、响应度量(响应时间≤1秒)。

具体举例6个属性:

质量属性 刺激源 刺激 环境 制品 响应 响应度量(可量化)
性能 外部用户 发起高并发查询请求 系统处于业务高峰期 商品列表查询接口 系统处理请求并返回数据 平均响应时间不超过 500ms
安全性 恶意攻击者 尝试进行 SQL 注入攻击 系统对外提供互联网服务 用户登录认证模块 系统拦截攻击并记录安全日志 恶意请求拦截成功率达到 100%
可用性 应用服务器节点 发生硬件宕机故障 系统正常对外提供服务 核心业务集群系统 集群自动剔除故障节点,流量切换至健康节点 服务中断时间不超过 10 秒
可修改性 开发维护人员 提出修改业务规则需求 系统处于版本迭代维护期 订单结算核心模块 通过配置文件或扩展点完成逻辑修改 修改及回归测试总工作量不超过 3 人·天
可测试性 测试工程师 执行接口自动化测试用例 系统部署在独立测试环境 支付网关服务模块 模块提供 Mock 接口及日志埋点,支持用例执行 测试用例执行通过率 ≥ 95%,问题定位时间 ≤ 1 小时
易用性 首次使用的普通用户 执行订单提交操作 用户使用 PC 端浏览器访问 电商平台前端交互系统 系统提供清晰引导及操作提示 用户完成操作平均步骤 ≤ 3 步

敏感点与权衡点:

  • 敏感点:一个点,改了它,某类质量属性就会明显变化(比如缓存大小,改大了性能提升,改小了性能下降;再比如接口设计,改了接口会影响互操作性)。

  • 权衡点:两个及以上质量属性的"取舍"(比如追求性能,可能要牺牲可修改性;追求安全性,可能要牺牲性能;追求可用性,可能要增加成本),案例题常考"权衡某两个质量属性的方案"。

总结

场合 关注的质量属性 特点
开发期质量属性 易理解性、可扩展性、可重用性、可测试性、可维护性、可移植性(谐音:李扩重试卫衣) 软件开发、维护、测试相关
运行期质量属性 性能、安全性、可靠性、可用性、互操作性、可伸缩性、鲁棒性(助记:性能、安全、可靠、可用、鲁作伸,7个) 用户能感受到的体验
面向架构评估的质量属性 性能、安全性、可靠性、可用性、互操作性、可修改性、功能性、可变性(助记:性能、安全、可靠、可用、作变修功,8个) 评估架构是否合理,能否支撑业务
场景描述关注的质量属性 性能、安全性、可用性、可修改性、可测试性、易用性(助记:性能、安全、可用、修测易用,6个) 可统一模板、可量化

疑问:为什么不同场景,质量属性个数不一样?

  • 运行期质量属性(7个):关注"系统跑起来后,用户能感受到的所有关键属性"
    核心逻辑:运行期是系统交付后,用户实际使用的阶段,所以要覆盖"快、稳、安、好用"等所有和"运行体验"相关的属性(性能、安全性、可伸缩性等7个),缺一不可------比如用户用系统,既关心响应快不快(性能),也关心会不会崩(鲁棒性),这些都要包含。
  • 面向架构评估的质量属性(8个):关注"评估架构好不好,需要看的核心属性"
    核心逻辑:架构评估的目的是判断"这个架构设计是否合理、能否支撑业务",所以会筛选出"对架构设计影响最大"的8个属性------比如增加"功能性"(架构要先支撑核心功能)、"可变性"(架构要能应对业务变化)、"互操作性"(架构要能和其他系统对接),而运行期的"可操作性""鲁棒性""可伸缩性",更多是后期运维、开发的细节,不是架构评估的核心,所以不纳入。
  • 质量属性场景描述(6个):关注"能通过场景清晰描述、易量化的属性"
    核心逻辑:质量属性场景需要用"刺激源、响应、响应度量"等6要素量化(比如性能场景"响应时间≤1秒"),有些属性很难量化描述,就不纳入。比如运行期的"可操作性"(好不好用太主观)、"鲁棒性"(异常情况太多,难统一量化),面向架构评估的"功能性"(侧重是否实现,无需场景量化)、"可变性"(变化场景太灵活,难统一模板),所以只保留6个易量化、案例题常考的属性(可用性、可修改性等)。
相关推荐
arvin_xiaoting4 小时前
OpenClaw学习总结_I_核心架构_9:Multi-Agent详解
网络·学习·架构·系统架构·ai agent·multi-agent·openclaw
AI精钢5 小时前
AI时代,如何对单体应用进行微服务化重构?
微服务·系统架构
~央千澈~7 小时前
B/S端(浏览器/服务器架构)和C/S端(客户端/服务器架构)得攻防难易度区别?优雅草卓伊凡
系统架构
WHD3067 小时前
企业数据安全体系建设指南:从风险识别到技术落地的全流程(2026版)
大数据·网络·人工智能·安全·系统架构·密码学·安全架构
成都渲染101云渲染66661 天前
Houdini+Blender高效渲染方案(高配算力+全渲染器兼容)
前端·系统架构
arvin_xiaoting1 天前
OpenClaw学习总结_I_核心架构_6:Compaction详解
学习·系统架构·学习总结·ai agent·compaction·openclaw
arvin_xiaoting1 天前
OpenClaw学习总结_I_核心架构_5:Memory系统详解
学习·系统架构·学习总结·ai agent·openclaw·memory系统
慧一居士2 天前
springboot 项目集成 seate 分布式事务TCC使用nacos完整配置步骤及说明
系统架构
不想看见4042 天前
Qt 项目中实现良好封装(模块化设计)的详细流程指南
数据库·系统架构