《软件测试第03章资料》由会员分享,可在线阅读,更多相关《软件测试第03章资料(140页珍藏版)》请在金锄头文库上搜索。
1、第3章 软件测试基本技术,3.1 黑盒测试与白盒测试 3.2 白 盒 测 试技术 3.3 黑 盒 测 试技术,3.1 黑盒测试与白盒测试,任何工程产品都可以使用白盒测试和黑盒测试两种方法之一进行测试。 1黑盒测试 黑盒测试:已知产品的功能设计规格和用户手册,可以进行测试证明每个功能是否实现、每个实现了的功能是否符合要求,以及产品的性能是否满足用户的要求。,黑盒测试主要是为了发现以下几类错误: 1. 是否有不正确或遗漏的功能? 2. 在接口上,输入是否能正确的接受?能否输出正确的结果? 3. 是否有数据结构错误或外部信息(例如数据文件)访问错误? 4. 性能上是否能够满足要求? 5. 是否有初始
2、化或终止性错误?,2白盒测试 白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。 软件的白盒测试是对软件的过程性细节做细致的检查,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。,白盒测试须对程序模块进行如下检查: 1. 保证一个模块中的所有独立路径至少被使用一次 2. 对所有逻辑值均测试true和false。 3. 在循环的边界和运行的界限内执行循环体。 4. 检查内部数据结构以确定
3、其有效性。,黑白盒测试的关系,辩证统一,相互依赖而存在,相互对立又相互补充。,3.2 白 盒 测 试 技 术,白盒测试是一种被广泛使用的逻辑测试方法,也称为结构测试或逻辑驱动测试。 白盒测试对象基本上是源程序,是以程序的内部逻辑为基础的一种测试方法。,了解软件内部结构有利于测试,静态白盒测试,程序的静态测试是在不执行程序的条件下,有条理地仔细审查软件设计、体系结构和代码,从而找出软件错误的过程。 可尽早发现软件缺陷(开发初期),找到动态黑盒测试难以发现或者隔离的软件缺陷(测试后期)。 也可为不了解代码细节的黑盒测试员提供思路。,正式审查基本要素,确定问题 遵守规则 准备 编写报告,正式审查的隐
4、含优点,交流(经验交流非正式) 质量(有利于提高程序员的编码质量) 小组同志化(不同角色间相互了解、尊敬) 解决方案(非正式讨论解决方案),同事审查,同事审查常常仅在编写代码的程序员和充当审查者的其他12个程序员和测试员之间进行。,正式审查同事审查,方式:小组讨论各抒己见 成员:代码作者,其他程序员,测试员 内容:一起审查代码,寻找问题和失误 特点:要求最低的正式审查,正式审查公开陈述Walkthrough,代码走查是由编写代码的程序员像其他程序员或者测试员组成的小组作正式陈述。走查小组按照所提交的测试用例,模仿计算机运行一遍,并记录跟踪情况。经过讨论分析后,找出软件的错误。,正式审查公开陈述
5、,方式:代码作者向审查小组正式表述,审查者提问质疑 成员:至少一位资深程序员 内容:逐行通读代码,解释代码如何工作以及为什么,提交报告 报告内容:所发现的问题,及其计划解决方案,正式审查检验 Inspection,最正式的审查类型,具有高度的组织化。与走查不同之处是表述者不是原来的程序员。 审查小组按照各自的职责,从不同角度审查产品。,正式审查检验,方式:非代码作者表述程序, 成员:检验员 内容:不同角度审查代码,甚至从尾到头 报告:明确解决问题所必需的重做工作 程序员:修改 检验员:重新检验发现新缺陷,编码标准和规范,规范:建议最佳做法、推荐和更好的方式 标准:没有例外情况,是结构严谨的法律
6、公文的缩影,坚持标准规范的原因,可靠性:按标准编写的代码更可靠,缺陷更少 可读性/维护性:符合标准的代码易读易理解 移植性:,标准所包含的4个要素,标题:标准包含的主题 标准:标准的内容,解释哪些允许哪些不允许 解释说明:标准背后的原因,以使程序员理解为什么这是好的编程习惯 示例:给出如何使用标准的简单示例,编程风格,编程者的编写习惯,特色。在符合6标准或规范的前提 风格的静态表现: 注释的冗长程度 变量命名习惯 循环结构的选择,获取标准,美国国家标准协会ANST 国际工程协会(IEC) 国际标准化组织(ISO) 信息技术标准国家委员会(NCITS) 计算机械联合会(ACM) 电子电气工程学会
7、(IEEE),静态结构分析法,在代码审查时,将以往所有可能发生的常见错误罗列出来,供与会者对照检查,从而提高会审效率。 数据引用错误 数据声明错误 计算错误 比较错误 控制流程错误 子程序参数错误 输入/输出错误,数据引用错误,未正确初始化和引用方式不正确 为初始化的变量数组和字符串下标是否整数 数组下标的起始值是什么,是否漏掉 常量被用作变量 变量是否被赋予了不同类型的值 是否为引用的指针分配内存 一个数据结构是否在多个函数或子程序中引用,是否在每一个应用中明确定义结构,数据声明错误,不正确的声明和引用变量或常量 所有变量赋值:长度、类型 变量是否在声明时初始化 变量是否有相似的名称 是否存
8、在声明过单位被引用过的变量 特定模块中所有变量是否显示声明,计算错误,是否使用了不同数据类型的变量,如整数与浮点数相加? 是否使用了数据类型相同但字节长度不同的变量? 是否考虑到编译器对类型或长度不一致的变量的转换规则? 赋值的目的变量是否小于赋值表达式的值? 在数值计算过程中是否可能出现溢出? 除数或模是否可能为零? 对于整型算术运算或某些计算是否会丢失精度? 变量的值是否超过有意义的范围? 对于包含多个操作的表达式,运算优先级对吗?需要加括号吗?,比较错误,小于、大于、等于、不等于、真、假边界问题 比较的结果是否正确 分数或浮点数之间的比较,存在精度问题,是否影响比较结果 每个逻辑表达式是
9、否都正确表达 逻辑表达式的操作数是否逻辑值,控制流程错误,由于循环等控制结构未按预期方式工作 Begin 与End 是否对应 程序模块子程序循环是否能终止 是否存在死循环 是否存在从不执行的循环 switch语句的分支与索引变量个数是否一致 是否存在“丢掉一个”错误,导致以外进入循环,子程序参数错误,参数传递错误 子程序接收的参数是否匹配 若子程序有多个入口点,引用参数是否与当前入口无关 常量是否当作形参传递,被子程序改动 全局变量在各模块中是否定义、属性相同,输入/输出错误,文件读取、接受键盘鼠标输入,向打印机屏幕等输出设备写入错误 是否遵守外设的读写格式 文件或外设为准备好 软件对外设异常
10、是否有处理 软件是否按预期方式处理预计错误 检查错误信息的准确性、正确性、语法和拼写,其他检查,是否使用其他语种 是否要移植到其他编译器和cpu上运行 是否考虑软硬件兼容问题 编译时是否有警告信息,3.2.2 程序插桩技术 在软件动态测试中,程序插桩是一种基本的测试手段,有着广泛的应用。 程序插桩方法是借助往被测程序中插入操作,来实现测试目的的方法,即向源程序中添加一些语句,实现对程序语句的执行、变量的变化等情况进行检查。,插桩后求最大公约数程序的流程图,设计插桩程序时需要考虑的问题包括: 探测哪些信息; 在程序的什么部位设置探测点; 需要设置多少个探测点; 如何在程序中特定部位插入某些用以判
11、断变量特性的语句。,3.2.3 逻辑覆盖 逻辑覆盖也是白盒测试主要的动态测试方法之一,是以程序内部的逻辑结构为基础的测试技术,是通过对程序逻辑结构的遍历实现程序的覆盖,这一方法要求测试人员对程序的逻辑结构有清楚的了解 从覆盖源程序语句的详细程度分析,逻辑覆盖标准有语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖。,语句覆盖,语句覆盖就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次 语句覆盖的方法似乎能够比较全面地检验每一个可执行语句。但需要注意的是,它是最弱的逻辑覆盖。,语句覆盖的例子,if (A1) (B=0) A=A+B; if (A=3) (X1) X=X+
12、1;,(A,B,X): (3,0,2) -(3,0,3),判定覆盖,判定覆盖是指设计测试用例,使得程序中每一个判断的取真分支和取假分支都至少能够执行一次。 不能保证一定能查出在判断的条件中存在的错误,判定覆盖的例子,(3,0,2),覆盖 ace,(1,1,0),覆盖 abd,if (A1) (B=0) A=A+B; if (A=3) (X1) X=X+1;,条件覆盖,条件覆盖是指设计测试用例,使得程序中每一个判断的每个条件的可能取值至少执行一次。 某些用例可能只覆盖了某个判断的某个分支,不能满足判定覆盖的要求,(1,0,2) 覆盖 F1 T2 F3 T4 (3,1,1) 覆盖 T1 F2 T3
13、 F4,条件覆盖的例子,abe ,abe,其他逻辑覆盖,1、条件判定组合覆盖 使得判断中每个条件的所有可能取值至少执行一次,同时每个判断本身的所有可能判断结果至少执行一次。但某些条件可能掩盖另一些条件。 2、条件组合覆盖 使得每个判断的所有可能的条件取值的组合至少执行一次。但可能有的路径会遗漏掉 。,条件组合覆盖的例子,(3,0,2) L1 (3,1,1) L3 (1,0,2) L3 (1,1,1) L2,测试覆盖准则 对于a?b,应适当选择a、b,使,=分别执行一次; 对于aC,应选择a=C+M,其中M为数据类型的最小单位; 对于外部变量,每一测试用例中赋予其不同的值和符合,3.2.4 基本
14、路径测试法 基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。设计出的测试用例要保证在测试中程序的每一条可执行语句至少执行一次。,路径测试的例子,(3,0,3) (1,1,1) (1,1,3) (2,0,1),1程序的控制流图 控制流图是描述程序控制流的一种图示方式。,程序流程图和对应的控制流图,复合逻辑下的控制流程图,if (a and b) then x else y,2基本路径测试法的步骤 (1) 画出程序控制流图 (2) 计算程序环路复杂性 独立路径,是指至少引入一个新处理语句或新判断的一条路径。 程序的环路复杂性给出
15、了程序基本路径集合中的独立路径条数。 程序环路复杂性是确保程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。,通常环路复杂性可用以下3种方法求得。 将环路复杂性定义为控制流图中的区域数。 设E为控制流图的边数,N为图的结点数,则定义环路的复杂性为V(G)=EN+2。 若设P为控制流图中的判定结点数,则有V(G)=P+1。,程序流程图,控制流程图,P1:4-14 P2:4-6-7-14 P3:4-6-8-10-13-4-14 P4:4-6-8-12-13-4-14,4,7,6,13,12,10,8,14,控制流程图,(3) 确定独立路径集合,P1:4-14 P2:4-6-7-14 P3
16、:4-6-8-10-13-4-14 P4:4-6-8-12-13-4-14,P1:4-14 输入:Ir=0的某个值 预期输出:x=0 P2:4-6-7-14 输入:Ir=1,It=0 预期输出:x=2 P3:4-6-8-10-13-4-14 输入:Ir=1,It=1 预期输出:x=10 P4:4-6-8-12-13-4-14 输入:Ir=1 ,It=2 预期输出:x=20,(4) 准备测试用例,3. 基本路径测试中的图形矩阵工具 图形矩阵是在基本路径测试中起辅助作用的软件工具,利用它可以实现自动地确定一个基本路径集。,流程图,矩阵图,用链接权重替代交叉点值的字母,矩阵就可以成为评估测试中控制结构的有效工具,替换后的矩阵图,1 和 0 表示连接存在, 字母被替换为 1,3.2.6 白盒测试应用策略 以下是各种白盒测试方法的综合应用策略,可供在