白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。
白盒测试可以把程序看成装在一个透明的白盒子里,也就是清楚了解程序结构和处理过程,检查是否所有的结构及路径都是正确的,检查软件内部动作是否按照设计说明的规定正常进行。
软件人员使用白盒测试方法,主要想对程序模块进行如下的检查:
– 对程序模块的所有独立的执行路径至少测试一次;
– 对所有的逻辑判定,取 “ 真 ” 与取 “ 假 ” 的两种情况都至少测试一次;
– 在循环的边界和运行界限内执行循环体;
– 测试内部数据结构的有效性,等。
具体包含的逻辑覆盖有: – 语句覆盖 – 判定覆盖 – 条件覆盖 – 判定-条件覆盖 – 条件组合覆盖 – 路径覆盖。
测试方法
代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、Z路径覆盖。
覆盖标准
逻辑覆盖、循环覆盖和基本路径测试。
其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖。
六种覆盖标准:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖发现错误的能力呈由弱至强的变化。语句覆盖每条语句至少执行一次。判定覆盖每个判定的每个分支至少执行一次。条件覆盖每个判定的每个条件应取到各种可能的值。判定/条件覆盖同时满足判定覆盖条件覆盖。条件组合覆盖每个判定中各条件的每一种组合至少出现一次。路径覆盖使程序中每一条可能的路径至少执行一次。
白盒测试工具
测试工具主要支持的开发语言包括:标准C、C++、Visual C++、Java、Visual J++等。
代码静态分析工具:Logiscope、McCabe QA、CodeTest
代码检查工具:PC-LINT、CodeChk、Logiscope
内存检测工具:Purify、CodeTest
单元测试工具:Visual studio 2005-2013,xUnit
PC-Lint:
支持C/C++语言;
优点:工具简单实用,可以选择编码规范标准,数据检查技术;
缺点:不是图形用户界面,危险的用法,C/C++的兼容性问题。
测试脚本工具:TCL、Python、Perl
覆盖率检测工具: Visual studio ,Logiscope、Purecoverage
Logiscope:
支持C/C++语言;
优点:图形界面,可以生成代码质量报告;
缺点:规则不是特别多;
Logiscope是面向源代码进行工作的,贯穿于软件开发、代码评审、单元测试、集成测试、系统测试、以及软件维护阶段。
QAC/QAC++:
版本决定支持那种语言,一般以C/C++为主;
优点:规则检查自动化,规则多,速度快,可以定制规则。
白盒测试策略
在软件过程的不同阶段,研发组都可能需要进行白盒测试。下面是策略的一种:
桌前检查
- 简述:程序员实现制定功能后,进行单元测试之前,对源代码进行的初步检查。
- 重点:编码规范、语句的使用等是否符合编码规范,并根据《编码规范》调整自己的代码以符合编码规范的要求。
- 参与人员:开发人员。
单元测试
- 简述:又称模块测试。传统结构化编程中,以一个函数、过程为一个单元;在面向对象的编程中一般把类作为单元进行测试。
- 重点:采用白盒测试和黑盒测试方法相结合。
- 参与人员:专门的白盒测试人员。
代码评审
- 简述:在编码初期或编写过程中采用一种有同行参与的评审活动。
- 重点:通过组织或其他程序员共同查看程序,可以找出问题,使大家的代码风格一致或遵守编码规范。
- 方法:通过大家共同阅读代码或由程序编写者讲解代码,其他同行边听边分析问题的方法。
- 参与人员:全体开发小组。
同行评审
- 简述:引用CMM(能力成熟度模型)中的术语,如用在评审源代码上,就使代码评审;在同行评审中,由软件工作产品创建者的同行们检查该工作的产品,识别产品的缺陷,改进产品的不足。
- 目的:
- 检验工作产品是否正确的满足了以往的工作产品中建立的规范,如需求或设计文档;
- 识别工作产品相对于标准的偏差,包括可能影响软件可维护性的问题;
- 向创建者提出改进建议;
- 促进参与者之间的技术交流和学习。
- 参与人员:程序员、设计师、单元测试工程师、维护者、需求分析师、编码标准专家(此为CMM标准中提出的参与角色,可根据实际情况调整,至少需要开发人员、测试人员、设计师参与)。
代码走查
- 简述:由测试小组组织或者专门的代码走查小组进行代码走查,这时需要开发人员提交有关的资料文档和源代码给走查人员,并进行必要的讲解。
代码走查往往根据《代码检查单》来进行,代码检查单常常是根据《编码规范》总结出来的一些条目,目的是检查代码是否按照《编码规范》来编写的。当然,代码走查的最终目的还是为了发现代码中潜在的错误和缺陷。
- 重点:
- 把材料(《需求描述文档》、《程序设计文档》、《程序的源代码清单》、《代码编码标准》、《代码缺陷检查表》等)发给走查小组每个成员,让他们认真研究程序;
- 开会,让与会者“充当”计算机,让测试用例沿程序的逻辑运行一遍,随时记录程序的踪迹,供分析和讨论,发现更多的问题。
- 参与人员:测试人员(一般不让代码的创建者参与)。
- 代码检查速度建议:汇编代码与C代码 150行/小时,C++/Java 200-300行/小时。
静态分析
- 简述:由测试小组来进行,静态分析通常需要辅助工具支持,通过提取代码信息,进行统计,根据统计结果对源代码进行质量评估。代码规则检查也是静态分析的一个方面。