bug,缺陷,错误,故障的区别

error, fault,failure,都可以是bug

软件bug,就起原因,最根本的是什么呢?

这就牵涉到软件的结构的问题。

大家以后可以看看:《软件可靠性保证》这本书,下面简单说一下:

软件,最基本的单元是代码,代码写错了就是错误,错误是人为的。

因为有了错误,就成了软件的一个隐含缺陷了。但是不是所有的错误与缺陷都能反映测试出来,所以代码审查是测试的一个方面。

因为软件有缺陷了,那么软件在一定环境下缺陷就会被激发出来,激发出来就是bug ,没被激发的就是隐含的缺陷。要激发出缺陷一靠使用,二靠测试,所以测试用例很重要。

同样一个bug表现却不一样,会有多中错误状态显示,比如有的出现死掉,有的报错,所以有的时候,改了一个地方代码,问题都解决了。

这些表现出来的就是故障,故障是结果,是现象。所以说,我们测试的结果是表现出来的故障。

多个故障可有一个bug 引起的。一个bug由一个缺陷引起的,一个缺陷由一个错误导致的,这是简单的说法。

一个软件里比如有100个错误,100个错误引起100个缺陷,但是测试后只能发现80个bug, 根据需求的要求,也只能发现80个,那么那20个在环境下,就不能被激发,那么这个软件也是合格的。那20个有可能永远不会被激发。所以软件是不可能没有bug 的。

所以一个合格的软件,是在用户的环境下,在所有用例测试下,达到用户的要求,就是合格的。因为这是在一定范畴下的合格。

知道了软件问题的发生后,就来看看软件的结构。软件结构,最基本的是变量,代码行。一个小功能组成了代码段。几个代码段组成一个函数或过程。 函数与过程里包含变量,代码逻辑,参数。

一个大的功能就会有几个函数或过程来实现。也就是说功能点由函数与过程来组成。这是面向过程的开发软件。功能多了,就会把相应的同类功能聚居到一起。形成对象。这是面向对象开发。对象就是一系列功能数据的组合。

对象的实现是靠类来实现的,对象是虚的,实现全在类里面,类就是功能函数,变量,参数等的集合。类里有一种叫抽象类,就是只定义变量,函数,而不写实际的实现代码。这些类一般是作为接口用的。接口就是抽象类,他的实现是要靠具体的类代码来实现的,以后大家听到了接口,就因该知道他的意思了。

对象类多了,把这些相同功能的类组合起来,就成了组件,如大家知道的COM,DCOM,EJB,CORBA,组件提供的是对象的管理,规范,操作,具体的操作还是在对象类里实现。这些组件都开放接口,程序访问他们,只访问接口,通过接口来调用类的实现。

组件多了,难以管理,于是许多大的公司如sun等,就开发了组件管理的平台,并提供事件等操作。大量的业务组件在这环境下就够成了群件。

我们所说的单元只是一个大的功能,功能下还有子功能,功能的实现就是由对象类来实现。多个功能单元就组成了模块,多个模块整合就组成了子系统或系统,子系统就组成了系统。

知道了软件结构,我们就能了解单元测试,测试什么,整合测试测什么,集成测试针对软件的什么结构。

黑箱的方法是不需要你了解内部结构,所以只知道输入输出就可以了,这是系统论里的方法。还有一种是白合,最后一种是灰盒,在黑白只间如趋势科技做pccllin的。他们就黑白都做。还做安全测试,有专门的测试实验室。



留言