用例选择

2024-10-10

用例选择(精选9篇)

用例选择 篇1

0 引言

随着人们日常生活对计算机软件的需求不断增长,软件系统的规模和复杂度也在不断攀升,而对大规模复杂系统的测试和维护等需求超出了目前的测试与维护技术能力,因此也就出现了许多与软件失效相关的事故,并且大多数的失效都是由于软件错误导致的。软件发生失效后,如何找到引发失效的错误位置或引发失效的原因,就是错误定位[1,2,3,4]问题。而软件错误定位算法的复杂度高,并且冗余的测试用例会影响软件错误定位的准确性。为了降低错误定位的复杂度,提高错误定位的准确性,对如何选择有利于实现错误定位的测试用例开展研究则具有重要意义。传统的测试用例选择方法多数是面向软件测试的需求,追求的是测试的充分性,而面向错误定位的测试用例选择方法则是侧重于选择对错误定位有效的测试用例。所以面向软件测试需求选择得到的测试用例集合并不完全适用于错误定位,甚至有些冗余的测试用例还会影响到软件错误定位的准确性。为了提高错误定位的准确性并且降低其复杂度,研究面向错误定位的测试用例选择方法是极其重要的。

目前,面向软件错误定位需求的测试用例选择方法的研究也逐渐增多。如Renieris[5]等提出“近邻模型”,该模型的主要思想是在失效测试用例的邻域附近选择成功测试用例,利用失效测试用例和成功测试用例的测试信息进行差异分析以定位故障,但选择的方法是通过对比两条路径所执行的基本语句块的集合来实现的,未考虑在循环分支条件下语句块的执行序列。北京大学的郝丹[6,7]等人提出了一个测试用例选择算法,该算法基于测试用例的语句覆盖信息进行测试用例选择,可以有效地减少测试用例的数量,降低错误定位的复杂度,但因为该算法只考虑了语句覆盖信息,所以选择出来的测试用例影响了错误定位的准确性。Yu[8]等将相对冗余思想用于测试用例选择,提出基于语句的删减方法和基于向量(即语句集合)的删减方法,通过实验证明基于向量的删减方法更有利于错误定位。目前的测试用例选择方法,都只研究了程序运行时的语句覆盖信息,忽略了程序运行时的分支特征,因此,选择的测试用例对错误定位的准确性没有明显提高。

针对以上问题,本文提出了一种面向错误定位的基于分支聚类的测试用例选择方法,该方法分析了程序的具体执行路径信息,引入了聚类的思想,根据测试用例动态执行时的分支特征对测试用例进行选择。实验表明,本文方法可以有效减少测试用例数量,提高错误定位的效率和准确性。

1 测试用例选择算法

1.1 测试用例选择模型

本文提出的面向错误定位的测试用例选择模型如图1所示。该模型主要分为三个模块:数据预处理模块、基于分支聚类选择模块、错误定位模块。各个模块介绍如下:

(1)数据预处理模块。该模块主要完成了对测试用例套件数据的预处理,向源程序中插入探针,动态执行源程序,获取每个测试用例的插装信息。

(2)基于分支聚类选择模块。该模块首先根据语句覆盖信息对测试用例进行分组,然后根据路径信息提取出每条路径的分支特征,再利用分支特征对测试用例分组进行聚类,最后删除分类中冗余的成功测试用例。

(3)错误定位模块。该模块使用了基于统计分析的错误定位方法对错误语句进行定位,并生成错误报告。本文根据选择后的测试用例在错误定位技术中可疑语句的错误排名,来验证所选择的测试用例的有效性。

为了更好地理解并区分语句覆盖向量和执行路径向量,示例程序如图2所示,此函数的功能是求N(N=3)个数的最大数,当测试用例t为{13,11,5}时,其动态执行得到的语句覆盖向量是{6,7,8,9,10,12,13,16,17},路径向量是{6,7,8,9,10,12,13,10,12,13,10,16,17}。语句覆盖向量只考虑该语句是否被执行,而路径向量还考虑了语句的执行顺序和循环的执行次数等信息。

1.2 基于分支聚类的测试用例选择方法

该方法首先按照语句覆盖向量将测试用例分组,以保证每个语句覆盖向量都至少会保留一个测试用例,确保被保留的成功测试用例集合满足错误定位的高语句覆盖需求,而且按组进行聚类分析也会降低复杂度。文中采用分支特征来对测试用例进行聚类。从每个测试用例的路径信息里面提取各个分支的特征作为特征向量,每个分支的特征是根据一个测试用例动态执行中该分支执行结果为真的个数和执行结果为假的个数来计算的,其计算公式如公式(1)所示。

式中,si是程序中第i个分支的分支特征值;n是程序中分支的总个数;NTi是程序中第i个分支在当前测试用例的动态执行过程中结果为真的个数;NFi是程序中第i个分支在当前测试用例的动态执行过程中结果为假的个数。然后根据测试用例的路径信息,计算得到程序中的每个分支的特征值si,将程序中每个分支的特征值的集合作为该测试用例的特征向量,记为Sj={s1,s2,…,sn},其中,Sj为第j个测试用例的特征向量。为了更好地解释测试用例的特征向量,以图2中的实例程序进行说明,首先分析出程序的分支总个数为2个,分别是第10行和第13行,当输入为{13,11,5}时,路径向量为{6,7,8,9,10,12,13,10,12,13,10,16,17},对其分析可以得出程序第10行被执行了3次,其中2次为真,1次为假,所以分支特征为2/3,程序第13行被执行了2次且两次都为假,分支特征为0,所以当前测试用例的特征向量为邀2/3,0妖。

本文提取分组内的所有测试用例的分支特征向量,然后根据分支特征向量对分组内的测试用例进行聚类分析。通过采用基于层次法的聚类分析方法对分组内的测试用例进行聚类处理,得到多个类,再在每一类中随机地选择一个测试用例予以保留。基于分支特征聚类就是要把分组内分支特征相似的测试用例按聚类分布到一个组中,采用基于层次法的聚类分析方法对分组内的测试用例进行聚类处理,并使用了欧式距离来计算两个测试用例之间的相似程度,距离越小就说明这两个测试用例的分支特征越相似。基于分支特征聚类的算法描述如图3所示。其中,M是当前被处理的分组里面所有测试用例的分支特征向量的集合,D是距离阈值。

为了更好地理解这个算法,再次以图2中的实例程序进行说明,当程序输入为{5,11,6}时,路径信息是{6,7,8,9,10,12,13,14,10,12,13,10,16,17},该测试用例的分支特征是{2/3,1/2};当程序输入是{5,6,11}时,路径信息是{6,7,8,9,10,12,13,10,12,13,14,10,16,17},该测试用例的分支特征是{2/3,1/2},这两个测试用例将被聚合在一个类中。可以看出,这两个测试用例路径信息是不一样,但其路径信息很相似,本文通过基于分支特征的聚类将其聚集到一个类中,然后随机地选择一个测试用例保存即可。

2 实验结果与结论分析

2.1 基于统计分析的软件错误定位方法

根据软件失效的原理,软件发生功能故障时其执行路径一定经过了程序中与该故障相关的错误语句。与成功测试用例相比,失败测试用例的执行路径是有差异的,而这些差异中也包含了软件故障的信息。本文实验采用的错误定位技术为由Harrold等提出的Tarantula[9]方法。该方法认为只要是被失败测试用例执行的语句比被成功测试用例执行的语句更加值得被怀疑。该方法的语句怀疑度suspiciousness(s)计算公式如下:

式中,s代表语句,failed(s)代表执行了语句s的失败测试用例个数,passed(s)代表执行了语句s的成功测试用例个数,totalfailed代表失败测试用例总个数,totalpassed代表成功测试用例总个数。该方法计算出来的可疑度的范围是[0,1],一个语句的可疑度数值越大,该语句就越值得被怀疑。置信度是用来度量可疑度的可信程度,那些被较多测试用例执行的语句会具有较大的置信度,置信度confidence(s)计算公式如下:

Tarantula算法先按照语句可疑度从大到小来进行排序,当可疑度相同时,按照置信度从大到小排序,最终得出可疑语句的排名。某语句是错误语句的可能性越大,其排名越高,调试人员可以按照排名顺序对源程序进行检查。

2.2 实验数据

本文的实验数据是Siemens Suite[10],具体信息如表1所示。其中,第一列Program为程序名称;第二列No.为每个程序对应的错误版本个数;第三列Line为程序可执行代码的行数;第四列Num为每个程序提供的测试用例个数;第五列Description为每个程序的功能描述。Siemens Suite最早是为了研究控制流和数据流的准则对于错误探测能力的影响而创建的,包含7组实现不同功能的C程序,每组程序通过人工注入的方式创建了基本程序的错误版本,这些错误经常通过修改程序中的一行代码来注入,包括语句的增删以及判断条件的修改等,以模拟实际中可能存在的错误。

2.3 评价指标

为了与文献[8]中的测试用例选择方法对比,本文与文献[8]使用相同的评价指标。文献[8]提出了两个评价指标:Reduction和Expense_increase。其中,Reduction用来评价测试用例选择方法对测试用例的删减能力,Expense_increase用来评价测试用例选择方法对错误定位的准确性的影响。首先介绍Reduction,计算公式如公式(4)所示。Reduction是由删减前的测试用例集合的个数(size of unreduced test suite)与删减后的测试用例集合的个数(size of reduced test suite)计算得到的。

在介绍Expense_increase之前先介绍Expense,其计算公式如公式(5)所示,将测试用例用于软件错误定位技术,会得出一个语句可疑度的排名,Expense就是由错误语句的可疑度排名(rank of faulty statement)和程序的可执行代码行数(number of executable statements)计算得到的。

为了研究测试用例的选择方法对软件错误定位的影响,需要计算Expense_increase,计算公式如公式(6)所示,这是删减后的测试用例的Expense与删减前的测试用例的Expense之间的差值。

从公式(5)和公式(6)可以得出,如果Expense_increase是一个负数,意味着软件错误定位技术使用删减后的测试用例集合得到的错误语句排名要比使用删减前的测试用例集合得到的错误语句排名靠前,对测试用例删减后,调试人员只需查找较少代码就能找到错误位置,这说明了为负数的Expense_increase,代表了测试用例选择方法提高软件错误定位的准确性;与之相反,取为正数的Expense_increase,则代表了测试用例选择方法影响了软件错误定位的准确性。

2.4 实验结果及分析

