软件失效分类与管理

发表于:2009-8-28 17:14

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing博客转载

分享:

  软件测试使用各种术语描述软件出现的问题,通用的术语如下:

  ● 软件错误(software error)

  ● 软件缺陷(software defect)

  ● 软件故障(software fault)

  ● 软件失效(software failure)

  区分这些术语的概念很重要,它关系到测试工程师对软件失效现象与机理的深刻理解,而这些概念尝尝在文献中被混淆。

  由于软件内部逻辑复杂,运行环境动态变化,且不同的软件差异可能很大,因而软件失效机理可能有不同的表现形式。但总的说来,软件失效机理可描述为:软件错误→软件缺陷→软件故障→软件失效。

  ① 软件错误:在可以预见的时期内,软件仍将由人来开发。在整个软件生存期的各个阶段,都贯穿着人的直接或间接的干预。然而,人难免犯错误,这必然给软件留下不良的痕迹。软件错误是指在软件生存期内的不希望或不可接受的人为错误,其结果是导致软件缺陷的产生。可见,软件错误是一种认为过程,相对于软件本身,是一种外部行为。

  ② 软件缺陷:软件缺陷是存在于软件(文档、数据、程序)之中的那些不希望或不可接受的偏差,如少一逗点、多一语句等。其结果是软件运行于某一特定条件时出现软件故障,这时称软件缺陷被激活。

  ③ 软件故障:软件故障是指软件运行过程中出现的一种不希望或不可接受的内部状态。譬如,软件处于执行一个多余循环过程时,我们说软件出现故障。此时若无适当措施(容错)加以及时处理,便产生软件失效。显然,软件故障是一种动态行为。

  ④ 软件失效:软件失效是指软件运行时产生的一种不希望或不可接受的外部行为结果。

  综上所述,软件错误是一种认为错误。一个软件错误必定产生一个或多个软件缺陷。当一个软件缺陷被激活时,便产生一个软件故障;同一个软件缺陷在不同条件下被激活,可能产生不同的软件故障。软件故障如果没有及时的容错措施加以处理,便不可避免地导致软件失效;同一个软件故障在不同条件下可能产生不同的软件失效。

  在软件生存期中存在和产生形形色色的软件错误、缺陷、故障和失效。不同的软件,其错误、缺陷、故障和失效无论在表现形式、性质乃至数量上都可能大不相同,试图对它们作一个全面而详细的阐述是不现实的,所以有必要加以区别对待。关于“错误”的广义定义是:不正确的事务和行为。在1999年 (美)John D. Musa的《软件可靠性工程》书中,关于“软件错误”是这样描述的:“错误是在系统运行时,引起或可能潜在地引起失效的缺陷,是一种面向开发的概念。”例如,当用户单击某个具体的菜单时,本应在屏幕上出现特定的对话框,但是却没有出现。这种行为就是一个失效。造成这种失效的错误可能是遗漏代码。这里给出的定义是“电气与电子工程师协会(IEEE)”和“美国标准协会(ASA)”的标准,是通过引起失效和错误的系统成分,来定义失效和错误的。这些成分一般是硬件、软件和人。

  John D. Musa(1999年)对软件错误的定义是:软件错误是代码中的缺陷,是由错误引起的,是由一个或多个人的不正确或遗漏行为造成的。例如,系统工程师在定义需求时可能会犯错误,从而导致代码错误,而代码错误又导致在一定条件下执行系统时出现失效。“缺陷”是指欠缺或不够完备的地方。软件的欠缺和不完备主要是针对产品说明书而言的。2001年(美)Ron Pttern著的《软件测试》一书对软件缺陷进行了定义。按照一般定义,只要软件出现的问题符合下列5中情况的任何一种,就叫做软件缺陷:①软件未达到产品说明书中标明的功能;②软件出现了产品说明中指明的不会出现的错误;③软件功能超出了产品说明书指明的范围;④软件未达到产品说明书虽未指出但应达到的指标;⑤软件测试人员认为软件难以理解、不易使用、运行速度慢,或最终用户认为不好用。实践表明,大多数软件缺陷产生的原因并非源自编程错误,主要来自于产品说明书的编写和产品方案设计。

  产品说明书称为软件缺陷的罪魁祸首,是因为产品说明书编写的不全面、不完整和不准确,而且经常更改,或者整个开发组织没有很好地沟通和理解。这也就是出自于软件需求说明书本身的问题,或开发人员对需求说明书的理解与沟通不足。

  软件缺陷的第二大来源是设计方案,也就是软件设计说明书。这是程序员开展软件计划和构架的地方,就像建筑师为建筑物绘制蓝图一样。这里产生软件缺陷的原因与产品说明书或需求说明书是一样的,片面、多变、理解与沟通不足。

  总之,软件缺陷是开发的软件与软件需求说明书、设计说明书的不一致:软件的实现未满足应达到目标的用户潜在需求。故障是指一个实体发生障碍和毛病。软件故障在ISO14958软件产品评价标准中的定义是:计算机程序中的不正确的步骤、过程或数据定义。

  软件故障是指软件运行过程中出现的一种不希望或不可接受的内部状态,软件出现故障若无适当措施(容错)加以及时处理,便产生软件失效。显然,软件故障是一种动态行为。

  在软件设计和编程过程中,花费很大的精力确保软件系统能从各种故障导致的失效中恢复。当遇到软件出现故障时,系统不能像软件设计和用户要求那样运行而导致失效,就需要有故障恢复措施,以保证故障恢复后的继续执行。软件失效是系统行为对用户要求的偏离,是一种面向用户的概念。这就是说,失效意味着系统的运行。只有在执行程序过程中才会发现软件失效,发现潜在的失效可以是设计审查、代码阅读和其他方法产生的结果。有的项目组还把文档错误计算在软件错误之内,这一般是不正确的,因为文档并不直接影响程序的执行。因为用户接受的是程序使用的错误信息,文档错误可能会导致用户的失效。但是,用户并不是软件成分,不能把用户看成是与失效和可靠性有关的单独的系统成分。

  对失效严重程度进行分类,主要是为了结合失效频率来解决失效优先级的确定。常见的分类标准包括对人员生命、成本和系统能力的影响。失效强度常常应用于软件可靠性工程中,最初是指单位时间内的失效次数;基于软件大量的使用经验,失效强度表示为每个自然单元出现的失效数目更加方便。失效强度是表示可靠性的另一种形式。

  关于概念不可能彼此分得很清楚,实际上也没有太大的必要。目前软件测试界一般主要使用缺陷(defect)和错误(error)这两个词。在测试过程中,我们找到的错误会有不同的类型,对错误的分析与管理是十分重要的。

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号