欢迎来到天天文库
浏览记录
ID:28151761
大小:106.50 KB
页数:8页
时间:2018-12-08
《针对CIMS系统中测试集的筛选问题进行研究.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、针对CIMS系统中测试集的筛选问题进行研究 1引言 随着信息化社会的飞速发展,图形处理芯片GPU芯片的功能越来越丰富,性能要求越来越高,应用领域也越来越多源化。相应地,在GPU架构设计环节,功能级仿真C-model的规模和复杂度也不断增大。整个项目设计周期内,任何新版本的引入,无论是源于对已有错误的修正,还是为支持新功能而增加模块,都可能对原有C-model带来影响。如果无限制地任由研发团队的每个人随意检出检入,就会给项目带来风险,因此就需要对代码进行版本控制和有效管理。 与此同时,代码的频繁修改,理论上都需要更高频率的测试来验证,才能避免新错误的引入,确保
2、芯片的正常功能。其过程十分重要,但是需要大量的人力、物力成本。因此,要确保项目高效正向推进,有必要在代码提交前对其进行有效的预检,为后续的回归测试和错误跟踪节省成本。 众所周知,测试用例决定了测试的成本及效果,针对版本控制系统端的测试用例,时效性显得尤为重要。因此,如何在时间有限的约束条件下,在代码预检端优选出能保障代码质量的测试用例集合,成为本文研究的重点。 2CIMS原理框架和集合覆盖问题 2.1CIMS原理框架 作为我们自行研发的自动化测试框架的一部分,检入管理系统CIMS(CheckInManagementSystem)相当于软件版本管理系统的
3、前置过滤器。图1为其工作流程图。该系统利用Perforce提供的trigger功能,将我们自定义的脚本嵌入。当研发人员修改代码并检入时,p4server自动调用脚本对修改的代码进行编译和测试。只有通过所有编译和测试项的修改,才可过关进而被成功提交至Perforce存储库,并获得版本号。否则,修改将被退回,开发员可以通过CIMS系统提供的网页界面查询编译和测试状态,便于进一步自查和完善代码。虽然通过CIMS这套机制,对代码质量设置了一定的门槛,但是也需要兼顾时间成本,为了让CIMS发挥更大的作用,测试集的优选算法值得重点研究。 目前,测试人员普遍采用回归测试来保证
4、代码修改的正确性,并避免代码修改给被测程序其他模块带来的副作用。CIMS系统中测试用例集的优选问题在以往的项目开发中,往往凭经验从已有的回归测试集合中,分模块挑选,以提高整个pipeline的功能覆盖,并无任何指标来评判其效用之优劣。本文从集合覆盖角度,对如何从已有回归测试集中筛选子集作为CIMS系统内的测试集展开研究。 2.2集合覆盖问题 在集合论中,集合覆盖定义为:假设A是非空集合,如果A的若干非空子集的并集等于A,则由这些子集构成的集合C称为A的覆盖。即非空集A的一个覆盖C是A的非空子集的集合。 经典的集合覆盖问题SCP(SetCoveringProb
5、lem)描述如下:给定两个集合R和S,元素的集合R和R的子集的集合S,目标是找到S的一个子集C,使得C中所有集合的并等于R,且使
6、C
7、最小。这是NP-hard类的最优化组合问题。 早期回归测试工具大都基于黑盒测试。当时,还没有任何回归测试工具能在程序修改后自动在原始用例集中选择出一个用例子集进行回归测试,而是再测试全部已有用例进行回归测试。在这种情况下,Fischer等人研究了如何在原始用例集中选择出一个最小的子集,用于回归测试,且不会降低测试效果和程序的可靠性,最早提出了测试用例最小化的思想[1]。对测试用例集最小化的定义如下:给定测试需求集R{R1,R2,R
8、3.....Rm},测试用例集T{T1,T2,T3....Tn},该测试用例集T能够用来充分测试R。问题:从T中找到一个最小子集T’,该子集T’能够用来充分测试给定的测试需求集R。 1993年,Harrold等人[2]首次提出了测试用例集约简的概念,也就是要在原始的测试用例中寻找一个子集,实现测试需求的充分覆盖。随后研究人员围绕测试用例集约减问题提出了贪心算法[3]、整数规划算法、遗传算法、HGS等算法。这些方法各有优势和局限性,更多趋向于去除冗余的测试用例,没有考虑到要缩减用例的根本原因是资源有限,而且约减的目的并不单是测试用例的个数越少越好,也要考虑约减后测
9、试用例集的错误检测能力是否保持在一定的水平上。为了充分利用资源,又兼顾资源的约束条件。 本文提出了一种改进的测试集优选算法,寻求能使代码覆盖率达到最大的用例集。 3基于SCP原理的优化方案 3.1集合覆盖贪心算法 最早提出用贪心算法来求解测试用例集合覆盖问题的是V.Chvatal[4]。集合覆盖贪心算法是测试用例集约减问题的一个常用近似算法。贪心策略的思路是从问题的初始状态出发,通过若干次的贪心选择而得出最优解(或较优解)。其算法执行过程如下:逐次从T中选择一个测试用例,使之能尽可能多地满足R中的测试需求,然后从R中删除这些已被满足的测试需求,循环几次上述
10、操作,直到
此文档下载收益归作者所有