本文对Siemens Suit提供的7组程序的所有错误版本进行了实验,并记录了每个版本的测试用例选择结果信息和软件错误定位结果信息,通过这些信息计算出每个版本的Reduction和Expense_increase,统计出每组程序的Reduction和Expense_increase的平均值,结果如表2所示。

7组程序的Reduction平均值达到了56,这说明本文方法能有效地对测试用例进行删减,并且降低了错误定位的时间消耗。7组程序的Expense_increase都是负值,也说明本文方法可以有效地提高软件错误定位的准确性。

本文的对比实验是文献[8]中的方法,该方法为基于语句向量的测试用例选择方法,其覆盖标准是查看一个测试用例是否执行了新的语句向量,以确定是否将其保留下来,即是根据执行语句集合是否一样来选择测试用例。对比实验结果如表3所示。

从表2和表3中,可以看出本文方法和文献[8]中方法的Reduction相差不多,说明两种方法都能有效地对测试用例进行删减,进而降低错误定位的复杂度。本文的Expense_increase都是负值,而文献[8]中的Expense_increase有正有负,因而本文方法的Expense_increase比文献的方法更稳定,效果更好。文献[8]中,只是通过实验证明了该文中的方法对错误定位几乎没有影响,只在某些时候才会提高软件错误定位的准确性,而本文方法对软件错误定位的准确性却有很明显的提高。因此,本文方法选择的测试用例更加有助于提高错误定位的准确性。

3 结束语

本文提出了一种面向错误定位的测试用例选择方法,与已有的测试用例选择方法相比,该方法不仅考虑了语句覆盖信息,还充分考虑了测试用例的分支特征,并且引入了聚类思想对测试用例进行选择。通过实验证明,该方法能有效地约减测试用例,降低错误定位的复杂度并提高错误定位的准确性。

参考文献

[1]WONG W E,DEBROY V,XU D.Towards better fault local-ization:a crosstab based statistical approach.IEEE Trans.on S-ystems,Man,and Cybernetics,Perona,2011,99:1-19.[1]WONG W E,DEBROY V,XU D.Towards better fault local-ization:a crosstab based statistical approach.IEEE Trans.on S-ystems,Man,and Cybernetics,Perona,2011,99:1-19.

[2]ZHANG Z Y,CHANB W K,TSEC T H,et al.Non paramet-ric statistical fault localization[J].Journal of Computer and Sy-stem Sciences,2011,84:885-905.[2]ZHANG Z Y,CHANB W K,TSEC T H,et al.Non paramet-ric statistical fault localization[J].Journal of Computer and Sy-stem Sciences,2011,84:885-905.

[3]JOBSTMANN B,STABERB S,GRIESMAYERC A,et al.Fin-ding and fixing faults[J].Journal of Computer and System Sc-iences,2012,78:441-460.[3]JOBSTMANN B,STABERB S,GRIESMAYERC A,et al.Fin-ding and fixing faults[J].Journal of Computer and System Sc-iences,2012,78:441-460.

[4]YU K,LIN M,GAO Q,et al.Locating faults using multiplespectra-specific models.SAC,2011.[4]YU K,LIN M,GAO Q,et al.Locating faults using multiplespectra-specific models.SAC,2011.

[5]RENIERIS M,EREISS S.Fault Localization with nearest nei-ghbor queries[C]//Proceedings of the 18th International Confer-ence on Automated Software Engineering(ASE2003),Montreal,Canada,2003-10:30-39.[5]RENIERIS M,EREISS S.Fault Localization with nearest nei-ghbor queries[C]//Proceedings of the 18th International Confer-ence on Automated Software Engineering(ASE2003),Montreal,Canada,2003-10:30-39.

[6]HAO D,ZHANG L,ZHANG J,et al.VIDA:Visual interactivedebugging.ICSE,2009:583-586.[6]HAO D,ZHANG L,ZHANG J,et al.VIDA:Visual interactivedebugging.ICSE,2009:583-586.

[7]HAO D,XIE T,ZHANG J,et al.Test input reduction for r-esult inspection to facilitate fault localization.Autom Softw E-ng.2010,17:5-31.[7]HAO D,XIE T,ZHANG J,et al.Test input reduction for r-esult inspection to facilitate fault localization.Autom Softw E-ng.2010,17:5-31.

[8]YU Y,JONES J A,HARROLD M J.An empirical study ofthe effects of test suite reduction on fault localization.ICSE,2008:201-210.[8]YU Y,JONES J A,HARROLD M J.An empirical study ofthe effects of test suite reduction on fault localization.ICSE,2008:201-210.

[9]JONES J,HARROLD M J.Empirical evaluation of the taran-tula automatic fault-localization technique[C]//Proceedings ofthe International Conference on Automated Software Engineeri-ng,2005-11:273-282.[9]JONES J,HARROLD M J.Empirical evaluation of the taran-tula automatic fault-localization technique[C]//Proceedings ofthe International Conference on Automated Software Engineeri-ng,2005-11:273-282.

[10]HUTCHINS M,FOSTER H,GORADIA T,et al.Experimentson the effectiveness of dataflow-and control flow-based testadequacy criteria[C]//Proceedings of the 16th International C-onference on Software Engineering,1994-05:191-200.[10]HUTCHINS M,FOSTER H,GORADIA T,et al.Experimentson the effectiveness of dataflow-and control flow-based testadequacy criteria[C]//Proceedings of the 16th International C-onference on Software Engineering,1994-05:191-200.

成语错用例谈(三) 篇2

毫发不爽 háofà-bùshuǎng

一个学生写道:“小王今天被雨淋了,浑身湿透,毫发不爽,应赶快吃点防感冒的药。”这里的“毫发不爽”被误用了。

“毫发不爽”原作“纤毫无爽”,极细微的差错或失误也没有。形容非常正确。见于《魏书·律历志下》:“(李业兴对曰)岁星行天,伺候以来八九余年,恒不及二度。今新历加二度。至于夕伏晨见(现),纤毫无爽。”后来多用“毫发不爽”形容无丝毫差错。毫发:毫毛和头发,形容极其微小。爽:差错。例如:①清代钱泳《履园丛话·收藏》:“较诸全书,虽只吉光片语,而与石本对勘,则结体用笔,毫发不爽。”②清代蒲松龄《聊斋志异·邑人》:“呼邻问之,则市肉方归,言其片数、斤数,毫发不爽。”③这个结果与大家预料的一模一样,毫发不爽。

上面那个学生之所以把“毫发不爽”用错,纯属望文生义,把“爽”误解成“爽快”,以为“毫发不爽”是“毛发不爽快”的意思,其实不然。

皇上错用“怙恶不悛”

怙恶不悛hù'è-bùquān

电视连续剧《康熙微服私访记》有这么一段故事:微服的康熙与凤儿小姐在押镖途中遇上一伙劫镖的强盗,双方交手,强盗大败,康熙欲将他们押送官府处置,而自幼行走江湖的凤儿小姐深知,天下盗匪四起,皆因生计所逼。乃萌生同情,力阻康熙,并赠强盗银两。康熙是不能容忍在自己统治的“盛世”有强盗存在的,见自己意中人居然同情贼人,不由怒斥凤儿:“你这是怙恶不悛啊!”

金口玉言的天子怎么也如此的不慎其言呢?

“怙恶不悛”原为“长恶不悛”。长(zhǎng):积。坚持作恶,不肯悔改。见于《左传·隐公六年》:“善不可失,恶不可长,其陈桓公之谓乎!长恶不悛,从自及也;虽欲救之,其将能乎?”后来多为“怙恶不悛”。怙:凭恃,依仗,坚持;悛:悔改。例如:①《宋史》:“负罪之人,多非善良,贪残凶暴,无所不至。若授以远方牧民之官,其或怙恶不悛,恃远肆毒,小民罹殃,卒莫上诉。”②《金史》:“其或怙恶不悛,举众讨之,顾亦未晚也。”③《元史》:“若能悔悟首实,则原其罪;若迷谬怙恶不悛,然后绳之以法不少贷。”

上述例句是编剧的人错解“怙恶不悛”为“姑息养奸”,这才让皇上说出贻笑大方的话来。

演戏难以“绘声绘色”

绘声绘色 huìshēng-huìsè

有报道称:“这场戏演得绘声绘色,赢得满场观众的喝彩。”这里,“绘声绘色”用得不当,“演戏”是不能用“绘声绘色”来形容的。

“绘声绘色”见于朱庭珍《筱园诗话》:“必使山情水性,因绘声绘色而曲得其真;务期天巧地灵,借人工人籁而毕传其妙。”后来用“绘声绘色”形容描写、叙述生动逼真。例如:①女人是感性的,常常能绘声绘色地讲一件挺平常的事。②早就听人绘声绘色地描述过他的家如何如何古朴。走进一看,哇!古典渗透了客厅的每个角落。③她说得绘声绘色,听的人都入了迷。

系统用例与测试用例的关系初探 篇3

关键词:系统用例,测试用例,复用,软件质量

1、引言

长期以来,软件质量问题一直困扰着大多数国内的软件企业。大多数企业,重开发、轻测试,认为软件测试是可有可无的事情。软件测试要么流于形式,由开发人员自己对自己的代码进行检查,要么根本没有,拿用户做实验,软件直接交给用户来测,待用户发现问题后再做补救。软件的质量根本无法保证。近年来,随着客户对软件质量的要求越来越高,软件行业也逐渐意识到,软件测试才是确保软件质量的最有效的手段。因此,近年来形成了比较完善的软件测试理论体系。但是,如何编写高效的测试用例。即,如何利用尽可能少的用例做到尽可能大的覆盖率,仍是每一个测试人员需要面对的问题。[1]

2、软件测试的一般方法

软件测试按照阶段划分一般分为:单元测试、集成测试、系统测试、验收测试。[1]单元测试针对每个模块进行的测试,通常在编码阶段进行,必要的时候要制作驱动模块和桩模块。单元测试的目的是看已完成的编码是否符合详细设计说明书上的要求。集成测试在单元测试的基础上,将所有模块按照设计要求组装成为系统,必须精心计划,应提交集成测试计划、集成测试规格说明和集成测试分析报告。集成测试着眼于各模块之间的接口是否正确。由于软件集成的过程是一个持续的过程,会形成多个临时版本。因此,在集成测试的过程中,需要不断地对系统进行冒烟测试,即对程序的主要功能进行测试。确认测试验证软件的功能和性能及其它特性是否与系统的概要设计说明书一致。系统测试和验收测试的目的在于检验系统的提供的功能是否与用户的要求一致,系统测试是在实际运行环境或相对真实的模拟环境下进行一系列的测试。

