软件测试实验报告

南京理工大学软件测试实验报告

20##年11月

1. 问题描述

用户任意输入一个日期(年 月 日),再输入一个整数n,程序实现输出这个日期的后n天的日期。其中输入的年份范围为(1912 <= year <= 2990),月份范围为(0 < month <= 12),日的范围(0 < day <= 31),n的范围为(0 < n <= 31)。

  

2. 测试分析与设计

由于输入变量有4个,而且变量之间相互独立,且又相互关联。输出结果又3个,输出的3个结果与输入的4个变量紧密相连。输入的4个变量都有自己的范围,这在功能性的黑盒测试用例设计上test case就可以用边界值分析、健壮性分析、最坏情况和等价类测试方法,因为在program中加入了判断溢出的代码,在前述4个输入条件的基础上针对day加了一些更具体的溢出判断,故可以用特殊值测试方法。程序中使用了很多if语句,所以用基于决策树的测试也可以。基于结构性测试,我使用白盒测试方法,利用junit来创建测试用例,在生成的next_n_daystest.java 中实现预测输出结果与程序运行结果的比较(主要运用this.assertEquals()函数)。

3. 黑盒测试用例设计

由于黑盒测试方法太多,经过对program的综合考虑,决定用最坏情况分析方法测试,最坏情况分析是边界值分析和健壮性分析的综合,对program测试更具全面性,而因为有4个变量,故要产生54= 625个测试用例,所以在下面只是列出了其中一小部分测试用例。再用特殊值测试。

4. 白盒测试用例设计

1)    主要代码

//辅助函数:用于求4种类型的输出后n天的计算。

    void daa() {

       if (n <= 31)

           day = n;

       else {

           day = n - 31;

           mon += 1;

       }

    }

    void dab() {

       if (n <= 30)

           day = n;

       else {

           day = n - 30;

           mon += 1;

       }

    }

    void dac() {

       if (flag == 1) {

           if (n <= 29)

              day = n;

           else {

              day = n - 29;

              mon += 1;

           }

       } else {

           if (n <= 28)

              day = n;

           else {

              day = n - 28;

              mon += 1;

           }

       }

    }

    void dad() {

       if (n <= 31)

           day = n;

       else {

           day = n - 31;

           mon = 1;

           year += 1;

       }

    }

//辅助函数:用于判断闰年

int leapyear(int year) // 判断某年是否闰年 闰年返回1,平年返回0

   {

       if ((year % 400 == 0) || (year % 100 != 0) &&

(year % 4 == 0))

          return 1;

       else

          return 0;

   }

//关键代码:用于返回程序结果的函数

   void show ()

   {

       Scanner br = new Scanner(System.in);

       System.out.println("Welcome to next_n_days system");

       System.out.println("The rules :");

       System.out.println("The year must between 1912 and 2990");

       System.out.println("The n must between 1 and 31");

      


do {

          System.out.println("please input data:year month day");

          year = br.nextInt();

          mon = br.nextInt();

          day = br.nextInt();

flag = leapyear(year);

       }

while (day < 0|| day > 31|| mon < 0|| mon > 12

|| year < 1912|| year > 2990

|| ((mon == 4 || mon == 6 || mon == 9 || mon == 11) && day > 30)

|| (mon == 2 && ((flag == 1 && day > 29) || (flag == 0 && day > 28))));

       do {

          System.out.println("please input n:");

          n = br.nextInt();

       }

while (n < 0 || n > 31);

       n = n + day;

       switch (mon) {

       case 1:case 3:case 5:case 7:case 8:case 10:daa();

          break;

       case 4:case 6:case 9:case 11:dab();

          break;

       case 2:dac();

          break;

       case 12:dad();

          break;

       }

       System.out.println("The next n day is:");

       System.out.print(year);

       System.out.print(" ");

       System.out.print(mon);

       System.out.print(" ");

       System.out.println(day);

   }

 

int mon = 2;

    int day = 29;

    int n = 2;

    next_n_days t = new next_n_days(year, mon, day, n);

    String res = t.solve();

    this.assertEquals(res, "2000 3 2");

}

}

2) 程序流程图      

                                                                                                                       

3)DD路径图

A: 1~5   B: 7~10    C: 11~14    D: 15       E: 16

F: 17    G: 18~19   H: 20~21    I: 22~23   J: 24~25

K: 27~33

5. 测试用例的设计体会

第一次这么认真的写程序,现在终于完成了,真的感觉有一种成就感,刚开始是想copy别人的,后面想到要考试了还是自己写了,程序写了两天,其中出现了很多问题,因为当初java没有学好,所以边学,边问同学,然后就是软件测试部分,从朋友那知道怎么用eclipse写测试用例,由于程序写的比较混乱,又用Junit生成测试用例测试就要求程序中不能用main()函数,所以最后我又把程序改了,用show()函数实现最后输出,还在程序中加了构造函数和一些实现Junit的代码:

String solve()

{

   daa();

   dab();

   dac();

   dad();

   show();

   String result;

   result = year+" "+mon+" "+day;

   return result;

}

然后就是在Junit中写了一些用例测试代码,实现预算结果和程序运行结果的比较,这里用了this.assertEquals(),java自带了函数。

