软件测试技术.docx

上传人:b****8 文档编号:30070108 上传时间:2023-08-04 格式:DOCX 页数:21 大小:101.77KB
下载 相关 举报
软件测试技术.docx_第1页
第1页 / 共21页
软件测试技术.docx_第2页
第2页 / 共21页
软件测试技术.docx_第3页
第3页 / 共21页
软件测试技术.docx_第4页
第4页 / 共21页
软件测试技术.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

软件测试技术.docx

《软件测试技术.docx》由会员分享,可在线阅读,更多相关《软件测试技术.docx(21页珍藏版)》请在冰豆网上搜索。

软件测试技术.docx

软件测试技术

软件测试技术

 

桂林工学院电计系计算机教研室

二○○七年五月

目录

时间:

机房号:

得分:

实验1JUnit用例测试

JUnit是一款由ErichGamma(《设计模式》的作者)和KentBeck(极限编程的提出者)编写的开源的回归测试

框架,供Java编码人员做单元测试之用,可以从网站上免费获得。

本文使用的是NetBeans自带的JUnit3.8.1。

二、创建项目

  下面打开NetBeans,然后点击菜单“文件”->“新建项目”,打开“新建项目”对话框:

请在“类别”中选择“常规”,再从“项目”中选择“Java应用程序”,然后点击“下一步”,进入“新建Java应用程序”对话框:

 

在这个对话框中需要设置

项目的名称以及项目所在目录,我为自己的项目起名为JUnitTest,“项目位置”为G:

\YPJCCK\JUnit\NetBeans,此外,请将“创建主类”前的对号去掉。

项目创建好后,已经自带了JUnit3.8.1。

三、编写用于测试的JavaBean

  用于测试的JavaBean很简单,名为Book,只有id和name两个属性,这两个属性将分别用于两个用例当中。

下面

开始编写该JavaBean。

  请点击“文件”->“新建文件”,打开“新建文件”对话框:

确保“项目”选择的是JUnitTest,然后在“类别”中选中Java类,在“文件类型”中选中Java类,点击“下一个”,进入下一窗口:

设置类名为Book,包为net.zheng.junit.test,设置完成后点击“完成”,修改代码如下:

  packagenet.zheng.junit.test;

  publicclassBook{

    privateStringid=null;

    privateStringname=null;

    publicStringgetId(){

      returnid;

    }

    publicvoidsetId(Stringid){

      this.id=id;

    }

    publicStringgetName(){

      returnname;

    }

    publicvoidsetName(Stringname){

      this.name=name;

    }

  }

至此,用于测试的JavaBean编写完成。

四、编写测试用例

  这里只用了一个类进行测试,名为BookTest,该类继承自junit.Framework.TestCase类。

BookTest类包含两个用例,分别对应该类的testId和testName方法,即每个方法实现了一个测试用例。

注意,在JUnit中,junit.framework.TestCase的子类中每个用来实现测试用例的方法都必须以testXXX的格式来命名,这些方法在运行时会被执行。

此外,BookTest还包括setUp和tearDown这两个方法,前者在每个测试方法开始之前执行,多用来做初始化;后者在每个测试方法完成之后执行,多用来清理资源。

下面开始编写BookTest。

  请点击“文件”->“新建文件”,打开“新建文件”对话框:

确保“项目”选择的是JUnitTest,然后在“类别”中选中JUnit类,在“文件类型”中选中现有类的测试,点击“下一个”,进入下一窗口:

选择要测试的类,点击“完成”,修改代码如下:

  packagenet.zheng.junit.test;

  importjunit.framework.TestCase;

  importjunit.framework.Assert;

  publicclassBookTestextendsTestCase{

    Bookbook=null;

    //建议为测试类创建构造

    publicBookTest(Stringname){

      super(name);

    }

    protectedvoidsetUp()throwsException{

      //调用超类的setUp(),以确保测试环境被初始化

      super.setUp();

      System.out.println("测试开始!

");

      book=newBook();

      System.out.println("book对象被初始化!

");

    }

    protectedvoidtearDown()throwsException{

      System.out.println("book对象将被清理!

");

      book=null;

      System.out.println("测试结束!

");

      //调用超类的tearDown(),以确保测试环境被清理

      super.tearDown();

    }

    publicvoidtestId(){

      book.setId("001");//设置id属性的值为001

      //使用Assert查看id属性的值是否为001

      Assert.assertEquals("001",book.getId());

      System.out.println("id属性被测试!

");

    }

    publicvoidtestName(){

      book.setName("ASP");//设置name属性的值为ASP

      //使用Assert查看name属性的值是否为JSP,这是个必然出现错误的测试

      Assert.assertEquals("JSP",book.getName());

      System.out.println("name属性被测试!

");

    }

  }

这里setUp和tearDown方法没什么好说的,就是执行了对book对象的初始化和清理,不过testId和testName需要说明一下。

前者是在对book的id属性进行测试,首先赋值为”001”,然后使用Assert的assertEquals方法查看id属性中存放的值是否是期待的值,由于我的期待值也是”001”,所以执行后这个用例应该是成功的;后者则是对book的name属性进行测试,也是首先赋值为”ASP”,然后使用Assert的assertEquals方法查看其值是否是期待的,由于我特意将期待值设定为根本不可能的”JSP”,因此这个用例执行后会出现一个错误。

但请注意,由于我是特意要让测试出现错误,所以将期待值设定成了不可能的值,如果你是测试人员,请千万不要这么做,否则如果别的地方导致了错误,很容易给自己造成不必要的麻烦。

  下面简单

介绍一下上边用到的静态类junit.framework.Assert。

该类主要包含8个方法:

  1.assertEquals()方法,用来查看对象中存的值是否是期待的值,与字符串比较中使用的equals()方法类似;

  2.assertFalse()和assertTrue()方法,用来查看变量是是否为false或true,如果assertFalse()查看的变量的值是false则测试成功,如果是true则失败,assertTrue()与之相反;

  3.assertSame()和assertNotSame()方法,用来比较两个对象的引用是否相等和不相等,类似于通过“==”和“!

=”比较两个对象;

  4.assertNull()和assertNotNull()方法,用来查看对象是否为空和不为空;

  5.fail()方法,意为失败,用来抛出错误。

我个人认为有两个用途:

首先是在测试驱动开发

中,由于测试用例都是在被测试的类之前编写,而写成时又不清楚其正确与否,此时就可以使用fail方法抛出错误进行模拟;其次是抛出意外的错误,比如要测试的内容是从数据库中读取的数据

是否正确,而导致错误的原因却是数据库连接失败。

五、运行BookTest

  编写好BookTest后,就可以运行了。

请在“项目”栏中选中BookTest,点击鼠标右键,选择“运行文件”,测试信息会从“输出”窗口输出:

六、测试套件

  当有多个测试类需要一次性进行测试时,可以使用测试套件来完成这项工作。

  在NetBeans中,点击“文件”->“新建文件”,打开“新建文件”对话框:

确保“项目”选择的是JUnitTest,然后在“类别”中选中JUnit类,在“文件类型”中选中测试套件,点击“下一个”,进入下一窗口:

修改“类名”为AllTests,点击“完成”,然后修改代码如下:

  packagenet.zheng.junit.test;

  importjunit.framework.*;

  publicclassAllTestsextendsTestCase{

    publicAllTests(StringtestName){

      super(testName);

    }

    publicstaticTestsuite(){

      TestSuitets=newTestSuite("AllTests");

      ts.addTestSuite(BookTest.class);

      returnts;

    }

  }

其中TestSuite是用来组织测试类的,通过其addTestSuite()方法将测试类添加到ts对象中,凡是添加到ts中的测试类都将在运行文件时被执行。

此外,您也可以在定义ts对象时利用其构造函数将测试类添加给ts对象,例如:

  TestSuitets=newTestSuite(BookTest.class);

这并不会影响到后续使用addTestSuite()方法。

测试套件的运行方法与之前一样。

  此外,JUnit自身也提供了运行测试的环境,但需要在NetBeans中做一些改动,所以就不作详细介绍了,这里只将代码给出:

  packagenet.zheng.junit.test;

  importjunit.framework.*;

  publicclassTest{

    publicstaticvoidmain(String[]args){

      //使用TestSuite组装测试类

      TestSuitets=newTestSuite();

      ts.addTestSuite(TestBook.class);

      //textui,命令行方式

      junit.textui.TestRunner.run(ts);

      //Swingui,Swing方式

      //junit.swingui.TestRunner.run(ts.getClass());

      //awtui,AWT方式

      //junit.awtui.TestRunner.run(ts.getClass());

    }

  }

时间:

机房号:

得分:

实验2黑盒测试实验

边界值和因果图

1.实验目的:

(1)掌握边界值分析方法设计测试用例;

(2)能够分析问题,画出因果图,得出判定表,从而用因果图法设计测试用例。

2.实验环境

无特殊要求。

3.实验内容:

自动售货机问题:

分析这一段说明,列出原因和结果

画出因果图。

所有原因结点列在左边,所有结果结点列在右边。

建立中间结点,表示处理的中间状态。

中间结点:

               11.投入1元硬币且押下饮料按钮

              ?

12.押下〖橙汁〗或〖啤酒〗的按钮

              ?

13.应当找5角零钱并且售货机有零钱找

              ?

14.钱已付清

转换成判定表

在判定表中,把不可能出现的情况删去。

最后根据判定表中剩下的列作为确定测试用例的依据,设计测试用例。

4.实验总结

(1)边界值分析法的设计原则。

(2)因果图法的设计步骤。

5.实验思考题

等价类划分法和边界值分析法的联系和区别。

6.本次实验易犯错误:

在画因果图时,中间结点怎样产生?

时间:

机房号:

得分:

实验3黑盒测试实验

等价类划分

在软件测试中,黑盒测试中的等价类划分法非常重要。

对于软件测试工程师而言,这是一项基本测试技能,掌握它是十分必要的。

1.实验目的

(1)掌握等价类划分方法的步骤;

(2)扩宽测试思维;

2.实验环境

无特殊要求。

3.实验内容及步骤

(1)三角形问题中,首先分析输入和输出;

(2)针对输入进行等价类划分;

(3)从等价类划分的表格中设计测试用例;

(4)NextDate问题

4.实验过程

1.三角形问题

分析三角形问题中给出和隐含的对输入条件的要求:

1)整数

2)三个数

3)非零数

4)正数

5)两边之和大于第三边

6)等腰

