【软件测试基础】软件缺陷、软件缺陷与Bug的区别、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中没有提到的功能ÿ