关于黑盒测试的一些测试方法,之前由于没有课本,上课也没有怎么听懂,所以找同学借了书仔细的看了后,然后结合自己写的程序分析,决定用最坏情况分析方法,这样比较全面的对程序测试,剩下的缺陷我用了特殊值分析方法来完善。其实我仔细考虑过,基于决策表的测试时一个非常好的测试方法,但结合我的程序发现真的不是用,应为所有的输出结果只有两种,就是输入有误,和输出实际结果。所以对软件测试没有帮助。

 

第二篇:软件测试实验报告2

                     软件测试实验报告

                       计科0902  梁涛

                                            2009310200227

一、    实验目的

1.        了解QTP功能测试工具的用途和简单的操作。

2.        掌握QTP功能测试工具测试过程。

3.        能够使用QTP功能测试工具进行简单的测试工作。

二、实验环境

Windows系统,IE浏览器,QTP功能测试工具

三、    实验内容

1.         录制测试脚本。

在默认的案例飞机订票系统进行录制,然后按照如下图进行录制:

    选择好你要录制程序的版本,在录制之前最好做一下回归。

2.         进行录制程序

录制好的程序如图所示:

   在程序录制好之后做好让程序跑一下,以免后面的步骤发生错误,造成不必要的麻烦。

3. 开始对程序进行参数化

   如图所示:

如图所示进行参数化,将参数设置成data table形式,然后再data table中写入参数,写好参数后让程序跑一下。但是跑的过程中肯定会出现这样的错误:

 形成这种错误的原因是什么呢??是因为你在设置参数化的时候没有想到有些你摄者的参数是走不通的,因为你设置的参数中没有涉及到所有的参数,而且你的参数都是data table的,这是我们需要进行另一个操作就是参数化中很重要的随机数的设置如图所示:

设置好随机数后再让程序跑一下就可以成功了。在进行参数化的时候你有时候可能不知道哪些参数该进行参数化,这是你可以使用data divier进行参数化,他会告诉你那些需要进行参数化。

4、查看测试结果

  程序跑完后后,可以看到:

实验结果在什么时候显示你可以根据自己的喜欢自动进行设置。

四、实验结果分析与心得

通过实验,学会了如果用QTP进行功能测试,以下是我在QTP方面的使用总结:

1. 计划好脚本录制的策略。由于测试资源有限,为了能好的达到提高测试效率的目的,在录制脚本时应确定系统中那些功能需要进行脚本录制,那些不需要录制?脚本录制选取测试一般为:

a) 选择实际用户操作最频繁的功能或是流程。

b) 选取在测试过程中重复性最多的功能。

c) 测试工程中输入量最大的功能或页面。如:表单的填写。

2. 脚本以录制为主,编辑为辅。QTP提供2种方式脚本生成方式:直接录制和使用Object Repository中Add Objects新增对象,然后手工编写脚本。在脚本生成时先录制,然后再使用后者对脚本进行修改和调试。

3. 参数化,提高脚本的可复用性。由于脚本录制记录的是实际上操作过程,所以录制完成后,测试路径(测试地址)、测试数据(录制时界面输入)都是固定的。当测试环境或程序业务限制发生改变后,之前录制的脚本可能需要进行大量的修改才能成功回放,所以在第一次录制后进行编辑时,就必须对脚本中可以进行参数化的地方尽量都全部参数化,提高脚本复用,减少脚本后期的维护工作。

为了减少脚本维护时可能对脚本进行误操作,导致脚本错误。建议参数和脚本分开,把参数放在一个EXCEL文件中,修改参数直接编辑EXCEL文件就可以了。具体使用方法可以参考:VB中的CreateObject。

4. 编辑脚本。通过对固定脚本的编辑,提交脚本的灵活性。在脚本中加入一些简单循环和参数化,就可以实现组合条件遍历。而不必要每个都进行录制,尽量减少脚本的代码量,增加脚本的灵活性。

5. 恢复场景。提高脚本的健壮性(容错性)。由于脚本在录制过程中只考虑正常步骤,当换一个环境运行就可以因为一些其它条件导致脚本无法运行,这时需要引入QTP的恢复场景。如:录制一个web的编辑控件。由于录制的时候本身本地的安装级别设置为最低,未弹出任何提示。但一台电脑或把设置改为中或高时,在运行过程中就会弹出安全提示。这时运行脚本就会报错,如果针对这些做一个恢复场景,脚本就能自动关闭弹出窗口继续运行脚本,是整个运行过程无需人工干预。

6. 脚本模块化(分解Test case)。在录制脚本时,应把一个单独功能作为一个ACTION或一些联系很紧密的功能放在一个ACTION,减少一个ACTION中脚本的代码行数,方面以后维护。

7. 复用ACTION。对于经常用的功能模块设置成复用ACTION,如:录制脚本时,按照登陆、新增、查询、修改、删除、退出顺序进行脚本录制,并发每个操作ACTION都设置为复用ACTION,要测试一个流程为:登陆—新增—查询—退出,只需要新建一个脚本按流程顺利调用之前的已经录制好的ACTION即可实现。

总之通过本次试验,使我初步的了解到LD的使用方法,这极大的促进了我对本门课程的学习。

相关推荐