7)等边

如果a、b、c满足条件

(1)~(4),则输出下列四种情况之一:

如果不满足条件(5),则程序输出为“非三角形”。

如果三条边相等即满足条件(7),则程序输出为“等边三角形”。

如果只有两条边相等、即满足条件(6),则程序输出为“等腰三角形”。

如果三条边都不相等,则程序输出为“一般三角形”。

 

划分等价类并编号,如下表所示:

输入3个整数

有效等价类

无效等价类

1.整数

2.a为非整数

3.b为非整数

4.c为非整数

5.a和b为非整数

6.b和c为非整数

7.a和c为非整数

8.a、b、c为非整数

9.三个数

10.只输入a

11.只输入b

12.只输入c

13.只输入a、b

14.只输入b、c

15.只输入a、c

16.输入三个以上

17.非零数

18.a为0

19.b为0

20.c为0

21.a和b为0

22.b和c为0

23.a和c为0

24.a、b、c为0

25.正数

26.a<0

27.b<0

28.c<0

29.a<0且b<0

30.a<0且c<0

31.b<0且c<0

32.a<0且b<0且c<0

33.一般三角形

34.a+b>c

35.b+c>a

36.a+c>b

37.a+b=c

38.a+b

39.b+c=a

40.b+c

41.a+c=b