软件测试按照测试技术划分,一般分为:白盒测试和黑盒测试。白盒测试检查程序的代码设计。该方法将语句与判断作为研究对象,检查所有的结构和路径是否都是正确的。白盒测试以覆盖率作为衡量标准,覆盖率越高,其测试越充分。白盒测试一般分为语句覆盖、判定覆盖、条件覆盖、条件判定组合覆盖、多条件覆盖以及路径覆盖等[1]。然而100%的代码测试几乎是不可能的,白盒测试的成本非常高,除非在航空或军用领域,一般的应用系统只需针对最重要的核心代码进行白盒测试。

黑盒测试是从用户的角度对系统进行测试查找系统存在的缺陷。黑盒测试与需求紧密相关,系统业务需求分析的正确程度直接影响黑盒测试的质量。在进行嵌入式软件黑盒测试时,要把用户需求作为重要依据。黑盒测试针对的是系统的外在功能,因此对软件系统的分支覆盖率比白盒测试要低,在系统修改后,一般要进行回归测试。[5]

3、系统用例和测试用例的关系

作为分析建模活动的一部分,系统用例用来捕获信息的生产者、使用者和系统本身之间发生的交互。即,从某个特定参与者的角度用简单易懂的语言说明一个特定的使用场景。[2]下面通过一个实例来说明用例的组成与结构。

用例1:登录

[执行者]:员工

[基本路径]:

1)、员工插入安全锁触发系统登录过程。

2)、系统打开安全锁

3)、系统从安全锁中获取证书信息。

4)、系统验证证书的合法性。

5)、系统获取证书中的用户名。

6)、系统将用户的考勤信息存储至数据库。

7)、系统将用户的在线状态记录至数据库。

8)、系统从数据库中获得在线用户列表、通知列表、带接收文件列表、日程安排、收文回执列表等。

[扩展路径]:

2a、无法打开安全锁

2a1、提示用户安全锁错误。

2a2、用例结束

2b、PIN码不正确

2b1、输入未超过3次,要求用户重新输入PIN码

2b2、返回步骤2

2b1a、用户输入PIN码达到3次

2b1a1、用例结束

3a、无法获得安全锁中的证书

3a1、提示用户锁内证书无法获得

3a2、用例结束

4a、证书验证不合法

4a1、提示用户锁内证书不合法

4a2、用例结束

6a、无法存储至数据库

6a1、将登录信息存储至本地

6a2、重复尝试存储登录信息。

7a、无法存储至数据库

8 a 1、重复尝试存储在线信息。

这是一个利用硬件设备通过数字证书进行系统登录的用例。基本路径描述了自顶向下的易于理解的典型场景。在其中用户目标得以实现,风险承担者的利益也得到了保障。[4]扩展路径则表述了系统出现问题情况下的场景。扩展路径可以在执行后重新加入到基本路径中,也可以不再重新加入基本路径而终止用例。

我们在得到了系统用例之后,则可以通过该用例来设计测试用例。在设计过程中,不仅要考虑基本路径所产生的成功场景,也必须要考虑当扩展路径执行时的失败场景。

通过表1六个用例执行了系统用例中步骤1-4中的场景。用例1为正面测试用例,它沿着系统用例的基本路径执行,未发生任何偏差。用例2-6为负面测试用例,它们在系统出现偏差时沿着扩展路径执行。负面测试是相对于基本路径而言的,对于扩展路径来说用例2-6是正面测试。

通过系统用例生成测试用例非常方便,二者之间的转换是非常自然的过程。与其他方法不同,这个方法对系统用例的依赖程度高。因此,测试用例的成功与否,取决与系统需求分析的正确程度。只有真正捕获了用户的需求,并且编写出正确的系统用例,才能得到高效的测试用例。

4、用例复用

测试用例复用是指重复使用“为了复用目的而设计的测试用例”的过程。[3]相应地,可复用测试用例是指为了复用目的而设计的测试用例。与软件复用的概念相对应,软件的复用是为了支持软件在应用维的演化,使用“为复用而开发的软件 (构件) ”来更快、更好地开发新的应用系统。好的测试用例用来确保软件的质量,而有效复用现有的测试用例更能提升软件测试的效率。[2]测试用例的复用技术目前已成为一个新的研究热点,由于本人的水平有限,在这里只能根据自己的经验提出一点自己的体会。

传统上,我们都是针对特定的系统设计软件系统设计测试用例,过于局限于某一种产品,依赖性非常强,不利于测试用例的复用。

需求分析的结果取决于用户需求,系统分析结果是针对问题域的某些问题的抽象程度较高的结果,很少受到设计技术及实现条件的影响,因此复用的机会更多。一般可以从现有系统的分析结果中提取可复用构件。[2]因而通过系统用例生成测试用例的方法则可以凭借软件工程中的软件构件技术实现需求、系统和软件的需求规约的复用;继而确保由这些复用构件生成的测试用例达到复用的目的。

5、结束语

通过系统用例我们可以很方便的得到测试用例,进行系统测试。测试用例能够达到的效果取决于系统需求分析的准确程度。因此,要求我们在系统开发的过程中要高度重视系统的需求分析,准确把握用户的需求。测试用例可以与系统用例同步开发,将测试介入到软件开发过程的时间大大提前,从而确保软件开发的每一阶段,都能通过测试保证开发的质量。

需要注意的是, 本介绍的方法属于黑盒测试的范畴。覆盖率能够达到30-40%。因此, 对于系统的核心模块, 如有必要还必须借助白盒测试的方法进行全面的测试。

参考文献

[1]柳纯录.软件评测师教程.清华大学出版社.2005

[2]邵维忠.面向对象的系统分析.清华大学出版社.2005

[3]Roger Pressman.软件工程-实践者的研究方法.机械工业出版社.2007

[4]Alistair Cockburn.Writings Effective Use Case.机械工业出版社.2002

文言文词类活用例析 篇4

怎样解决这一难题呢?如果考生能借助已有的现代汉语词性的语法特点的有关知识,判断文言文中的词类活用,就会对它形成一个较为系统的认识,从而使问题变得简单明晰。

一、词类活用的表格与示例

二、词类活用细解

(一)名词的活用

⒈ 名词活用为一般动词

⑴名词后面带宾语,名词活用为动词

例如 ①驴不胜怒,蹄之。

②今王鼓乐于此。

③冠切云之崔嵬。

简析“蹄”本是名词,在句中却接了宾语“之”,这时“蹄”起到了动词的作用,所以应该活用为动词,是“踢”的意思;名词“鼓”带宾语“乐”,用作动词:弹奏;名词“冠”带宾语“切云之崔嵬”,用作动词:戴。

⑵名词后面带补语,名词活用为动词

例如①履至尊而制六合。

②郑商人弦高市于周。

简析名词“履”带补语“至尊”,用作动词:登上;“市”带补语“于周”,用作动词:做买卖。

⑶前面有能愿动词或副词,名词活用为动词例如①假舟楫者,非能水也。

②今王与百姓同乐,则王矣。

简析“水”前带副词“非”和能愿动词“能”,用作动词:游水;名词“王”前有副词“则”,用作动词:统治天下、称王。

⑷同一名词迭用,或两个名词连用,这两个名词既不是叠字,又不是联合、偏正、复指关系,那么,其中一个名词常用作动词

例如①如曰今日当一切不事事。

简析名词“事”迭用,第一个用作动词:做、从事。

⑸前面有结构助词“所”, 名词活用为动词

例如①置人所罾鱼腹中。

简析名词“罾”前有结构助词“所”。用作动词:用网捕捉。

⑹方位名词常用作动词,有的前面有连词“而”或副词,有的前面既没有连词“而”也没有副词

例如①秦师遂东。

简析方位名词“东”前面有副词“遂”,用作动词:向东进发。

⒉名词的使动用法

⑴表示使宾语成为这个名词所代表的人或物,或使宾语产生这个名词用作动词后所表示的动作

例如①纵江东父兄怜而王我,我何面目见之?

简析“王”后跟“我”作宾语,是“使我为王”。

⑵作使动用法的名词,后面也偶尔有省略宾语

例如①天子不得而臣也,诸侯不得而友也。

简析“不得而臣”相当于“不得而臣之”;“不得而友”相当于“不得而友之”,意思是“不得使之为臣”“不得使之为友”(不能和他作朋友)。

⑶方位名词,是名词的一类,活用为动词后有时也有使动用法

例如①故王不如东苏子,秦必疑齐而不信苏子矣。

②筑室百堵,西南其户。

简析 方位名词的使动用法,便是使宾语表示的人或物向某一方向行动 “东苏子”,意思是使苏子(苏代)往东去;“西南其户”,意思是使门户向着西方或南方开着。

⒊ 名词的意动用法

例如①孟尝君客我。

简析名词“客”后带宾语“我”,活用作意动词。“客我”即“以我为客”,意即“把我当做客人”。

⒋ 名词直接做状语

⑴名词在表示动作行为的状态、特征时,活用为状语

例如①席卷天下,包举宇内,囊括四海之意。

简析名词“席”、“包”、“囊”分别作状语:像席子一样,像包裹一样,像口袋一样。

⑵名词表示动作行为的态度、方式,活用为状语

例如①群臣吏民能面刺寡人之过者。

简析名词“面”做动词“刺”的状语,表示“刺” 的方式:当面。

⑶ 名词表示动作行为所用的工具,活用为状语

例如① 黔无驴,有好事者船载以入。

简析名词“船”作动词“载”的状语,表示“载”所用的工具:用船装。

⑷ 名词在表示动作行为发生的地点时,活用为状语

例如① 孤帆一片日边来。

简析名词“日边”作动词“来”的状语,表示“来”的地点:从日边。

⑸名词在表示动作行为发生的时间时,活用为状语

例如①良庖岁更刀。

简析时间名词“岁”作动词谓语“更”的的状语,表示“更” 的性质:每年。

⑹名词在表示动作行为的趋向时,活用为状语

例如①南取百越之地。

简析方位名词“南”做“取”的状语,表示行为动作的趋向:向南。

⑺名词表示情况逐渐地发生变化,活用为状语

例如①而乡邻之生日蹙。

简析名词“日”作形容词谓语“蹙”的状语,表示“蹙” ,这种情况逐渐的发展变化:一天天,一天比一天。

