当前位置 博文首页 > 无限迭代中......:白盒测试——简单分支函数测试

    无限迭代中......:白盒测试——简单分支函数测试

    作者:[db:作者] 时间:2021-07-19 19:21

    实验目的

    (1)掌握白盒测试技术,并能应用白盒测试技术设计测试用例

    (2)能用Junit实施测试

    实验内容

    void  DoWork(int x,int y,int z){
    1   int  k=0,j=0;
    2   if(( x>3 ) && ( z<10 ))
    3   {
    4       k=x*y-1;     
    5       j=sqrt(k);
    6   }
    7   if(( x= =4 ) || ( y>5 ))
    8       j=x*y+10;   
    9   j=j%3; 
    10  return j;
    11 }
    

    说明:程序段中每行开头的数字(1~11)是对每条语句的编号。

    (1)分别以语句覆盖、判定覆盖、条件覆盖和路径覆盖方法设计测试用例,并写出每个测试用例的执行路径(用题中给出的语句编号表示)。

    (2)编写Java类,调用该方法,并用Junit测试工具编写测试代码进行测试。

    测试用例的编写

    程序流程图

    程序共有4条路径:?

    P1(1-2-3-4-5-6-7-8-9-10)

    P2(1-2-3-4-5-6-7-9-10)

    P3(1-2-7-8-9-10)

    P4(1-2-7-9-10)

    语句覆盖仅需一次测试即可完成覆盖:

    测试用例

    判定取值(M,N)

    条件取值

    覆盖路径

    输入:x=4,y=6,z=9

    输出:j=1

    T,T

    T1,T2,T3,T4

    P1(1-2-3-4-5-6-7-8-9-10)

    ?

    判定覆盖需要进行两次测试可以完成覆盖:

    测试用例

    判定取值(M,N)

    条件取值

    覆盖路径

    输入:x=5,y=4,z=9

    输出:j=1

    T,F

    T1,T2,F3,F4

    P2(1-2-3-4-5-6-7-9-10)

    输入:x=4,y=4,z=11

    输出:j=2

    F,T

    T1,F2,T3,F4

    P3(1-2-7-8-9-10)

    ?

    条件覆盖需要进行两次测试可以完成覆盖:

    测试用例

    判定取值(M,N)

    条件取值

    覆盖路径

    输入:x=4,y=6,z=11

    输出:j=1

    F,T

    T1,F2,T3,T4

    P1(1-2-3-4-5-6-7-8-9-10)

    输入:x=2,y=4,z=9

    输出:j=0

    F,F

    F1,T2,F3,F4

    P4(1-2-7-9-10)

    ?

    路径覆盖需要进行四次测试完成覆盖:

    测试用例

    判定取值(M,N)

    条件取值

    覆盖路径

    输入:x=4,y=6,z=9

    输出:j=1

    T,T

    T1,T2,T3,T4

    P1(1-2-3-4-5-6-7-8-9-10)

    输入:x=5,y=4,z=9

    输出:j=1

    T,F

    T1,T2,F3,F4

    P2(1-2-3-4-5-6-7-9-10)

    输入:x=4,y=4,z=11

    输出:j=2

    F,T

    T1,F2,T3,F4

    P3(1-2-7-8-9-10)

    输入:x=2,y=4,z=9

    输出:j=0

    F,F

    F1,T2,F3,F4

    P4(1-2-7-9-10)

    ?

    测试过程

    测试类:

    package io.shentuzhigang.demo.whitebox;
    
    /**
     * @author ShenTuZhiGang
     * @version 1.0.0
     * @date 2021-04-06 17:03
     */
    public class Exp1 {
    
        public Exp1() {
        }
    
        public int doWork(int x, int y, int z) {
            int k = 0, j = 0;
            if ((x > 3) && (z < 10)) {
                k = x * y - 1;
                j = (int) Math.sqrt(k);
            }
            if ((x == 4) || (y > 5)) {
                j = x * y + 10;
            }
            j = j % 3;
            return j;
        }
    
        public int div(int x, int y) {
            return x / y;
        }
    
    }

    JUnit测试类:

    package io.shentuzhigang.demo.whitebox;
    
    import org.junit.jupiter.api.Test;
    import static org.hamcrest.MatcherAssert.*;
    import static org.hamcrest.Matchers.*;
    
    /**
     * @author ShenTuZhiGang
     * @version 1.0.0
     * @date 2021-04-06 17:02
     */
    public class Exp1Test {
    
        private Exp1 exp1;
    
        public Exp1Test() {
            exp1 = new Exp1();
        }
    
        @Test
        public void testDoWork() {
            // 语句覆盖测试
            assertThat(exp1.doWork(4, 6, 9),is(1));
            // 判定覆盖测试
            assertThat(exp1.doWork(5, 4, 9),is(1));
            assertThat(exp1.doWork(4, 4, 11),is(2));
            // 条件覆盖测试
            assertThat(exp1.doWork(4, 6, 11),is(1));
            assertThat(exp1.doWork(2, 4, 9),is(0));
            // 路径覆盖测试
            assertThat(exp1.doWork(4, 6, 9),is(1));
            assertThat(exp1.doWork(5, 4, 9),is(1));
            assertThat(exp1.doWork(4, 4, 11),is(2));
            assertThat(exp1.doWork(2, 4, 9),is(0));
        }
    
    }
    
    

    测试结果的分析

    ?

    测试文档的撰写

    ?

    心得与体会

    (1)掌握白盒测试技术

    (2)应用白盒测试技术设计测试用例

    (3)能用Junit实施测试

    参考文章

    软件测试实验1——语句覆盖、判定覆盖、条件覆盖、路径覆盖的用例设计及Junit测试

    cs