浅析软件测试之灰盒测试
创始人
2024-07-31 16:30:19
0

灰盒测试,是介于白盒测试与黑盒测试之间的,可以这样理解,灰盒测试关注输出对于输入的正确性,同时也关注内部表现,但这种关注不象白盒那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态,有时候输出是正确的,但内部其实已经错误了,这种情况非常多,如果每次都通过白盒测试来操作,效率会很低,因此需要采取这样的一种灰盒的方法。

“白盒”测试又称结构测试,在测试过程中测试者可以看到被测的源程序,通过分析程序的内部结构,根据其内部结构设计测试用例。理想的“白盒”测试应该使选取的测试用例覆盖所有的路径,然而,这是不可能的,而且“白盒”测试不关注测试程序的外部功能。

“黑盒”测试又称功能测试,在测试过程中被测程序被视为黑盒,测试者在完全不考虑程序内部结构和内部特征(或对于上述信息无从获知)的情况下,根据需求规格说明书设计测试用例和推断测试结果的正确性。“黑盒”测试的不足在于,测试用例的选择只考虑了程序的输入,以及在该情况下的输出,并没有考虑程序的内部结构。因此,程序内部结构是否规范、结构化程度的好坏、系统的性能如何等都得不到测试。

“白盒”测试和“黑盒”测试各有其自身的特点,但也都存在着明显的不足,主要表现在只考虑了程序某一方面的属性和特征,没有综合考虑。要进行较全面的程序测试,不得不把测试工作分两次进行,用“白盒”测试方法测试一次,再用“黑盒”测试方法测试一次。这不但浪费时间,而且测试的效果不一定好。“灰盒”测试正是基于这一点提出的。

“灰盒”测试是一种综合测试法,它将“黑盒”测试、“白盒”测试结合在一起,构成一种无缝测试技术。“灰盒” 测试以程序的主要性能和主要功能为测试依据,测试方法主要根据程序的程序图、功能说明书以及测试者的实践经验来设计。这里所说的主要性能和主要功能凭借测试者的经验来确定,即可以把容易发生错误的变量域及程序图(非流程图)作为测试的内容,而把那些不容易发生错误的变量输入和流程图中的不影响或不改变内部逻辑的细节忽略。事实上,许多测试工作是在不完全了解程序的内部逻辑的情况下进行的,这也就是“灰色”的由来。

同时,“灰盒”测试涉及输入和输出,但通常使用关于代码和程序操作等在测试人员视野之外的信息设计测试。在现在的测试工程中,最常见的“灰盒”测试是集成测试。但是“灰盒”测试的概念已经由原来单一的“黑盒”测试和“白盒”测试的一些测试方法的简单叠加,衍生出许许多多新颖的分析方法。

跟“黑盒”测试和“白盒”测试相比,“灰盒”测试有以下特性:

  • “灰盒”测试通常是在集成测试前期进行的,“灰盒”测试通常在程序员做完“白盒”测试之后,在功能测试人员进行大规模集成测试之前进行的。
  • “灰盒”测试需要了解代码工程的实现。
  • “灰盒”测试是通过类似“白盒”测试的方法进行的,是通过编写代码,调用函数或者封装好的接口进行的。
  • “灰盒”测试是由测试人员进行测试的。

在软件测试领域,对“灰盒”测试的应用属于比较新型的尝试,它打破了长久以来“黑盒”和“白盒”测试技术在这一领域的统治地位。DO-178B规范也新进加入了利用“灰盒”测试方法来进行作业的标准。

下面是根据一个实例来介绍一种传统的“白盒”测试与“黑盒”测试相结合的“灰盒”测试方法的应用。

(1) 阅读需求

  1. SDRD26537 (Software Design Requirement Document)  
  2. Requirement: Yes  
  3. Delivery: AESS  
  4. Magnetic Heading shall be ser invalid if value outside range of -180 inclusive and 180 exclusive.  
  5. [/TCAS TPA-100X/Tests] 

需求要求飞机在巡航过程中它的有效磁场角度范围为[–180,180]。(因为这是航空领域的实例,有些是专业术语或缩写,但这不影响阅读)

(2) 分析需求

这个例子很简单,根据分析,测试人员优先选择“黑盒”测试方法的边界值分析方法,并确定取值范围为[-180,180]。设计一个健壮最坏情况边界值分析测试用例如下:–180.1, –180.0, –179.9, –1.0, 0.0, 1.0, 180.0, 179.9 。

(3) 根据分析写出测试用例脚本

详细的测试用例脚本由于篇幅太长,故不在这里一一写出。然后将测试用例脚本在测试环境里运行出结果。

但是在后面的测试工作中出现了意外,虽然测试用例的结果获得了通过,但是在做代码的“白盒”覆盖率时,未达到规定的覆盖率要求。为什么这么简单的一个单元测试失败了呢?在重新分析了需求和测试脚本以后,我们排除了这两方面带来的问题,原因很可能出在根据需求设计的脚本和源代码的实现有出入。

(4) 分析相应的源代码

找到源代码的相应模块,如下所示:

  1. //========================================================================  
  2. const float MAX_VALID_ANGLE = 180.0;  
  3. bool TcasAircraftInputSignallfcClass::getTrueHeading(int *argValue)  
  4. {  
  5. static const float scalingFactor = 16384.0 / 90.0;  
  6. float roundFactor =(((1.0 / 16384.0)/2.0)*90.0);  
  7. float temp;  
  8. if (trueHeading->get(&temp))  
  9. {  
  10. temp=(temp
  11. temp=(temp>+-MAX_VALID_ANGLE+roundFactor?temp : -MAX_VALID_ANGLE+roundFactor);   
  12. if (temp < 0)  
  13. {  
  14. roundFactor = -roundFactor;  
  15. }  
  16. *argValue = (int)((temp + roundFactor)*scalingFactor);  
  17. return(true);  
  18. }  
  19. else 
  20. {  
  21. //return false signal is invalid  
  22. return(false);  
  23. }  

 

经过对源代码的仔细分析,果然发现了问题所在。由于“黑盒”测试的特征以及DO-178B的规范,测试人员是完全根据需求文档来设计的测试用例。而需求文档在设计的时候设置的磁角度精确值统一为0.1,但是在实际软件开发过程中,因为可靠性的要求,精确度提升到了0.001。

需求文档却未相应更新,导致最终的覆盖率失败。在这里,不能取179.9,而必须取179.998,才能完全覆盖到语句,这就是“黑盒”测试与“白盒”测试相结合的产物。

希望对你有帮助。

【编辑推荐】

  1. 浅谈软件测试嵌入式单元测试技能
  2. 详谈软件测试中的动态测试
  3. 软件测试理论:目的、周期、流程
  4. 软件测试的全过程
  5. 软件测试中排错的基本方法

 

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...