(二)动词的活用

⒈动词活用为名词

例如 ①奉不可失,敌不可纵。

简析动词“奉”用作名词,意即“奉送的机会”,作句子的主语。

⒉动词的使动用法

⑴动词的使动用法主要集中在不及物动词上

例如①焉用亡郑以陪邻?

②项伯杀人,臣活之。

简析以上例句中的“亡”“活”都是不及物动词,都不能带宾语,但因分别跟了“郑”“之”,成为使动用法。“亡郑”即“使郑国灭亡”;“活之”即“使之活”,这里可译为“救了他”。

⑵某些及物动词也有使动用法,这种情况比较少见

例如①谨食之,时而献焉。

②晋侯饮赵盾酒。

简析“食”,吃,是及物动词,但这里不是捕蛇者吃蛇,而是捕蛇者“使蛇吃”(让蛇吃东西),可译为喂养。“食”用作使动意义后读sì; “饮”,及物动词,但这里说的不是晋侯饮赵盾的酒,而是晋侯给赵盾喝酒,让赵盾喝酒。“饮”用作使动意义时读yìn。

⒊ 动词的为动用法

例如 ①死国可乎。

简析“死”是为动用法,“死国”即“为国而死”。

(三)形容词的活用

⒈形容词活用为名词

例如大行不顾细谨。

简析 “细谨”,形容词用作名词,意即“细枝末节”。

⒉形容词活用为一般动词

⑴形容词用在“所”字之后,便活用为动词

例如①世之所高,莫若黄帝。

简析“高”本是形容词,但在本句中作了成分,译作“推崇”。

⑵形容词放在能愿动词后面,便活用为动词

因为能愿动词总是在动词前面与动词结合使用的。因此,如果一个能愿动词跟一个形容词结合在一起充当句子的谓语,那么这个形容词大多也是活用为动词。

例如①问其深,则其好游者不能穷也。

简析“穷”在本句中与“能”相结合充当谓语成分,因此活用为动词。

⑶形容词放在“之”“我”等代词前面,便活用为动词

例如①稍出近之。

简析“近”是形容词,但后带有代词“之”做宾语,作动词。

⑷形容词后带了介词结构作补语,这个形容词便活用为动词

例如①令尹子兰……卒使上官大夫短屈原于顷襄王。

简析 令尹子兰……终于让上官大夫(靳尚)在顷襄王面前诋毁屈原。“短”后跟了介词结构“ 于顷襄王”应作动词。

⒊形容词的使动用法,它的特点是使宾语所表示的人或事物具有这个形容词所表示的性质或状态

例如①诸侯恐惧,会盟而谋弱秦。

②春风又绿江南岸。

简析“弱”本是形容词,在句中做谓语,但是形容词做谓语,后面不可以接名词宾语,而它现在接了宾语“秦”,所以它要活用为动词,是“使……弱小”的意思;“绿”是形容词,后面接了名词宾语,应译“使……绿”。

⒋ 形容词的意动用法

由形容词活用而来的动词,表示主观上认为(觉得)宾语所表示的事物具有这个形容词所表示的性质或状态。

例如①滕公奇其言,壮其貌,释而不斩。

② 吾妻之美我者。

③孔子登山而小鲁,登泰山而小天下。

简析 “奇其言”“壮其貌”是主语滕公“认为其言奇”“认为其貌壮”之义;形容词“美”后带宾语“我”。“美我”即“以我为美”,意即“认为我美”;“小鲁”“小天下”,是主语“孔子”主观上认为“鲁”和“天下”小的状态。

【跟综练习】

一、阅读下面一段文言文,完成1~6题

纪纲,临邑人,为诸生。燕王①起兵过其县,纲叩马请自效。王与语,说之。纲善骑射,便辟诡黠,善钩人意向。王大爱幸,授忠义卫千户。既即帝位,擢锦衣卫指挥使,令典亲军,司诏狱。纲觇帝旨,广布校尉,日摘②臣民阴事。帝悉下纲治,深文诬诋。帝以为忠,亲之若肺腑。擢都指挥佥事,仍掌锦衣。帝所怒内侍及武臣下纲论死,辄特至家,洗沐好饮食之,阳为言,见上必请赦若罪,诱取金帛且尽,忽刑于市。

数使家人伪为诏,下诸方盐场,勒盐四百余万。还复称诏,夺官船二十、牛车四百辆,载入私第,弗予直。构陷大贾数十百家,罄其资乃已。籍故晋王、吴王,干没金宝无算。得王冠服服之,高坐置酒,命优童奏乐奉觞,呼万岁,器物僭乘舆③。欲买一女道士为妾,都督薛禄先得之,遇禄大内,挝④其首,脑裂几死。恚都指挥哑失帖木不避道,诬以冒赏事,捶杀之。

纲又多蓄亡命,造刀甲弓弩万计。端午,帝射柳,纲属镇抚庞瑛曰:“我故射不中,若折柳鼓噪,以觇众意。”瑛如其言,无敢纠者。纲喜曰:“是无能难我矣。”遂谋不轨。十四年七月,内侍仇纲者发其罪,命给事、御史廷劾,下都察院按治,惧有状。即日碟⑤纲于市,家属无少长皆戍边,列罪状颁示天下。

(节选自《明史》)

【 注】 ①燕王:即明成祖朱棣,明太祖第四子。明太祖洪武十三年,封燕王。②摘(tì):揭发。③乘舆:此处泛指皇帝用的器物。④挝(zhuā):击,敲打。⑤碟(zhé):一种分裂肢体的刑法。

1.下列各组句子中加点词的意思,相同的一项是( )

A.①便辟诡黠 ②便言多令才

B.①深文诬诋 ②文过饰非

C.①载入私第,弗予直 ②系向牛头充炭直

D.①命优童奏乐奉觞 ②请奉盆缶秦王

2.下列各句中,加点的词不是词类活用的一项是( )

A.纲叩马请自效B.令典亲军

C.籍故晋王、吴王 D.得王冠服服之

3.下列各组句子中,加点的词的意义和用法不相同的一组是()

①王与语,说之

②北与寇往来其间

①帝以为忠,亲之若肺腑

②皆以美于徐公

①帝所怒内侍及武臣下纲论死

②所识穷乏者得我欤

①我故射不中

②朱亥故不复谢

4.以下句子分别编为四组,用以刻画权奸纪纲形象的一组是( )

①燕王起兵过其县,纲叩马请自效②便辟诡黠,善钩人意向③帝以为忠,亲之若肺腑④阳为言,见上必请赦若罪,诱取金帛且尽,忽刑于市 ⑤我故射不中,若折柳鼓噪,以觇众意

A.②④⑤ B.①③④ C.②③⑤ D.①④⑤

5.下列叙述不符合原文意思的一项是( )

A.本文着力刻画的是权奸纪纲的形象。他因为能说会道、善于揣摩别人的心思而受到燕王宠爱,从而平步青云。

B.纪纲培养了一批自己的党羽,诬陷异己,诱取财产;假传诏令,勒取官盐;私造武器,图谋不轨。

C.一次在皇宫内遇见他所嫉恨的都督薛禄,击打薛的头,以至把薛打得脑袋裂开而身亡。

D.纪纲犯下了种种罪行,终于落得个被依法治罪,家属也受到惩治的可悲下场。

6.将文中画线的句子翻译成现代汉语。

①构陷大贾数十百家,罄其资乃已

译文:

②若折柳鼓噪,以觇众意

译文:

二、阅读下面一段文言文,完成7~12题

马融字季长,扶风茂陵人也。为人美辞貌,有俊才。初,京兆挚恂以儒术教授,隐于南山,不应征聘,名重关西,融从其游学,博通经籍。恂奇融才,以女妻之。

永初二年,大将军邓骘闻融名,召为舍人,非其好也,遂不应命,客于凉州武都、汉阳界中。会羌虏飙起,边方扰乱,米谷踊贵。自关以西,道殣相望。融既饥困,乃悔而叹曰:“古人有言:左手据天下之图,右手刎其喉,愚夫不为。所以然者,生贵于天下也。今以曲俗咫尺之羞,灭无赀之躯,殆非老庄所谓也。”故往应骘召。

四年拜为校书郎中,诣东观典校秘书。是时邓太后临朝,骘兄弟辅政。而俗儒世士以为文德可兴,武功宜废,遂寝蒐狩之礼,息战陈之法,故猾贼从横,乘此无备。融乃感激,以为文武之道,圣贤不坠,五才之用,无或可废。元初二年,上《广成颂》以讽谏。

颂奏,忤邓氏,滞于东观,十年不得调。因兄子丧自劾归。太后闻之怒,谓融羞薄诏除,欲仕州郡,遂令禁锢之。

太后崩,安帝亲政,召还郎署,复在讲部。出为河间王厩长史。时车驾东巡岱宗,融上《东巡颂》,帝奇其文,召拜郎中。及北乡侯即位,融移病去,为郡功曹。

阳嘉二年,诏举敦朴,城门校尉岑起举融,征诣公车,对策,拜议郎。大将军梁商表为从事中郎,转武都太宗。时西羌反叛,征西将军马贤与护羌校尉胡畴征之,而稽久不进。融知其将败,上疏乞自效……朝廷不能用。

三迁,桓帝时为南郡太守。先是融有事忤大将军梁冀旨,冀讽有司奏融在郡贪浊,免官,髡徙朔方。自刺不殊,得赦还,复拜议郎,重在东观著述,以病去官。

(节选自《后汉书·马融列传》)

7.下列句子中加点字,解释有误的一项是()

A.边方扰乱,米谷踊贵 踊:物价上涨

B.遂寝蒐狩之礼 寝:停止

C.融乃感激 感激:感慨

D.稽久不进 稽:停留

8.下列每组句中加点的字的意义和用法,相同的一组是( )

①愚夫不为

②以为文德可兴,武功宜废

①诣东观典校秘书

②征诣公车,对策,拜议郎

①京兆挚恂以儒术教授

②今以曲俗咫尺之羞,灭无赀之躯

①不应征聘,名重关西

②重在东观著述

9.下列加点词语属于词类活用的一项是( )

A.恂奇融才,以女妻之 B.欲仕州郡

C.颂奏,忤邓氏,滞于东观 D.会羌虏飙起

10.以下句子分别编为四组,能表明因其个性而造成马融仕途不顺的直接原因的一组是( )

