同花顺 数据 结构 读取软件_【新书连载12】软件测试核心技术—局部数据结构...

c9a0f1f8a2f09301e9f94ee20a2c92e2.gif

出品 | 51Testing软件测试网

02.

局部数据结构

单元的局部数据结构是最常见的错误来源之一。在单元工作的过程中,必须测试单元内部的数据能否完整,确保内部数据的内容、形式及相互关系不发生错误。

对于局部数据结构,应该在单元测试中注意以下几类错误。

(1)使用不正确或不一致的数据类型。

  • 不正确的数据类型。例如,char a中,由于char?是无符号字符数据类型,占2字节(Unicode码),范围是0~65535,因此a永远不为负,如果用a小于0作为循环结束条件,肯定会进入死循环。

  • 不一致的数据类型。例如,以下两个单元之间需要传递一个学生对象(包括姓名、身高、年龄),结果两个单元对学生对象的属性定义不一致,导致错误。

public class Student{  String name;  int height;       int age;}public class Student{ String name; float height; int age;}

(2)使用尚未赋值或尚未初始化的变量。例如,在以下代码中,变量age未初始化,编译无法通过,会报错。

  int age;  System.out.println(age);

(3)使用错误的初始值或错误的默认值。例如,以下代码无法正确编译,会报错。

  int a=2147483648;

因为在Java中,int的取值范围为 2 147 483 648~2 147 483 647,占用4字节。

(4)变量名拼写错误或书写错误,如addMember写成addMenber等。

(5)使用不一致的数据类型。例如,以下代码会导致b的精度降低。

  int a;  float b;  a=b;

03.

独立路径

对基本执行路径和循环进行测试会发现大量的错误。通过设计的测试用例查找由于错误的计算、不正确的比较或不正常的控制流而导致的错误。

常见的错误如下。

(1)运算的优先级次序不正确或误解了运算的优先次序。例如,+、?的优先级高于 >> 和 <> 2相当于a = ( b + c )/4,而不是a = b + c/4(使用括号,有利于阅读,也不易出错)。

很多运算符拥有相同的优先级,一起使用的时候要注意它们的执行顺序。单目运算符、赋值运算符和“?:”的执行顺序是从右到左,其余运算符的执行顺序是从左到右。

(2)运算方式错误。例如,把a=b++(先给a赋值再递增b)误写为a=++b(b先加1再给a赋值)。

(3)对不同数据类型进行比较。例如,以下代码容易进入死循环。

  char x = '1';  int y = 0;  while (x > y) {}

(4)关系表达式中使用了不正确的变量和比较符。例如,将if(a==1)写成if(a=1)(有一种防止误写的办法,写成1==a)。再如,将&&写成&,在if(a>0&&b>0)中,若a>0不成立,则不再判断b>0;若写作if(a>0&b>0),则a>0和b>0都要进行判断。

(5)“差1错”,即不正确地多循环或少循环一次。

例如,整型数组A[100]表示数组的实际长度是100,可以存储100个整数,数组的下标从0开始,这100个元素的表示方式是A[0],A[1],…,A[99],而下面这个循环中,获取数组中的元素是A[0],A[1],…,A[100],超出了数组下标的最大值,这称为数组下标越界。

  int A[100];  int sum=0;  …  for(i=0;i<=100;i++)       sum+=A[i];

(6)使用了错误的或不可能的循环终止条件,如while(|a|<0)。

(7)当遇到发散的迭代时不能终止循环。

① 可能一直递归下去,找不到返回的路径。例如,以下代码会一直直接递归。

  public int func (int n)  {       int i;       …       func(n-1);       …  }

② 递归嵌套的层次太深,每嵌套调用一次都要消耗堆栈资源,可能会导致递归还未到回归点时,堆栈资源已被耗光。例如,以下代码会一直间接递归。

  public int funcA (int n)  {       funcB();       …  }  public int funcB()  {    int m;       funcA(m);       …  }

04.

异常处理

比较完善的单元设计要求能预见异常的条件,并设置适当的异常处理,以便在程序异常时能调整异常程序,保证其逻辑上的正确性。异常处理模块经常出现的错误或缺陷如下。

(1)异常的描述难以理解。例如,对于常见的用户登录界面,输入用户名和密码即可完成登录,若用户名和密码错误,错误提示为“Error code00001”。

(2)异常的描述不足以定位错误和确定异常的原因,如“登录失败”。

(3)显示的错误与实际的错误不符。例如,用户名错误,结果却提示“密码错误”。

(4)对错误条件的处理不正确。例如,提示“密码错误”,但单击“确定”按钮后仍能登录成功。

(5)在对错误进行处理之前,错误条件已经引起系统的干预等。严重的错误会导致操作系统的干预。例如,实现购买商品的单元没有进行事务及异常管理,在生成订购关系时异常,导致用户扣款却没有生成送货订单。

05.

边界条件

边界上出现错误是常见的,因此应当认真、仔细地测试边界处单元是否能够正常工作。不仅要注意一些可能与边界有关的数据类型,如数值、字符等,还要注意这些边界的首个值、最后一个值、最大值、最小值等。

在第n次循环中取最大值或最小值时容易发生错误。例如:

  int sum = 0;  int[] a = new int[] { 1,2,3,4,5,6,7,8,9,0 };  for (int i = 1; i <= 10; i++)  {       sum = sum + a[i];  }

特别要注意数据流与控制流中刚好等于、大于、小于确定的边界值时出现错误的可能性。

10.1.4

单元测试和集成测试、系统测试的区别

单元测试和集成测试、系统测试的区别如下。

(1)测试方法不同。

① 单元测试属于白盒测试。

② 集成测试属于灰盒测试。

③ 系统测试属于黑盒测试。

(2)考察范围不同。

① 单元测试主要测试单元内部的数据结构、逻辑控制、异常处理等。

② 集成测试主要测试模块之间的接口和接口数据的传递关系,以及模块组合后的整体功能。

③ 系统测试主要测试整个系统相对于需求的符合度。

(3)评估基准不同。

① 单元测试的评估基准主要是逻辑覆盖率。

② 集成测试的评估基准主要是接口覆盖率。

③ 系统测试的评估基准主要是测试用例对需求说明书的覆盖率。

... ...

扫码/点击查看独家连载

3f87b2d8c02dec1c324cdcb5a1224638.png

25271c48bb4fccd401cb1c68a6714204.gif

c6c9f3d20c8beb64236f175fade02877.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值