2023 软件质量保证与测试期末考解答题知识点整理

目录

      • 1.某种信息加密代码由以下三部分组成,请用等价类划分法分析它所有的等价类并设计测试用例
      • 2.根据程序描述,使用场景法画出事件流图、分析测试场景并设计测试用例
      • 3. 有一个学生信息输入界面,输入项有:姓名、学号、性别,输入项状态有填和不填,请采用正交法对其进行测试用例设计
      • 4. 为以下程序设计测试用例集,要求满足语句覆盖、判定覆盖、条件覆盖、条件/判定覆盖、条件组合覆盖
      • 5. 根据程序画出程序控制流图,计算环路复杂度,并导出基本路径,最后设计测试用例
      • 6. 根据程序设计测试脚本,实现语句覆盖和条件覆盖测试

1.某种信息加密代码由以下三部分组成,请用等价类划分法分析它所有的等价类并设计测试用例

题面:

  • 加密类型码:空白或三位数字
  • 前缀码:非0或1开头的三位数
  • 后缀码:四位数字

解答:

等价类划分首先需要划分有效的等价类和无效的等价类,则:

  • 加密类型码:
    • 有效等价类:空白,000 - 999
    • 无效等价类:非数字,小于三位数,大于三位数
  • 前缀码:
    • 有效等价类:200-999
    • 无效等价类:非数字,0开头的三位数,1开头的三位数,小于三位数,大于三位数,非数字
  • 后缀码:
    • 有效等价类:0000-9999
    • 无效等价类:非数字,小于四位数,大于四位数

提示:

测试用例需要覆盖以上所有的等价类

在设计有效测试用例时,可以一次性覆盖尽可能多的有效等价类,但设计无效测试用例时,为了确认是否是因为这个等价类导致的无效,所以必须一个一个测试无效等价类

