软件质量保证与测试课内实验指导书白盒测试黑盒测试docx.docx
《软件质量保证与测试课内实验指导书白盒测试黑盒测试docx.docx》由会员分享,可在线阅读,更多相关《软件质量保证与测试课内实验指导书白盒测试黑盒测试docx.docx(22页珍藏版)》请在冰豆网上搜索。
软件质量保证与测试课内实验指导书白盒测试黑盒测试docx
软件质量保证与测试
课内实验指导书
第一章白盒测试
1.1白盒测试背景知识
结构性测试是知道产品内部工作过程,检测产品内部动作是否按照规格说明书的规定正常进行。
结构性测试允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。
通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。
1.1.2逻辑覆盖
结构性测试力求提高测试覆盖率。
逻辑覆盖是一系列测试过程的总称,它是在使用口盒测试法时,选用测试用例执行程序逻辑路径的方法。
逻辑覆盖按覆盖程度由低到高大致分为以下儿类:
1.语句覆盖:
设计若干测试用例,使程序中每一可执行语句至少执行一次;
2.判断覆盖:
设计用例,使程序中的每个逻辑判断的取真取假分支至少经历一次;
3.条件覆盖:
设计用例,使判断屮的每个条件的可能取值至少满足一次;
4.判断/条件覆盖:
设计用例,使得判断中的每个条件的所有可能结果至少出现一次,
而且判断木身所有可能结果也至少出现一次;
5.条件组合覆盖:
设计用例,使得每个判断表达式中条件的各种对能组合都至少出现
一次;显然,满足⑤的测试用例也一定是满足②、③、④的测试用例。
6.路径覆盖。
设计足够的测试用例,使程序的每条町能路径都至少执行一次。
如果把路径覆盖和条件组介覆盖结介起来,可以设计出检错能力更强的测试数据川例。
1.1.2基本路径测试
如果把覆盖的路径数压缩到一定限度内,例如,程序中的循环体只执行零次和一次,就成为基本路径测试。
它是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本对执行路径集合,从而设计测试用例的方法。
设计出的测试用例要保证在测试中,程序的每一个可执行语句至少要执行一次。
1程序的控制流图
控制流图是描述程序控制流的一种图示方法。
符号O称为控制流图的一个结点,一组顺序处理框可以映射为一个单一的结点。
控制流图屮的箭头称为边,它表示了控制流的方向,在选择或多分支结构中分支的汇聚处,即使没有执行语句也应该有一个汇聚结点。
边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域。
2计算程序坏路复杂性
进行程序的棊本路径测试时,程序的环路复杂性给出了程序基本路径集合中的独立路径条数,这是确保程序中每个可执行语句至少执行--次所必需的测试用例数目的上界。
所谓独立路径,是指包括一组以前没冇处理的语句或条件的一条路径。
只要设计出的测试用例能够确保这些基本路径的执行,就可以使得程序中的每个可执行语句至少执行一次,每个条件的取真分支和取假分支也能得到测试。
基本路径集不是唯一的,対于给定的控制流图,可以得到不同的基本路径集。
通常环路复杂性可用以下三种方法求得。
*将环路复杂性定义为控制流图屮的区域数。
*设左为控制流图的边数,N为图的结点数,则立义环路复朵性为V(G)=E—N+2。
*若设P为控制流图中的简单判定结点数,则冇V(G)=P+lo
3导出测试用例
利用逻辑覆盖方法牛成测试用例,确保基本路径集中每条路径的执行
1.2测试题目
1.2.1三角形问题
1.2.1.1三角形问题的描述
三角新问题接受三个整数a,b和c作为输入,用作三角形的边。
程序的输入是由这三条边确定的三角形类型:
等边三和形、等腰三和形、不等边三和形或非三和形。
1.2.1.2三角形问题描述的细化
>三角形问题接受三个整数a,b和c作为输入,用作三角形的边。
整数a,b,c必须满足以下条件:
/cl.lWaW200
“c2.1WbW200
/c3.1WcW200
/c4.a<b+c
丁c5.bva+c
丁c6.c<a+b
>程序的输出是有着三条边确定的三角形类型:
等边三角形、等腰三角形、不等边三角形或非三角形。
>如果输入值没有满足这些条件中的任何一•个,则程序会通过输出消息来进行通知。
>如果a,b和c的取值满足cl,c2和c3,则给出以下四种相互排斥输出中的一个:
>如果三条边相等,则程序的输出是等边三和形;
>如果恰好有两条边相等,则程序的输出是等腰三角形;
>如果没冇两条边想相等,则程序输出的是不等边三角形。
>如果c4,c5和c6中有一个条件不满足,则程序输出的是非三角形。
1.2.1.3主要代码
见附件中Project
1.2.1.4要求
1.根据以上的C++代码画出该程序的流程图;
2.根据流程图,用口盒测试的用例设计方法设计测试用例实现:
语句覆盖、判定覆盖、条件覆盖、条件判定覆盖以及条件组介覆盖;
3.根据代码画出程序的流图,根据流图计算图的复杂度,计算出基本路径的条数,并给出基本路径;
4.根据基本路径覆盖法设计测试用例,覆盖3中得到的基本路径;
1.2.2NextDate问题
1.2.2.1NextDate问题的描述
>NextDate是一个有三个变量(月份、日期和年)的函数。
函数返冋输入日期厉而的那个日期。
变量月份、日期和年都具有整型值,则满足一下条件:
/cl.1月份12
/c2.1Fl期31
/c3.1812年2012
>可以使规格说明更具体,包括对FI期、月份和年的无效输入值的响应定义。
还可以对无效逻辑组介定义
1.2.2.2NextDate问题的主要代码
见附件中的project
1.2.2.3要求
1.根据以上的C++代码画出该程序的流程图;
2.根据流程图,用白盒测试的用例设计方法设计测试用例实现:
语句覆盖、判定覆盖、条件覆盖、条件判定覆盖以及条件组合覆盖;
3.根据代码画出程序的流图,根据流图计算图的复杂度,计算出基本路径的条数,并给出基本路径;
4.根据基木路径覆盖法设计测试用例,覆盖3屮得到的基木路径;
第二章黑盒测试
黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。
在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检杳程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产牛正确的输出信息。
黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界而和软件功能进行测试。
2.1.1等价类划分法
筹价类划分的办法是把程序的输入域划分成若干部分(子集),然后从每个部分中选取少数代表性数据作为测试用例。
每一类的代表性数据在测试中的作用等价于这一类中的其他值。
该方法是一种重要的,常用的黑盒测试用例设计方法。
2.1.1.1划分等价类
划分等价类:
等价类是指某个输入域的子集合。
在该子集合中,各个输入数据对于揭露程序屮的错误都是等效的,并合理地假定:
测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理划分为若干等价类,在每一•个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据.取得较好的测试结果。
等价类划分可有两种不同的情况:
有效等价类和无效等价类。
冇效等价类:
是指对于程序的规格说明来说是合理的,冇意义的输入数据构成的集合.利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。
无效等价类:
与有效等价类的定义恰巧和反。
设计测试用例时,要同时考虑这两种等价类.因为,软件不仅要能接收介理的数据,也要能经受意外的考验。
这样的测试才能确保软件具有更高的町靠性。
2.1.1.2划分等价类准则
划分等价类的方法:
下而给出六条确定等价类的原则.
1在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两
个无效等价类.
2在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,nJ确立一个有效等价类和一个无效等价类.
3在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类.
4在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类.
5在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符介规则)和若干个无效等价类(从不同角度违反规则).
6在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类.
2.1.1.3设计测试用例的步骤
在确立了等价类后,可建立等价类表,列出所有划分出的等价类:
输入条件划分冇效等价类与无效等价类。
然后从划分出的等价类中按以下三个原则设计测试用例:
1为每一个等价类规定一个唯—•的编号;
2设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖地冇效等价类,重复这一步。
直到所有的有效等价类都被覆盖为止;
3设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所冇的无效等价类都被覆盖为止。
2.1.2边界值分析法
边界值分析是通过选择等价类边界的测试用例。
边界值分析法不仅重视输入条件边界,而且也必须考虑输出域边界。
它是对等价类划分方法的补充。
2.1.2.1边界值分析方法的考虑:
长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以杳出更多的错
使用边界值分析方法设计测试用例,首先应确立边界情况.通常输入和输出等价类的边界,就是应着重测试的边界情况.应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据.
2.1.2.2基于边界值分析方法选择测试用例的原则:
1.如果输入条件规沁了值的范闌,则应取刚达到这个范闌的边界的值,以及刚刚超越这个
范I书I边界的值作为测试输入数据;
2•如果输入条件规赵了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数
多一的数作为测试数据;
3•根据规格说明的每个输出条件,使用前面的原则①;
4.根据规格说明的每个输出条件,应用前面的原则②;
5.如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和
最后一•个元素作为测试用例;
©.如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例;
7.分析规格说明,找出其它町能的边界条件。
2.1.2.3边界值分析中的两种假设
边界值分析中基于两种假设:
1.根据缺陷的数暈边界值分析分为两类:
单缺陷假设和多缺陷假设;
2.根据健壮性的考虑边界值分析分为两类:
非健壮性分析和健壮性分析。
2.2测试题目
2.2.1三角形问题
问题的描述如上一章中1.2.1节的描述
2.2.2NextDate问题
问题的描述如上一章中122节的描述
2.2.3黑盒测试要求
1.根据题目中给出的三角形问题和NextDate问题的需求说明书,按照等价类划分法,设计测试用例,覆盖所有的等价类;
2.根据题目小给出的三角形问题和NextDate问题的需求说明书,按照边界值分析法,设计测试用例,进行功能性测试。
边界值分析法需要包含:
小缺陷假设非健壮性假设;多
缺陷假设非健壮性假设;单缺陷假设假装性假设;最坏情况测试。
第三章自动测试工具——Nimit的使用
NUnit是一个单元测试框架,专门针对于.NET来写的。
其实在前面冇JUnit(Java),CPPUnit(C++),他们都是xUnit的一员。
最初,它是从JUnit而來。
现在的版本是2.5.2。
接下来我所用的都是基于这个版本。
NUnit最初是由JamesW.Newkirk,AlexeiA.Vorontsov和PhilipA.Craig,后来开发团队逐渐庞人起来。
在开发过程中,KentBeck和ErichGamma2位牛人也提供了许多帮助。
看來对于NUM还真是下了一番力气了
NUnit是xUnit家族种的笫4个主打产品,完全由C#语言來编写,并•且编写时充分利用了许多。
NET的特性,比如反射,客户属性等等。
最重要的一点是它适介于所有.NET语言。
3.1NUnit介绍
图3.1NUnit运行效果
从中我们町以非常容易发现,右边是个状态条,图1是红色的,图2是绿色的.为什么会这样呢?
因为如果所有测试案例运行成功,就为绿色,反之如果有一个不成功,则为红色,但也有黄色的.左面的工作域内则是我们写的每一个单元测试.
通过上面的图片,我想你对NUnit冇个总的了解了.
接下來还是分为2个部分,一是NUnit的布局,另外一部分就是它的核心概念.
首先熟悉一下NUnitGUI的布局.
让我们更进一步看一下测试运行器窗口的布局。
在右边面板的中间,可以看到测试进度条。
进度条的颜色反映了测试执行的状态:
•绿色描述目前所执行的测试都通过
•黄色意味某些测试忽略,但是这里没有失败
•红色表示有失败
底部的状态条表示下而的状态:
•状态•说明了现在运行测试的状态。
当所冇测试完成时,状态变为Completed.^测试中,状态是Running:
(是正在运行的测试名称)。
•TestCases说明加载的程序集中测试案例的总个数。
这也是测试树里叶子节点的个
数。
•TestsRun已经完成的测试个数。
•Failures到目前为止,所有测试中失败的个数.
•Time显示运行测试时间(以秒计)
File主菜单有以下内容:
•NewProject允许你创建一个新工程。
工程是一个测试程序集的集合。
这种机制让你组织多个测试程序集,并把他们作为一个组对待。
•Open加载一个新的测试程序集,或一个以前保存的NUnitI程文件。
•Close关闭现在加载的测试程序集或现在加载的NUnit工程。
•Save保存现在的NunitI程到一个文件。
如果正工作单个程序集,本菜单项允许你创建一个新的NUnit工程,并把它保存在文件里。
•SaveAs允许你将现有NUnit工程作为一个文件保存。
•Reload强制重载现有测试程序集或NUnit_E程。
NUnit-Gui口动监测现加载的测试程序集的变化。
当程序集变化时,测试运行器重新加载测试程序集。
(当测试正运行时,现在加载的测试程序集不会重新加载。
在测试运行Z间测试程序集仅可以重新加载。
一个忠告:
如果测试程序集依赖另外一•个程序集,测试运行器不会观察任何依赖的程序集。
对测试运行器来说,强制一个重载使全部依赖的程序集变化可见。
•RecentFiles说明5个最近在NUnit中加载的测试程序集或NUnitT程(这个列表在Windows注册表,由每个用户维护,因此如果你共享你的PC,你仅看到你的测试)。
最近程序集的数最可以使用Options菜单项修改,可以访问Tool主菜单。
•Exit退lB
•View菜单有以卜•内容:
•Expand一层层扩展现在树中所选节点
•Collapse折叠现在树中选择的节点
•ExpandAll递归扩展树中所选节点后的所有节点
•CollapseAll递归折叠树中所选节点后的所有节点
•ExpandFixtures扩展树中所有代表测试fixture的节点
CollapseFixtures折叠树中所有代衣测试fixture的节点
•Properties显示树中现所选节点的属性
Tools菜单由这些项:
•SaveResultsasXML作为一XML文件保存运行测试的结杲
•Options让你定制NUnit的行为
现在看看右边,你己经熟悉Rim按钮和进度条。
这里还有一个紧跟Run按钮的Stop按钮:
点击这个按钮会终止执行正运行的测试。
进度条下面是一个文本窗口,在它上方,由以下4个标签:
•ErrorsandFailures窗口显示失败的测试。
在我们的例了里,这个窗口定空。
•TestsNotRun窗口显示没有得到执行的测试。
•Console.Error窗口显示运行测试产牛的错误消息。
这些此消息是应用程序代码使用Console.Error输出流可以输出的。
•Console.Out窗口显示运行测试打印到Console.Error输出流的文本消息。
3.2—些常见属性
接下来,我将讲述这个框架如何使用•同时也涉及到一些非常重要的概念,我想其客户属性是非常重要的。
在NUnit里,有以下几种属性:
•TestFixture
•Test
下而对每种属性讲解。
TestFixtureAttribute
本属性标记一个类包存测试,当然setup和teardown方法可有可无。
(关于setup和teardown方法在后面介绍)做为一个测试的类,这个类还有一些限制:
•必须是Public,否则NUnil看不到它的存在。
•它必须有一个缺省的构造函数,否则是NUnit不会构造它。
•构造函数应该没有任何副作用,因为NUnit在运行吋经常会构造这个类多次,如果要是构造函数要什么副作用的话,那不是乱了。
usingSystem;
usingNUnit.Framework;namespaceMyTest.Tests
[TestFixture]
publicclassPriceFixture
TestAttribute
Test属性用來标记一个类(已经标记为TestFixture)的某个方法是可以测试的。
为了和先前的版木向后兼容,头4个字符(“test")忽略人小写。
(参看hg//nunit.org/test.html)
这个测试方法可以定义为:
publicvoidMethodName()
从上面可以看出,这个方法没有任何参数,其实测试方法必须没有参数。
如果我们定义方法不对的话,这个方法不会出现在测试方法列表中。
也就是说在NUnit的界面左边的工作域内,看不到这个方法。
还有一点就是这个方法不返回任何参数,并口必须为Public。
例如:
usingSystem;
usingNUnit・Franeviork;
namespaceMyTest.Tests
<
[TestFixture]publicclassSuccessTests
[Test]
publicuoidTest1()
//
一般来说,有了上而两个属性,你可以做基本的事情了。
再对如何进行比较做一个描述。
在NUnit中,用Assert(断言)进行比较,Assert是一个类,它包括以下方法:
AreEqual,AreSame,Equals,Fail,Ignore,IsFalse,IsNotNull,具体请参看NUnit的文档。
3.3在・NET环境下应用NUnit
3.3.1为测试代码创建一个VisualStudio工程
在MicrosoftVisualStudio.NET屮,让我们开始创建一个新的工程。
选择VisualC#工程作为工程类型,ClassLibrary作为模板。
将丄程命名为NUnitQuickStart.图4-1是一个描述本步骤的VisualStudio.NET。
3.3.2增加一个NUnit框架引用
在MicrosoftVisualStudio.NET里创建这个例子时,你需要增加一个NUnit.framework.dll引用,如下:
在SolutionExplorer右击引用,然后选择增加引用
NUnit.framework组件,在AddReference对话框中按Select和OK按钮。
71
3.3.3为工程增加一个类
1usingSystem;
2usingNUnit.Framework;
3
namespaceNUnitQuickStart
[TestFixture]
publicclassNumersFixture
<
[Test]
publicvoidAddlwoNumbers()
{
16
17r
18L}
19
3.3.4建立你的VisualStudio工程,使用NUnit・Gui测试
从程序・>NUnit2.2打开NUnit・gui,加载本本工程编译的程序集.
为了在VisualStudio.NET中白动运行NUnit・Gui,你需要建立NUnit・Gui作为你的启动程序:
在SolutionExplorer里右击你的NunitQuickStart工程。
在弹出菜单中选择属性。
在显示的对话框的左面,点击ConfigurationProperties夹
选择出现在ConfigurationProperties夹卜的Debuggingo
在属性框右边的StartAction部分,选择下拉框的Program作为DebugMode值。
按Apply按钮
设置NUnit-gui.exe作为StartApplication0,你既可以键入nunit-gui.exe的全路径,也可
使用浏览按钮•来指向它。
下图中描述了如何将NUniJGui作为工程的测试运行器
NIJnitQuick^taHPropertyPage«
GorrigurationManager...
2d
Configuration:
Active(Debug)
DebtgMede
Program
D:
\software\Small5oftwareNUnity.j
StartAppication
5tartURL
StartPage
StartOptions
CcmnandLineArrjLmenk
WorkingDirectory
Alwo/sUco[ntomaExpioior
Truo
FmhAHahiminn_Paira
StartApplication
IndicatesthepugroinUalshucldbestalledwhentheprcjcxlisJcbuyocd.Forcxanpleyourriylitrunopre-bultclientthatconsuniesyourClass…
确定|
取消
I应用a)|
帮肋1
3.3.5编译运行测试.
现在编译solutiono成功编译后,开始应用程序。
NUnit-Gui测试运行器出现。
当你笫一次开始NUnit-Gui,它打开时没有测试加载。
从File菜单选择Opm,浏览NUnitQuickStart.dll的路径。
当你加载了测试的程序集,测试运行器为加载的程序集的测试产生一个可见的表现。
在例子屮,测试程序集仅有一个测试,测试程序集的结构如卜•图所示:
按Run按钮。
树的节点变为绿色,而且测试运行器窗口上的进度条变绿,绿色代农成功通过。
3.4其它一些核心概念
上面的例子介绍了基本的NUnit特性和功能。
TestFixture,Test,和Assert是3个最基本的特征,我们可以用这些特性进行程序员测试了。
但是有的时候,你觉得这3个远远不够,比如有的时候打开一个数据库连接多次,有没有只让它打开-次的方法呢?
如果我想把测试分类,应该怎样实现呢?
如果我想忽略某些测试,又应该如何去完成呢?
不用担心,NUnit己经有这样的功能了。
3.4.1SetUp/TearDown属性
在早期给的testfixture定义里,testfixture的测试是一组常规运行时资源.在测试完