zoukankan      html  css  js  c++  java
  • 实验二+101+谢艳敏

    一、实验目的

    掌握基于覆盖理论与基本路径的基本白盒测试方法和实践

    二、实验要求

    运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例,并运行测试用例检查程序的正确与否,给出程序缺陷小结。

    三、实验内容

    根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的Junit脚本。

    所有的覆盖的技术:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,基本路径测试方法。

    包括的内容有:

    1) 被测源代码:

     1 public class GetData {
     2 
     3     public static char triangle(int a, int b, int c) {
     4         if(a<=b+c ||b<=a+c || c<=a+b)
     5         {
     6             if ((a==b)&& (b==c)&&(c==a)) {
     7                 return '1';
     8             }else if ((a==b) || (b==c) || (a==c)) {
     9                 return '2';
    10             }else if (a*a+b*b==c*c || b*b+c*c==a*a || a*a+c*c==b*b) {
    11                 return '3';
    12             }else {
    13                 return '4';
    14             }
    15         }else 
    16         {
    17             return '5';
    18         }
    19     }    
    20 }
    21 
    22 
    23 import java.util.Scanner;
    24 
    25 public class Main {
    26     static String equaltrianger = "等边三角形";
    27     static String isotrianger = "等腰三角形";
    28     static String comtrianger = "一般三角形";
    29     static String rigtrianger = "直角三角形";
    30     static String sidewrong = "边值不存在";
    31     static String noconstruct = "不构成三角形";
    32     
    33     public static void main(String[] args) {
    34         char resulet = ' ';
    35         System.out.println(" 1 进行三角形判断操作");
    36         System.out.println(" x 退出程序");
    37             
    38         while(true)
    39         {
    40             Scanner sc = new Scanner(System.in);    
    41             String temp =sc.nextLine(); 
    42             
    43             switch (temp)
    44             {
    45                 case "1":{ 
    46                     System.out.println("请输入三角形的三条边:");
    47                     try {
    48                         
    49                         Scanner sca = new Scanner(System.in);
    50                         int a = sca.nextInt();
    51                         Scanner scb = new Scanner(System.in);
    52                         int b = scb.nextInt();
    53                         Scanner scc = new Scanner(System.in);
    54                         int c = scc.nextInt();
    55                         if (a<1 || a>100 || b<1 || b>100 || c<1 || c>100) {
    56                             System.out.println("边值不存在!");
    57                         }else {
    58                             resulet =  GetData.triangle(a, b, c);
    59                         if (resulet == '1') {
    60                             System.out.println(equaltrianger);
    61                         }else if (resulet == '2') {
    62                             System.out.println(isotrianger);
    63                         }else if (resulet == '3') {
    64                             System.out.println(rigtrianger);
    65                         }else if (resulet == '4') {
    66                             System.out.println(comtrianger);
    67                         }else {
    68                             System.out.println(noconstruct);
    69                             }
    70                         }
    71                         
    72                         System.out.println(" 1 进行三角形判断操作");
    73                         System.out.println(" x 退出程序");                            
    74                         break;
    75                         } catch (Exception e) {
    76                             System.out.println("请输入正确的边值!");
    77                             System.out.println(" 1 进行三角形判断操作");
    78                             System.out.println(" x 退出程序");
    79                             break;
    80                         }    
    81                     }
    82                 
    83             case "x": 
    84                 System.exit(1);
    85             default:
    86                 System.out.println("请选择正确的操作!") ; 
    87             }
    88         }        
    89     }
    90 }

    2)依据覆盖技术,测试用例列表:

    DD-路径(只压缩链路经)

    程序图节点

    DD-路径

    4

    A

    6

    B

    17

    C

    8

    D

    7

    E

    10

    F

    9

    G

    11

    H

    13

    I

    58

    J

    (I)语句覆盖:

    A-C-J

    A-B-E-J

    A-B-D-G-J

    A-B-D-F-I-J

    A-B-D-F-H-J

    测试用例:

    用例ID

    输入值

    执行路径

    预期输出

    a

    b

    c

    result

    1

    3

    1

    7

    A-C-J

    不构成三角形

    2

    3

    3

    3

    A-B-E-J

    等边三角形

    3

    3

    1

    3

    A-B-D-G-J

    等腰三角形

    4

    3

    7

    5

    A-B-D-F-I-J

    一般三角形

    5

    3

    4

    5

    A-B-D-F-H-J

    直角三角形

    (II)分支覆盖(判断覆盖):

    A-C-J

    A-B-E-J

    A-B-D-G-J

    A-B-D-F-I-J

    A-B-D-F-H-J

    测试用例同语句覆盖测试用例

    (III)路径覆盖:

    A-C-J

    A-B-E-J

    A-B-D-G-J

    A-B-D-F-I-J

    A-B-D-F-H-J

    测试用例同语句覆盖测试用例

    (IV)条件覆盖:各个条件取真或假的可能至少执行一次

    A-B-E-J

    A-C-J

    A-B-D-G-J

    A-B-D-F-H-J

    A-B-D-F-I-J

    编号

    a<=b+c

     

    b<=a+c

     

    c<=a+b

     

    a<=b+c ||b<=a+c || c<=a+b

     

    覆盖路径

    1

    F

    F

    F

    F

    A-C

    2

    F

    F

    T

    T

    A-B

    3

    F

    T

    F

    T

        A-B

    4

    F

    T

    T

    T

    A-B

    5

    T

    T

    T

    T

    A-B

    6

    T

    T

    F

    T

    A-B

    7

    T

    F

    T

    T

    A-B

    8

    T

    F

    F

    T

    A-B

    编号

    a==b

     

    b==c

     

    c==a

     

    (a==b)&& (b==c)&&(c==a)

     

    覆盖路径

    9

    F

    F

    F

    F

    A-C

    10

    F

    F

    T

    F

    A-C

    11

    F

    T

    F

    F

        A-C

    12

    F

    T

    T

    F

    A-B

    13

    T

    T

    T

    T

    A-B

    14

    T

    T

    F

    F

    A-C

    15

    T

    F

    T

    F

    A-C

    16

    T

    F

    F

    F

    A-C

    编号

    a==b

     

    b==c

     

    c==a

     

    (a==b) || (b==c) || (a==c)

     

     

    覆盖路径

    17

    F

    F

    F

    F

    D-F

    18

    F

    F

    T

    T

    D-G

    19

    F

    T

    F

    T

        D-G

    20

    F

    T

    T

    T

    D-G

    21

    T

    T

    T

    T

    D-G

    22

    T

    T

    F

    T

    D-G

    23

    T

    F

    T

    T

    D-G

    24

    T

    F

    F

    T

    D-G

    编号

    a*a+b*b==c*c

     

    b*b+c*c==a*a

     

    a*a+c*c==b*b

     

    a*a+b*b==c*c || b*b+c*c==a*a || a*a+c*c==b*b

     

    覆盖路径

    25

    F

    F

    F

    F

    F-I

    26

    F

    F

    T

    T

    F-H

    27

    F

    T

    F

    T

        F-H

    28

    F

    T

    T

    T

    F-H

    29

    T

    T

    T

    T

    F-H

    30

    T

    T

    F

    T

        F-H

    31

    T

    F

    T

    T

    F-H

    32

    T

    F

    F

    T

    F-H

    测试用例:

    用例ID

    输入值

    执行路径

    覆盖条件

    预期输出

    a

    b

    c

    result

    1

    3

    1

    7

    A-C-J

     

    1,9-11,14-16

    不构成三角形

    2

    3

    3

    3

    A-B-E-J

     

    2-8,12,13

    等边三角形

    3

    3

    1

    3

    A-B-D-G-J

     

    2-8,12,13,18-24

    等腰三角形

    4

    3

    4

    5

    A-B-D-F-H-J

     

    2-8,12,13,17,26-32

    直角三角形

    5

    3

    7

    5

    A-B-D-F-I-J

     

    2-8,12,13,17,25

    一般三角形

    3)相应Junit测试脚本、执行结果

    package triangle01;
    
    import static org.junit.Assert.*;
    
    import org.junit.Before;
    import org.junit.Test;
    
    public class GetDataTest {
    
        @Before
        public void setUp() throws Exception {
        }
    
        public String change(char c) {
            switch (c) {
            case '1':
                return "等边三角形";
    
            case '2':
                return "等腰三角形";
    
            case '3':
                return "直角三角形";
    
            case '4':
                return "一般三角形";
    
            case '5':
                return "不构成三角形";
    
            default:
                break;
    
            }
            return null;
        }
    
        
        @Test
        public void test() {
            String s1 = change(GetData.triangle(3, 4, 5));
            assertEquals("直角三角形", s1);
            String s2 = change(GetData.triangle(3, 7, 5));
            assertEquals("一般三角形", s2);
            String s3 = change(GetData.triangle(3, 1, 7));
            assertEquals("不构成三角形", s3);
            String s4 = change(GetData.triangle(3, 3, 3));
             assertEquals("等边三角形", s4);
             String s5 = change(GetData.triangle(3, 1, 1));
            assertEquals("等腰三角形", s5);
        }
    
    }

    4)给出测试参数化和打包测试的脚本,并生成执行结果

    参数化测试

    package triangle01;
    
    
    import static org.junit.Assert.*;
    
    import java.util.Arrays;
    import java.util.Collection;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.junit.runners.Parameterized;
    import org.junit.runners.Parameterized.Parameters;
    
    
    
    
    @RunWith(Parameterized.class)
    public class GetDataParamTest {
    
        private int param1;
        private int param2;
        private int param3;
        private String result;
        
        GetData triangle = new GetData();
        //把被测代码所返回的字符类型转换为字符串类型
        public String change(char c) {
            switch (c) {
            case '1':
                return "等边三角形";
    
            case '2':
                return "等腰三角形";
    
            case '3':
                return "直角三角形";
    
            case '4':
                return "一般三角形";
    
            case '5':
                return "不构成三角形";
    
            default:
                break;
    
            }
            return null;
        }
        
        @Parameters
        public static Collection data(){
            return Arrays.asList(new Object[][]{
                {3, 1, 7,"不构成三角形"},
                {3, 3, 3,"等边三角形"},
                {3, 1, 3,"等腰三角形"},
                {3, 4, 5,"直角三角形"},
                {3, 7, 5,"一般三角形"}
                
            });
        }
        
        public GetDataParamTest(int param1,int param2,int param3,String result){
            this.param1 = param1;
            this.param2 = param2;
            this.param3 = param3;
            this.result = result;
        }
        
        @Test
        public void testParam(){
            String rs = change(triangle.triangle(param1, param2, param3));
            assertEquals(rs,result);
        }
    
    }

    打包测试

    package triangle01;
    
    import org.junit.runner.RunWith;
    import org.junit.runners.Suite;
    
    
    @RunWith(Suite.class)
    @Suite.SuiteClasses(
            {
                GetDataTest.class,
                GetDataParamTest.class,
            
            })
    
    public class AllTriangleTest {
    
    
    }

    4、测试小结:

      1、测试找到的缺陷清单:测试代码对“不构成三角形”的判断有错误。

      2、修改建议:建议修改对“不构成三角形”的判断。

        3、总结: 通过本次实验,我加深了对白盒测试的理解。学会了画控制流图,加深了对白盒测试的基本路径测试方法的理解,能够进一步设计出测试用例。同时,我还学会了Junit脚本的使用方法,包括测试参数化和打包测试。参数化测试,简化了测试,只写一个测试函数,把若干种情况作为参数传递进去,一次性地完成测试。打包测试,将所有需要运行的测试类集中起来,一次性地运行完毕,大大地方便了我们的测试工作。

  • 相关阅读:
    C# 16 进制字符串转 int
    C# 16 进制字符串转 int
    dotnet 设计规范 · 抽象定义
    dotnet 设计规范 · 抽象定义
    C# 从零开始写 SharpDx 应用 控制台创建 Sharpdx 窗口
    C# 从零开始写 SharpDx 应用 控制台创建 Sharpdx 窗口
    C# 判断两条直线距离
    C# 判断两条直线距离
    PHP file() 函数
    PHP fgetss() 函数
  • 原文地址:https://www.cnblogs.com/xwhisper/p/6704207.html
Copyright © 2011-2022 走看看