①非其好也,遂不应命,客于凉州武都、汉阳界中。/ ②上《广成颂》以讽谏。忤邓氏,滞于东观。/ ③因兄子丧自劾归。/ ④及北乡侯即位,融移病去,为郡功曹。/ ⑤融知其将败,上疏乞自效。/ ⑥自刺不殊,得赦还,复拜议郎。

A.①②③B.①③⑤C.②④⑥D.④⑤⑥

11.下列叙述,不符合原文意思的一项是( )

A.马融起初的老师挚恂教授儒学,马融随其游学,博通经籍,并受其影响不愿为官。

B.马融在为饥饿所困时,后悔不应邓骘之召,并因此否定了老庄的思想。

C.马融在东观负责校对朝廷图书时,与当时的俗懦庸士意见不合,后写文予以讽谏。

D.马融曾有事触犯了大将军梁冀,因此受诬陷。罢官后,又被剃去头发流放到北方。

12.翻译下面语句

①左手据天下之图,右手刎其喉,愚夫不为。

译文:

②文武之道,圣贤不坠,五才之用,无或可废。

译文:

【参考答案】

1.D (“奉”是“捧”的本字,义为“两手捧着”)

2.A (“叩”动词的一般用法,义为“叩头”。“典”本为名词,意为“典册”,即记录亲军的名册,这里活用为动词,为“掌典”之意,即掌管。“籍”也是名词活用为动词,作“籍没、登记并没收”讲。“服”也是名词活用为动词,作“穿衣服”讲)

3.A (A组前“与”,介词,引进动作行为的偕同者,这里后省宾语“之”,可译为“和”“跟”“同”;后“与”,连词,表示联合,可译为“和”“跟”“同”。B组两句中的“以”,均作“认为,以为”讲,在句中均作谓语。C组两句中的“所”,均为助词,放在动词或动词性词组前组成名词性词组,可译为“……的人”。D组两句中的“故”,均为副词,用在动词前面表示故意如此,作“故意”讲)

4.A (①写其发迹之前,并非“权奸”。③写皇帝)

5.C (薛禄并没有死,而是几乎死去)

6. (参考)①捏造罪名陷害上百家大商人,搜刮光了他们的财产才罢休。②你折下柳枝大声说我射中了,以此观测出大家对我的态度如何。

