7.9 软件质量保证模型
软件质量不是一句“好用”就能概括。质量模型把“好软件”拆成若干可讨论、可评价的属性。本节主要围绕 ISO/IEC 9126 质量模型:考试通常不深入展开过程,只要求能把质量属性和子属性配对。
质量保证、质量控制与质量模型
| 概念 | 关注点 | 典型活动 |
|---|---|---|
| 软件质量 | 软件满足明确和隐含需求的能力 | 功能正确、可靠、易用、高效、可维护、可移植 |
| 质量保证 SQA | 过程是否能持续产出合格产品 | 计划、标准、评审、审计、过程改进 |
| 质量控制 QC | 具体产品是否存在缺陷 | 检查、测试、缺陷跟踪 |
| 质量模型 | 如何拆解和评价质量 | ISO/IEC 9126 六大质量属性 |
质量保证偏“预防”和“过程”,质量控制偏“检查”和“发现问题”。质量模型则提供评价维度,让“质量好不好”不再只靠感觉。
ISO/IEC 9126 六大质量属性
| 质量属性 | 关注问题 | 常见子属性 |
|---|---|---|
| 功能性 | 功能是否满足需求,是否安全、准确、可互操作 | 适合性、准确性、互操作性、安全保密性、依从性 |
| 可靠性 | 软件能否持续正常运行,出错后能否恢复 | 成熟性、容错性、可恢复性、依从性 |
| 易用性 | 用户是否容易理解、学习和操作 | 易理解性、易学性、易操作性、吸引性、依从性 |
| 效率 | 时间和资源使用是否合理 | 时间特性、资源利用性、依从性 |
| 可维护性 | 开发/维护人员是否容易分析、修改、测试 | 易分析性、易改变性、稳定性、易测试性、依从性 |
| 可移植性 | 软件能否适应不同环境 | 适应性、易安装性、共存性、易替换性、依从性 |
字幕里把“易用性”从用户角度讲成“好不好用”:是否容易理解、容易学会、容易操作。要注意它和“可维护性”的易分析性不同:易用性面向用户,可维护性面向开发和维护人员。
功能性
功能性关注软件是否实现了需求中要求的能力。它不是“功能数量越多越好”,而是功能是否适合、准确、安全,并能与其他系统协作。
| 子属性 | 含义 | 例子 |
|---|---|---|
| 适合性 | 功能是否适合用户任务 | 报名系统提供缴费、准考证下载等必要功能 |
| 准确性 | 输出结果是否正确 | 订单金额、税费、库存计算正确 |
| 互操作性 | 能否与其他系统交互 | 支持第三方支付、统一认证接口 |
| 安全保密性 | 防止未授权访问和信息泄露 | 权限控制、加密、审计日志 |
| 依从性 | 符合相关标准、法规或约定 | 符合行业接口规范 |
考试看到“安全保密性、互操作性、准确性”,优先想到功能性。
可靠性
可靠性关注系统在规定条件下、规定时间内维持规定功能的能力。课程里用“不容易坏、出错能容纳、出错后能恢复”来解释。
| 子属性 | 含义 |
|---|---|
| 成熟性 | 缺陷少,运行中故障频率低 |
| 容错性 | 出现错误时仍能保持一定服务能力 |
| 可恢复性 | 故障后能恢复数据和服务 |
| 依从性 | 符合可靠性相关标准 |
可靠性和可用性在日常表达中常混用,但软考质量模型里通常按“成熟性、容错性、可恢复性”来识别可靠性。
易用性
易用性站在用户角度。一个系统功能很强,但用户看不懂、学不会、操作困难,也不能算质量好。
| 子属性 | 用户视角的问题 |
|---|---|
| 易理解性 | 用户能否理解系统概念、界面和信息 |
| 易学性 | 用户能否较快学会使用 |
| 易操作性 | 操作步骤是否自然、可控、少出错 |
| 吸引性 | 界面和交互是否让用户愿意使用 |
| 依从性 | 是否符合易用性相关规范 |
“易理解性”属于易用性;“易分析性”属于可维护性。考试很容易用这两个词做干扰。
效率
效率关注资源利用。课程里把它和数据结构算法里的时间、空间联系起来,非常好记。
| 子属性 | 含义 | 例子 |
|---|---|---|
| 时间特性 | 响应时间、处理时间、吞吐量 | 页面 1 秒内响应 |
| 资源利用性 | CPU、内存、存储、网络等资源占用 | 同样并发下内存占用更低 |
| 依从性 | 符合效率相关标准 | 满足性能规范 |
性能优化、算法优化、资源占用降低,通常都和效率相关。
可维护性
可维护性面向开发和维护人员。它关心系统是否容易被分析、修改、测试,以及修改后是否稳定。
| 子属性 | 含义 |
|---|---|
| 易分析性 | 出问题时容易定位原因 |
| 易改变性 | 容易修改和扩展 |
| 稳定性 | 修改后不容易引发意外副作用 |
| 易测试性 | 修改后容易验证正确性 |
| 依从性 | 符合维护相关标准 |
这里的“稳定性”不是简单的运行可靠性,而是指软件在被修改时不容易产生不可预期影响。
可移植性
可移植性关注环境变化。课程用 Java 虚拟机举例:只要目标系统有虚拟机,Java 程序就更容易在不同操作系统上运行。这体现了适应不同环境的能力。
| 子属性 | 含义 | 例子 |
|---|---|---|
| 适应性 | 适应不同硬件、操作系统、平台 | Android/iOS/桌面多平台适配 |
| 易安装性 | 容易安装和部署 | 一键安装、容器镜像部署 |
| 共存性 | 能与同环境其他软件共存 | 不抢占端口、不破坏共享库 |
| 易替换性 | 能替代旧系统或被新系统替代 | API 兼容、数据迁移方便 |
| 依从性 | 符合移植相关标准 | 遵循平台规范 |
可移植性不仅是“能跑在不同系统上”,还包括安装、替换和共存是否方便。
属性配对速查
| 子属性关键词 | 所属属性 |
|---|---|
| 适合性、准确性、互操作性、安全保密性 | 功能性 |
| 成熟性、容错性、可恢复性 | 可靠性 |
| 易理解性、易学性、易操作性、吸引性 | 易用性 |
| 时间特性、资源利用性 | 效率 |
| 易分析性、易改变性、稳定性、易测试性 | 可维护性 |
| 适应性、易安装性、共存性、易替换性 | 可移植性 |
例题
本节小结
本节最重要的是属性和子属性配对。功能性看需求功能和安全互操作,可靠性看成熟、容错、恢复,易用性看用户理解学习操作,效率看时间和资源,可维护性看分析修改测试,可移植性看适应安装共存替换。