管理作为软件质量管理的重要组成部分,正在成为软件开发管理过程的又一亮点,从国
内外越来越多的公司进行相关管理工具的开发,到人们对缺陷管理工具的需求逐渐增多而且
更加明确,同时渴望能够得到物美价廉的可用版本(当然大多数都有免费的试用板),软件缺
陷管理的其重要性和被人们所给予的重视程度可见一斑。我今天讨论的主题不是缺陷管理的
重要性,而是在进行缺陷管理之前我们应该明确的问题----什么是软件缺陷?
提起软件缺陷,你的第一反映或许是bug,因为大家感觉它离我们很近,而且很熟悉,
触手可及,但是要是让你给它下一个准确的定义,到底什么是软件缺陷,或许我们会想到许
多和它有关的词,比如defect,fault,failure,error等等,当然除了这些英文单词之外,
在汉语中还有更多与之相关的词或解释。那么到底应该如何来给它下一个定义呢?似乎三言
两语难以说清。下面在我个人收集到的相关信息的基础上谈点我个人的看法,希望能够与您
产生共鸣。
1.与“bug”、“缺陷”相关词语的解释
首先,我们看看上面提到的几个与软件缺陷有关的词在英语中的解释。翻译如下:
n bug:(小错误,缺陷,不足,过失…)
一个计算机bug指在计算机程序中存在的一个错误(error)、缺陷(flaw)、疏忽(mistake)
或者故障(fault),这些bug使程序无法正确的运行。Bug产生于程序的源代码或者程序设
计阶段的疏忽或者错误。我们知道所有应用的程序中都存在bug,只是设计良好的程序包含
的bug相对少一些,并且这些bugs不会妨碍程序正常完成它的任务。包含很多bug的程序
(常常指的是含有缺陷的软件),是指那些包含有大量bug并且这些bug严重的妨碍了程序
正常功能的完成。
n Defect:(缺陷)
在软件工程(Software Engineering)中,软件与它的需求(requirements)不一致,常常指软
件无法正确完成需求所要求的功能,也称之为bug。
n Fault:(故障)
在ISO/CD 10303-226的文档中,fault被定义为存在于组件、设备或者子系统中异常的条
件或者缺陷,常常会导致系统的失败。
依照联邦1037C标准(Federal Standard 1037C),Fault有以下的含义:
1.一个导致某一功能单元无法完成它预期功能的异常条件。
2.一个导致重复出现的或者灾难性的功能失常的过错。一个可重复出现的功能
失常被认为是指该现象在同样的环境下可再现。
3.在电力系统中,两个带电导体之间或者一带电导体与零电势体之间的意外的、局部的短
路。
n Failure:(失效)
ISO/CD 10303-226将Failure定义为一个组件,设备,子系统或者系统无法(不具备相应
的能力)去完成它设计的任务。Failure常常源自于一个或许多的错误。
n Error:(错误)
Error在不同的领域有不同的含义,在拉丁语中它表示:徘徊的(wandering)或者迷路的
(straying)。那么它在编程(programming,直译:规划,设计)方面含义如下:
一个error是指编写错误的代码,通常是无意中造成的。一般有两类主要的错误,一是
语法错误(syntax error),该类错误易于检测,因为代码在编译阶段无法解析而不能正常
编译通过。另一个是逻辑错误(logical error),因为它与代码的实际执行密切相关所以不
易发现。两类错误都会导致错误“雪崩”(error avalanche,一个小的错误最终演变为一个
非常大的错误),因为当前的错误代码将影响后续部分代码。比如一段程序的输出是另一段
程序的输入。
从上面的解释中我们可以看到这些词语的解释与我们日常的使用习惯密切相关,或许因
为人们在偏袒小虫,所以bug的含义延伸的最广,它的意思几乎涵盖了其它几个与“缺陷”
有关的词语。而其它的词语之间有细微的差别,适用于不同的环境。当我们的软件功能与需
求不一致时,我们可以说这是一个defect;当程序的某部分代码存在错误导致程序执行失
败时,我们可以说这是一个fault;当程序因为错误太多而导致无法完成预定功能时,我们
说这是一个failure;当代码中存在因为疏忽而造成的错误时,我们说这是一个error。
历史上许多“灾难”或者重大事件的失败都是与bug有关的。如美国国家航空航天局
(NASA)的阿波罗11(Apollo 11)着陆时出现故障(1996.6.4),还有NASA的火星气候轨道探
测器,无法将长度单位码(yard)转换为米(meter),等等在宇宙空间探索方面的bug导致了
重大的损失,当然这种bug还发生在诸如:医学,计算,通讯等其它领域。
2.缺陷的分类
在了解了与“缺陷”一词有关的解释之后,探讨一下在实际的软件开发中应该如何对缺
陷进行分类。
现在已有的对缺陷的分类大都针对编码阶段,主要是因为该阶段是产生bug最多的阶
段。看看当前各种缺陷管理软件你就可以得到众多对缺陷类型的划分,以及相应的优先级,
这些划分有很多共性,这不仅因为它们都是对软件缺陷进行划分,同时在于它们存在类似的
不足。下面作为举例给出了某个缺陷管理软件对缺陷的简单分类:
语法错误
SQL语句错误
数据库连接错误
接口定义错误
不符合编码规范
程序功能错误
文档错误
创建_打包
分配声明
检查
数据
系统
环境
这里有些缺陷类型定义需查阅相关的帮助文档,否则你无法知道它的确切含义,基于这个简
单的分类,下面给出了一个bug严重等级的定义列表:
表1.缺陷的严重等级分类编号及说明
缺陷类别 标识/权值 说明
A类A1/5.6由程序执行引起的死机、非法退出
A2/5.5死循环
A3/5.4数据库发生死锁
A4/5.3数据库设计未达到第三范式的要求或
需求规格说明的水平
A5/5.2数据功能实现错误
A6/5.1与数据库连接错误