7.C (应为“感愤")

8.B (A①动词,做;②动词,认为;B两个“诣”均是往的意思;C①用;②因:D①读作“zhòng”表示“敬重”②读作“chóng”意思为“重新”。)

9.D (A读作“qì”《现代汉语词典》解释为“以女嫁人”;B做官;C触犯;D风暴,翻译成“像风暴一样”--名词活用作状语。)

10.A (①并未顺其自然步入仕途,乃因其性格好恶所致;②因上疏谏而得罪当权者,方落得“十年不得调”;③去官原因实属“自我弹劾”;④因病而去,不好确定是“个性所为”;⑤其上疏的目的是为了效力朝廷,至于后者“不用”,并非属于直接原因;⑥应视为“大顺”)

11.B (“殆非老庄所谓也”应译作“恐怕不是老庄的玄思吧”,并没有否定之意。)

软件测试用例设计 篇5

使用人工和自动化手段来测试或运行某个系统的过程,其目的在于检验它是否真的满足规定的需求或者是明确预期结果与实际结果之间的差异。

2 测试用例的定义

测试用例是为特定的目的而设计的一组测试输入、执行条件和逾期结果。测试用例是执行的最小实体。

3 测试用例的特征

(1)最有可能发生的错误;

(2)不是重复的、多余的;

(3)一组相似测试用例最有效的;

(4)不要太复杂;

(5)可复用。

4 测试用例设计的原则

(1)全面性原则。覆盖所需要测试的功能点,要想达到覆盖面比较全,首先要对测试产品全面了解,并且明确测试范围,即明确不需要测试的内容和需要测试的内容。

(2)单个测试用例覆盖最小化的原则。假如要测试一个功能Y,它有三个子功能Y1、Y2和Y3,可以用下面两种方法来设计测试用例。

方法1:用一个测试用例覆盖三个子功能-Test_Y1_Y2_Y3。

方法2:用三个单独的用例分别来覆盖三个子功能-Test_Y1,Test_Y2,Test_Y3。

方法1适用规模较小的工程,但有规模和质量要求的项目,方法2则是更合适的选择,因为它具下面几个优点:测试用例的覆盖边界定义更明确;测试结果对产品问题的明确指向性更强;测试用例间的耦合度最低,彼此之间的干扰也就越低。

以上3个优点带来的直接好处是测试用例的调试、分析和维护成本是最低的。每个测试用例应尽可能简单,只验证所需要验证的内容,否则只会增加测试执行阶段的风险,还会带来彼此之间的干扰。此外,覆盖功能点简单明确的测试用例,便于组合生成新的测试,如在Visual Studio中引入了Ordered Test的概念。

(3)测试用例替代产品文档的功能原则。在开发软件产品的初级阶段通常是用Word文档的形式来记录产品的需求描述、功能描述和功能的具体细节等信息,来描述未来要实现产品的功能,便于团队进行交流,并且在团队内部达成对产品功能和细节的共识。假设在这时达成的共识并描述的功能是B,随着产品开发进程的深入,团队成员对产品的功能有更新的认识,产品功能也会变得更具体细化,在一个迭代或者Sprint结束时最终实现的功能很可能是B+。如此反复,在不断接纳用户的反馈,多个迭代过后,原本被描述为B的功能很可能最终变为了C。这时再去看曾经的Word文档和One Note页面,它们仍然记录的是B。之所以会这样,是因为很少有人会去以及能够去不断更新那些文档,以准确反映出产品功能当前准确的状态。

产品代码和测试用例能够准确描述产品的功能细节。产品代码实现了产品功能,且准确描述了产品的功能,但是,由于各种编程技术,如面向对象、抽象技术、设计模式、资源文件等,使得产品代码本身很难读懂,所以,往往是在知道产品功能的前提下去读代码,而不是反过来看代码来了解功能。目前来看测试用例能如实反映产品功能,测试执行也如实反映了产品功能,否则测试用例就会执行失败。所以,对测试用例的理解应再上升到另一个高度,测试用例能够体现产品描述文档的功能。所以,要求编写的测试用例足够详细、测试用例的组织要有条理,这些单靠Word、Excel或者One Note这样通用的工具是无法实现的,需要使用专业的测试用例管理工具来辅助,例如,Mercury Interactive公司生产的企业级测试管理工具Test Director。

对于自动化测试用例而言,代码在编写上应有别于产品代码编写风格,可读性和描述性应是重点考虑内容。在测试代码中,可以引入面向对象、设计模式等优秀的设计思想,但是一定要适度使用,通常面向过程的编码方式更利于组织、阅读和描述。

5 测试用例的设计方法

5.1 等价类划分法

等价类划分法是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的常用的黑盒测试用例设计方法。

在进行测试用例设计时,要同时考虑有效等价类和无效等价类,这样能使软件接受合理的数据,验证合理的功能,也要经受住不合理的意外考验,增强程序的容错能力,确保软件的测试具有更高的可靠性。

有效等价类:是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。

无效等价类:与有效等价类的定义相反,无效等价类指对程序的规格说明是不合理的或无意义的输入数据所构成的集合。对于具体的问题,无效等价类至少应有一个,也可能有多个。

5.2 边界值分析方法

边界值分析方法是对等价类划分方法的补充,也是黑盒测试方法之一,是对等价类分析方法的一种补充。

在测试工作中得出的经验证明,大量错误发生在输入或输出的边界值上,所以,设计各种边界值的测试用例,可以发现更多BUG。

使用边界值分析方法设计测试用例,首先应确定边界情况,通常输入或者输出等价类的边界,着重测试的边界情况,应选取正好等于或者略大于或者略小于便界的值作为测试数据,而不是选择等价类中的典型值或者任意值作为输入数据。

基于边界值分析方法选择测试用例的原则如下:

(1)如果输入条件规定了值的范围,则应取刚达到这个范围边界的值,或者刚刚超过这个范围边界的值作为测试输入数据;

(2)如果输入条件规定了值的个数,则用最大个数、最小个数、比最小个数少一、比最大个数多一的数作为测试数据;

(3)根据规格说明的每个输出条件,使用前面的原则;

(4)根据规格说明的每个输出条件,应用前面的原则;

(5)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例;

(6)如果程序中使用了一个内部数据结构,则应选择这个内部数据结构的边界上的值作为测试用例;

(7)分析规格说明找出其他可能的边界条件。

5.3 案例

以计算三角形面积的程序为例,运用基本的测试用例设计方法灵活设计测试用例。

某程序需要实现如下功能:输入3个整数D、E、F,输出D、E、F为三边的三角形面积(1<=D、E、F<100),结果保留2位小数。

分析:可以运用等价类和边界值的方法,编写测试用例,具体分析见图1:

根据上面的分析,设计出计算三角形面积测试用例,见表1:

6 结语

影响软件测试的因素很多,如软件的复杂度、团队成员的素质、测试方法、测试技术等。因为某些客观因素存在,有些因素是波动的、不稳定的,会影响测试者的情绪,这种情况下测试用例在软件测试中发挥重要的指导作用。只有理解测试用例的设计原则、设计方法,和具体业务相结合,设计出合理的、高覆盖率、高容错率的测试用例,测试用例才能更好地规范测试执行人员对软件产品进行测试,使软件产品质量得到保障,人们才能使用到高质量的软件产品。

摘要:随着科技的发展,电脑、手机等电子产品的普及,软件的应用越来越普遍,软件测试的重要性得到越来越多的关注。软件产品的测试质量如何保障,重点还是在软件的测试用例设计上,软件测试用例设计的合理性、覆盖率和容错能力,决定了软件产品本身的质量。基于此,介绍了软件测试的基本概念、软件测试用例设计的原则和软件测试用例设计几个基本方法。

关键词:软件测试,测试用例设计,等价类划分法

参考文献

[1]郑人杰.计算机软件测试技术[M].北京:清华大学出版社,1992.

浅谈议论文中的“用例” 篇6

一、准确运用提示语材料中的例子

议论文题目中一般有一段提示性的材料。提供的材料, 或名人轶事、或名言古训、或寓言典故、或社会现象、或漫画图表……本身就属于例子范畴, 它与事实论证所不同的是:材料是由此例引出的, 决不能凭空产生。因而, 有提示性内容的文章的开头一般是先转述材料, 再提出观点。转述时, 应转换成自己的语言, 作艺术性的引录, 或根据论证的需要, 择其一点, 为我所用。例如材料:1984年, 一群苏联专家来华传播“巡回展览画派”的绘画艺术。我们负责接待的同志热情地用“勤劳、智慧”等词汇称赞俄罗斯民族, 但苏联专家们却摇着头笑了, 并毫不掩饰地说:“俄罗斯民族是智慧的, 但是它很懒惰。”

转述:朋友, 在与别人交往的时候, 得到别人的过分夸奖时, 你是否有勇气实事求是地面对?苏联专家1984年来到我国, 得到我国接待员用“勤劳、智慧”等词汇称赞他们的民族, 他们却能实事求是地面对自己的民族, 诚实地说:“俄罗斯民族是智慧的, 但是它很懒惰。”好一个诚实的民族啊。因此, 我们要有勇气实事求是地面对自己, 要做个敢于正视自己弱点的人。

二、事实论证对用例的要求

从提示材料中提炼中心论点以后, 就要用事实和道理去论证它, 以证明观点正确, 有说服力。这就是一个“围绕中心论点展开论述”的问题了, “论”指的是讲道理, “述”指的是摆事实, 那么, 事实论证对用例有什么要求呢?

(一) 用例要准确。

针对观点, 所选用的事例必须与之相一致, 力求对号入座, 一把钥匙开一把锁。只有选择准确的事例, 才能充分证明观点的正确。如果事实与观点若即若离, 甚至事实与观点相逆相悖, 那就势必造成观点的失误, 甚至导致全文的失败。

解决用例不准确的办法是对搜集来的事例通过个体的分析加以筛选和归类, 凡是与观点相悖的、相游离的或联系不密切的, 不管多么新颖生动, 都要毫不犹豫地割爱舍弃, 能证明论点的事例则留下。

(二) 用例要真实。

作为论据的事实材料必须真实可靠, 不能虚构或臆造, 不能用道听途说未加核实的材料作为论据, 也不能用想象或比喻构成论据。为了保证事实的真实性, 材料要有出处, 尽可能占有第一手材料, 引用的材料要检查核对, 平时积累材料时要随手用卡片记录下来。要记住, 如果材料虚假, 那么观点就站不住脚了。例如, 下面是《珍惜时间》一文的选段, 用例非常真实, 让人信服。

人们对各门科学的学习和研究, 必须在一定时间内进行。一般来说, 学习成果的大小, 总是与人们付出的精力和劳动、与人们对时间的利用程度有密切联系的。司马迁写《史记》花了十年, 王充写《论衡》花了三十年, 哥白尼写《天体运行》花了三十年, 马克思写《资本论》, 呕心沥血地辛苦了四十年。可见, 要学较多的东西, 取得较好的成绩, 就要花费大量的时间。正因为如此, 我们要珍惜时间。

(三) 用例要典型。

《语文课程标准》指出:“45分钟能完成不少于500字的习作”。为此, 用例要善于“窥一斑而知全豹”, 选取最能揭示事物的本质性、最具有广泛代表性的材料, 选取蕴含深意且又能直接表现主题的材料。这就是说明用例要典型, 例不在多而在精, 起到以一当十的作用, 为此要注意一点:需要从多个相关的事例中筛选出最有代表性的几例, 或古今中外各一例, 或典型性、概括性各一例, 同类型的例子则不宜重复使用。例如, 吴晗的《谈骨气》一文, 为了证明“我们中国人是有骨气的”这一中心论点, 作者用了三个具有代表性的典型例子:1.文天祥拒绝降元;2.中国古代穷人不食嗟来之食;3.闻一多横眉怒对敌人的枪口。分别论证了:富贵不能淫, 贫贱不能移, 威武不能屈的三个分论点, 从而论证了中心论点。

(四) 用例要新颖。

写文章要求材料新颖, 如果总是雷锋、张海迪、孔繁森等众人皆知的熟悉例子, 老生常谈, 尽管没有用错, 但千篇一律, 千人一面, 读起来味同嚼蜡, 是断然不能激起读者兴趣的。因此, 用例要出新, 必须注意三点:其一, 要选取生动感人的、具有强烈时代气息的材料;其二, 角度要不一般, “切割”要独特, 就是要独具慧眼;其三, 要尽量避开常见的熟例, 非用常例不可时, 也要力求变换角度, 或反其意而用, 避免雷同。

(五) 用例要简洁。

众所周知, 论据是为证明论点服务的, 作为“摆事实”的用例要求简洁、概括、准确、清楚。对掌握的事例应予筛选、提炼和概括, 在不失原意的前提下删去与中心论点无关的语句, 以概括的方法引出事例。有的学生由于缺乏概括能力和语言锤炼能力, 在用例时或原封不动、和盘托出, 或追求形象的完整、情节生动、故事的曲折而增添大段的描写, 如此, 都不合要求。例如, 《谈忍》选段的用例:

诚然, 在一定的特殊的历史条件下, 人的确需要有一种“能忍”的精神。文天祥“隐忍以行”“将以有为”;朱自清忍饥挨饿, 宁死不吃美国的救济粮, 表现了不屈的民族气节。

然而, 世间也有许多事情是断然忍不得的。陈胜、吴广揭竿而起, 忍无可忍;闻一多面对屠刀, 拍案而起, 忍无可忍;鲁迅摆脱悲哀, 呼号呐喊, 忍无可忍;孙中山高举义旗, 率先革命, 忍无可忍。

上文选段中, “能忍”与“忍不得”一口气举了六例, 但都是人人皆知的事例, 无需多着笔墨, 一目了然。

三、例子重在积累

有同学说, 我怎么一写起议论文就觉得腹中空空手上无例呢?究其原因, 无外乎平时对材料的积累不足, 书到用时方恨少。一篇作文如何课堂完成, 工夫在平时。只要我们平时留意, 材料的来源是多方面的, 或用卡片, 或分类摘要抄录, 或剪贴相关资料。日积月累, 可以集腋成裘。这样做好处有三:1.为写作储备了素材;2.增长了见识, 丰富了阅历;3.借鉴他人的语言概括能力。

积累素材的渠道大致有四:

(一) 课本和《名人轶事》等专著。

初中语文课本中无论文言文、现代文还是外国作品都是品位极高的千古名篇或传世佳作, 典型性强, 意义深刻。可为我们提供的素材比比皆是。《名人轶事》中的事例也很多。这些例子, 不妨实行“拿来主义”, 为我所用, 可收到事半功倍的效果。

(二) 报刊杂志。

我们特别要留意文摘版和小论文之类的文章, 那里会有给我们“眼睛一亮”的地方。

(三) 电视广播。

电视广播中的材料最贴近时代、最新颖, 我们可以随时把有价值的素材记下来备用。

(四) 生活实际。

Web安全测试用例设计研究 篇7

随着电子商务和互联网的广泛应用,Web应用软件被越来越广泛的使用。除了传统的应用如电子邮件、新闻网站等,目前Web应用软件也被越来越多的关键性任务使用,例如互联网证券、互联网银行、网络购物等涉及金钱交易的应用,以及政府部门的电子政务等业务通过互联网来开展等。上述关键性的应用对软件安全的要求越来越高,假如由于软件的不安全造成系统被破坏或信息被泄露,将会给国家、集体甚至个人带来巨大的损失。所以,确保Web应用软件的安全是非常重要的,设计全面、有效的安全测试用例则是重中之重。

2 常见Web安全问题

研究Web应用软件的安全性测试技术,首先应对已知的应用软件安全问题进行研究,了解各种漏洞产生的原因、触发的条件、造成的后果,抽象出各类漏洞的特征,进行科学的分类,才能有效指导安全性测试工作,保障其科学性、高效性和针对性。OWASP(The Open Web Application Security Project)是一个致力于web应用安全的国际组织,OWASP分析实际应用中经常出现的安全漏洞,并对各类漏洞进行总结描述,发布每年度的最危险的十大漏洞,能够很好地反映Web安全所面临的威胁和这些威胁的发展趋势,被众多权威性机构(如美国国防部、国际信用卡数据安全技术标准、美国联邦贸易委员会等)列为应用程序安全规范。根据OWASP提出的Web应用安全漏洞数据分布来看,Web应用程序面临的安全形势依然严峻,常见的安全问题包括:

1)注入式攻击。例如SQL、OS以及LDAP注入,发生在不受信任的数据作为一条指令或是查询要求的一部分被发往解释程序之时。攻击者所植入的恶意数据可以骗过解释程序,导致该指令或查询要求在无意中被执行。

2)跨站点脚本(简称XSS)。每当一个应用程序携带了不受信任的数据并将其发送至页面浏览器而又未经过相关验证及转换解析时,XSS类漏洞就会蠢蠢欲动。XSS允许攻击者在受害者的浏览器中执行脚本,这会导致用户的会话遭受劫持、网站受到破坏或者是将用户的访问目标重新定向至某些恶意网站。

3)无效的认证及会话管理功能。应用程序的相关认证及会话管理功能在执行过程中常常发生各种问题,导致攻击者有可能获取到密码、密钥、会话授权或是通过利用其他执行性漏洞来盗取用户身份。

4)对不安全对象的直接引用。当开发者公开引用某种对内部执行对象,例如索引系统、一个文档或是数据库关键信息时,就有可能发生这种不利情况。由于缺乏访问控制检查等安全保护措施,攻击者能够利用引用信息对未获授权的数据进行访问。

5)伪造的跨站点请求(简称CSRF)。CSRF类攻击的特点是,强迫受害者的某个已进行登录操作的浏览器向安全保护薄弱的页面应用程序发送一条伪造的HTTP请求,包括受害者会话缓存内容及其他任何自动产生的包含认证信息的内容。这就导致了攻击者可以通过强制受害者浏览器向具有漏洞的应用程序传递请求的方式,使相关的应用程序认定该请求是受害者本人所发出的合理请求。

3 Web安全测试内容

攻击者攻击网络的手段多种多样,目的在于寻找并利用网络中存在的漏洞。要想实现周密的安全防范,就需要分析攻击者入侵网络的方式。攻击者对网络攻击的方式包括本地攻击、远程攻击和伪远程攻击。他们的目的主要包括:非法访问目标系统,以获取不应有的访问权限;篡改相关数据,修改重要资料;获取所需资料;使用有关资源,发布虚假信息、占用存储空间甚至发动分布式攻击等。

