软件测试技术实验指导书版.docx
《软件测试技术实验指导书版.docx》由会员分享,可在线阅读,更多相关《软件测试技术实验指导书版.docx(99页珍藏版)》请在冰点文库上搜索。
软件测试技术实验指导书版
《软件测试技术》实验指导书
吴鸿韬
河北工业大学计算机科学与软件学院
2016年9月
第一章实验要求1
第二章白盒测试实践3
第三章黑盒测试实践6
第四章自动化单元测试实践7
第五章自动化功能测试实践35
第六章自动化性能测试实践56
附录1实验报告封皮参考模版71
附录2小组实验报告封皮参考模版72
附录3软件测试计划参考模版73
附录4测试用例参考模版77
附录5单元测试检查表参考模版81
附录6测试报告参考模版82
附录7软件测试分析报告参考模版87
第一章实验要求
一、实验意义和目的
软件测试是软件工程专业的一门重要的专业课,本课程教学目的是通过实际的测试实验,使学生系统地理解软件测试的基本概念和基本理论,掌握软件测试和软件测试过程的基本方法和基本工具,熟练掌握软件测试的流程、会设计测试用例、书写测试报告,为学生将来从事实际软件测试工作和进一步深入研究打下坚实的理论基础和实践基础。
本实验指导书共设计了2个设计型、3个验证型实验和一个综合型实验,如表1所示。
设计型实验包括白盒测试实践和黑盒测试实践,验证型实验包括自动化单元测试实践、自动化功能测试和自动化性能测试实践,主要目标是注重培养学生软件测试的实际动手能力,增强软件工程项目的质量管理意识。
通过实践教学,使学生掌握软件测试的方法和技术,并能运用测试工具软件进行自动化测试。
综合型实验以《软件设计与编程实践》课程相关实验题目为原型、在开发过程中进行测试设计与分析,实现软件开发过程中的测试管理,完成应用软件的测试工作,提高软件测试技能,进一步培养综合分析问题和解决问题的能力。
表1实验内容安排
实验内容
学时
实验性质
实验要求
实验一白盒测试实践
4
设计
必做
实验二黑盒测试实践
4
设计
必做
实验三自动化单元测试实践
4
验证
必做
实验四自动化功能测试实践
4
验证
必做
实验五自动化性能测试实践
4
验证
必做
实验六、综合测试实践
课外
综合
选做
二、实验环境
NUnit、JUnit、LoadRunner、QuickTestProfessional、VC6.0、Visual
Studio2010、SQL数据库。
三、实验过程要求
每次实验前详细阅读实验指导书,熟悉实验目的和实验内容,制订测试计划,设计测试用例。
实验后整理并提交测试报告,项目结束后要提交测试总结。
实验过程中,实验者必须服从指导教师和实验室工作人员的安排,遵守纪律与实验制度,爱护设备及卫生。
在指定的实验时间内,必须到实验室内做实验。
四、实验成绩评价
实验课程的总成绩由实验考勤和实验报告成绩组成,主要是三个方面:
(1)上机实验考勤:
每次上机应主动在指导老师处签到,冒签等不诚信行为一旦被发现,取消本次实验成绩。
如果学生需要请假,必须提前出具正式假条。
(2)实验过程考核:
每次实验课,指导教师根据实验过程情况,随机抽查,进行当次实验的答辩。
(3)实验报告提交:
应根据指导教师要求按时提交每次实验的电子版实验报告。
实验报告中包含软件测试流程中所需要提交的所有相关文档,附件中给出的相关文档模版的内容和格式仅供参考。
如果发现学生抄袭、伪造实验数据,或实验报告和设计报告抄袭、雷同,则涉及的所有学生的该课程实验成绩记为0分。
各部分所占比例如表2所示。
表2实验成绩分配表
实验内容
分值
实验考勤
10%
实验过程
10%
实验一白盒测试实践实验报告
10%
实验二黑盒测试实践实验报告
10%
实验三自动化单元测试实践实验报告
20%
实验四自动化功能测试实践实验报告
20%
实验五自动化性能测试实践实验报告
20%
第二章白盒测试实践
一、实验目的
1、构建编码规范,依据编码规范进行编码;
2、利用代码审查方法进行单元测试实践;
3、掌握白盒测试方法,运用白盒测试方法设计测试用例,进行测试实践;
二、实验内容
本实验要求采用任一所熟悉的开发语言,依据所构建的编码规则,设计并实现任一给定题目或自选题目(注意:
最后给出的是基于对话框的程序),进而利用白盒测试技术设计测试用例,结合代码审查方法,进行单元测试。
参考题目
1、三角形问题
接受三个整数a、b和c作为输入,用做三角形的边。
程序的输出是由这三条边确定的三角形类型:
等边三角形、等腰三角形、不等边三角形。
(说明:
三边边长小于200)
2、电话号码问题
某城市电话号码由三部分组成。
它们的名称和内容分别是:
地区码:
空白或三位数字;
前缀:
非'0'或'1'的三位数字;
后缀:
4位数字。
假定被测程序能接受一切符合上述规定的电话号码,拒绝所有不符合规定的电话号码。
3、保险公司计算保费费率的程序
某保险公司的人寿保险的保费计算方式为:
投保额×保险费率
其中,保险费率依点数不同而有别,10点及10点以上保险费率为0.6%,10点以下保险费率为0.1%;而点数又是由投保人的年龄、性别、婚姻状况和抚养人数来决定,具体规则如表2-1所示。
表2-1
年龄
性别
婚姻
抚养人数
20-39
40-59
其它
M
F
已婚
未婚
1人扣0.5点
最多扣3点
(四舍五入取整)
6点
4点
2点
5点
3点
3点
5点
4、某公司薪水计算程序
某软件的一个模块的需求规格说明书中描述,如图2-1所示:
(1)年薪制员工:
严重过失,扣年终风险金的4%;过失,扣年终风险金的2%。
(2)非年薪制员工:
严重过失,扣当月薪资的8%;过失,扣当月薪资的4%。
5、公交一卡通自动充值软件,如图2-2所示
图2-1
图2-2
6、两位整数加法计算器
图2-3
7、电子商务网站用户注册功能(推荐)
参考任意电子商务网站(如京东,当当等)的用户注册功能,以B/S或C/S架构实现该功能,并应用白盒测试相关理论对其进行测试。
三、实验要求
1、独立完成;
2、提交编码规范,根据编码规范进行程序设计和测试;
3、提交源代码,源代码中应包含必要的注释;
4、提交测试用例说明书及缺陷报告
第三章黑盒测试实践
一、实验目的
1、掌握并运用黑盒测试用例设计方法进行测试用例设计,进行测试实践。
二、实验内容
掌握黑盒测试的基本理论,能够利用白盒测试理论设计测试用例,并在所开发的软件中进行测试。
白盒测试技术要求掌握语句覆盖、分支覆盖、路径覆盖等白盒测试用例设计方法。
针对实验二所设计并实现的程序,利用多种黑盒测试技术设计测试用例,进行单元测试。
本实验要求采用任一所熟悉的开发语言,依据所构建的编码规则,设计并实现任一给定题目或自选题目(注意:
最后给出的是基于对话框的程序),进而利用
黑盒测试技术设计测试用例,结合代码审查方法,进行单元测试。
参考题目
1、三角形问题
接受三个整数a、b和c作为输入,用做三角形的边。
程序的输出是由这三条边确定的三角形类型:
等边三角形、等腰三角形、不等边三角形。
(说明:
三边边长小于200)
2、电话号码问题
某城市电话号码由三部分组成。
它们的名称和内容分别是:
地区码:
空白或三位数字;
前缀:
非'0'或'1'的三位数字;
后缀:
4位数字。
假定被测程序能接受一切符合上述规定的电话号码,拒绝所有不符合规定的电话号码。
3、保险公司计算保费费率的程序
某保险公司的人寿保险的保费计算方式为:
投保额×保险费率
其中,保险费率依点数不同而有别,10点及10点以上保险费率为0.6%,10点以下保险费率为0.1%;而点数又是由投保人的年龄、性别、婚姻状况和抚养人数来决定,具体规则如表2-1所示。
4、某公司薪水计算程序
某软件的一个模块的需求规格说明书中描述,如图2-1所示:
(1)年薪制员工:
严重过失,扣年终风险金的4%;过失,扣年终风险金的2%。
(2)非年薪制员工:
严重过失,扣当月薪资的8%;过失,扣当月薪资的4%。
5、公交一卡通自动充值软件,如图2-2所示
6、两位整数加法计算器,如图2-3所示。
7、电子商务网站用户注册功能(推荐)
参考任意电子商务网站(如京东,当当等)的用户注册功能,以B/S或C/S架构实现该功能,并应用黑盒测试相关理论对其进行测试。
三、实验要求
1、独立完成;
2、提交测试用例说明书及缺陷报告
第四章自动化单元测试实践
一、实验目的
1、熟悉NUnit/JUnit/VS2010等自动化测试工具,能熟练应用自动化单元测试工具进行单元测试
二、实验内容
自动化测试是对手工测试的有益补充,可以通过自动化测试工具提高测试效率,改善软件产品质量。
NUnit是为.Net开发环境准备的自动化单元测试框架,JUnit是针对Java语言设计的自动化单元测试工具,它们的作用就是帮助测试人员方便的完成单元测试工作。
VisualStudio2010集成开发环境通过集成VisualStudioUltimate2010和VSTestProfessional2010等工具对软件测试提供了强有力的支持,可以创建和管理单元测试,UI测试,web测试,负载测试等。
针对实验二所设计并实现的程序,本项目要求根据所设计测试用例,
利用NUnit/JUnit/VS2010等自动化测试工具进行自动化单元测试,并给出代码覆盖情况。
三、实验要求
1、独立完成;
2、提交测试脚本
3、提交测试代码及缺陷报告。
四、NUnit概述
1、Nunit主界面
NUnit是一个单元测试框架,专门针对于.NET来写的.
图4-1 NUnit运行的效果
图4-2 NUnit运行的另外一个效果
从中我们可以非常容易发现,右边是个状态条,图4-1是红色的,图4-2是绿色的.为什么会这样呢?
因为如果所有测试案例运行成功,就为绿色,反之如果有一个不成功,则为红色,但也有黄色的.左面的工作域内则是我们写的每一个单元测试.在右边面板的中间,可以看到测试进度条。
进度条的颜色反映了测试执行的状态:
∙绿色描述目前所执行的测试都通过
∙黄色意味某些测试忽略,但是这里没有失败
∙红色表示有失败
底部的状态条表示下面的状态:
∙状态.说明了现在运行测试的状态。
当所有测试完成时,状态变为Completed.运行测试中,状态是Running:
(是正在运行的测试名称)。
∙TestCases说明加载的程序集中测试案例的总个数。
这也是测试树里叶子节点的个数。
∙TestsRun已经完成的测试个数。
∙Failures 到目前为止,所有测试中失败的个数.
∙Time 显示运行测试时间(以秒计)
File主菜单有以下内容:
∙NewProject允许你创建一个新工程。
工程是一个测试程序集的集合。
这种机制让你组织多个测试程序集,并把他们作为一个组对待。
∙Open加载一个新的测试程序集,或一个以前保存的NUnit工程文件。
∙Close关闭现在加载的测试程序集或现在加载的NUnit工程。
∙Save保存现在的Nunit工程到一个文件。
如果正工作单个程序集,本菜单项允许你创建一个新的NUnit工程,并把它保存在文件里。
∙SaveAs允许你将现有NUnit工程作为一个文件保存。
∙Reload强制重载现有测试程序集或NUnit工程。
NUnit-Gui自动监测现加载的测试程序集的变化。
2、一些常用属性
在NUnit里,有以下几种属性:
∙Test Fixture
∙Test
TestFixtureAttribute
本属性标记一个类包含测试,当然setup和teardown方法可有可无.(关于setup和teardown方法在后面介绍)做为一个测试的类,这个类还有一些限制
∙必须是Public,否则NUnit看不到它的存在.
∙它必须有一个缺省的构造函数,否则是NUnit不会构造它.
∙构造函数应该没有任何副作用,因为NUnit在运行时经常会构造这个类多次,如果要是构造函数要什么副作用的话,那不是乱了.
TestAttribute
Test属性用来标记一个类(已经标记为TestFixture)的某个方法是可以测试的.这个测试方法可以定义为:
public void MethodName()
从上面可以看出,这个方法没有任何参数,其实测试方法必须没有参数.如果我们定义方法不对的话,这个方法不会出现在测试方法列表中.也就是说在NUnit的界面左边的工作域内,看不到这个方法.还有一点就是这个方法不返回任何参数,并且必须为Public.
例如:
1using System;
2using NUnit.Framework;
3
4namespace MyTest.Tests
5{
6 [TestFixture]
7 public class SuccessTests
8 {
9 [Test] public void Test1()
10 { /*
*/ }
11 }
12}
13
14
在NUnit中,用Assert(断言)进行比较,Assert是一个类,它包括以下方法:
AreEqual,AreSame,Equals,Fail,Ignore,IsFalse,IsNotNull,具体请参看NUnit的文档。
3、如何在.NET中应用NUnit
第1步.增加一个NUnit框架引用
在MicrosoftVisualStudio.NET里创建这个例子时,你需要增加一个NUnit.framework.dll引用,如下:
在SolutionExplorer右击引用,然后选择增加引用NUnit.framework组件,在AddReference对话框中按Select和OK按钮。
第2步.为工程加一个类.
为工程加一个Cmp类,作为被测代码。
这里是这个例子的代码。
usingSystem;
publicclassCmp
{
publicstaticintLargest(int[]list)
{
intindex,max=Int32.MaxValue;
if(list.Length==0)
{
thrownewArgumentException("Emptylist");
}
for(index=0;index{
if(list[index]>max)
{
max=list[index];
}
}
returnmax;
}
}
第3步.建立测试代码
usingNUnit.Framework;
[TestFixture]
publicclassTestLargest
{
[Test]
publicvoidLargestOf3()
{
Assert.AreEqual(9,Cmp.Largest(newint[]{8,9,7}));
}
[Test]
[ExpectedException(typeof(ArgumentException))]
publicvoidEmpty()
{
Cmp.Largest(newint[]{});
}
}
第4步.编译运行测试.
现在生成solution。
成功编译后,开始应用程序。
NUnit-Gui,测试程序集的结构如图4-3所示:
图4-3测试程序集的测试在NUnit-Gui中的视图
按Run按钮。
树的节点变为绿色,而且测试运行器窗口上的进度条变绿,绿色代表成功通过。
ExpectedException
这里是一个验证这个假设的测试.有的时候,我们知道某些操作会有异常出现,例如,在实例中增加除法,某个操作被0除,抛出的异常和.NET文档描述的一样.参看以下源代码.
1[Test]
2[ExpectedException(typeof(DivideByZeroException))]
3public void DivideByZero()
4{
5 int zero = 0;
6 int infinity = a/zero;
7 Assert.Fail("Should have gotten an exception");
8}
除了[Test]属性之外,DivideByZero方法有另外一个客户属性:
ExpectedException.在这个属性里,你可以在执行过程中捕获你期望的异常类型,例如在本例就是DivideByZeroException.如果这个方法在没有抛出期望异常的情况下完成了,这个测试失败.使用这个属性帮助我们写程序员测试验证边界条件(BoundaryConditions).
Ignore属性
由于种种原因,有一些测试我们不想运行.当然,这些原因可能包括你认为这个测试还没有完成,这个测试正在重构之中,这个测试的需求不是太明确.但你有不想破坏测试,不然进度条可是红色的哟.怎么办?
使用Ignore属性.你可以保持测试,但又不运行它们.
namespaceClassLibrary1
{
usingNUnit.Framework;
[TestFixture]
publicclassTestLargest
{
[Test]
publicvoidLargestOf3_1()
{
Assert.AreEqual(9,CMP.Largest(newint[]{8,9,7}));
}
[Test]
publicvoidLargestOf3_2()
{
Assert.AreEqual(9,CMP.Largest(newint[]{8,7,9}));
}
[Test]
[Ignore]
[ExpectedException(typeof(ArgumentException))]
publicvoidEmpty()
{
CMP.Largest(newint[]{});
}
}
}
Ignore属性可以附加到一个独立的测试方法,也可以附加到整个测试类(TestFixture).如果Ignore属性附加到TestFixture,所有在fixture的测试都被忽略.
Category属性
对于测试来说,你有的时候需要将之分类,此属性正好就是用来解决这个问题的。
你可以选择你需要运行的测试类目录,也可以选择除了这些目录之外的测试都可以运行。
在命令行环境里/include和/exclude来实现。
在GUI环境下,就更简单了,选择左边工作域里的CatagoriesTab,选择Add和Remove既可以了。
图4-4在一个程序员测试中使用Ignore属性
namespaceClassLibrary1
{
usingNUnit.Framework;
[TestFixture]
publicclassTestLargest
{
[Test]
[Category("class2")]
publicvoidLargestOf3_1()
{
Assert.AreEqual(9,CMP.Largest(newint[]{8,9,7}));
}
[Test]
[Category("class2")]
publicvoidLargestOf3_2()
{
Assert.AreEqual(9,CMP.Largest(newint[]{8,7,9}));
}
[Test]
[Category("class1")]
[ExpectedException(typeof(ArgumentException))]
publicvoidEmpty()
{
CMP.Largest(newint[]{});
}
}
NUnit-GUI界面
图4-5使用Catagories属性的界面
四、VS2010单元测试
1、创建被测代码
publicclassCmp
{
publicstaticintLargest(int[]list)
{
if(list.Length==0)
thrownewArgumentException("Emptylist");
intindex,max=Int32.MinValue;
for(index=0;index{
if(list[index]>max)
max=list[index];
}
returnmax;
}
}
2、创建单元测试
图4-6
[TestMethod]
publicvoidTestMethod1()
{
int[]list={7,8,9};
intexpected=9;
intactual;
actual=Cmp.Largest(list);
Assert.AreEqual(expected,actual);
}
[TestMethod]
[ExpectedException(typeof(ArgumentException))]
publicvoidEmpty()
{
Cmp.Largest(newint[]{});
}
2、运行测试
通过“调试”菜单-》“开始执行”测试代码,测试结果显示如图所示
图4-7
3、查看代码覆盖率
运行测试并查看代码覆盖率
(1)在“解决方案资源管理器”的“解决方案项”下,双击运行配置文件Local.testsettings。
随即出现“测试设置”对话框。
(2)单击“数据和诊断”,选中“代码覆盖率”。
图4-8
(3)双击“代码覆盖率”,选中被测程序,保存配置文件修改并退出
图4-9
(4)运行测试
(5)“测试”菜单—》“窗口”,选择“代码覆盖率”,随即打开“代码覆盖率结果”窗口。
“代码覆盖率结果”窗口中的“层次结构”列将显示一个节点,该节点包含最新测试运行中得到的所有代码覆盖率数据。
展开此节点,得到如图所示代码覆盖率结果图。
此表中的列显示了各个方法、类和整个命名空间的覆盖率统计数据。
图4-10
(6)双击选中的方法,将打开Class1.cs源代码文件并定位到该方法所在的位置。
在此文件中,可以看到代码突出显示效果。
用浅蓝色突出显示的代码行已在测试运行中执行过,用浅褐色突出显示的代码行已部分执行过,而用红褐色突出显示的代码行则还没有执行过。
可以通过滚动查看此文件中其他方法的覆盖率。
图4