前言
具体的黑盒测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法、场景法等。这些方法都是比较实用的,但在具体工作中要采用什么方法,需要针对项目的特点加以适当的选择。在实际高水平的测试中,往往需要综合使用各种方法以有效地提高测试效率和测试覆盖度。
以下介绍的是各种测试用例设计方法选择的综合策略,供大家参考。
(1)首先进行等价类划分,包括输入条件和输出条件的等价划分,将无限测试变成有限测试,这是减少工作量和提高测试效率最有效的方法。
(2)在任何情况下,都必须使用边界值分析法。经验表明,用这种方法设计出的测试用例发现程序错误的能力最强。
(3)可以使用错误推测法追加一些测试用例,这需要依靠测试工程师的智慧和经验。
(4)对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度。如果没有达到要求的覆盖标准,应当再补充足够的测试用例。
(5)如果程序的功能说明中含有输入条件的组合情况,则一开始就可以选用因果图法和判定表驱动法。
(6)对于参数配置类的软件,要用正交试验法选择较少的组合方式达到最佳效果。
(7)利用功能图法,我们可以通过不同时期条件的有效性设计不同的测试数据。
(8)对于业务流程清晰的系统,可以利用场景法贯穿整个测试案例设计过程,在案例中综合使用各种测试方法。
黑盒测试方法揭密
一、黑盒测试在快速应用开发(rad)环境中的重要作用
软件测试方法一般分为两种:白盒测试与黑盒测试。其中,白盒测试又称为结构测试、逻辑驱动测试或基于程序本身的测试,着重于程序的内部结构及算法,通常不关心功能与性能指标。黑盒测试又被称为功能测试、数据驱动测试或基于规格说明的测试,实际上是站在最终用户的立场上,检验输入输出信息及系统性能指标是否符合规格说明书中有关功能需求及性能需求的规定。
随着rad环境的发展,软件工程面临新的挑战,其中包括
●应用系统的规模越来越庞大,结构越来越复杂;
●开发团队人员越来越多,分工越来越细;
●项目投资日益提高,导致投资风险增大。
在这样一种背景下,软件质量面临着更大的危机,而解决问题的关键正是黑盒测试,可是由于传统的黑盒测试往往局限于手工测试,凭借工程人员的经验自发地进行,缺乏严格的测试管理机制,因而效果并不明显。
在分发一个应用系统之前,若没有经过科学、周密的黑盒测试,就相当于将大量隐含的缺陷(defect)交付到最终用户手中,这对于开发团队自身、项目投资方及最终用户来说都是不负责任的表现,也将严重损害三方的利益。
今天,软件的质量要求越来越受到重视,在对软件的质量监督中,黑盒测试起着重要的、不可替代的作用;而随着软件开发平台及软件设计思想的进步和发展,特别是rad技术的发展,对黑盒测试提出了更明确的要求,人们发现,必须遵循一定的测试理论,依赖于优秀的测试工具,才能进行科学、完备的测试。
二、黑盒测试的操作步骤
在传统的软件开发生命周期当中,测试工作往往被搁置到整个开发过程的后期进行,也就是说,当应用程序的编码工作已经基本完成,才开始进行测试,这样做的缺点在于:
a)由于应用程序庞大而复杂,测试工作千头万绪,测试人员难以组织科学、全面的测试用例,从而大幅度提高了测试成本,并严重影响测试的全面性和有效性;
b)由于缺陷所涉及的模块从开发到测试之间的时间间隔较长,使得程序员的修改和维护工作要付出更大的代价;
c)由于受到分发日期的限制,测试工作往往是在忙碌中结束的,而将大量的缺陷遗留给最终用户,也就是说,真正的测试工作实际上是由最终用户来完成的。
因此,为了保证测试工作科学、精确、全面、有序地进行,应该采取一边开发一边测试的策略,使得开发工作与测试工作平行进行,这也就是俗话所说的“越早测试越好”的概念。
一套完整的测试应该由五个阶段组成:
1.测试计划
首先,根据用户需求报告中关于功能要求和性能指标的规格说明书,定义相应的测试需求报告,即制订黑盒测试的最高标准,以后所有的测试工作都将围绕着测试需求来进行,符合测试需求的应用程序即是合格的,反之即是不合格的;同时,还要适当选择测试内容,合理安排测试人员、测试时间及测试资源等。
2.测试设计
将测试计划阶段制订的测试需求分解、细化为若干个可执行的测试过程,并为每个测试过程选择适当的测试用例(测试用例选择的好坏将直接影响到测试结果的有效性)。
3.测试开发
建立可重复使用的自动测试过程。
4.测试执行
执行测试开发阶段建立的自动测试过程,并对所发现的缺陷进行跟踪管理。测试执行一般由单元测试、组合测试、集成测试、系统联调及回归测试等步骤组成,测试人员应本着科学负责的态度,一步一个脚印地进行测试。
5.测试评估
结合量化的测试覆盖域及缺陷跟踪报告,对于应用软件的质量和开发团队的工作进度及工作效率进行综合评价。
显然,黑盒测试只有严格按照步骤进行,才可能对应用程序的质量进行把关。然而,如果没有一种优秀的测试工具的帮助,单纯凭借手工测试,不但将耗费大量的人力、物力和财力,而且有很多测试工作是难以实现甚至是无法实现的。
三、手工测试与自动测试的比较
手工测试无法保证黑盒测试的科学性与严密性,这是因为:
●测试人员要负责大量文档、报表的制订和整理工作,会变得力不从心;
●受软件分发日期、开发成本及人员、资源等诸多方面因素的限制,难以进行全面的测试;
●如果修正缺陷所花费的时间相当长,回归测试将变得异常困难;
●对测试过程中发现的大量缺陷缺乏科学、有效的管理手段,责任变得含混不清,没有人能向决策层提供精确的数据以度量当前的工作进度及工作效率;
●反复测试带来的倦怠情绪及其他人为因素使得测试标准前后不一,测试花费的时间越长,测试的严格性也就越低;
●难以对不可视对象或对象的不可视属性进行测试。
因此,自动测试成为最佳的解决方案。所谓自动测试,实际上是将大量的重复性工作交给计算机去完成,一个优秀的自动测试工具,不但可以满足科学测试的基本要求,而且可以节约大量的时间、成本、人员和资源,并且测试脚本可以被重复利用(包括被不同的项目所利用)。
另注:黑盒方面的自动化测试工具:
WinRunner,LoadRunner,Rational Robot,SilkTest,SilkPerformer等等。工具用下来觉得功能测试用Quick Test Pro,性能测试用Load Runner最好.
● 计算机的用途不同,对其部件的性能指标要求也有所不同。以科学计算为主的计算机,对(1) 要求较高,而且应该重点考虑 (2) 。
(1)A.外存储器的读写速度 B.主机的运算速度
C. I/O设备的速度 D.显示分辨率
(2)A. CPU的主频和字长,以及内存容量
B.硬盘读写速度和字长
C. CPU的主频和显示分辨率
D.硬盘读写速度和显示分辨率
●(3是指按内容访问的存储器。
(3)A.虚拟存储器 B.相联存储器
C.高速缓存(Cache) D.随机访问存储器
● 处理机主要由处理器、存储器和总线组成,总线包括 (4) 。
(4)A.数据总线、地址总线、控制总线 B.并行总线、串行总线、逻辑总线
C.单工总线、双工总线、外部总线 D.逻辑总线、物理总线、内部总线
下面关于加密的说法中,错误的是 (5) 。
A. 数据加密的目的是保护数据的机密性
B.加密过程是利用密钥和加密算法将明文转换成密文的过程
C.选择密钥和加密算法的原则是保证密文不可能被破解
D.加密技术通常分为非对称加密技术和对称密钥加密技术
● 下面关于防火墙功能的说法中,不正确的是(6) 。
(6)A.防火墙能有效防范病毒的入侵
B.防火墙能控制对特殊站点的访问
C.防火墙能对进出的数据包进行过滤
D.防火墙能对部分网络攻击行为进行检测和报警
● 下面关于漏洞扫描系统的叙述,错误的是 (7) 。
(7)A.漏洞扫描系统是一种自动检测目标主机安全弱点的程序
B.黑客利用漏洞扫描系统可以发现目标主机的安全漏洞
C.漏洞扫描系统可以用于发现网络入侵者
D.漏洞扫描系统的实现依赖于系统漏洞库的完善
● 软件工程每一个阶段结束前,应该着重对可维护性进行复审。在系统设计阶段的复审期间,应该从 (8)出发,评价软件的结构和过程。
(8)A.指出可移植性问题以及可能影响软件维护的系统界面
B.容易修改、模块化和功能独立的目的
C.强调编码风格和内部说明文档
D.可测试性
● 计算机感染特洛伊木马后的典型现象是 (9) 。
(9)A.程序异常退出 B.有未知程序试图建立网络连接
C.邮箱被垃圾邮件填满 D. Windows系统黑屏
● 关于软件著作权产生的时间,下面表述正确的是 (10) 。
(10)A.自作品首次公开发表时
B.自作者有创作意图时
C.自作品得到国家著作权行政管理部门认可时
D.自作品完成创作之日
● 程序员甲与同事乙在乙家探讨甲近期编写的程序,甲表示对该程序极不满意,说要弃之重写,并将程序手稿扔到乙家垃圾筒。后来乙将甲这一程序稍加修改,并署乙名发表。以下说法正确的是(11) 。
(11)A.乙的行为侵犯了甲的软件著作权
B.乙的行为没有侵犯甲的软件著作权,因为甲已将程序手稿丢弃
C.乙的行为没有侵犯甲的著作权,因为乙已将程序修改
D.甲没有发表该程序并弃之,而乙将程序修改后发表,故乙应享有著作权
● 零件关系P(零件名,条形码,供应商,产地,价格)中的 (12) 属性可以作为该关系的主键。查询产于西安且名称为“P2”的零件,结果以零件名、供应商及零件价格分列表示,对应的SQL语句为:
SELECT零件名,供应商,价格
FROM P
WHERE零件名='P2' AND (13);
(12)A.零件名 B.条形码 C.产地 D.供应商
(13)A.条形码=西安 B.条形码='西安'
C.产地=西安 D.产地='西安'
● 软件风险一般包含 (14) 两个特性。
(14)A.救火和危机管理 B.已知风险和未知风险
C.不确定性和损失 D.员工和预算
● 在采用面向对象技术构建软件系统时,很多敏捷方法都建议的一种重要的设计活动是 (15),它是一种重新组织的技术,可以简化构件的设计而无需改变其功能或行为。
(15)A.精化 B.设计类 C.重构 D.抽象
● 一个软件开发过程描述了“谁做” 、 “做什么” 、 “怎么做”和“什么时候做” ,RUP用(16) 来表述“谁做” 。
(16)A.角色 B.活动 C.制品 D.工作流
● 瀑布模型表达了一种系统的、顺序的软件开发方法。以下关于瀑布模型的叙述中,正确的是 (17)。
(17)A.瀑布模型能够非常快速地开发大规模软件项目
B.只有很大的开发团队才使用瀑布模型
C.瀑布模型已不再适合于现今的软件开发环境
D.瀑布模型适用于软件需求确定,开发过程能够采用线性方式完成的项目
● 一个软件系统的生存周期包含可行性分析和项目开发计划、需求分析、设计(概要设计和详细设计)、编码、测试和维护等活动,其中 (18) 是软件工程的技术核心,其任务是确定如何实现软件系统。
(18)A.可行性分析和项目开发计划 B.需求分析
C.设计 D.编码
● 程序中常采用变量表示数据,变量具有名、地址、值、作用域、生存期等属性。关于变量的叙述, (19)是错误的。
(19)A.根据作用域规则,在函数中定义的变量只能在函数中引用
B.在函数中定义的变量,其生存期为整个程序执行期间
C.在函数中定义的变量不能与其所在函数的形参同名
D.在函数中定义的变量,其存储单元在内存的栈区
● 函数调用时,基本的参数传递方式有传值与传地址两种, (20) 。
(20)A.在传值方式下,形参将值传给实参
B.在传值方式下,实参不能是数组元素
C.在传地址方式下,形参和实参间可以实现数据的双向传递
D.在传地址方式下,实参可以是任意的变量和表达式
● 已知某高级语言源程序A经编译后得到机器C上的目标程序B,则 (21) 。
(21)A.对B进行反编译,一般不能还原出源程序A
B.对B进行反汇编,不能得到与源程序A等价的汇编程序代码
C.对B进行反编译,得到的是源程序A的变量声明和算法流程
D.对A和B进行交叉编译,可以产生在机器C上运行的动态链接库
● 下面关于程序语言的叙述,错误的是 (22) 。
(22)A.脚本语言属于动态语言,其程序结构可以在运行中改变
B.脚本语言一般通过脚本引擎解释执行,不产生独立保存的目标程序
C. php、JavaScript属于静态语言,其所有成分可在编译时确定
D. C语言属于静态语言,其所有成分可在编译时确定
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!