一、为什么要进行测试?(第1章)
1、人类的思维不完美
我们的思维是不完美,无论我们多想尽力的完成一项工作,都会可能会在某一点上出错。我们要让自己做出的决定比不进行测试的时候要更好。
2、通过测试决定软件产品是否能卖出去
作为软件生产者,我们要通过测试来了解软件产品是否能够卖出去。要从客户的角度去进行测试。
3、决定可能有风险
风险的评估存在主观性:1.风险是针对未来进行评估的,未来可能会发生任何事情;2.不同人对同一种风险的感受是不同的。
通过测试获取的信息能够降低决策带来的风险。
4、测试可以提供降低风险的信息
因为不同的人,不同的项目,不同的时间都意味着对风险的不同理解。需要设计对应的测试来回答不同的问题。
1)软件是否能够做我们希望它做的工作?
2)如果软件不能做我们希望它做的工作,需要多扫工作才能解决这个问题?
3)软件是否做了我们不希望它做的事?
4)软件是否能够达到我们的预期(有没有实现其目的)?
5)软件能够做用户希望它做的事吗(用户满意吗)?
6)软件是否满足了其他的商业要求?(计划外的维护和技术支持)
7)失败的可能性和后果严重性如何?
通过设计测试用例和执行测试计划,可以提供以上问题答案的信息。
5、相关常识
1)试图进行完美的测试,会让你完蛋
2)测试人员的职责是为决定提供信息(但不是所有信息),做决定是经理要做的。
3)在做决定时应考虑所有相关信息,需要考虑开发人员、测试人员和用户等人的意见。
4)因害怕未按计划交付产品,就交付满是错误的产品,可能导致公司巨大损失。
5)测试只是收集有关产品的信息,测试本身不会修复发现的错误。测试不会改进产品,改进是由那些修复测试发现缺陷的人实现的。
6)不存在一个“测试阶段”只进行测试,测试应该是贯穿于整个项目。
二、什么时候可以不进行测试?(第2章)
如果存在任何原因导致不需要使用测试结果提供的信息,就没有必要进行测试。测试得到的信息不可靠,也没有必要测试。
1、测试后风险增加
软件行业的经理经常需要做出带风险的决定,通常在获得部分信息的情况下做出决定是比较保险的。但有些时候经测试获得信息可能会增加决定的风险。
1)对项目进行太多测试,可能推迟发布产品而不能及早进入市场;
2)测试提供的信息,开发人员因测试提供的信息,进行的程序修复可能会破坏程序其他部分的运行;
3)测试发现问题,但是并未引起重视进行修复,可能会导致后续的问题。
2、对测试反馈的信息无动于衷
需要解释并使用测试产生的信息。
1)测试人员提交测试报告后,应对报告进行仔细审核,找到有用的信息;
2)测试人员不清楚怎么测试,应对他们进行培训;
3)测试人员不能很好理解软件,应对他们进行培训;
3、因感性而非理性所做的决定
人们存在一种感情倾向,不希望发现自己犯了错误。所以人们会做出与理性使用信息没有关系的决定。
4、不良的测试
考虑不周的测试或者执行过程不佳的测试都属于“不良测试”。这样的测试会让人认为产品的质量高于实际质量,导致提前交付。或者产品质量低于实际质量,导致推迟交付,损失效益。这都是不可取的。
5、产品没有准备好接受测试
有以下几种情况,说明产品尚未准备好接受测试,那么就没有必要进行测试,情况如下:
1)测试是否有助于解决产品存在的至少一个问题?
2)是否希望知道该问题的答案?
3)是否只是漫不经心地对待测试结果?需要对测试发现的问题追根究底。
4)是否预先和测试人员就通过测试的标准达成一致?
5)如果不能,怎样才算通过测试?
6)是否认为测试的结果会替你做出决定?不可能从纯技术的角度做出商业决定。可以使用测试得到的信息来支持商业决策。
7)测试结果能否是你改变决定?
6、相关常识
1)既然雇佣测试人员,就要相信他们的测试结果。如果不信任他们,要么是选错了人,要么就需要帮助他们提高可信度。
2)不能让测试人员代替经理做决定,他们只是提供信息。
3)不使用测试提供的信息,就最好不要进行测试。
4)在做出决定时,要冷静并控制好自己的情绪,尽量用理性进行决定。
5)要对测试数据进行评估。数字本身只是数字。要学会问:获得这一数字的过程是什么?这个数字有何含义?
6)测试是一项技术开发支持活动,需要和需求、设计、编程、文档、制造及支持过程协调起来。同时要给开发人员必要时间和资源来修复测试中发现的问题。
7)不要催促测试人员进行测试,测试是非常精细的工作。催促测试人员容易产生危险的有误导性的结果,尤其在测试人员感到害怕、疲劳或变现愤世嫉俗时。
8)测试经理也需要了解测试过程,所以需要任命有测试经验的人担任测试经理。
9)很多看起来非理性的决定在不同的价值取向下是理性的。记住这一原则,可以避免经理、测试人员和开发人员之间的许多冲突。
10)测试产生的信息用途很多,交付产品后进行测试,可以收集对客服和支持人员有用的信息。
三、为什么不进行穷举测试?(第3章)
本章主要介绍不对所有可能性进行测试的原因,对于经理和测试人员,都应该了解测试是一种采样过程,需要了解采样给测试所带来的风险。
1、可进行测试的数目是无限的
如果不能查看代码内部逻辑,可输入的测试用例是无限的。当然还有在不同配置下进行测试,不同制造商、不同驱动程序、不同操作系统、测试执行的顺序、不同的内存等等。这样算来可测试的用例确实是无限多。
2、测试最多只是采样
由于我们无法测试所有可能性,任何实际的测试集(测试用例)都是某种程度的样本——代表整个可能测试集合的一个部分或片段。所以测试就是用样本集对程序进行采样。
采样也是一个心理过程,也是一个感性过程。令某人满意的样本也许会让另一个人觉得不满意。
我们如何决定采那些样?如何知道是否获取足够大的样本来充分代表所有情况?如何知道获得了合适的样本?
3、用有限资源和时间进行良好的测试
1)希望测试能够覆盖所有令人感兴趣的条件;
有些缺陷是测试员偶然发现,而不是精心设计的用例发现的。有没有什么心理学方法可以帮助发现更多令人吃惊的缺陷?
2)希望讲测试集减少到可以管理、可以承受的程度。
首先,认识到测试集都是一种采样方法,然后无论你有多少资源,都要尽可能选择那些具有最强代表性的测试集。
4、相关常识
1)要理解测试即是采样过程,不管用哪种方法,都要准备好应对出现采样错误的可能性。
2)获取信息的成本可能超过信息带来的好处。某些测试可能花费大量力气,但是效果并不好。
3)人不能进行穷举测试,测试工具更不能。
3)减少测试资源后,最简单的方法是限制样本的规模。规模减少可能出现采样错误,多样化的样本发现的问题可能会超过大样本发现的问题。所以与扩大测试团队相比,让测试团队成员多样化也可能会发现更多的问题。