什么是软件质量?
信息源:
- https://en.wikipedia.org/wiki/Software_quality
- http://iso25000.com/index.php/en/iso-25000-standards/iso-25010
- https://www.iso.org/standard/35733.html
- http://it-cisq.org/standards/
- http://it-cisq.org/
- http://www.sacinfo.cn/
- http://www.sacinfo.cn/s/std_stdInfo?sid=A00008:20:035733#
- ...
狭义上来说, 软件产品的质量就是满足需求的程度,这里的需求包含功能需求与非功能需求。
但是这样定义只能是软件产品开发公司内部的认知,很多时候产品好不好由最终用户说了算,所以广义上还需要再加一条: 用户体验良好程度。
用户体验带有强烈的主观性,需要大量的反馈数据才能准确评估。
为什么要进行软件质量管理?
代码是人写的,人无完人,人易犯错,而软件开发又是高度复杂的过程,软件存在质量问题是必然的。
但是我们又不希望交互到客户或用户手中的软件漏洞百出,体验极差。
唯一能平衡这两者之间关系的就是合适的软件质量管理。
虽然一个软件的质量达到100%几乎不可能,但是我们的质量管理要冲着100%来,才能保证最终的质量足够好。
所谓足够好,带有一定的主观色彩,特别是用户体验部分,这是合理的。至于最终的足够好到底是多好,则是由质量管控人员设定的。
对于足够好的描述,纬度必须足够充分,数据足够量化,这是下面软件质量评估要讲的内容。
如何评估软件产品的质量?
要进行软件质量评估,必须具备如下前提:
对于第一点,需要对软件质量进行合理的纬度划分,以及每个维度的合理量化,称为软件质量模型。
对于第二点,则需要合适评估工具与评估流程。
软件质量模型(software quality model)
软件质量与评估如此重要,自然有机构已经对此做过深入研究,相应的软件质量模型也达到一定标准。
比较著名的是ISO/IEC的SQuaRE, 和CISQ。
SQuaRE定义了较为面面俱到的软件质量标准,CISQ则侧重于软件质量的评估,后者基于SQuaRE,但是只选取了其中主要的4种质量特性再加上自己定义的size特性。
对于完整的SQuaRE和CISQ质量模型,如果读者感兴趣,可以从ISO官网查看或下载。本文将依据SQuaRE和CISQ,结合自身经验,进行裁剪和定制,最终形成的质量特性入下:
- 功能适宜性(functional suitability)
- 功能完整性(functional completeness)
- 功能正确性(functional correctness)
- 功能方便性(functional appropriateness): 用户通过软件完成其目标的方便程度
- 界面舒适性(UI comfort)
- 操作流畅性(smooth): 强调界面过度的平滑程度
- 可靠性(Reliability)
- 可用性(availability): 正常交互/数据下,软件维持正常功能的能力
- 容错性(fault tolerance): 异常交互/数据下,软件维持正常功能的能力
- 可恢复性(recoverability): 在已经出现异常或错误的情况下,软件恢复数据,状态与功能的能力
- 性能(performance efficiency)
- 时间特性(time behaviour): 时间相关的性能
- 资源占用率(resource utilization):rom, ram, cpu, gpu, port等
- 容量(capacity): 软件能力在空间上的边界
- 安全性(security)
- 机密性(confidentiality): 数据或功能只给授权用户访问的能力
- 问责性(accountability): 操作与数据可被追踪的能力
- 可维护性(maintainability)
- 可分析性(analysability): 易于被分析的能力
- 可修复性(fixability): 已知问题易于被修复的程度
- 可更新(updatable): 更新的方便程度
- 可扩展性(extensibility): 不重新发版的情况下,进行能力替换或扩展
- 可配置性(configurability)
以上特性实际上只有两个等级的划分,对于实际操作来说,还处于一种抽象的层面,要进行真正的评估,还需要进一步细化为通用的checklist。
- 功能适宜性: 功能完整性
- 是否覆盖所有主要case
- 需求明确提出的case覆盖比例
- 隐含case覆盖量
- 功能适宜性: 功能正确性
- 功能适宜性: 功能方便性
- 功能适宜性: 界面舒适性
- 页面布局的合理程度
- 页面配色的合理程度
- 页面图形与元素设计的合理程度
- 功能适宜性: 操作流畅性
- 界面变化的动画化程度
- 动画时间的合理程度
- 动画的流畅程度
- 动画的平滑程度
- 可靠性: 可用性
- 可靠性: 容错性
- 异常case时,能够自我保护
- 异常case后,正常case能够正常执行
- 可靠性: 可恢复性
- 出现未捕获异常时功能能够自动恢复正常
- 出现为捕获异常时数据能够自动恢复正常
- 一个case出现偶现错误时,重新进入能够恢复正常
- 一个case出现错误时,不影响其他case
- 性能: 时间特性
- 操作响应时间
- 多计算任务处理时间
- IO任务处理时间
- 操作吞吐率
- 数据吞吐率
- 性能: 资源占用