前言
本章主要从构建的角度来审视保障软件质量的技术。
20.1 软件质量的特性
软件同时拥有外在跟内在的软件质量特性。
外在特性指的是该产品的用户感受到的部分。
- 可用性:各个功能是否简单易用。
- 效率:各个功能的执行速度是不是在可接受范围。
- 可靠性:在使用过程中,是否能保证一定时间内无故障,或者发生故障后,有补救措施。
- 健壮性:在一定压力下,软件还能正常运行。
质量的外在特性是用户关心的唯一特性。用户关心的永远只是软件是否好用,bug是否少,效率是不是够高。而对于编写程序的人员来说,需要考虑的不只是这些,还要考虑代码的结构是否合理,需求是否可行,是否容易修改。
- 可维护性:软件是否容易修改,新增,修改功能是否容易。出错时,日志是否清晰。
- 可移植性:当现场环境发生变化时,是否容易迁移
- 可复用性:某些功能或代码是否能应用到其它地方
- 可读性:代码是否简洁,逻辑是否清晰
软件的内外在特性之间并非是完全冲突的。写出简单易懂的功能对于简化代码逻辑来看,也是相辅相成的。
如果用户仅从功能名称跟界面上就能直观的了解你的功能是干什么的,要怎么用,那你的功能对应的代码逻辑也会很清晰。
20.2 改善软件质量的技术
软件质量保证是一个需要预先计划的,系统的活动,其目标是为了确保系统具备人们所期望的特性。
1、软件质量目标
明确的定义出软件应该具备的外在特性跟内在特性,对应软件开发来说是有必要的,开发人员如果不知道最终要达到的质量目标,很有可能就会演化成一个能跑就行的程序。
2、明确定义质量保证工作
在常见的软件开发过程中,质量常常被当过次要的目标,快速而糟糕的编程已经成了普遍现象。
3、非正式复查跟正式复查
许多开发人员都会自行检查自己的代码是否能满足基本需求,但正式的复查是必要的,正式的复查可能是一次同事间的互查,一次客户复查,或者是一次独立审查。
4、外部审查
通常是由开发人员以外的人员构成,并向软件使用人员汇报结果。
需要注意的是:设置明确的软件质量目标是开发高质量软件的一个简单而有效的步骤。但它常常被忽视。
20.3 不同质量保障工作的相对效能
从上图来看,单独使用任何一种方法,检出代码问题的检出率都不会很高,要提高检出率,势必要用多重方法。
某些检出代码缺陷的方法,远远要比其它方法消耗的成本更高,例如,代码检查远远比测试需要消耗的时间更多。
一个有效的软件质量项目的底线,必须包括在开发的所有阶段联合使用多种质量保证技术
- 对所有的需求,架构以及系统关键部分的设计进行正式检查
- 建模或者创建原型
- 代码阅读或检查
- 执行测试
20.4 什么时候进行质量保证工作
需求中的一个缺陷会孕育出设计上的一个或者多个缺陷,而这些设计上的缺陷又会繁殖出更多代码缺陷。
需求中的一个错误会导致多余的架构设计或错误的架构决策,多余的架构设计又导致多余的代码,测试和文档。一个错误的需求可能最终会产生一些不得不抛弃的架构,代码。
这如同是在浇筑地基之前,先将问题在图纸上解决。
相对于代码编写时的缺陷,需求或架构上的缺陷带来的问题往往产生更久远的影响。
缺陷可能会在任何阶段渗透进软件,因此,我们必须早期就做好软件质量保证工作。
20.5 软件质量的普遍原理
软件质量的普遍原理就是改善质量以降低开发成本。
绝大多数的项目的最大规模的一种活动就是调试以及修正那些无法正常工作的代码。
与传统的“编码—测试—调试”相比,先进的软件质量计划可能更省钱。这种计划把投入到调试和重构的资源重新分配到前期的质量保证工作中,而前期工作在产品质量上体现的作用会比后期工作更为明显,因此把时问投入到前期工作中,能让程序员在后期工作中节省更多的时间。这一方法的最终效果是软件的缺陷更少,开发时问更短,成木也更低。