摘要:灰盒测试兼顾了黑盒测试方法和白盒测试方法的优点,既关注软件的内部实现,同时也关注软件的外部表现,本文对灰盒测试方法进行了研究,并结合实践给出了案例分析。

  关键词:灰盒测试;黑盒测试;白盒测试;软件测试

  一、引言

  软件测试时,都希望能以较少的资源发现较多的软件缺陷和错误,因此,运用一种实用的测试技术显得至关重要。黑盒测试是根据软件任务书或软件需求规格说明,在己知软件具有的功能的前提下,通过测试来验证每个功能和软件需求规格说明描述的一致性,完全不涉及程序的内部结构,不关注程序的具体实现;白盒测试是依据软件设计说明,在了解程序内部结构的基础上,对程序的逻辑结构进行分析,从中获取测试数据。白盒测试关注的是软件内部逻辑实现的正确性,以及测试用例执行后覆盖程序逻辑结构的程度。黑盒测试和白盒测试都有其相对的局限性,单纯采取任何一种方式都很难对软件进行全面而彻底的测试。灰盒测试是将黑盒测试与白盒测试进行结合的测试技术。既关注软件的内部实现,同时也关注软件的外部表现,结合了黑盒测试和白盒测试的优点,弥补了黑盒测试和白盒测试的局限性。

  二、灰盒测试概述

  无论是白盒测试,还是灰盒测试,对程序进行完整而彻底的测试都是很困难的。针对白盒测试与黑盒测试的优缺点,灰盒测试结合系统运行时的外部表现及程序内部逻辑结构来设计用例,执行程序并记录代码相关覆盖率和外部接口输出结果的测试技术。既关注了软件的内部实现,同时也关注了软件的外部特性,弥补了黑、白盒测试的局限性。

  进行灰盒测试时,通常先了解软件的功能,对软件功能进行功能分解,得到软件功能单元,对有的软件功能单元有时还需进一步的进行软件功能分解。得到软件功能单元后,对每个功能单元的输入数据进行等价类划分,划分等价类时既要包含有效等价类,也要包含无效等价类。划分好等价类后,再从各个等价类中选取数据设计测试用例。然后针对每个功能单元进行对应软件代码的逻辑结构分析。后执行测试用例,统计软件代码覆盖率信息,对各个覆盖率进行分析,针对没有达到软件测试覆盖率要求的模块进行补充测试,直到达到软件测试覆盖率要求为止。

  三、案例分析

  某软件某个功能为:当指令A有效(路径a)后,工作方式为“一般模式”(路径b)时,如果销毁13秒后(路径c)或脱落268秒后(路径f),产生指令B有效(路径d),否则产生指令B无效(路径e)。则可能的路径有:a->b->c->d、a->e、a->b->e、a->b->c->f->d、a->b->c->f->e,共五条。

  针对此功能,我们要验证指令B产生的正确性,首先进行等价类划分,如下:

  1.指令A:{“有效”,“无效”};2.工作方式等价类为{“一般模式”、其它状态};3.销毁时间等价类为{大于13秒、不大于13秒};4.脱落时间等价类为{大于268秒、不大于268秒}。

  我们选取等价类中数据设计测试用例,测试用例如表1所示,每一行代表一个测试用例。

  执行表2中的测试用例,统计分析测试用例执行路径,路径覆盖如表2所示。

  测试用例执行后,5条路径覆盖了4条,路径a->b->c->f->g没有被覆盖到,路径覆盖率为80%,这时我们需要补充测试用例提高路径覆盖率,补充测试用例如表3所示。

  再次执行表1测试用例和表3测试用例,经过统计分析,路径覆盖达到了100%。

  由此可见,进行黑盒测试时,由于软件内部逻辑结构对于测试者来说是不可见的,测试者并不知道程序路径覆盖情况如何,有时同样的功能,软件的实现方法多种多样,导致软件内部逻辑结构千差万别,即使是同样的测试用例,针对同样的软件功能,由于软件的逻辑结构设计不同,执行测试得到的路径覆盖率也会不一样,如果只进行黑盒测试,软件的许多语句、分支和路径都可能覆盖不到,如果只进行白盒测试,对软件没有实现的功能无法进行验证。只有进行灰盒测试,才能够既兼顾软件功能的验证,也确保软件的语句、分支和路径达到要求的覆盖率,测试才会更加充分。

  四、结语

  结合白盒测试与黑盒测试的优点,进行灰盒测试,以黑盒测试为主,通过分析软件需求规格说明得到功能单元,然后划分等价类,从等价类中选取数据设计测试用例并执行,以白盒测试为补充,通过分析软件内部逻辑结构,统计分析测试用例执行后语句覆盖率、分支覆盖率、条件覆盖率、分支/条件覆盖率和路径覆盖率,对没有达到测试覆盖率要求的,进行补充测试,直到达到相应的测试覆盖率要求。这样才能够更好地发现软件的缺陷和错误,更好地对软件进行评价。