跳到主要内容

Ch 1. 软件测试的背景

本章讲述软件缺陷的定义、产生原因、修复代价等问题,同时为软件测试员的使命下了定义。

软件缺陷

  • 本书中,所有软件问题统称为软件缺陷(Bug)。
  • 产品说明书(Product Specification):简称产品说明(Spec),是对软件产品的细节、如何做、做什么、不能做什么的描述。

软件缺陷的发生条件

以下五点均为软件缺陷发生的条件,满足其中任何一点都可能导致缺陷产生:

  • 功能不完整:软件没有实现产品说明书中要求的功能。
  • 额外功能:软件实现了产品说明书中没有要求的功能。
    • 这并不是一件好事。因为额外功能可能会导致软件的复杂性增加,从而增加软件的维护成本;更甚,额外功能还可能引入新的缺陷
  • 非预期错误:软件出现了产品说明书中没有描述或指明不该出现的错误。
  • 隐式前置条件未实现:软件没有实现产品说明书中虽未提到但应该实现的功能。
  • 最终用户体验差:软件难以理解不易使用运行缓慢或其他不符合用户期望的情况。
示例

以计算器为例,针对这五条缺陷发生条件,可以举出相应的例子:

  • 功能不完整:计算器声称能够进行准确的四则运算,但按下 + 按钮后,计算器没有显示出结果。
  • 额外功能:说明书上没有提到计算器还能够进行开方运算,但实际上计算器却能够进行开方运算。
  • 非预期错误:当你狂敲计算器的数字键盘时,计算器突然崩溃。
  • 隐式前置条件未实现:尽管说明书上没有写出,但众所周知的是,计算器需要电池才能正常工作。开发人员没有考虑到在电量低下时计算器的运行情况,如计算错误等。说明书应该至少提到这一点。
  • 最终用户体验差:计算器的按钮排列混乱,用户难以找到相应的按钮。

产生缺陷的主要原因

  • 需求不明确:需求不明确或说明书不全面是导致软件缺陷的罪魁祸首。缺乏沟通或频繁变更需求都会导致软件缺陷。
  • 设计不合理:和需求不明确一样,沟通不足与随意变更设计都会导致软件缺陷。
  • 编码错误:编码错误通常源于文档不足或开发人员的技术能力不足等,但实际上这一类缺陷是最容易被发现和修复的。
    • 要注意,那些看起来正确的代码之所以存在缺陷,很可能不是编码的问题,而是产品说明书或设计方案一开始就存在问题。

软件缺陷的修复代价

由于软件开发的每个阶段都会引入新的缺陷,软件缺陷修复所需的费用随时间呈指数级增长。

  • 越早发现缺陷,修复所需的成本就越低。
  • 越晚发现缺陷,为修复所带来的潜在变更就越多,修复的成本也就越高。

软件测试员究竟做些什么

  • 软件测试员的目标是尽早发现软件缺陷,并确保其得以修复

小测验

问题摘录与参考回答

判断是非:公司或开发小组用来称呼软件问题的术语很重要。

答:

不,一点也不。无论它是叫做“缺陷”、“问题”、“错误”还是“bug”,它们都是问题。解决问题的方法才是应该考虑的。

仅仅测试程序是否按预期方式运行有何问题?

答:

这并不是全部。测试员还应该测试程序是否不按预期方式运行以及相应的原因,否则就会漏掉缺陷。

判断是非:好的测试员坚持不懈地追求完美。

答:

错,好的程序员知道何时完美无法企及,何时已经“够好”。

尽管追求完美、确保软件质量是测试员的目标,但在实际工作中,测试员应该权衡时间、资源、风险等因素,以最大化软件质量。

另外,方方面面的完美是不可能的;也许相较于彻底改正软件,在文档或用户手册中加入必要的说明、与市场部门协调宣传中的内容、推迟缺陷功能的发布等方法更为有效。