基于分词搜索的测试用例复用研究论文
摘 要 随着软件行业快速发展,软件功能的复杂程度随之提高,软件质量逐渐受到重视。在软件的整个生命周期中,软件测试是一个非常重要的环节。软件质量在很大程度上由软件测试的完整程度所决定。然而,随着软件复杂度的提高,软件测试的工作成本在不断增加。为了减少测试中的冗余现象,提高软件测试的效率,测试用例复用技术被应用于各个软件测试环节。本文建立了一套测试用例管理系统,通过统一存储并管理测试用例,提出将分词技术应用于测试用例复用查询,提高测试用例查询结果的有效性和可复用性。
关键词 软件测试,测试用例,复用,分词
0 引言
软件测试是在规定的条件下对程序进行操作,以发现程序错误,由此来衡量软件质量,并对其是否能满足设计要求进行评估的过程。作为软件生命周期中的重要环节,其成败直接决定着软件的最终质量。软件测试工作不仅保证了软件质量,而且降低了日后维护成本。随着我国软件产业的蓬勃发展以及对软件质量的重视,软件测试也逐渐受到软件企业的关注,正逐步成为一个新兴的产业。测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,用于测试某个程序路径或核实是否满足某个特定需求。
随着软件规模越来越庞大,软件测试的工作量也与日俱增。软件测试过程中,测试用例的设计是软件测试过程的核心,直接影响了软件测试的效率。测试设计的好快直接决定着测试结果及其成效,测试用例是最有可能发现软件错误的测试数据和流程的集合。测试用例复用是将已执行过的测试用例重复使用或改进使用于不同的软件或软件测试阶段中,以此来降低测试用例设计环节的工作成本。为了提高软件测试的效率,测试用例复用技术被广泛地应用于各类软件测试的设计和回归测试阶段,用于减少测试设计阶段的成本,以缩短测试周期,提高测试效率。本文通过对可复用测试用例的收集以及分析,提出了一种以行业领域和基于分词搜索策略的测试用例复用思路,以提高测试用例的复用率。但是当测试用例管理系统中的测试用例数量过于庞大时,则不利于测试用例的筛选,因此有必要设计了推荐算法来按照一定规则对可能被复用的测试用例进行排序推荐。
1 测试用例复用研究
1.1 测试用例复用的概念
测试用例复用是指测试工程师在执行一项新的测试工作时,通过直接调用或修改现有的、合适的测试用例,并将其应用在测试执行中的过程。如果搜索后得到的测试用例与需求完全一致,则直接复用现有测试用例,但是一般情况下,直接复用测试用例的情况很少;如果搜索到的测试用例与需求近似,则对其进行修改,得到新的测试用例之后再复用。在一定程度上,测试用例复用可以节省重新设计测试用例的时间,减少测试工程师的工作量,提高软件测试的效率。
然而,并非所有的测试用例都适合复用,有些测试用例定制化程度较高,只适合某些特定的测试场景,这样的测试用例可复用程度不高。由此可知,测试用例要能进行复用,须具备一定的可复用特性。
1.2 可复用测试用例特性
经过对大量可复用测试用例的收集以及分析,本文认为可复用测试用例需满足以下5个特性:标准化、通用性、有效性、独立性、小粒度1]。
1) 标准化。测试用例通常用自然语言进行描述,但由于自然语言的非结构化特性,无统一结构的测试用例不利于测试用例复用。因此,测试用例的设计必须使用统一的格式或结构,以消除由于自然语言的表述的差异带来的问题。标准化不仅强调测试用例的可复用能力,更偏向于测试用例管理。采用明确无歧义的语言描述测试用例并用统一结构进行存储,如表1测试用例描述案例所示2]。其中,加粗字体表示测试用例的字段,中括号 ]里的内容表示测试用例的具体内容或相关属性。
2) 有效性:测试用例的目标是发现软件中的问题或者验证功能是否正确,因此测试用例必须是针对它的测试目的而设计,并且经审核后必须是正确、完整、适用于被测对象并且是可执行的。
3) 通用性:测试用例不局限于具体的应用,不过分依赖于被测软件的需求、设计、环境、其他功能以及其他业务流程,可复用测试用例可多次适用于不同版本的软件测试或广泛应用于某同类软件或类似功能模块的测试。
4) 独立性:测试用例不过分受制于测试环境、相关业务流程以及前置测试用例。理论上,测试用例与其他因素的耦合度越小,则独立性也就越高,其测试用例的可复用程度相对较高。
5) 小粒度:通常指一个被测模块的末梢功能,测试用例的粒度设计追求功能的不可分割性。粒度越小并且相对独立的功能,针对其功能设计的用例,可复用性也就越高。
以登录功能举例,该功能相对于整个应用系统来说粒度最小,并且与其他功能相对独立,同时,针对登录功能设计的测试用例具有较强的通用性,所以通常情况下,登录功能的测试用例具有较高的可复用性。
1.3 测试用例复用场景
然而,并非所有的软件测试过程都适合进行测试用例复用。测试用例复用是为了避免测试用例的重复设计,提供现有的测试用例给测试工程师直接使用。因此,只有在需要重复执行的测试用例时,测试用例的复用才能真正发挥作用。通常情况下,测试用例复用主要由三类测试场景3]:
1) 软件升级:包括版本升级、缺陷修复等升级行为。例如:一家公司的业务管理系统的升级,或某个功能的改进。通常不会引起非常大的业务流程变动或界面改动,因此前一个版本的测试用例可被大量复用。
2) 产品测试:此类场景多存在于软件研发公司,多从事于某个领域的软件研发工作,通常此类公司有着自己的测试用例库。比如:从事ERP(企业资源计划)软件开发的公司。虽然不同行业的业务流程都不完全一致,但也有存类似的可复用业务流程,例如员工管理模块等。
3) 第三方测评4]:第三方测评机构适用于此类测试用例复用场景。由于第三方测试机构会对大量的软件进行测评,其中不乏相同领域的软件产品。如果对每个测试软件重新设计测试用例,必然增加工作成本。因此,对于第三方测评机构测试用例复用是十分有必要的。测试用例复用在不同领域和场景中有着广泛应用,对于大量测试用例的复用需要建立在大量测试用例基础上,需要将以往设计的测试用例加以存储和管理,因此设计一套测试用例管理系统是测试用例复用成为可能的先决必要条件。
2 测试用例复用库模型设计与实现
测试用例复用就是对已经执行的测试用例进行重复使用或修改使用。要实现测试用例复用,则需要对以往设计的测试用例进行有效的存储以及分类管理以供后续使用。对测试用例的管理就需要创建一个测试用例复用库来存储测试用例,在测试用例复用库中使用统一的规范数据格式对测试用例进行管理。当测试工程师要设计测试用例时,可先在测试用例库中进行搜索,查找合适的测试用例进行复用。但是,随着时间的增长以及测试项目的增加,测试用例库也随之扩充,测试用例数目与日俱增,这就增加了搜索的工作量。为了提高搜索的效率,根据测试用例适用的行业领域,对测试用例进行划分存储,并打上行业领域的标记。其原因在于,相同行业领域的软件其测试用例的通用性更高,可复用性也更高。
为了提高在测试用例库中的搜索效率和准确度,将分词技术应用于测试用例搜索功能中,对用户的搜索输入进行分词、筛选,得出有效的搜索关键字,根据关键字在测试用例复用库中进行搜索,减少了非关键字的干扰,提高了查询速度,并且搜索结果更准确。
通常情况下,测试用例复用分为直接使用以及修改使用,但无论何种情况,都需要对新测试用例进行审核,确定其有效性和唯一性方能进入测试用例复用库,测试用例复用模型如图1所示。
3 测试用例复用搜索设计与实现
3.1 分词词库
测试工程师进行测试用例复用时,需要对查询输入进行处理,常用方法是使用分词技术提取其中的关键字进行查询。分词技术中,英文单词之间以空格作为自然分界符,而中文是以字为基本的书写单位,词与词之间没有明显的区分标记,因此,对中文信息处理相对比较复杂。语义分析是中文信息处理的基础与关键,常见的分词算法有两种:
算法1:建立词库,对待分析字符串逐词匹配,分离关键字;
算法2:建立词库,对目标串构造全文索引,然后将结果集与词库进行笛卡尔积匹配,获取匹配结果。
以上算法如果用于较大规模词库时,存在如下效率问题:
1) 当词库较大时,逐词匹配耗时较长;
2) 采用全文索引方式消耗多余内容,同时不适用于测试用例复用查询功能,因为用户输入的查询信息较短,而全文索引多适用于长文本字符串搜索功能。
在测试用例复用查询功能中,用户查询输入相对简单,但需要进行精确分词,因此针对此类特点,本文对文献5]中提出的索引方法加以改进,采用二级索引对中文词条进行分词(这里只讨论中文分词,英文分词可使用Lucene工具进行分词),以确保能快速并精确地进行分词。由于长度为2的中文词条占整个汉字词条约70%5]以上,同时假设汉字词长度2、3、4的词条个数比例为7:2:1,因此,大约90%的情况下,执行两次检索便能定位一个汉字词条,以保证较高的分词效率。同时为减少磁盘I/O,在系统启动时,将词库载入至内存,使所有计算可在内存中进行,进一步提高分词效率。根据《中国大百科全书》目前收录约6 000万个词条为例,整个中文词库大约适用300MB~400MB内存,因此,常见的主机可满足其硬件需求。
3.2 搜索算法
随着软件测试项目的日益增加,测试用例复用库不断扩充,这势必会影响到搜索的效率。本文中,当接收到用户的查询输入,程序首先将其与分词词库进行匹配,对查询输入进行分词,然后根据被测软件的行业领域,查询对应领域的测试用例数据,并且根据排序算法对查询结果进行排序。由于该分词算法仅用于测试用例查询,因此对于中文分词算法中歧义词的处理可以忽略不计,其伪代码如下所示:
由于词库在初建之时,未必能覆盖所有中文词条,并且随着各个行业的高速发展,每天都可能会有新词条出现,因此必然存在无法匹配的词条。当出现新词时,分词算法将自动定位到下一个可匹配词条,然后继续进行拆分,而新词则被单独作为一个分词加载至分词结果中。同时存储该用户输入,待管理员进行审核,人工加入到词库中。采用人工添加新词而非程序自动添加新词的原因在于,程序还不够智能,也无意义做到足够智能,同时对于新词的理解或判断的正确率远低于人判断的正确率。
3.3 结果排序
针对测试工程师进行测试用例的复用查询,其查询结果可能是几条,也可能是几十条,甚至是几万条数据,然而并非所有查询到的测试用例都是查询者所需要的,当查询结果数量庞大时,逐条查看筛选所消耗的时间可能早已超过了重新设计一个测试用例所需的时间,必然导致时间成本上的浪费,这与测试用例复用的初衷相违背。由此可见,根据查询到的测试用例与用户所需测试用例的相关性,为用户推荐一个“好”的测试用例是十分必要的。
可复用测试用例的查询结果的排序可以为用户提供选择测试用例的依据,针对查询主要针对教育期刊网
关键词 的搜索,因此对查询结果中的测试用例按照一个三元组方式排序,其中K表示搜索的教育期刊网
关键词 集合,ki是该教育期刊网
关键词 集合中的某个教育期刊网
关键词 ,则排序三元组表示如下:
C(ki)表示当前查询结果中是否有与ki匹配的教育期刊网
关键词 ,如有,则C(ki)记为1,如没有,则C(ki)记为0。
C(ki)是K中每个教育期刊网
关键词 在本次查询中是否匹配的计数之和,始终大于0,因为查询结果中显示的是至少有一个查询关键字匹配的搜索结果。S(ki)表示当前查询结果中教育期刊网
关键词 ki出现的频次。S(ki)是K中每个教育期刊网
关键词 在本次查询中出现频次之和。Creuse则表示查询结果中该条测试用例被复用的次数。
通过上述三元组对测试用例的查询结果进行排序。首先按照C(ki)列进行降序排序,若该列数值相同,则按S(ki)列进行降序排序,若此列数值相同,则按Creuse列进行降序排列。由此可以发现,查询关键字匹配越完全,其满足查询需求的程度就越高,同时,复用次数越多的测试用例,越具有通用性。
4 总结
测试用例复用的核心思想是将以往的测试用例加以收集积累,通过建立测试用例管理系统来统一管理测试用例库。本文提出了将分词技术和软件行业领域应用于测试用例复用来提高测试用例复用程度。按领域划分测试用例可使得查询结果更具有可复用性,同时设计了一套采用二级索引结构的中文分词词库使分词效率更高效。因此,系统为测试用例设计人员推荐更“好”的可复用测试用例,对查询结果顺序稍加改进便于筛选,便能极大的减少测试用例设计阶段的工作量。
本文标签:
[!--temp.ykpl--]