白盒测试技术的方法与实践教程
 

2009-01-08 来源:网络

 

一、白盒测试方法

1、用例设计

1)测试用例的组成(在单元测试中测试用例基本上由测试脚本组成)

① 用例运行前置条件

② 被测模块/单元所需环境(全局变量赋值或初始化实体)

③ 启动测试驱动

④ 设置桩

⑤ 调用被测模块

⑥ 设置预期输出条件判断

⑦ 恢复环境(包括清除桩)

2)测试用例的设计原则

① 一个好的测试用例在于能够发现至今没有发现的错误;

② 测试用例应由测试输入数据和与之对应的预期输出结果这两部分组成;

③ 在测试用例设计时,应当包含合理的输入条件和不合理的输入条件;

④ 为系统运行起来而设计测试用例;

⑤ 为正向测试而设计测试用例;

⑥ 为逆向测试而设计测试用例;

⑦ 为满足特殊需求而设计测试用例;

⑧ 为代码覆盖而设计测试用例;

3)用例设计方法

① 规范(规格)导出发

② 等价类划分法

③ 边界值分析法

④ 状态转移测试法

⑤ 分支测试法

⑥ 条件测试法

⑦ 数据定义-使用测试法(又名数据流测试法)

⑧ 内部边界值测试法

⑨ 错误猜测法

各种详细设计方法请参考《测试用例设计白皮书》

4)特定的用例测试设计

① 声明测试

② 路径测试

③ 循环测试

④ 循环嵌套

⑤ 边界值测试

⑥ 接口测试

⑦ 确认测试

⑧ 事务测试

2、用例执行

● 一般来说,做单元测试均采用的是商用的测试工具或自行开发的测试工具,用例的编写都是在测试工具上完成,测试用例都是一些测试脚本,都以文件的方式来保存,故其用例的执行过程主要是由测试工具根据所编写的具体的测试用例脚本来完成,这样对于用例的管理和执行也非常灵活。

● 在特定场合,比如某种压力测试或极限测试,对于测试执行过程时间很长时(几个小时以上),一般都预先编写好用例(确保用例无误),使用空闲机或非工作时间执行测试用例,这样操作起来较节约时间。

● 在用例的执行过程中务必注意如下事项:

1)程序的执行过程―――便于构造发散用例

2)不要放过任何细节――这种细节可能就是问题

3、测试优化和策略

1)测试用例的优化

2)测试执行的优化

3)测试策略

① 哪些是重点模块?

② 哪些程序是最复杂、最容易出错的?

③ 哪些程序是相对独立,应当提前测试的?

④ 哪些程序最容易扩散错误?

⑤ 哪些程序是开发者最没有信心的?

⑥ 80-20原则:80%的缺陷聚集在20%的模块中,经常出错的模块改错后还会经常出错,这种应该列入测试重点。

二、 白盒测试评估

1、测试完备性评估,主要检查测试过程中是否已经执行了所有的测试用例,对新增的测试用例是否已及时更新测试方案等。

2、代码覆盖率评估,主要是根据代码覆盖率工具提供的语句覆盖情况报告,检查是否达到方案中的要求,公司要求语句覆盖达到100%。但很多情况下,第一轮测试用例执行完后是很难达到的,这时在评估过程中要对覆盖率进行分析,主要从以下方面来考虑:

1)不可能的路径或条件

2)不可达的或冗余的代码

3)不充分的测试用例

3、从覆盖的角度看,测试应该覆盖:

1)功能覆盖

2)输入域覆盖

3)输出域覆盖

4)函数交互覆盖

5)代码执行覆盖

大多数有效的测试用例都来自于分析,而不是仅仅为了达到测试覆盖率目标而草率设计测试用例。千万不要误解测试覆盖,测试覆盖并不是我们最求的目的,它只是评价测试的一种方式,为测试提供指导和依据。

4、测试覆盖程度评估:

● 位置无关调用覆盖率(Location-independent call coverage,LICC)

LICC = (已覆盖的不重复的函数调用个数 / 全部不重复的函数调用个数) * 100%

● 位置相关调用覆盖率(Location-dependent call coverage,LDCC)

LDCC = (已覆盖的函数调用个数 / 全部函数调用个数) * 100%

案例:

void Func(int i)

{

call1();

if(i==2)call2();

else if((i==3)call3();

else call1();

}

 调用Func(2)和Func(3)后我们对Func()的覆盖评估如下:

LICC:3/3 = 100%

LDCC:3/4 = 75%

5、测试设计程度评估:

测试设计程度也称用例覆盖度(Test Case Coverage,TCC),以被测函数在正式测试中使用频度与其函数定义中分支总数之间关系作为依据,定义如下:

TCC = 用例中调用被测函数的总次数 / 函数定义的分支总数

其中,某函数的分支总数的定义如下:函数分支总数 = 1 + if语句总数 * 2 + while语句总数 * 2 + for语句总数 * 2 ,if语句有TRUE与FALS两个分支,原理上说应该设计两次测试才是完整的,while与for也类似,循环至少进入一次应设计一个用例,一次都不进入也应设计一个用例,所以计算出if、while与for语句总数后要乘以2,但如果一个函数没使用这3个控制语句,也应至少设计一个用例测试它,这是上面公式额外加上1的含义。

三、白盒测试推行

前提条件

● 思想上的统一

质量部门及项目责任人足够重视,将单元测试输出列为与代码输出同等重要地位。

● 完备的流程支撑

主要指设计文档的完备性,比如《详细设计说明书》,因为《详细设计说明书》是白盒测试的重要依据。

● 推行方法

1)选择相对重要复杂的模块

2)选择进度相对不紧张的项目

3)白盒测试人员一般为开发人员

● 测试工具的选择 

四、 白盒测试实践

1、业界测试工具介绍

1)CodeTest

2)RTRT(Rational Test RealTime)

3)VcTester

4)CppUnit/CUnit

5)Cantata++

6)C++Test

测试工具详细介绍参见《常用嵌入式软件白盒测试工具介绍》

2、测试工具VcTester使用实践

1)VcTester简单介绍(测试原理)

2)测试环境搭建

3)脚本体系

4)被测元素的访问(类型、变量、函数)

5)测试元素构造(参数、桩、测试框架)

6)测试执行(在线测试)

7)覆盖评估(代码覆盖、测试覆盖)

8)代码编辑、编译、调试

9)测试报告

以上详细介绍可访问VcTester官方网站


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织