【软件测试基础理论知识】2.软件缺陷、软件缺陷与Bug的区别、PIE模型

【软件测试基础】软件缺陷、软件缺陷与Bug的区别、PIE模型

    • 1.软件缺陷的定义
    • 3.软件缺陷与Bug的区别
    • 4.如何发现软件缺陷:PIE模型

1.软件缺陷的定义

软件缺陷(Defect),常常被称为Bug,所谓软件缺陷就是指计算机软件或程序中存在的某种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷。缺陷的存在会导致软件产品在某种程度上不能满足用户的需要。
在IEEE中对缺陷有一个标准的定义如下:

(1)从产品内部看,是指软件产品开发或维护过程中存在的错误、毛病等各种问题。
(2) 从产品外部看,是指系统所需要实现的某种功能的失效或违背。

早在1947年9月9日,Bug(英文译文“臭虫”或“虫子”)一词,由美国海军的编程员,编译器的发明者格蕾斯·哈珀(GraceHopper)提出,她发现计算机死机的问题,竟然是一只飞蛾导致的。她小心地用镊子将蛾子夹出来,用透明胶布帖到“事件记录本”中,并注明“第一个发现虫子的实例”。从此以后,人们将计算机的错误统称为Bug。

Ron Patton给出了软件缺陷的经典定义,他认为,出于软件行业的原因,只有符合下列5条规则才能叫软件缺陷

(1)软件测试员认为软件难以理解、不易使用、运行速度缓慢,或者最终用户认为不好。

从软件测试的标准定义可知,软件测试的最终目的是确保软件满足用户需求,因此,只要最终用户认为软件不好,当然对应到一个缺陷。另外,软件测试人员在一定程度上充当着用户的角色,如果连有着IT技术背景的测试人员都认为软件难以理解的话,用户恐怕就更难理解和使用该软件了。

举例:比如说手机,屏幕显示的数字过小,或者拨 键位置相对正常人操作而已过于不方便,都可以称的上是缺陷。

(2)软件未达到需求规格说明书(SRS)中指明的功能。(显性需求)

该规则对应的是遗漏缺陷,主要针对系统有效输入或有效操作下的功能的测试。用户最关心的往往是当其按照正确的流程、正确的操作输入正确的数据时,系统向其提供的功能能否达到用户所期望的结果。该规则的达成包含两方面的含义:
① 基本功能的保证,即应确保能实现有效输入下的基本功能;
② 性能的保证,即在保证提供基本功能之外,还能确保达到相关的性能指标。

举例:手机的产品说明书会声明可以接听、拨打电话。如果使用手机时,按下一个数字键“1”,结果什么反应也没有,按照第一条规则,这就是一个缺陷。如果,这次有了反应,但是…死机了,这也是一个缺陷。

(3)软件未达到需求规格说明书中虽未指出但应达到的目标。(隐形需求)
该规则是指,有些目标是说明书中没有明确指出,而实际上被测系统又应该达到的。那么,什么功能是需求中没提到,而被测系统又必须达到的部分功能主要是指软件系统对外部使用环境的要求,特别是对那些硬件故障所导致的意外情况的处理,如意外掉电等。此外还有软件的易用性、可靠性、可维护性、效率等。

举例:如某款手机电池电量低时,会发生拨 错误等问题,这也是不对的。需要考虑能让手机持续工作到电池完全没电,或者至少用到电力不足告警时。电力不足时无法正常工作,但是产品说明书中没有指出这个问题。这也是个缺陷。

(4)软件出现了需求规格说明书中指明不会出现的错误。

该规则是指若被测系统无法识别用户的无效输入或无效操作,并给予正确的反馈,则对应一个软件缺陷。该规则对应的是过错缺陷,主要针对系统无效输入或无效操作下的功能的测试。该规则的达成也包含两方面的含义:
① 系统能否应对所有可能的无效用户输入情况,包括无效输入数据和无效操作;
② 系统对每种无效输入情况,应以怎样的合理方式进行响应。

举例: 产品说明书也可能会声称手机不会锁死或者停止反应。但如果您是一个执着的人,不断按动键盘,手机停止接受数据了,这是一个缺陷。

(5)软件功能超出需求规格说明书中指明的范围。

该条规则看似很奇怪,既然是SRS中没有提到的功能,是属于不给钱的部分,开发人员为何会去实现呢软件要完成的功能越多,引入缺陷的风险越大,将带来更大的测试工作量并提高软件开发成本,这种吃力不讨好的事情,谁会主动去做里有两种可能性。
① 开发人员认为SRS不完善,因此而自行添加某些自认为用户需要的功能;
② 开发人员为了自己开发和调试的方便而加入的功能,如一些快捷键功能、测试代码等。

如果拿着手机进行测试,发现它除了接听电话、收发短信、上 、拍照以外,还可以充当扫描仪,而这一点没有在说明书中陈述,只是开发人员觉得它是一项很有用甚至了不起的功能而添加上的。这个也不叫功能,它是缺陷。软件实现了产品说明书中没有提到的功能,这些预料不到的操作,会增加测试的工作,甚至可能带来更多的缺陷。

软件缺陷产生的原因有很多,部分典型原因包括:
(1)软件及系统本身的复杂性不断增长,使得测试的范围和难度也随之增大;
(2)与用户的沟通不畅使得无法及时获取最真实的用户需求;
(3)需求不断变化,特别是敏捷开发模式下,测试开发和执行更难以跟上需求变化的步伐;
(4)程序员编程错误,或植入多余功能;
(5)进度压力导致测试被压缩,无法进行充分的测试;
(6)对文档的轻视致使测试缺乏依据,带来测试的漏洞。

实际上,在软件开发的各阶段均可能引入缺陷,并导致不同程度的损失,如图:

文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树预备知识Python简介208363 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年3月11日
下一篇 2020年3月11日

相关推荐