42.a+c

43.等腰三角形

44.a=b但a≠c

45.b=c但a≠b

46.a=c但a≠b

47.等边三角形

48.a=b=c

为有效等价类设计测试一个用例

为每一个无效等价类至少设计一个测试用例

2.NextDate问题

NextDate函数包含三个变量month、day和year,函数的输出为输入日期后一天的日期。

例如,输入为1989年5月16日,则函数的输出为1989年5月17日。

要求输入变量month、day和year均为整数值,并且满足下列条件,也就是有效等价类:

1≤month≤12

1≤day≤31

1812≤year≤2012

若条件

(1)~(3)中任何一个条件失效,则NextDate函数都会产生一个输出,指明相应的变量超出取值范围,比如“month的值不在1-12范围当中”。

显然还存在着大量的year、month、day的无效组合,我们可以给出下列无效等价类:

month<1

month>12

day<1

day>31

year<1812

year>2012

测试用例的设计这里就略过,请读者们根据划分好的等价类自行设计。

5.实验总结

(1)等价类划分方法。

(2)用等价类划分法进行测试用例设计的收获体会。

6.实验思考题

为每一个无效等价类至少设计一个测试用例,比如,NextDate问题中我能不能设计这样的测试用例:

0000年-1月38日,为什么?

7.本次实验易犯错误:

等价类分析;为每一个无效等价类至少设计一个测试用例。

时间:

机房号:

得分:

实验4白盒测试

在软件测试中,白盒测试中的基本路径测试非常重要。

对于软件测试工程师而言,这一关不能掠过。

即它是软件测试人员一定要熟练掌握的基本技能之一。

1.实验目的

(1)掌握基本路径测试的步骤;

(2)提高程序分析的能力;

(3)掌握基本路径测试方法。

2.实验环境

Pc机一台、vc++运行环境。

3.实验内容及步骤

(1)程序结构分析,得到控制流图;

(2)计算圈复杂度;

(3)得到基本路径集;

(4)设计测试用例;

(5)执行测试,记录结果。

4.实验过程

(1)从程序流程图得到控制流图

程序流程图又称框图,是我们最熟悉,也是最容易理解的一种程序控制结构的图形表示了。

在这种图上的框里面常常标明了处理要求或者条件,但是,这些标注在做路径分析时是不重要的。

为了了更加突出控制流的结构,需要对程序流程图做一些简化。

在图中我们给出了简化的例子。

其中(a)图示一个含有两个出口判断和循环的程序流程图,我们把它简化成(b)的形式,称这种简化了的程序流程图叫做控制流图。

在控制流图中只有两种图形符号,它们是:

1.节点:

以标有编号的圆圈表示。

它代表了程序流程图中矩形框表示的处理、菱形表示的两个到多个出口判断以及两条到多条流线相交的汇合点。

2.控制流线或弧:

以箭头表示。

它与程序流程图中的流线是一致的,表明了控制的顺序。

为了方便讨论,控制流线通常标有名字,如图中所标的a、b、c等。

 

  

(a)(b)

(2)计算环形复杂度

环形复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本独立路径数目边。

5.实验总结

(1)基本路径测试的方法。

(2)基本路径测试的收获体会。

6.实验思考题

(1)我们计算圈复杂度的目的是什么?

(2)在实验过程中,基本独立路径的概念如何理解?

7.本次实验易犯错误:

(1)控制流图画错;

(2)圈复杂度计算错误;

(3)基本路径集分析错误。

时间:

机房号:

得分:

实验5手机通讯录测试

1.实验目的

(1)实行功能测试

(2)能够分析问题,得到测试需求。

(3)能够自行设计测试过程,测试用例,执行测试后记录测试结果,并且做到最后写的测试文档(测试用例设计、缺陷报告)有比较高的可读性。

