• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

软件测试 - 白盒测试

武飞扬头像
Violent-Ayang
帮助1

白盒测试的基本原理

学新通

关注对象

  • 源代码:

    阅读源代码,检验代码的规范性,并对照函数功能查找代码的逻辑缺陷、内存管理缺陷、数据定义和使用缺陷

  • 程序结构:

    使用与程序设计相关的图标,例如函数调用图、算法流程图,找到程序设计的缺陷,或评价程序的执行效率

优势

  • 针对性强,便于快速定位缺陷
  • 在函数级别开始工作,缺陷修复的成本低
  • 有助于了解测试的覆盖程度
  • 有助于代码优化和缺陷预防

不足和弊端

  • 对测试人员要求高
  • 成本高,准备时间长

白盒测试的经济学问题

  • 通过测试无法证明,被测软件系统是没有缺陷的
  • 软件测试的经济学问题
  • 应对策略二:白盒测试
  • 对每一种可能的执行路径进行测试,是否可行

控制流分析技术

控制流分析技术要解决的问题

  • 什么因素导致程序结构变得复杂?
  • 如何衡量程序结构的复杂程度?
  • 控制程序执行流程发生变化的主要因素是什么?
  • 如何测试这些因素,并确保测试的效率?

线性结构

void func1(int a){
	int b;
	b = a   1;
	printf("a=%d,b=%d\n",a,b); 
}

学新通
只有一条可执行路径

条件判定结构

void func2(int a){
	int b = 0;
	if(a>1){
		b = a   1;
	}else{
		b = a - 1;
	}
	printf("a=%d,b=%d\n",a,b); 
}

学新通

void func3(int a){
	int b = 0;
	switch(a){
		case 0:b = a;nreak;
		case 1:b = a;nreak;
		case 2:b = a;nreak;
		default:break;
	}
	printf("a=%d,b=%d\n",a,b); 
}

学新通
学新通

while-do循环结构

void func4(int a){
	int b = 0;
	int i = 1;
	while(i < 10){
		b = b a*i;
		i   ;
	}
	printf("a=%d,b=%d\n",a,b); 
}

学新通

do-while循环结构

void func5(int a){
	int b = 0;
	int i = 1;
	do{
		b = b a*i;
		i   ;
	}while(i < 10)
	printf("a=%d,b=%d\n",a,b); 
}

学新通
学新通
学新通

控制流分析内容

关注判定节点固有的复杂性

  • 焦点:判定表达式
  • 方法:逻辑覆盖测试

关注判定结构与循环结构对执行路径产生的影响

  • 焦点:路径
  • 方法:独立路径测试

关注循环结构本身的复杂性

  • 焦点:循环体
  • 方法基于数据的静态分析

逻辑覆盖测试

逻辑覆盖测试基本准则:

对程序代码中所有的逻辑值均需要测试真值和假值的情况

int func6(int a,int b,int c,int x){
1	if((a>1)&&(b>2))
2		x= c 1;
3	if((a==3)&&(x>3))
4		x= c 1;
5	printf("a=%d,b=%d,c=%d,x=%d\n",a,b,c,x);
6   return x;
}

控制流图
学新通

  • 代码包含两个简单的判定结构

  • 每个判定结构由两个子条件构成

  • 4个基本逻辑判定条件

    T1:a>1
    T2:b<2
    T3:a==3
    T4:x>3

  • 图中T表示True,也就是取真分支

  • F表示False,即取假分支

  • Lij表示执行pi,pj两个子路径

  • 4条执行路径
    L13:p1→p3
    L14:p1→p4
    L23:p2→p3
    L24:p2→p4

语句覆盖测试

语句测试基本准则:

设计测试用例时,需要保证程序中每一条可执行语句至少应执行一次

测试用例设计

学新通
学新通
语句覆盖是最弱的一种覆盖标准,它主要存在两种弊端

  • 关注语句,而非关注判定节点
  • 对隐式分支无效

判定覆盖测试

  • 判定覆盖也称为分支覆盖
  • 设计测试用例时,应保证程序中每个判定节点取得每种可能的结果至少一次
  • 判定覆盖相当于对控制流图进行边覆盖

学新通

条件覆盖测试

  • 设计测试用例时,应保证程序中每个复合判定表达式中,每个简单判定条件的取真和取假情况至少执行一次

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggakic
系列文章
更多 icon
同类精品
更多 icon
继续加载