zoukankan      html  css  js  c++  java
  • 实验二+005+陈晓华

    一、实验目的

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

    二、实验要求

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

    三、实验内容

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

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

      包括的内容有:

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

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

          

                                  

                         程序图                                                  DD-路径图

    DD-路径:

    程序图节点

    DD-路径

    19

    A

    20

    B

    23,24,26

    C

    27

    D

    29

    E

    30

    F

    33

    G

    36

    H

    55

    I

          

    (I)语句覆盖:

    A-C-D-H-I 和 A-C-E-F-H-I A-C-E-G-H-I A-B-I

    测试用例:

    用例ID

    输入值

    执行路径

    预期输出

    headphone

    shell

    protector

    string类型)

    1

    1

    2

    3

    A-C-D-H-I

    佣金金额:12.40

    2

    10

    20

    5

    A-C-E-F-H-I

    佣金金额:106.00

    3

    100

    1

    1

    A-C-E-G-H-I

    佣金金额:1463.60

    4

    -1

    -1

    -1

    A-B-I

    输入格式错误,请重试

    (II)分支覆盖(判断覆盖):(与语句覆盖一样)

    A-C-D-H-I 和 A-C-E-F-H-I A-C-E-G-H-I A-B-I

    测试用例:

    用例ID

    输入值

    执行路径

    预期输出

    headphone

    shell

    protector

    string类型)

    1

    1

    2

    3

    A-C-D-H-I

    佣金金额:12.40

    2

    10

    20

    5

    A-C-E-F-H-I

    佣金金额:106.00

    3

    100

    1

    1

    A-C-E-G-H-I

    佣金金额:1463.60

    4

    -1

    -1

    -1

    A-B-I

    输入格式错误,请重试

    (III)路径覆盖:(与语句覆盖一样)

    A-C-D-H-I 和 A-C-E-F-H-I A-C-E-G-H-I A-B-I

    测试用例:

    用例ID

    输入值

    执行路径

    预期输出

    headphone

    shell

    protector

    string类型)

    1

    1

    2

    3

    A-C-D-H-I

    佣金金额:12.40

    2

    10

    20

    5

    A-C-E-F-H-I

    佣金金额:106.00

    3

    100

    1

    1

    A-C-E-G-H-I

    佣金金额:1463.60

    4

    -1

    -1

    -1

    A-B-I

    输入格式错误,请重试

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

    编号

    headphone < 0 

    shell < 0

    protector < 0

    headphone < 0 || shell < 0 || protector < 0

    覆盖路径

    1

    F

    F

    F

    F

    A-C

    2

    F

    T

    F

    T

    A-B

    3

    T

    F

    F

    T

    A-B

    4

    T

    T

    T

    T

    A-B

    编号

    sum < 1000

    5

    T

    6

    F

    编号

    sum >= 1000 

     sum <= 1800

    sum >= 1000 && sum <= 1800

    覆盖路径

    7

    F

    F

    F

    E-G

    8

    F

    T

    F

    E-G

    9

    T

    F

    F

    E-G

    10

    T

    T

    T

    E-F

    测试用例:

    用例ID

    输入值

    执行路径

    覆盖

    条件

    预期输出

    headphone

    shell

    protector

    string类型)

    1

    1

    6

    4

    A-C-D-H-I

    1,5,7

    佣金金额:17.20

    2

    1

    -5

    4

    A-B-I

    2

    输入格式错误,请重试

    3

    -1

    120

    1

    A-B-I

    3

    输入格式错误,请重试

    4

    -2

    -4

    -4

    A-B-I

    4

    输入格式错误,请重试

    5

    1

    2

    2

    A-C-D-H-I

    158

    佣金金额:11.60

    6

    100

    20

    50

    A-C-E-G-H-I

    169

    佣金金额:1580.00

    7

    10

    50

    60

    A-C-E-F-H-I

    1,6,10

    佣金金额:217.00

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

          A.语句覆盖:

           

     1 public class CommissionTest {
     2 
     3     
     4     @Before
     5     public void setUp() throws Exception {
     6     }
     7 
     8     @After
     9     public void tearDown() throws Exception {
    10     }
    11 
    12     @Test
    13     public void TestStateCoverage1() {
    14         assertEquals("佣金金额:12.40元
    ",Commission.commission(1, 2, 3));
    15     }
    16     
    17     @Test
    18     public void TestStateCoverage2() {
    19         assertEquals("佣金金额:106.00元
    ",Commission.commission(10, 20, 5));
    20     }
    21     
    22     @Test
    23     public void TestStateCoverage3() {
    24         assertEquals("佣金金额:1463.60元
    ",Commission.commission(100, 1, 1));
    25     }
    26     
    27     @Test
    28     public void TestStateCoverage4() {
    29         assertEquals("输入格式错误,请重试
    ",Commission.commission(-1, -1, -1));
    30     }
    31 
    32 }

          结果:

              

          B.条件覆盖:

     1 public class CommissionConditionTest {
     2 
     3     @Before
     4     public void setUp() throws Exception {
     5     }
     6 
     7     @After
     8     public void tearDown() throws Exception {
     9     }
    10 
    11     @Test
    12     public void TestConditionCoverage1() {
    13         assertEquals("佣金金额:17.20元
    ",Commission.commission(1, 6, 4));
    14     }
    15     
    16     @Test
    17     public void TestConditionCoverage2() {
    18         assertEquals("输入格式错误,请重试
    ",Commission.commission(1, -5, 4));
    19     }
    20     
    21     @Test
    22     public void TestConditionCoverage3() {
    23         assertEquals("输入格式错误,请重试
    ",Commission.commission(-1, 120, 1));
    24     }
    25     
    26     @Test
    27     public void TestConditionCoverage4() {
    28         assertEquals("输入格式错误,请重试
    ",Commission.commission(-2, -4, -4));
    29     }
    30     
    31     @Test
    32     public void TestConditionCoverage5() {
    33         assertEquals("佣金金额:11.60元
    ",Commission.commission(1, 2, 2));
    34     }
    35     
    36     @Test
    37     public void TestConditionCoverage6() {
    38         assertEquals("佣金金额:1580.00元
    ",Commission.commission(100, 20, 50));
    39     }
    40     
    41     @Test
    42     public void TestConditionCoverage7() {
    43         assertEquals("佣金金额:217.00元
    ",Commission.commission(10, 50, 60));
    44     }
    45 
    46 }

          结果:

            

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

          

     1 import org.junit.runner.RunWith;
     2 import org.junit.runners.Suite;
     3 
     4 @RunWith(Suite.class)
     5 @Suite.SuiteClasses({
     6     CommissionTest.class,
     7     CommissionConditionTest.class,
     8 })
     9 
    10 public class AllCommissionTest {
    11 
    12 }

          结果:

            

    4、测试小结:

    •      此次测试并未找到缺陷
    •      对源代码的修改建议:
        •   可以将判断不合法输入的工作放到方法(commission)外部,即在主函数内判断;commission方法仅仅用来计算佣金金额。
        •     commission的返回内容,我建议只有佣金金额(换行符可以放到外面来实现) 
    •      测试总结与心得体会 
        •   画路径图之前,最好先话程序的控制流图,这样更不容易出错;
        •      根据路径图设计测试用例,发现分析各种覆盖测试变得容易多了,不容易漏掉情况,没有之前写着那么晕,思路会更加清楚
        •      对Junit的使用比上次课更加熟悉了。之前在一个test方法里就写多个断言,出错之后,只能一个个检查,很麻烦;现在分方法进行测试,能够知道问题出在哪儿;但是对参数化测试还不是很熟练,课下要多练习练习。
  • 相关阅读:
    【转】sublime text 2 中文乱码解决办法
    vi使用入门指南
    【原创】基于部署映像服务和管理(DISM)修改映象解决WIN7 USB3.0安装时报错
    日语五十音图快速记忆法
    深度阅读:C语言指针,从底层原理到花式技巧,图文+代码透析
    全民热衷“合成大西瓜”,游戏外挂上热搜,不愧是程序员!
    零基础想要转行成为程序员?这几点你要知道
    恩怨纠缠的苹果和微信!苹果底层开源代码中包含兼容微信的代码,这是苹果偷学代码啦?
    好你个C语言,原来还有这么多副面孔!
    “熊孩子”乱敲键盘就攻破了Linux桌面,其父亲发现linux漏洞
  • 原文地址:https://www.cnblogs.com/ChenXh123/p/6709525.html
Copyright © 2011-2022 走看看