实验二+040+薛龚

一、实验目的

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

二、实验要求

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

三、实验内容

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

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

包括的内容有:

1) 被测原代码:http://www.cnblogs.com/xwhisper/p/6629297.html

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

程序图                           

DD-路径图

 

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

程序图节点

DD-路径

程序图节点

DD-路径

19

A

49,55

J

28

B

56,57

K

29,30

C

60

L

33

D

61,62

M

34,35

E

65

N

39

F

67

O

40,41

G

68,69

P

44

H

71

Q

45,46

I

22 R

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(I)语句覆盖:(判定覆盖、基本路径测试方法与语句覆盖相同)

A-B-C-R

A-B-D-E-R

A-B-D-F-G-R

A-B-D-F-H-I-R

A-B-D-F-H-J-K-O-P-Q-R

A-B-D-F-H-J-L-M-O-P-Q-R

A-B-D-F-H-J-L-N-O-P-Q-R

A-B-D-F-H-J-L-N-O-Q-R

测试用例

用例ID 输入值 执行路径 预期输出
  Y     M     D  
1 1914 A-B-C-R 年份超出范围
2 1915 13 A-B-D-E-R 月份超出范围
3 1915 2 30 A-B-D-F-G-R 日期超出范围
4 1915 4  31 A-B-D-F-H-I-R 日期超出范围
5 2000 2 29 A-B-D-F-H-J-K-O-P-Q-R 2000  3  1
6  2000 30  A-B-D-F-H-J-L-M-O-P-Q-R 2000  5  1
7 2000 4 25 A-B-D-F-H-J-L-N-O-P-Q-R 2000  4  26
8 2000 12 31 A-B-D-F-H-J-L-N-O-Q-R 2001  1  1

 

 

 

 

 

 

 

 

 

 

(II)条件覆盖:(判定/条件覆盖、组合覆盖、路径覆盖与条件覆盖相同)

(且以下条件覆盖测试用例同时满足上文中的语句覆盖)

编号 y<1915
y>2050 y<1915||y>2050 覆盖路径
1 F F F B-D
2 F T T B-C
3 T F T B-C

 

 

 

 

 

编号 m<1 m>12 m<1||m>12 覆盖路径
4 F F F D-F
5 F T T D-E
6 T F T D-E

 

 

 

 

 

编号 (d<1||d>28)&&m==2&&!(y%4==0&&y%100!=0||y%400==0) (d<1||d>29)&&m==2&&(y%4==0&&y%100!=0||y%400==0) (d<1||d>28)&&m==2&&!(y%4==0&&y%100!=0||y%400==0))||((d<1||d>29)&&m==2&&(y%4==0&&y%100!=0||y%400==0) 覆盖路径
7 F F F F-H
8 F T T F-G
9 T F T F-G

 

 

 

 

 

 

 

 

编号 (d<1||d>30)&&(m==4||m==6||m==9||m==11)) ((d<1||d>31)&&(m==1||m==3||m==5||m==7||m==8||m==10||m==12)) ((d<1||d>30)&&(m==4||m==6||m==9||m==11))||((d<1||d>31)&&(m==1||m==3||m==5||m==7||m==8||m==10||m==12)) 覆盖路径
10 F F F H-J
11 F T T H-I
12 T F T H-I

 

 

 

 

 

 

 

 

编号 (d==28&&m==2&&!(y%4==0&&y%100!=0||y%400==0)) (d==29&&m==2&&(y%4==0&&y%100!=0||y%400==0)) (d==28&&m==2&&!(y%4==0&&y%100!=0||y%400==0))||(d==29&&m==2&&(y%4==0&&y%100!=0||y%400==0)) 覆盖路径
13 F F F J-L
14 F T T J-K
15 T F T J-K

 

 

 

 

 

 

编号 (d==30&&(m==4||m==6||m==9||m==11)) (d==31&&(m==1||m==3||m==5||m==7||m==8||m==10||m==12)) (d==30&&(m==4||m==6||m==9||m==11))||(d==31&&(m==1||m==3||m==5||m==7||m==8||m==10||m==12)) 覆盖路径
16 F F F L-N
17 F T T L-M
18 T F T L-M

 

 

 

 

 

 

 

编号 m>12 覆盖路径
19 F O-Q
20 T O-P-Q

 

 

 

 

 

 测试用例:

用例ID 输入值 执行路径 覆盖条件 预期输出
  Y     M     D  