攻击者进行Web应用攻击行为的过程包括:首先,发现Web系统或应用程序中已存在的漏洞;然后,根据具体漏洞的类别采取对应的、有效的攻击手段;最后,人工分析攻击结果,获取想要的信息或权限。按照目前常见的攻击手段,应该有针对性的进行测试,主要的测试内容如下:

1)漏洞扫描。安全漏洞扫描一般需要借助特定的漏洞扫描器完成,漏洞扫描器其实就是一种能自动检测本地主机或远程端安全性弱点的程序。系统管理员通过漏洞扫描器能及时发现维护的信息系统中存在的安全漏洞,这样在保卫信息系统网络安全过程中可以有的放矢,及时对漏洞进行修补。按照常规标准划分,漏洞扫描一般分为两类,分别为网络漏洞扫描器(Net Scanner)和主机漏洞扫描器(Host Scanner)。网络漏洞扫描器是指通过网络,远程检测目标主机或网络系统的安全漏洞的程序,典型的程序包括ISS Internet Scanner、Satan等。主机漏洞扫描器是指在本地主机或网络系统上运行检测安全漏洞的程序,如著名的COPS、Tiger等软件。

2)功能验证。功能验证属于软件测试当中的黑盒测试方法,对涉及软件的安全功能,如权限管理功能、用户管理功能、认证功能、加密功能等进行测试,验证上述功能是否安全有效。进行黑盒测试的目的是为了模拟一个用户可能采取的恶意行为,观察Web应用系统及其配套的安全措施能否真正地起到防护过滤恶意行为的作用。

3)网络侦听。实际上,网络侦听是指在数据交互或数据通信过程中对数据进行截取并分析的过程。目前,比较通用的网络侦听技术就是捕获网络数据包,我们通常称为Capture,黑客可以通过该项技术盗取公司或个人有价值的数据,同理,测试人员一样可以利用该项技术测试Web应用软件或系统的安全性。

4)模拟攻击测试。模拟攻击测试对于安全测试来说是一种特殊的黑盒测试案例,我们通过模拟攻击的方式来验证信息系统或软件的安全防护能力,在数据处理与数据通信环境中常见的攻击包括冒充、重演、消息篡改、服务拒绝、内部攻击、外部攻击、陷阱门、特洛伊木马等。

4 测试用例设计原则

一个完整的Web安全测试用例体系设计可以从身份验证、加密、输入验证、敏感数据、配置管理、授权、异常管理、会话管理、参数操作、审核和日志记录、部署与基础结构等几个方面入手。下面将详细描述测试用例设计时需要注意的要点。

1)数据加密设计原则。执行数据传输操作需要对某些数据进行信息加密和过滤,比如用户登录密码信息、用户信用卡信息等。此时,其他操作也需要相应进行,如解密发送到客户浏览器或用户电子邮箱、将信息存储到数据库等。目前的加密算法种类越来越多,设计越来越复杂,但数据加密的过程一般是可逆的,意思就是能对数据进行加密,也能对数据进行解密。一般可在后台数据库查看登录的账户和密码是否进行了加密。

2)目录设计原则。Web的目录安全是一个不容忽视的因素,如果Web服务器或Web应用程序的设计不合理,攻击者就可以通过简单的URL推测和替换,完全获取整个Web目录的权限,这样就对Web站点造成很大的安全性隐患。我们可以采取一定的预防措施,如在访问每个目录时设置index.htm,或者访问Web服务器的目录时对权限进行严格的设定,从而使发生安全问题的可能性尽可能地降低到最小程度。

3)登录设计原则。一般的Web应用站点都会采用登录或注册后使用的方式,所以必须对用户名和密码进行匹配校验,以防止用户非法登录。进行登录测试时,需要考虑的方面包括输入的密码是否区分大小写、是否有长度条件限制,最多可以尝试登录多少次,哪些文件或者页面需要登录后才能访问或下载等。

4)服务器脚本语言设计原则。脚本语言存在一定的安全隐患,每种脚本语言的细节略有不同,有些脚本语言允许访问根目录,其他脚本语言只允许访问邮件服务器,但是有经验的黑客可以通过脚本漏洞获取服务器的用户名和口令。设计测试用例时需确认站点使用了哪种脚本语言,并研究该语言的漏洞,还需要考虑是否存在没有经过授权就在服务器端编辑或放置脚本的情况。

5)SSL设计原则。现在越来越多的Web站点使用SSL安全协议进行数据传送。SSL是Secure Sockets Layer(安全套接字协议层)的缩写,是Netscape首先发布的网络数据安全传输协议。SSL的原理是通过私有密钥/公开密钥的加密技术(RSA),在TCP层和HTTP层之间对用户与服务器之间的通信进行加密,确保信息传递的安全性。SSL是在私人密钥和公共密钥的基础上进行工作,任何用户都可以获取公共密钥来加密数据,但解密数据需要使用相应的私人密钥。打开一个SSL站点后,有时候能看到浏览器弹出警告信息,地址栏的http变成https,对SSL进行测试的时候需要确认上述特征,以及站点是否具备时间链接限制等相关的安全保护措施。

5 结束语

Web应用是一种典型的应用程序,Web应用本身越来越复杂,同时它所使用的开发语言和开发模型在不断发展,所有这些因素给测试带来了很大的难度。目前的安全测试主要依赖测试工程师的直觉和经验,Web安全测试被认为是一个耗时、代价昂贵的过程,因此,迫切需要设计一套系统的Web安全测试用例对Web应用进行全面的测试。本文正是基于以上目的,对Web安全漏洞进行分类,研究了Web安全测试内容,阐述了安全测试用例设计原则。

参考文献

[1]方建超,徐全军.网络安全漏洞检测技术分析[J].计算机安全,2005(10):32-33.

[2]施寅生,邓世伟,谷天阳.服务安全性测试技术研究[J].计算机工程与科学,2007,29(10):11-13.

[3]刘焕洲,缪淮扣.Web应用程序建模和测试用例生成方法[J].计算机工程,2008,34(6):60-62.

[4]The Open Web Application Security Project[EB/OL].http://www.owasp.org/index.php/Main_Page.

测试用例的设计和复用技术 篇8

长期以来,我国软件企业一直被软件质量问题所困扰,它有多方面的原因。其中对软件测试的忽视,是一个重要因素。事实上,软件测试可以检测软件中存在的错误,确保软件产品质量。

为了开发出高质量的软件,众多软件企业从之前单纯的以编码为核心向软件工程化方向进军,形成了一套比较完善的软件测试理论体系。软件测试越来越规范化,可以划分为单元测试,集成测试,确认测试和系统测试等,它往往占用了软件开发生命周期40%~60%的时间。但是在实际工作中,还有很多企业,设计出比较低劣的测试用例,时常有些地方被遗漏,不能完全覆盖;有的虽然考虑得面面俱到,但设计的测试用例庞大无比,冗余现象十分普遍,浪费人力物力;更有的企业在新的软件版本或者测试环境中,彻底抛弃原有的测试工作,重新开发测试用例,这是很不经济的。本文希望能够总结以往的经验,提出一些有效的测试用例设计和复用方法,用以帮助测试人员更有效地应用于整个测试流程。

1 测试用例的设计

所谓测试用例是指按照一定顺序执行的与测试目标相关的一系列测试。在测试阶段,软件测试方法可以分为单元测试,集成测试,功能测试和系统测试。单元测试是最小的单位,测试小段特定代码,由开发人员来主导完成;集成测试是把各个应用程序组合起来进行的测试;功能测试即黑盒测试,是立足于用户的角度来进行测试,根据需求和软件运行的平台进行测试;系统测试是把整个软件系统和它所依赖的其他软件或者硬件集成在一起,覆盖所有的功能进行测试:比如压力测试和性能测试等。如何设计出有效的测试用例?下面结合作者在工作中的经历,阐述一些测试用例设计中的问题。

其一,测试用例设计的时间性问题:越早地设计和执行测试用例越好。

目前很多测试模型都是V模型,就是将测试依次划分为几个阶段,进行完了一个阶段然后再展开下一个阶段的测试。这种分阶段测试最大的缺点就是定性地将测试分为几个固定的阶段,其实很多测试可以提前展开,尽早发现错误。而V模型显然有点违背了越早发现错误越有利的原则。在开发嵌入式产品VOIP网关时,我们采用了一种比较灵活的方法,将测试用例的设计提前进行。在需求阶段,便开始考虑和实施系统测试用例;当需求规格书确定后就开始设计功能性测试用例,同时概要设计也并行进行;等概要设计好了进行详细设计时,同时展开集成测试用例的设计。这样当开始编码的时候,我们便可以开始测试准备好的单元测试用例,而且也可以执行集成测试用例和系统测试用例;这样伴随编码同步地进行这些测试用例,可以及时发现错误,得到反馈信息,用以纠止软件设计中的错误。另外一个好处就是在编码阶段就展开集成测试、功能测试和系统测试,能尽早发现错误。

其二,在结构性测试用例设计中,我们要注意的原则:尽可能利用路径覆盖方法设计测试用例来覆盖程序所有可能路径,尤其在程序本身的复杂度高的情况下。

一般说来,在编码过程中,程序本身设计的复杂度也决定了测试用例设计的复杂度。下面结合VOIP网关产品中的状态机进行说明。对于一个VOIP系统,核心之一是有限状态机的设计。一般包含空闲状态,用户摘机状态,拨号状态,等待连接建立状态(其中又可以分为信令连接建立阶段,语音通道建立阶段),通话状态,对方挂机状态,对方电话忙碌状态等。在每一个状态下,事件源可以是:摘挂机事件,拨号事件,建立连接返回事件,如:对方不在线,无法连通因特网等。在某个状态下,接收到不同的事件驱动程序转向其他状态。每次通话过程从空闲状态重新回到空闲状态,这是一个非结构性的循环结构。在这种情况下,就需要采用路径覆盖的方法,来设计结构性测试用例,列出所有的可能性路径,针对其中的每一条路经设计出相应的测试用例。依据图1所展示的一个简单状态机,可能存在的路径包括:AB,ACEG,ADFG等,这就需要我们在进行测试用例设计的时候,细心地把存在的路径一个个找出来,才能设计出比较严谨的测试用例。

另外在结构性测试用例的设计中,还经常采用的方法有:

· 语句覆盖 就是使程序中的每个可执行语句至少执行一次。