解答:

  • 有效测试用例:

    • 空白 200 1111
    • 123 456 7890
  • 无效测试用例:

    • 加密类型码无效:

      • z 200 1111 (非数字
      • 12 200 1111 (低于三位数
      • 1234 200 1111 (高于三位数
    • 前缀码无效:

      • 123 z 1111 (非数字
      • 123 012 1111 (0开头
      • 123 123 1111 (1开头
      • 123 22 1111 (低于三位数
      • 123 2234 1111 (高于三位数
    • 后缀码无效:

      • 123 234 z (非数字
      • 123 234 123 (小于四位数
      • 123 234 12345 (大于四位数

2.根据程序描述,使用场景法画出事件流图、分析测试场景并设计测试用例

题面:

有一个在线购物网站,主要功能包括登录,商品选购,在线支付完成购物等。用户在使用这些功能时可能会出现各种情况:如账号不存在、密码错误、账户余额不足等。设目前该系统中仅有一个账号 abc;密码为 123; 账户余额为 200;仅有商品 A,售价均为 50 元,库存为 15, 商品 B 售价为 50 元,库存为0

试采用场景法:

  1. 分析画出事件流图,并标注基本流和备注流
  2. 分析生成测试场景
  3. 对每个场景设计相应的测试用例

提示:

绘制事件流图时,每个圆表示一个操作,基本流为正常的操作流程,备选流为正常操作流程可能产生的其他操作

解答:

2023 软件质量保证与测试期末考解答题知识点整理_第1张图片

提示:

测试场景直接把序按流程执行下来所有可能的结果全写出来就行

测试用例就直接按着场景来写

解答:

场景1:基本流

场景2:基本流,备选流1

场景3:基本流,备选流2

场景4:基本流,备选流3

场景5:基本流,备选流4

测试用例:

场景/条件 账号 密码 操作 预期结果
成功购物 abc 123 登录系统,选取A货物购买1个 支付成功
账号不存在 asdasd 123 登录系统 登录失败
密码错误 abc asdas 登录系统 登录失败
货物缺货 abc 123 登录系统,买一个B货物 提示货物缺货
余额不足 abc 123 登录系统,买15个A货物 支付失败

来点程序员笑话放松一下顺便加深一下对场景法的了解

一个测试工程师走进一家酒吧,要了一杯啤酒

一个测试工程师走进一家酒吧,要了一杯咖啡

一个测试工程师走进一家酒吧,要了0.7杯啤酒

一个测试工程师走进一家酒吧,要了-1杯啤酒

一个测试工程师走进一家酒吧,要了2^32杯啤酒

一个测试工程师走进一家酒吧,什么也没要

一个测试工程师走进家酒吧,又走出去又从窗户进来又从后门出去从下水道钻进来

一个测试工程师走进家酒吧,又走出去又进来又出去又进来又出去,最后在外面把老板打了一顿

一个测试工程师走进一家酒吧,要了一杯烫烫烫的锟斤拷

一个测试工程师走进一家酒吧,要了NaN杯Null

1T测试工程师把酒吧拆了

一个测试工程师化装成老板走进一家酒吧,要了500杯啤酒,并且不付钱

一万个测试工程师在酒吧外呼啸而过

一个测试工程师走进一家酒吧,要了一杯啤酒‘;DROPTABLE酒吧

测试工程师们满意地离开了酒吧

然后一名顾客点了一份炒饭,酒吧炸了

3. 有一个学生信息输入界面,输入项有:姓名、学号、性别,输入项状态有填和不填,请采用正交法对其进行测试用例设计

题面:

  1. 请选择 L 4 ( 2 3 ) L_4(2^3) L4(23)正交表
  2. 根据选定的正交表进行变量映射
  3. 设计测试用例

解答:

正交表得自己记一下,不难,长这样:(以后真要用这个可以直接上网抄一个来)

1 2 3
1 0 0 0
2 0 1 1
3 1 0 1
4 1 1 0

变量映射:(其实就是把输入项和状态放进去)

将1映射为填,0映射为不填

姓名 学号 性别
1 不填 不填 不填
2 不填
3 不填
4 不填

设计测试用例:(对着上面的表照抄)

  • 不填写姓名,不填写学号,不填写性别
  • 不填写姓名,填写学号,填写性别
  • 填写姓名,不填写学号,填写性别
  • 填写姓名,填写学号,不填写性别

完了不认识填这个字了

4. 为以下程序设计测试用例集,要求满足语句覆盖、判定覆盖、条件覆盖、条件/判定覆盖、条件组合覆盖

题面:

public int do_work(int A, int B) {
    int x = 0;
    if ((A > 4) && (B < 9))
        x = A - B;
    if (A == 5 && B > 28)
        x = A + B;
    return x;
}

提示:

答案不唯一,只要符合题意就行,建议自己画个表来做看的直观一点

  • 语句覆盖:所有语句都能执行到,那么使得两个if全为true即可

  • 判定覆盖:所有判定语句的真假情况都被执行一次,判定覆盖实际上包括了语句覆盖,使得两个if各出现一次truefalse即可

  • 条件覆盖:判定语句的每个子条件都至少要取得一次真值和假值,在题目中就是A > 4B < 9A == 5B > 28都各出现一次truefalse即可

  • 条件/判定覆盖:就是测试用例满足判定覆盖和条件覆盖的条件,只要写过了上面两个,那所有测试用例就一定满足条件/判定覆盖

  • 条件组合覆盖:每个判定语句的子条件真假组合结果都要执行一次,在题目中就是第一个ifA > 4B < 9;第二个ifA == 5B > 28这些东西所有可能的true false组合都要出现一次,画个表可以方便理解:

    A > 4 B < 9
    T T
    T F
    F T
    F F
    A == 5 B > 28
    T T
    T F
    F T
    F F

5. 根据程序画出程序控制流图,计算环路复杂度,并导出基本路径,最后设计测试用例

题面:

1 public  int  Function1(int num, int cycle, boolean flag)
2 {
3 int ret = 0;
4 while( cycle > 0 )
5 {
6  if( flag == true )
7  {
8  ret = num - 10;
9  break;
10  }
11  else
12  {
13   if( num%2 ==0 )
14   {
15    ret = ret * 10; 
16   }
17   else
18   {
19    ret = ret + 1;
20   }
21  }
22  cycle--;
23 }
24 return ret;
25}

提示:

程序控制流图的每个语句算一个控制节点(用圆形表示),节点的编号为程序的行号

解答:

2023 软件质量保证与测试期末考解答题知识点整理_第2张图片
提示:

环路复杂度的计算,常用的有以下两种:

  • 程序中所有的分支语句数量 + 1
  • 控制流图中所有的闭合区间数量(所有控制结点的最外层也算一个)

解答:

环路复杂度 = 3(分支语句的数量) + 1 = 4

提示:

基本路径是所有不重复的,从开头走到结束的路径(因此理论上基本路径在遇到循环的情况有无数条,所以对于带有循环的基本路径,一般只取循环一次的典型值

解答:

基本路径有以下4条:

  • 3-4-24
  • 3-4-6-8-24
  • 3-4-6-13-15-22-4-24
  • 3-4-6-13-19-22-4-24

提示:

测试用例就对着基本路径来,保证给定的条件可以让程序按着当前的基本路径执行即可,当然,测试用例答案不唯一

解答:

num cycle flag
1 10 0 true
2 100 10 true
3 10 1 flase
4 5 1 flase

6. 根据程序设计测试脚本,实现语句覆盖和条件覆盖测试

题面:

public class GCD {
    public int getGCD(int x, int y) {
        if (x < 1 || x > 100) {
            System.out.println("数据超出范围");
            return -1;
        }
        if (y < 1 || y > 100) {
            System.out.println("数据超出范围");
            return -1;
        }
        int max, min, result = 1;
        if (x >= y) {
            max = x;
            min = y;
		} else {
        	max = y;
            min = x;
        }
        for (int n = 1; n <= min; n++) {
            if (min % n == 0 && max % n == 0) {
                if (n > result)
                    result = n;
            }
        }
        System.out.println("因数:" + result);
        return result;
    }
}
  1. 设计测试脚本,对GCD的getGCD方法实现语句覆盖测试
  2. 设计测试脚本,对GCD的getGCD方法实现条件覆盖测试

提示:

如果忘记这两个逻辑覆盖是什么意思:

  • 语句覆盖:所有语句都能执行到

  • 条件覆盖:判定语句的每个子条件都至少要取得一次真值和假值

JUnit 测试类用@Test注解来标识测试方法,使用assertEquals()方法来预期输出和程序输出是否相符

用法如下:assertEquals(预期输出, 程序输出)

程序的作用是求两个数的最大公因数,测试用例答案不唯一,建议自行构思并补全

解答:

class GCDTest {
    @Test
	void getGCD() {
        GCD gcd = new GCD();
        assertEquals(预期值, gcd.getGCD(参数1, 参数2));
        .....
    }
}

额外小知识

其实公因数算法压根不需要写这么大一坨,欧几里得算法三行就能搞定:

int gcd(int a, int b) {
	if (a % b == 0) return b;
	else return gcd(b, a % b);
}

还想知道更多?快加入校内的算法协会一起研究更多骚操作吧 `:D

你可能感兴趣的:(测试用例)