1 2051 4 21 A-B-C-R 2 年份超出范围
2 1914 5 22 A-B-D-F-G-R 3 年份超出范围
3 2000 0 23 A-B-D-E-R 6 月份超出范围
4  2000 13 30 A-B-D-E-R 5 月份超出范围
5 2000 2 30 A-B-D-F-G-R 8 日期超出范围
6 2001 2 29 A-B-D-F-G-R 9 日期超出范围
7 2000 5 32 A-B-D-F-H-I-R 11 日期超出范围
8 2001 4 31 A-B-D-F-H-I-R 12 日期超出范围
9 2004 2 29 A-B-D-F-H-J-K-O-Q-R 1,4,7,10,14,19 2004  3  1
10 2007 2 28 A-B-D-F-H-J-K-O-Q-R 1,4,7,10,15,19 2007  3  1
11 2003 4 25 A-B-D-F-H-J-L-N-O-Q-R 1,4,7,10,13,16,19 2003  4  26
12 2001 12 31 A-B-D-F-H-J-L-M-O-P-Q-R 1,4,7,10,13,17,20 2002  1  1
13 2002 9 30 A-B-D-F-H-J-L-M-O-Q-R 1,4,7,10,13,18,19 2003  10  1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

package NextDate;
import static org.junit.Assert.*;
import org.junit.Test;

public class NextDateTestTest {
    
    @Test
    public void testNextDate1() {
        assertFalse("年份超出范围",NextDateTest.checkDate(2051, 4, 21));
    }
    
    @Test
    public void testNextDate2() {
        assertFalse("年份超出范围",NextDateTest.checkDate(1914, 5, 22));
    }
    
    @Test
    public void testNextDate3() {
        assertFalse("月份超出范围",NextDateTest.checkDate(2000, 0, 23));
    }
    @Test
    public void testNextDate4() {
        assertFalse("月份超出范围",NextDateTest.checkDate(2000, 13, 30));
    }
    @Test
    public void testNextDate5() {
        assertFalse("日期超出范围",NextDateTest.checkDate(2000, 2, 30));
    }
    @Test
    public void testNextDate6() {
        assertFalse("日期超出范围",NextDateTest.checkDate(2001, 2, 29));
    }
    @Test
    public void testNextDate7() {
        assertFalse("日期超出范围",NextDateTest.checkDate(2000, 5, 32));
    }
    @Test
    public void testNextDate8() {
        assertFalse("日期超出范围",NextDateTest.checkDate(2001, 4, 31));
    }
    
    @Test
    public void testNextDate9() {
        assertEquals("NextDate:2004年3月1日",NextDateTest.nextDate(2004, 2, 29));
    }
    
    @Test
    public void testNextDate10() {
        assertEquals("NextDate:2007年3月1日",NextDateTest.nextDate(2007, 2, 28));
    }
    
    @Test
    public void testNextDate11() {
        assertEquals("NextDate:2003年4月26日",NextDateTest.nextDate(2003, 4, 25));
    }
    
    @Test
    public void testNextDate12() {
        assertEquals("NextDate:2002年1月1日",NextDateTest.nextDate(2001, 12, 31));
    }
    
    @Test
    public void testNextDate13() {
        assertEquals("NextDate:2003年10月1日",NextDateTest.nextDate(2003, 9, 30));
    }
}

 

结果:

 

 

 

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

 参数化测试:

package NextDate;

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 ParametersTest {

    private static NextDateTest NextDatet = new NextDateTest(); 
    private int year;
    private int month;
    private int day;
    private String result;      
      
    @Parameters     
    public static Collection data() {         
         return Arrays.asList(new Object[][]{ 
                 {2051,4,21, "年份超出范围"},
                 {1914,5,22, "年份超出范围"},
                 {2000,0,23, "月份超出范围"},
                 {2000,13,30, "月份超出范围"},
                 {2000,2,30, "日期超出范围"},
                 {2001,2,29, "日期超出范围"},
                 {2000,5,32, "日期超出范围"},
                 {2001,4,31, "日期超出范围"},
                 {2004,2,29, "NextDate:2004年3月1日"},               
                 {2007,2,28, "NextDate:2007年3月1日"},              
                 {2003,4,25, "NextDate:2003年4月26日"},    
                 {2001,12,31, "NextDate:2002年1月1日"},  
                 {2003,9,30, "NextDate:2003年10月1日"},  
                 });
         } 
      
    //构造函数,对变量进行初始化 
    public ParametersTest(int year, int month, int day, String result) {         
         this.year = year;   
         this.month = month; 
         this.day = day; 
         this.result = result; 
    }
    
    
    @Test     
    public void test() { 
        if(NextDatet.checkDate(year, month, day)){
            assertEquals(result, NextDatet.nextDate(year, month, day));  
        }
        else{
            assertFalse(result,NextDateTest.checkDate(year, month, day));
        }
               
    }

}

 

结果:

 

 

 打包测试:

package NextDate;


import org.junit.runner.RunWith; 
import org.junit.runners.Suite; 


@RunWith(Suite.class) 
@Suite.SuiteClasses({NextDateTestTest.class,ParametersTest.class}) 

public class AllTest {
    
}

 

结果:

 

四、测试小结:

  测试用例均通过测试。

  因判定条件过多,对于测试的工作量就增加了很多。且因判断格式与计算nextdata分为两个方法,所以对于两个方法的测试采用不同方法。

 

posted @ 2017-04-14 16:51  elpsy  阅读(295)  评论(0编辑  收藏  举报