· 判定覆盖 使程序中的每个判定至少都获得一次“真”和“假”值。

· 条件覆盖 使每个判定中的每个条件的可能取值至少满足一次。

· 判定/条件覆盖 使判定中的每个条件的可能结果和每个判定本身的判定结果均至少出现一次。

· 条件组合覆盖 使得每个判定中条件的各种可能组合都至少山现一次。

其三,在功能性测试用例设计中,我们常常需要:把百分之八十的精力投入到那些边界情况和失效数据作为输入的测试情况。

功能测试即黑盒测试,一般由测试人员来执行,而测试用例的设计,最好在需求阶段依据需求规格书进行设计。如果设计测试用例的人员没有完全理解需求规格书,这里面就会引起一些问题,到产品最后验收的时候,就会发现产品根本不能交付使用,大大延误了产品上市时间。测试人员依据功能测试用例来进行测试,对软件内部结构和运作并不了解。一般初期设计出来的测试用例往往又会遗漏很多边界条件。在我们开发的一套客户机/服务器系统中,就出现了不少类似问题。首先客户机安装后必须向服务器进行注册,用户的名字在服务器端数据库里面作了限定,由于客户机没有进行检测,最后导致服务器不能为部分用户服务。由于功能性测试在用例中没有包含进去,等产品交付使用后,才发现这个错误。这需要在设计功能性测试用例的时候,不仅仅要考虑有效等价类,那些无效的等价类更加重要,因为这些都是人们容易忽视的,无论开发人员还是测试人员,往往有定势思维,总感觉自己的产品没有问题,他们也习惯性地输入一些一定满足条件的数据进行测试,无形中掩盖了潜在的失效数据的处理。其次边界值划分法也是一种常用的方法。在我们那套客户机/服务器系统中,客户机每隔三分钟会把统计的资料信息传送到服务器。如果服务器正常,则返回正确消息;否则可能返回服务器忙碌信息,此时客户机需要调整策略,延长发送间隔,然后把累积统计的数据在下一次发送时传送给服务器。此外,服务器每天会定时在线备份,这个时段,客户机要调整发送间隔到十分钟,等服务器备份完毕,再提交统计的资料。这就需要我们在设计测试用例的时候,既要包括正常情况下的状况,也要把服务器在不同忙碌等级下的情况,服务器备份的情况统统包含进去。总之,边界情况和失效等价类是设计测试用例时必须要使用到的。这样才能设计出好的功能性测试用例。当然还有其他一些比较常用的方法,如错误推测法和因果图法。

2 测试用例的复用

设计出好的测试用例是确保软件质量的大前提,有效复用现有的测试用例更能提升企业软件开发过程。目前很多软件企业,对测试用例的复用没有引起足够的重视。软件开发往往时间紧张,客观上也成了开发测试人员的借口,设计出来的软件或者测试用例,过于局限于本产品使用,依赖性非常强,根本就不利于升级或者拓展。这里我们提到的就是测试用例的复用。我们要能够将所有的测试用例有效地组织起来,使得测试用例集合里面的每一个测试用例都能够独立地运行,这样才能提高软件测试用例的复用度。结合工作中的经验,传统的测试用例设计有很多方法,看上去相互间没有统一的结构。我们所需要注意的是:能够将测试用例综合起来分析,然后让所有的测试用例组织在一起,它们具有统一的输入、输出接口,并且每个测试用例独立性比较强,这样即使以后软件运行环境发生变化,测试用例还能够继续加以使用。拿我们的VOIP产品来说,我们在推出第一版的时候,测试用例设计得就非常的独立,可以有效地检测状态机的运作。等我们在添加了会议电话功能后,我们基于之前的测试用例,进行了最大程度的复用,节省了大量的时间和精力。测试用例独立性强,采用一致的结构,是测试用例复用度高的关键。

3 结 语

软件测试用例的设计,是软件测试中比较重要的一环。只有设计出更多更好地测试用例,才可以更快更好的发现潜在的错误与失效。使用最少的测试用例,实现最大的测试覆盖,可复用度好,并且在需求分析阶段提前展开测试用例的设计,是我们软件测试的目标。只有制定出完善的测试计划,有效的测试用例,进行测试结构分析以及文档管理,才能保证软件测试的成功。

摘要:软件测试是企业保证软件产品质量的一个重要手段,其中测试用例的设计是软件测试的关键,它一般包括功能测试用例的设计,结构测试用例设计以及系统方面的测试用例设计等。结合实际经验,系统地阐述了如何有效地进行测试用例的设计以及复用。并给出两个案例进行分析,探讨测试用例设计中的一些注意事项。

关键词:软件测试,测试用例,复用技术

参考文献

[1]Beizer B.Software Testing Techniques.Boston,International ThompsonComputer Press,1990.

[2]Pressman R.Software Engineering:A Practitioner s Approach.Boston,McGraw Hill,2001.

[3]郑人杰.计算机软件测试技术,北京:清华大学出版社,1992.

基于模型的测试用例生成技术分析 篇9

序列图的序列图的有穷状态自动机模型

1. UML2.0序列图的语法。

为了可以实现对序列图的动态交互过程的完整描述, 本文以UML21 0序列图的形式化定义为例, 涵盖事件之间的偏序关系, 应用序列图增加的新特征。由此在定义1中, 可以把序列图D采用十三元组来代表, 也即D= (P, E, S, R, M, F, OP, C, m s, ob, fr, →, ) ;E=S∪R, S∩R=¢式中, 其中P和E分别代表有穷对象以及有穷事件的集合, S为发送事件的集合, R为接收事件的集合, M为有穷消息集, F、OP、C则分别代表组合片段、组合片段操作域以及组合片段执行条件的集合;ms、ob、fr分别代表一个函数关系, 依次是E到M、E到P以及E到F。→代表的是M上的全序关系, 则代表发送、接收事件的二元关系, 需要注意的是发送消息事件的发生时间要先于接收消息事件。其中包含opt的序列情况如图1所示, A、B均代表对象, a、b、c、d为信息, con为条件, true为真。

2. 单个对象的形式化定义。

一般来说, 序列图中涉及的消息交互都会涉及到多个对象, 因而需要对单个对象进行形式化定义。我们可以对序列图中对象Pi用六元组表示, 也即是Pi= (E, F, OP, C, n, fr) , 其中n为事件发生顺序的标号, 分别将第一, 第二、第三个发生的事件标记为1, 2, 3, 其余依次进行递推。

3. 事件确定有限自动机。

当前ETDFA作为事件确定有限自动机的扩展已经受到重视, 因而在本研究中选择ET DFA充当描述序列图的形式化模型, 它的状态所反映出的就是序列图中事件向对象的映射, 而它的状态迁移则可以反映出消息交互, 采用二元组对迁移进行标注。通常来说, 所谓的状态迁移即是对消息传递过程的一种描述, 也即是对象发送消息之后就会自一个状态向另一状态进行转换。而ETDFA就能够通过序列图中对交互对象间传递出来的消息序列进行的明确展示, 利用多个对象的积自动机, 从而系统行为的每一详细交互过程做出描述。因而我们采用七元组确定有限自动机At。也即是At= (Q, C, E, ∑, ζ, q0, FS) , ∑={ (c, e) , c∈C, e∈E}, 其中Q所代表的是状态的非空有穷集合, 所代表的的是输入字母表, ζ代表的是状态转移函数, 而q0为At的初始状态, 属于Q, Fs代表的集合则是At的终止状态集合, 同时Fs⊆Q。

4. 自动机构造。

序列图中涵盖了系统中多个对象的消息交互情况, 对于单个对象也包含有不包括组合片段的自动机构造算法, 从而形成了事件确定有限自动机。在ET DFA构造算法中, 集合上述所说, 可以采用以下公式, Pi= (E, F, OP, C, n, fr) , 而相应的At= (Q, C, E, E, D, q0, Fs) , 符合意义上, qo为初始状态, 同时属于Q, 此时不会发生记录事件, 输入∑所代表的是C以及E所构建的序偶对Q×∑→Q, 则对单个的迁移来说就能够用C/E表示, 其中C为标记执行条件, E为消息事件) , Fs所代表的的是At的接受状态, 需要注意的, 如果描述中不包含组合片段的序列图时, 则此时可接受状态是唯一的。算法中, 首先创建出初始状态q0, 而后在对相应的q1, q2, q3等进行依次创建, 然后以ei和ei+1为依据对q1, q2, q之间的迁移关系进行确定, 最后就可以确定可接受状态。

测试用例描述和生成算法

序列图中涵盖了各个对象间的各类交互, 也是参与者、用例和它们关系构成的一种图像化表现。在实际应用中, 我们能够利用用例描述实现对所有用例中含有信息的补充及修正。一般来说, 日常中我们用到的用例中信息具有多面性, 而在整个生成测试用例中, 用例描述是场景执行和期望输出结果的主要源泉。

在生成算法中, 可以让At= (Q, C, E, E, ζ, q0, Fs, 用T来表示测试用例集合。具体步骤上, 首先对从ETDFA初始结点到终止结点的所有路径做出枚举, 其中循环发生应不多于次, 每条路径均有一个和其对应的测试场景。然后对于任意场景, 测试用例则应涵盖前置和后置条件、事件以及事件, 也包含期望的输出结果, 单个测试用例中场景发生的前、后置条件以及期望的输出结果也都应以用例描述作为依据, 事件以及事件约束则和所有状态上发生的事件以及组合片段的执行条件做出对应。

实例分析

本研究中采用图书管理系统中的一些功能模块片段为例, 对测试用例技术的具体应用做出说明。图书管理系统中主要涵盖了用户管理、图书管理以及借阅管理等功能模块, 本文不能一一赘述, 仅给出了添加用户、删除图书和添加图书等几个功能模块的设计。图书管理员所对应的的有限自动机, 通过PPTL对待验证的性质进行描述, 如果管理员能够正常登陆系统, 则可以实现对用户和图书的添加或删除。PPTL中, ( (→x) O (y∧ (y∧empty) ) , 符合意义上, x为真时则代表用户账户有效, 而y为真时系统就会拒绝登录。把前面所述的自动机Promela描述以及PPTL公式输进Xspin, 系统会显示出“0”的错误输出结果, 则表明序列图符合该性质。管理人员只有在确认自动机能够对序列图表达的系统属性做出正确描述后, 才能使用自动机来进行测试用例的生成。

结束语

上一篇:音乐教师行动研究管理下一篇:污水排海