嵌入式软件自动化测试
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2.2 软件缺陷

软件缺陷(defect)是指软件产品中出现的瑕疵或缺点,导致软件产品无法满足用户需求或者规格说明,需要修复或者替换。代码中的缺陷俗称Bug,也可以是文档缺陷、配置参数的缺陷等。

在软件工程领域,还存在着与缺陷相关的几个术语,如错误(error)、故障(fault)、失效(failure)以及事故(accident)等,虽然在大多数场合可以忽略它们之间的差异,但对这些术语和概念的微小差异的辨析,有助于读者更好地理解软件测试,在阅读有关文献和标准时,能够更加准确地理解和把握作者想要表达的意思。下面对这几个术语进行辨析。

1)错误:产生不正确结果的人为动作(IEEE Std 1044—2009)。例如,我们计算c=a/b时,正确的代码先需要判断b是否为0,但由于程序员的疏忽,在编码过程中没有对b进行“是否为0”的判断,这种行为就是一种错误行为。

2)缺陷:工作产品中出现的瑕疵或缺点,导致软件产品无法满足用户需求或者规格说明,需要修复或者替换(IEEE Std 1044—2009)。缺陷是人的错误行为导致的后果。它发生在产品或服务不符合指定或预期的使用要求(ISO9000—2015)时。例如:在上述例子中,如果设计中没有考虑“b是否为0”的情况,那么这是一种设计缺陷;如果设计中考虑了“b是否为0”的情况,而在编程实现时疏忽了,那么这就是一种编程缺陷。

3)故障:软件运行时,缺陷被激活导致的不正确现象或者错误显示(IEEE Std 1044—2009)。存在于软件产品中的缺陷可能永远不会被激活表现为故障现象,只有当条件被满足时,故障才会发生,但软件缺陷依然存在于软件产品中,是一个隐患。例如,在上述例子中,只有当除数b为0的条件被满足时,才会发生“除0”故障。

4)失效:产品运行时所需功能的终止或在规格说明中应当可以执行的功能却未能执行;产品在规格说明范围内却未能执行相应功能的事件(IEEE Std 1044—2009)。产品预期功能不执行或不正确执行(NASA-STD-8719.13A)。失效是缺陷被激活导致程序发生故障后引发的某种功能失效或者性能不达标。例如,在c=a/b这个例子中,b为0时因为未进行除数为0的判断,缺陷被激活,进而导致某个函数利用c=a/b时报错,这样软件在规格说明范围中未能执行相应功能,此时软件的计算功能失效。

5)事故:意外事件或一系列事件导致的死亡、伤害、职业病、设备损坏、财产损失、环境的破坏损失(NASA-STD-8719.13A、IEEE Std 1228—1994)。例如,由于c=a/b中没有进行除数为0的判断导致电力管理软件的崩溃,进而引发电力设备故障,造成巨额经济损失,这就是一起事故。

如果测试人员在测试阶段无法发现软件的缺陷,那么错误就无从更正,缺陷存在于软件的最终版本中并被交付用户使用,如果这些缺陷被激活,则会引发故障,从而发生软件的失效,并可能给用户带来事故。

通过以上分析,软件缺陷相关术语的关系可以简单归纳为图1-1所表示的内容:人为的错误产生缺陷,缺陷被激活后引发故障,故障导致失效,失效可能导致事故的发生。

图1-1 软件缺陷相关术语的关系