#第一讲:软件测试的原则
##3.1 测试的原则
###3.1.1 完全测试程序是不可能的
找出所有的软件缺陷,确保软件完美无缺是不可能的。原因是:
- 输入量太大
- 输出结果太多
- 软件执行路径太多
- 软件说明书是主观的,可以说从旁观者的角度来看是缺陷
以windows计算器为例说明完全测试的不可能性
3.1.2软件测试是有风险的行为
- 如果选择了不测试所有的情况(一般来说是肯定的),也就是选择了冒险。因为总可能有些缺陷隐藏在哪怕是最平凡的或者最不可能的地方。
- 软件测试员不可能做全部测试,只能做不完全测试,而不完全测试就可能漏过缺陷。
- 测试一旦停止,缺陷就无法修复了,产品迟早要发布的,有缺陷的产品进入市场就蕴含着冒险。
- 测试停止得越早,没有测试的部分就越多,而含有缺陷的可能性就越大。
- 反之,测试做得越多,成本就越高,产品发布的日期就可能越晚。
- 软件测试员必须学会的一个基本思想(技巧)是:如何将数量巨大的可能测试减少范围,以及如何针对风险作出明智的抉择:哪些测试重要(必须做),哪些测试不重要(可有可无)
3-2图说明测试量和发现的软件缺陷数量之间的关系:
** 1. 如果试图测试所有的情况,则费用会大幅度增加,而且缺陷漏掉的数量在达到某一点之后没有显著变化;**
** 2. 如果减少测试或者错误地确定测试对象,虽然费用很低,但是会漏掉大量的软件缺陷;**
3. 理想的目标是找到最优的测试量,使测试不多也不少
3.1.3 测试无法显示潜在的软件缺陷
- 软件测试员必须牢记:软件测试工作只能报告软件缺陷的存在,不能报告软件缺陷不存在
- 测试员唯一能做的工作是做测试,发现并报告软件缺陷,但是在任何情况下都不能保证软件缺陷不存在了
- 继续测试,可能还会找到一些缺陷。但是测试不可能永远进行下去,总有结束的时候。
###3.1.4 找到软件缺陷越多,说明软件缺陷越多
软件缺陷往往可能会成群出现
通常软件测试员可能在很长时间内找不到软件缺陷,但是找到一个之后,很快就会接二连三找到更多。 - 程序员也有心情不好的时候,通常在状态不好时,代码中会出现更多缺陷,因此,一个缺陷往往意味着附件还有更多的软件缺陷;
- 程序员往往犯同样错误;
- 某些软件缺陷实际上是冰山一角:软件的设计或者体系可能出现基本问题,可能很多缺陷是来自同一个严重的原因。
3.1.5 杀虫剂怪事
- 1990年,Boris Beizer在<>
提出,描述软件测试越多,软件缺陷对于测试的免疫能力也越强的现象 - 特别是在螺旋模式中,每一圈都要重复测试过程,每一次循环,测试员都要接到软件进行测试,最后,经过几个回合,能发现的软件缺陷都已经发现了,再测试下去,也不会有新的发现
- 为了克服杀虫剂怪事,软件测试员必须不断编写不同的、新的测试软件的不同部分进行测试,才能找出更多的软件缺陷
###3.1.6 并非所有的软件都需要修复 - 虽然测试员尽了最大努力,找出了软件缺陷,但是并不是被找出来的软件缺陷都要修复的
- 不需要修复软件缺陷的原因: 1.没有足够的时间; 2.不算真正地软件缺陷;3.修复的风险太大; 4.不值得修复
- **决策过程通常由软件测试员、程序员和项目经理共同参与,**他们站在各自的立场看待软件缺陷,对软件缺陷是否应该(或者不应该)修复都有自己的观点和看法
###3.1.7 什么时候才叫做缺陷难以说清 - 如果软件中存在问题,但是没有人发现——程序员没有发现,测试员没有发现,甚至客户也没有发现,那它还算不算软件缺陷?
- 这个问题没有标准的答案,答案因各个开发小组决定的最适合自己的而千差万别
- 回顾软件缺陷的5条定义规则,有助于澄清这个问题
- 注意:尚未发现或者未观察到的缺陷只能说是潜在缺陷
###3.1.8 产品说明书从来没有最终版本 - 现实中,产品说明书可能是经常变化的
- 软件测试员必须想到软件说明书可能改变,未曾计划测试的功能可能增加,经过测试的报告软件缺陷的功能可能发生变化甚至被删除。
3.1.9软件测试员在产品小组中不受欢迎
- 软件测试的目标是尽可能早地找出软件缺陷,确保其得以修复。
- 因此,软件测试员的工作是检查和批评同事的工作,挑毛病、公布发现的问题。这注定是不会受到普遍欢迎的
- 保持小组成员和睦的建议:1.早点找出缺陷;2.控制情绪;3.不要总是报告怀消息
#第一讲:软件测试的术语和定义