2.实验环境

手机一台和相应的手机说明书,手机卡一张。

3.实验内容及步骤

测试依据:

软件研制规范,软件需求说明书,用户手册。

分析测试的内容:

  手机输入法有很多种,比如T9,拼音,字母,数字等等。

在编写测试用例的时候,首先要保证各输入法是否能正常输入;能否正常保存;在进行错误输入的时候,是否有响应的提示。

在这里举出几个例子:

1、存储在SIM卡上的记录添加:

  1)姓名输入:

  i)是否可以使用任意输入法添加汉字、字母、数字,达到姓名允许的最大字节,并能正常保存。

  ii)是否可以使用任意输入法添加汉字、字母、数字,在没有进行输入时,是否有警告提示或是否可以正常保存(根据产品要求)。

  iii)是否可以使用任意输入法添加汉字、字母、数字,超过姓名允许的最大字节,是否有告警提?

是否可以正常保存。

  iV)是否可以进行汉字、字母、数字的混合输入,并重复i~iii,是否有异常。

  2)电话号码的输入:

    i)是否可输入数字至最大值,并可正常保存。

    ii)在不输入数字时,进行保存时,是否有告警提示。

    iii)是否可以输入汉字,字母,此时是否有告警提示或异常。

    iv)是否可以输入特殊字符,如+、P、*、#,是否可以正常保存。

这里给介绍个出错的案例:

连续输入多个*,P或+,不按电话的号码的正常顺序进行输入,试试,比如"++139***P123",看看是个什么样的效果,是否显示正常。

  3)在输入过程中按返回键、挂机键、或翻合翻盖、电源键,是否有告警提示或异常。

  4)在各MMI界面下,各按键功能是否正常。

  5)待机界面下直接输入数字至最大值,是否可以正常保存。

  6)待机界面下直接输入数字即特殊字符(+,P),是否可以正常保存。

  7)将1),6)步骤进行一下排列组合,查看是否有异常情况。

  1对2,2对4,4对16,所以测试用例经常的几千条,几万条根本就不希奇,一个名片夹写上1K条也之是写了个小部分。

修改

  1)单条记录的修改:

  a)是否可以对单条记录进行修改,包括姓名和数字,并重复上面中的1),2),3),4)各步骤。

    b)连续将多条记录的内容(姓名或电话号码)修改成一样。

    c)手机或SIM卡的所有记录全部一样。

(此条仅作为一条测试手段,在实际的应用中无实际意义。

  2)连续多条记录进行修改

此条的测试目的是对软件进行压力测试。

删除

  1)对单条记录进行删除

  i)删除后,列表显示是否正常;数量是否正确。

  ii)SIM卡记录为空时,进行删除时,是否有告警提示。

  iii)SIM卡记录仅为一条时,删除后,是否有SIM卡内容为空的提示。

  iv)在删除过程中,各功能键是否正常。

  v)在删除过程中,进行中断操作,是否正常,比如挂机键,电源键等等。

  2)对多条记录进行删除,目的是对软件的进行压力测试。

  i)连续对SIM卡的多条记录进行删除,是否出现异常情况。

  ii)删除SIM卡记录直至为空时,是否有异常。

  iii)在删除过程中,各功能键是否正常。

查找

  由于各手机的查找功能定制的不同,我们要具体情况具体分析。

2存储在手机上的记录

存储在手机上的记录和存储在SIM卡上的记录的测试用例基本相同。

在测试过程中需要留心的是SIM卡的存储容量以及手机的存储容量,由于软件的定制不同,往往在不同处易出现故障。

比如SIM卡的姓名栏可存储5个汉字,或8个字母、数字,电话号码可以存20位,手机的姓名栏目可以存12个汉字,20个字母、数字,电话号码可以存30位。

在这个不同点之间就容易出现故障。

3批量操作SIM卡记录复制到手机

  1)1条SIM

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 教育学心理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1