通过设定衡量代码质量的八个度量项来对软件的质量进行量化打分,其设定度量项的标准参考了定义软件质量的ISO25010标准。这篇文章结合#鸿渐科技#团队多年的实践,将给大家介绍一下如何通过ISO25010标准来制定以下的质量指标。
30年多年前,软件工程师Barry Boehm已经发现,如果在软件发布后发现缺陷,修复缺陷的成本会成倍增加。因此,如果能够在软件发布前有一种方法来衡量软件的代码质量,它将潜在地节约大量的成本。一个定义软件代码质量的ISO25010应运而生,这个标准定义了八个主要质量指标和许多子指标。八个主要质量指标为:
- 功能适用性 (Functional suitability):软件所实现的功能达到其设计规范和满足用户需求的程度,强调正确性、完备性、适合性等。
- 可靠性 (Reliability):在规定的时间和条件下,软件所能维持其正常的功能操作、性能水平的程度/概率,如成熟性越高,可靠性就越高;用MTTF (mean time to failure,平均失效前时间) 或MTBF(mean time Between failures,平均故障间隔时间)来衡量可靠性。
- 效率 (Performance efficiency):在指定条件下,软件对操作所表现出的时间特性(如响应速度)以及实现某种功能有效利用计算机资源(包括内存大小、CPU占用时间等)的程度,局部资源占用高通常是性能瓶颈存在;系统可承受的并发用户数、连接数量等,需要考虑系统的可伸缩性。
- 可操作性 (Operability):对于一个软件,用户学习、操作、准备输入和理解输出所作努力的程度,如安装简单方便、容易使用、界面友好,并能适用于不同特点的用户,包括对残疾人、有缺陷的人能提供产品使用的有效途径或手段(即可达性)。
- 安全性 (Security):要求其数据传输和存储等方面能确保其安全,包括对用户身份的认证、对数据进行加密和完整性校验,所有关键性的操作都有记录(log),能够审查不同用户角色所做的操作。它涉及保密性、完整性、抗抵赖性、可核查性、真实性。
- 兼容性 (Compatibility):涉及共存和互操作性,共存要求软件能给与系统平台、子系统、第三方软件等兼容,同时针对国际化和本地化进行了合适的处理。
- 可维护性 (Maintainability):当一个软件投入运行应用后,需求发生变化、环境改变或软件发生错误时,进行相应修改所做努力的程度。它涉及模块化、复用性、易分析性、易修改性、易测试性等。
- 可移植性 (Transferability):软件从一个计算机系统或环境移植到另一个系统或环境的容易程度,或者是一个系统和外部条件共同工作的容易程度。它涉及适应性、易安装性、易替换性。
ISO25010标准有助于在软件初期阶段评估质量。然而,它有两个主要缺点:
- 标准没有规定如何测量质量属性。一些质量属性甚至似乎不适合客观测量。以“可操作性”为例, 其子属性如“界面友好”和“易用性”。如何测量这个,测量单位是什么?
- 大多数定义的质量属性在不同的环境中具有不同的含义。因此,即使可以测量质量属性,也很难找到判断是好或坏的明确客观标准。“效率”就是这种情况的一个很好的例子。一些软件系统在1秒内做出响应就足够了,而另一些软件系统则要求在1毫秒内做出响应。
为了对软件质量进行系统的评估,经过多年的行业经验积累,制定出可以进行量化处理的八个度量项,它们分别是:
- 代码覆盖率
- 抽象解释
- 圈复杂度
- 编译器警告
- 编码标准
- 重复代码
- 扇出
- 安全
这八个度量项基于ISO25010制定,其量化数值和软件质量属性有一定的映射关系,具体如下。
1. 代码覆盖率