测试的原则
完全测试是不可能的
- 输入量太大
- 输出结果太多
- 软件执行路径太多
- 软件说明书是主观的
软件测试是有风险的行为
- 如果决定不去测试所有的情况,那就选择了冒险
- 软件测试员要学会的一个思想是,如何把数据巨大的可能测试减少到可以控制的范围,以及如何针对风险做出明智的抉择,哪些测试重要,哪些不重要
测试无法显示潜在的软件缺陷
- 软件测试工作与防疫员的工作极为相似,可以报告软件缺陷存在,却不能报告缺陷不存在。你可以进行测试,发现并报告软件缺陷,但是任何情况下都不能保证软件缺陷没有了。唯一的方法就是继续测试,可能还会找到一些。
找到的软件缺陷越多,说明软件缺陷越多
- 程序员也有心情不好的时候
- 程序员往往犯同样的错误
- 某些软件缺陷实乃冰山一角
注意:“软件缺陷一个接一个”的说法倒过来讲也对。如果无论如何努力都找不出软件缺陷,那么可能是软件经过精心编制,确实存在极少软件缺陷。
杀虫剂怪事
- 反复使用相同的测试软件最后会使软件具有抵抗力
- 为了克服杀虫剂怪事,软件测试员必须不断编写不同的,新的测试程序,对程序 的不同部分进行测试,以找出更多软件缺陷。
并非所有的缺陷都要修复
- 没有足够的时间
- 不算真正的软件缺陷
- 修复的风险太大
- 不值得修复
决策过程通常由软件测试员、项目经理和程序员共同参与。他们站在各自的立场看待缺陷,对软件缺陷是否应该或不应该修复都有自己的观点和看法。
作出错误决策的后果
英特尔公司的测试工程师虽然在芯片发布之前发现了缺陷,但是产品开发小组认为这是一个不常见的小缺陷,不值得修复。结果软件缺陷被用户发现,成了历史事件。
在任何一个软件中,对于每一个成为新闻头条的“奔腾处理器”一类的缺陷,可能会有数以百计的缺陷没有修复,因为这些缺陷被认为没有大的副作用。只有时间才能说明这样的决策是对的,还是错的。
什么时候才叫缺陷难以说清
遵守软件缺陷定义的规则
只有至少满足下列5个规则之一才称发生了一个软件缺陷(software bug):
- 软件未实现产品说明书要求的功能。
- 软件出现了产品说明书指明不应该出现的错误。
- 软件实现了产品说明书未提到的功能。
- 软件未实现产品说明书虽未明确提及但应该实现的功能。
- 软件难以理解、不易使用、运行缓慢或者——从测试员的角度看——最终用户会认为不好。
注意 尚未发现或未观察到的软件缺陷只能说是潜在缺陷
产品说明书没有最终版本
软件测试员在产品小组中不受欢迎
保持和睦的建议
软件测试是一项讲究条理的技术专业
- 软件测试成为一个职业选择——需要训练和规范,而且有发展空间。
软件测试的术语和定义
精确和准确
- 软件测试要精度还是准度很大程度上取决于产品是什么,最终取决于开发小组的目标。计算器软件要求两者都达到,模拟游戏的目的是使游戏者置身于与现实情形接近的虚构环境中。最重要的是如何准确的模拟实际情形。有了准确性,才能谈到精确。
确认和验证
- 确认是保证软件符合产品说明书的过程
- 验证是保证软件满足用户要求的过程
哈勃天文望远镜的例子可以澄清两都的区别。
1990年4月,哈勃天文望远镜被发射到地球轨道。建造哈勃望远镜是一项精度和准度要求极其严格的艰巨任务,但是镜子的测试极其困难,因为望远镜设计用于太空,在地球上无法固定甚至全面观察。因此唯一的测试方法就是仔细度量其全部属性,并将度量结果与规定数值比较。进行上述测试之后,哈勃天文望远镜被宣称可以发射了。
不幸的是,哈勃太空望远镜投入运行不久发现,它传回来的图像没有正确聚集。调查发现镜子制造出现了问题。镜子虽然根据产品说明书进行了表面处理,但是产品说明书是错的,结果虽然镜子精度极高,但是准确度不够。测试虽然符合了产品说明——确认——但是不能保证满足最初的需求——验证
质量和可靠性
- 韦氏词典把质量定义为“优秀程度”或者“同类优越性”。如果产品质量高,就是指它能够满足客户要求。客户感到该产品性能卓越,优于其他产品。
- 可靠性仅仅是质量的一个方面
- 软件使用都心目中的质量可能包括软件功能的多少,在自己的旧PC上运行的能力,软件公司的服务电话好不好打,以及软件的价格。产品的可靠性或者产品多长时间崩溃的问题也许重要,但常常不被考虑到。
- 为了确保程度质量高且可靠性强,软件测试员必须在整个产品开发过程中进行确认和验证。
测试和质量保证
- 软件测试员的目标是尽可能早的找出软件缺陷,并确保缺陷得以修复
- 软件质量保证人员的主要职责是创建和执行改进软件开发过程并防止软件缺陷发生的标准和方法