基于语义变异算子的测试用例生成和优化方法

文档序号:10512104阅读:288来源:国知局
基于语义变异算子的测试用例生成和优化方法
【专利摘要】本发明涉及一种基于语义变异算子的测试用例生成和优化方法,其特点是主要包括两个部分:一是测试用例的生成,即结合语义变异算子和混合执行生成覆盖率尽可能高的初始测试用例集;二是对初始测试用例集进行优化,即通过对初始测试用例集在各语义变异体执行中的故障检测结果和运行状态捕获,根据本发明提出的相关指标对其进行优化,并评估优化后的测试用例集。
【专利说明】
基于语义变异算子的测试用例生成和优化方法
技术领域
[0001] 本发明属于软件测试中测试用例生成和优化方法,涉及变异测试方法,测试用例 生成方法,测试用例集优化方法等。
【背景技术】
[0002] 文南犬 "Lingming Zhang, Tao Xie ,Lu Zhang Test Generation via Dynamic Symbolic Execution for Mutation Testing,ICSM'lOProceedings of the 2010IEEE International Conference on Software Maintenance,Pagesl_10"公开了一种基于变异 测试和动态符号执行结合的测试用例生成方法。该方法通过搜集随机生成测试用例的执行 路径,对执行路径上的最后一个谓词进行取反操作,并生成一个新的路径条件。如果该执行 路径不存在,则调用约束求解器求解生成新的测试用例。若存在,则对其之前的谓词进行取 反,依次类推。当不能生成新的路径条件时,使用动态符号执行进行的测试用例生成过程结 束。在生成的测试用例中将满足强变异测试条件的用例输入,其他用例则抛弃。利用该方法 生成的测试用例虽然具有较高的变异评分,但由于其使用了传统的语法变异测试技术,在 应用过程中时间和资源消耗较为严重,而且由于动态符号执行引发的过程阻塞也经常发 生。

【发明内容】

[0003] 要解决的技术问题
[0004] 为了克服现有基于语法变异的测试用例生成方法中变异代价高、资源消耗严重以 及生成测试用例充分性不强的不足,本发明提出一种基于语义变异算子的测试用例生成和 优化方法。该方法引入了语义变异算子来代替传统的语法变异算子,利用高效的程序语义 变异来降低生成变异体的时间、资源消耗,在此基础上通过混合执行对语义变异体的执行 路径进行求解,生成对应的测试用例。通过实际测试结果证明,本发明提出的方法能够利 用较少资源和时间消耗生成充分性较高的测试用例。
[0005] 技术方案
[0006] 本发明解决其技术问题所采用的技术方案是:一种基于语义变异算子的测试用例 生成和优化方法,其特点是主要包括两个部分:一是测试用例的生成,即结合语义变异算子 和混合执行生成覆盖率尽可能高的初始测试用例集;二是对初始测试用例集进行优化,即 通过对初始测试用例集在各语义变异体执行中的故障检测结果和运行状态捕获,根据本发 明提出的相关指标对其进行优化,并评估优化后的测试用例集。
[0007] -种基于语义变异算子的测试用例生成和优化方法,其特征在于步骤如下:
[0008] 步骤1:将被测源程序作为输入,将语义变异算子作用于源程序,生成相对应的语 义变异体;
[0009] 步骤2:使用基于混合执行的测试用例自动化生成工具jCUTE中的jcutec命令对语 义变异体进行插粧和编译,生成.class文件,然后使用jcute命令对.class文件进行混合执 行,生成与语义变异体相对应的初始测试用例;
[00?0] 步骤3:将每个初始测试用例作为输入,使用程序验证工具Java PathFinder执行 所有的语义变异体,得到每个初始测试用例相对应的执行结果:产生变异体总数量!^,单个 测试用例执行一个变异体的时间消耗^,杀死变异体总数量K m,等价变异体个数Em;
[0011]步骤4:依据执行结果对初始测试用例先进行MS优化,再进行AC优化,得到优化的 测试用例排序:
[0012]所述的MS优化,即将测试用例按照变异评分降序排列,定义为:
[0014] 其中,Km为杀死变异体总数量,Tm为产生变异体总数量,Em为等价变异体个数;
[0015] 所述的AC优化,即将测试用例按照平均时间消耗升序排列,定义为:
[0017] 其中,tn为单个测试用例执行一个变异体的时间消耗,1"为执行变异体总数量。
[0018] 所述步骤1中的语义变异算子包括以下20种:
[0019] 1)RVK:移除volatile关键字:将volatile移除后,变量会被线程保存在本地的内 存空间中,而并非直接在主存中进行读写,最终导致数据读写的不一致;
[0020] 2)SPCR:分割临界区,将一个临界区分割为两个临界区,每个临界区中的代码都仍 然是受保护的,但是原临界区的代码集合会改变属性;
[0021] 3)MSBP:Synchronizaed同步块的参数通常有this关键字或相关对象,该变异算子 是将this关键字或相关对象替换;
[0022] 4)SHCR:移动临界区,将临界区上移或下移可能会引起冲突故障,这时共享的资源 不在是同步的了;
[0023] 5)SKCR:缩小临界区,将临界区的代码移动到非临界区,会引发数据竞争;
[0024] 6)ASTK:添加 Static关键词,在一个同步方法中使用static关键词表示这个类对 象不是一个实例对象,如果将一个非静态同步方法变为静态同步方法就会使之变为实例对 象,引起错误的锁故障;
[0025] 7)RSTK:移除静态方法中的static关键词;
[0026] 8)RSB:移除同步块,引起程序缺失必要的锁,从而导致同步错误;
[0027] 9)MSL:改变同步块的位置,使未被初始化完成的对象被引用,可以导致双重验证 的故障;
[0028] 10 )MXT:作用于wai t ()、s 1 eep ()和jo in ()方法,改变这些方法包含的时间参数,该 变异算子使用相同类型不同值替换了时间参数,使线程等待的时间延长或是缩短,从而改 变了线程等待的时间;
[0029] 11 )RTXC:将wait()、join()、sleep()、yield()、notify()和notifyAll ()方法调用 移除,移除wait()方法可以引起可能的冲突,移除join()和sleep()方法能够引起sleep() 故障;
[0030] 12)RJS:将 join〇 方法替换为 sleepO 方法;
[0031 ] 13)RCXC:将以下并行机制移除:Locks( lock()、unlock()),Condit ion (signal ()、 signalAll()),Semaphore(acquire()、release()),Latch(countDown()), ExecutorService(submit()),在该语义变异算子的作用下,会导致临界区缺失故障;
[0032] 14 )RFU:将unlock周围的finally语句移除,finally保证了锁最后被释放,如果该 语句被移除,那么发生异常的时候不能保证锁被最终释放,会导致临界资源缺失的故障; [0033] 15)ASK/RSK:添加/移除方法中的Synchronized关键词,如果该方法中存在临界 区,则ASK会引发死锁故障,而RSK则是程序员经常会犯的错误,可能会引发锁缺失的故障; [0034] 16)EXCR:扩展临界区,将非临界区的代码添加到临界区中,当另一个临界区也包 含这些代码时,会引发死锁;
[0035] 17) RNA:将no t i f yA 11 ()方法替换为no t i f y ()方法;
[0036] 18)MSF:改变信号量的公平性,信号量维护了进入资源的许可集合,在信号量的构 造函数中有一个可选的Boolean参数,当这个参数设为false时允许不公平地获得许可,MSF 是将该参数的true值替换为false或者false替换为true;
[0037] 19 )MXC:作用于并发机制:Semaphores、Latches和Barr iers,改变其使用数量;
[0038] 20 )MBR:改变CyclicBarrier类中构造函数中runnable参数,这个参数是在所有的 线程完成并且到达这个barrier时发生的,如果这个可执行线程参数存在的话将它移除。 [0039] 一种对优化测试用例排序进行评估的方法,其特征在于使用APFD评估标准对候 选的测试用例集排序进行评估;所述的APFD为故障检测平均百分比,定义为:
[0041]其中,η是测试用例的数量,m表示程序中错误的个数,1?1是第一个检测到故障的 测试用例的位置;APFD越大,测试用例集发现错误的速度越快,这样的测试用例序列就越 好。
[0042] 有益效果
[0043] 本发明提出的一种基于语义变异算子的测试用例生成和优化方法,有益效果:
[0044] 语义变异能够使用较少的开销达到理想的变异效果,本发明提出的方法通过设计 一系列的语义变异算子,实现了对程序的语义变异,从而进一步利用混合执行方法生成语 义变异体的测试用例,最后基于变异评分和消耗对测试用例集进行优化。该方法克服了传 统语法变异测试高消耗的不足,也弥补基于动态符号执行测试用例生成技术过程阻塞的缺 陷,经测试使用该方法提高了测试用例生成的效率和覆盖率。
【附图说明】
[0045] 图1是基于语义变异算子的测试用例生成和优化方法总流程图;
[0046]图2是AirLine程序实验结果;
[0047]图3是Account程序实验结果;
[0048] 图4是DiningPhi程序实验结果;
[0049] 图5是LinkedList程序实验结果;
[0050] 图6是UnsortedTree程序实验结果;
[0051]图7是RayTracer程序实验结果;
[0052] 图8是MoldDyn程序实验结果。
【具体实施方式】
[0053]现结合实施例、附图对本发明作进一步描述:
[0054]参照图1。基于语义变异算子的测试用例生成和优化方法主要包括以下步骤:
[0055] 1、生成语义变异体
[0056] 语义变异体的生成是以被测源程序作为输入,将语义变异算子作用于源程序,生 成相对应的语义变异体。那么。该过程首先依赖于语义变异算子的设计和实现,具体的,我 们定义程序描述语言为N,程序语义为L,程序的执行行为为(N,L)。不同于传统的语法变异 操作(N,L) - (N',L),语义变异算子的操作方式为(N,L) - (N,L')。如果更改前后分别执行 一个测试用例t,其程序的行为不一致,则认为t杀死了这个变异体。为了描述这种行为不一 致,我们引入了程序的语义错误模型。对于每一个程序P,定义其输入域为集合D,输出范围 为集合R,以及一个规约说明S,表示从D到R的映射。P是对D上的一个超集进行计算,如果一 个输入不在D内,那么其在P上的输出也不在R内。程序错误的语义特征描述了一个在输入域 子集上生成不正确输出的计算结果,也就是从输入到输出的一个不正确的映射关系。这种 正确与否的标准模型表示,能更好地描述程序行为的不一致性,便于我们寻找程序的错误 场景。
[0057] 对于特定的错误场景,需要对应的语义变异算子实现模拟程序真实的故障,来评 估现有的测试集或者指导生成新的测试用例集。因此,如何将错误植入程序,即通过语义变 异算子生成变异体,是语义变异最为关键的问题。本发明针对目前最为流行的Java并行程 序,分析研究了 Java并行程序的故障模式,并在此基础上设计了面向Java并行程序的语义 变异算子。具体的,本发明设计了 20个语义变异算子,定义如下:
[0058] l)RVK(Remove Volatile Keyword):移除volatile关键字。将volatile移除后,变 量会被线程保存在本地的内存空间中,而并非直接在主存中进行读写,最终导致数据读写 的不一致。
[0059] 2)SPCR(Split Critical Region):分割临界区,将一个临界区分割为两个临界 区,每个临界区中的代码都仍然是受保护的,但是原临界区的代码集合会改变属性。
[0060] 3)MSBP(Modify Synchronized Block Parameter): Synchronizaed同步块的参数 通常有this关键字或相关对象,该变异算子是将this关键字或相关对象替换。
[0061 ] 4)SHCR(Shift Critical Region):移动临界区,将临界区上移或下移可能会引起 冲突故障,这时共享的资源不在是同步的了。
[0062] 5)SKCR(Shrink Critical Region):缩小临界区,将临界区的代码移动到非临界 区,会引发数据竞争。
[0063] 6)ASTK(Add Static Keyword to Method):添加 Static关键词,在一个同步方法 中使用static关键词表示这个类对象不是一个实例对象,如果将一个非静态同步方法变为 静态同步方法就会使之变为实例对象,引起错误的锁故障。
[0064] 7)RSTK(Remove Static Keyword to Method):移除静态方法中的static关键词。
[0065] 8)RSB(Remove Synchronized Bolock):移除同步块,引起程序缺失必要的锁,从 而导致同步错误。。
[0066] 9)MSL(Modify Synchronized Location):改变同步块的位置,使未被初始化完成 的对象被引用,可以导致双重验证的故障。
[0067] 10)MXT(Modify Method-X Time):作用于wait()、sleep()和 join()方法,改变这 些方法包含的时间参数,该变异算子使用相同类型不同值替换了时间参数,使线程等待的 时间延长或是缩短,从而改变了线程等待的时间。
[0068] 11)RTXC(Remove Thread Method-X Call):将wait()、join()、sleep()、yield()、 11〇1^€7()和11〇1^€7411()方法调用移除,移除¥3;[1:()方法可以引起可能的冲突,移除」0;[11() 和sleepO方法能够引起sleepO故障。
[0069] 12)RJS(Replace Join()with Sleep()):将join()方法替换为sleepO方法。
[0070] 13)RCXC(Remove Concurrency Mechanism Method-X Call):将以下并行机制移 除:Locks(lock()Nunlock()),Condition(signal()NsignalAll()),Semaphore(acquire ()、release()),Latch(countDown()),ExecutorService(submit()),在该语义变异算子的 作用下,会导致临界区缺失故障。
[0071] 14)RFU(Remove Finally Around Unlock):将unlock周围的finally语句移除, finally保证了锁最后被释放,如果该语句被移除,那么发生异常的时候不能保证锁被最终 释放,会导致临界资源缺失的故障。
[0072] 15)ASK/RSK(Add/Remove Synchronized Keyword from Method):添加/移除方法 中的Synchronized关键词,如果该方法中存在临界区,则ASK会引发死锁故障。而RSK则是程 序员经常会犯的错误,可能会引发锁缺失的故障。
[0073] 16)EXCR(Expand Critical Region):扩展临界区,将非临界区的代码添加到临界 区中,当另一个临界区也包含这些代码时,会引发死锁。
[0074] 17)RNA(Replace NotifyAll ()with Notify()):将notifyAll ()方法替换为 notifyO 方法。
[0075] 18)MSF(Modify Semaphore Fairness):改变信号量的公平性,信号量维护了进入 资源的许可集合,在信号量的构造函数中有一个可选的Boolean参数,当这个参数设为 false时允许不公平地获得许可。MSF是将该参数的true值替换为false或者false替换为 true。
[0076] 19 )MXC (Mod i fy Concurrency Mechani sm-X Count):作用于并发机制: Semaphores、Latches 和 Barriers,改变其使用数量。
[0077] 20)MBR(Modify Barrier Runnable Parameter):改变CyclicBarrier类中构造函 数中runnable参数,这个参数是在所有的线程完成并且到达这个barrier时发生的。如果这 个可执行线程参数存在的话将它移除。
[0078]本发明使用了基于Python语言结合自然语言处理和文本信息匹配的方法,对源程 序进行基于特定故障场景的语义变异,生成相对应的语义变异体。
[0079] 2、生成初始测试用例集
[0080]将基于混合执行的测试用例生成方法作用于生成的语义变异体,本发明采用基于 混合执行的测试用例自动化生成工具jCUTE作用于源程序和语义变异体生成初始测试用例 集。具体做法是将具体执行和符号执行相结合,使用变量符号代替具体的用例输入执行程 序,得到程序路径约束的符号表达式,然后对符号表达式进行求解,以得到能够执行指定程 序路径的具体输入值。然后用一个随机给定的输入(可以为空值)将程序启动,然后跟踪程 序的执行路径,生成该输入数据的条件约束表达式。再对该约束表达式进行约束求解得到 新的输入数据,新输入数据是原来输入数据的反例,最后再用该新测试用例跟踪执行路径 进行测试,一直重复执行这个迭代过程直到所有的路径都执行完毕或者消耗完规定的时 间。这些初始测试用例集基本覆盖源程序和每个变异体程序所有可达路径。
[0081 ] 使用jCUTE,只需要基本的Java运行环境,在系统变量中加入jCUTE的bin目录即 可,无需其它配置。具体的,使用"jcutec"命令对源程序进行插粧和编译,生成.class文件, 然后使用"jcute"命令对被插粧和编译过的可执行中间程序进行混合执行,生成相对应的 测试用例。
[0082] 3、收集变异体执行信息
[0083]以使用j CUTE生成的初始测试用例集作为输入,使用程序验证工具JPF (JavaPathFinder)执行所有的语义变异体,检测程序执行时的可能发生的故障和状态信 息。JPF基于形式化的分析与验证技术,即模型检测技术。其基本思想是:将要分析的系统抽 象表示为状态迀移图,模态和时序逻辑公式Φ表示所要检查系统的性质,系统是否具有所要 求的性质就归结为Sl-φ是否成立。在JPF模型检测工具中,Java的字节码文件为被验证的对 象,通过JPF内核的搜索机制,从被验证对象中搜索出与原工具系统等价的部分状态,交给 Java虚拟机检测。在JPF中自定义的Java虚拟机,可以用来执行普通的Java字节码,通过存 储、匹配和恢复程序状态,JPF可以系统地遍历所有的程序状态,从而查找出软件中的缺陷。 用户需要提供可执行的Java字节码以及一个配置文件用来指定需要验证的属性。JPF返回 一个报告,记录下所需验证的属性是否被满足从而进行进一步的分析,对不符合系统性质 的检测结果,JPF将在验证报告中显示错误路径及性质违例。
[0084]本发明使用Python脚本实现了全过程的自动化,执行结束后产生执行结果及执行 信息统计文件,该文件记录了执行变异体数量、测试用例数量、执行消耗时间、消耗内存大 小以及有无错误发生等信息。其中,执行变异体总数量记为T m,变异体执行消耗时间记为?η, 杀死变异体总数量记为Km,测试用例总量记为η,程序故障总数记为m。
[0085] 4、优化测试用例集
[0086]基于变异体执行结果和状态信息,制定测试用例集的优化策略。
[0087] (1)MS优化,即将测试用例按照变异评分降序排列。其中,变异评分是衡量一个测 试用例发现程序语义故障的能力的大小,随着分值的增大,单个测试用例发现错误的能力 也就越大,定义为:
[0089] 1为杀死变异体的个数,Tm为变异体总数,Em为等价变异体个数。
[0090] (2)AC优化,即将测试用例按照平均时间消耗升序排列。其中,平均时间消耗是指 单个测试用例执行变异体的平均时间消耗。该指标表示测试用例执行时的时间消耗,在变 异评分相等的情况下,时间消耗越低,优先级越高,定义为:
[0092] tn为单个测试用例执行一个变异体的时间消耗,1"为变异体总数。
[0093] 以初始测试用例集作用下的语义变异体执行结果和状态信息作为输入,首先执行 MS优化,再对结果执行AC优化,最后得到候选的测试用例排序。使用ΑΡΠ )评估标准评估产生 的候选的测试用例集排序,APFD(Average of the Percentage of Faults Detected),即 故障检测平均百分比,定义为:
[0095]其中η是测试用例的数量,m表示程序中错误的个数,TFi是第一个检测到故障的测 试用例的位置。APFD越大,测试用例集发现错误的速度越快,这样的测试用例序列就越好。 [0096]为了验证本发明提出方法的效果,本发明采用了 7个实验程序进行了验证。其中5 个小程序(六;[1'1;[116、4。。011111:、1^111^(11^81:、0;[11;[叫?11;[和1]113〇1^6(11'代6)包含了可以体现 Java并行设计理念的多个类,虽然小却在运行时可以产生很多个线程,充分利用了 Java的 并行机制,这些小程序也是并行程序测试中经常被优先使用的实验程序。另外两个实验程 序RayTracer和Mo IDyn是来自英国愛丁堡大学并行计算中心(Edinburgh Parallel Computing Centre)开发的标准测试集(Java Grande multi-thread benchmark suite), 是非常著名的并行程序标准测试集。表1列出了这些实验程序的详细信息,其中包括代码规 模和产生变异体的数量。
[0097] 表1实验程序
[0099]本发明首先对个实验程序进行语义变异,获得各实验程序的语义变异体;然后使 用基于混合执行的方法自动生成7个实验程序的初始测试用例集。表2列出了各实验程序对 应的变异体数量和生成的初始测试用例的数量,在此过程中我们剔除了极其少量的垃圾数 据。
[0100]表2初始测试用例集
[0102] 基于上述实验结果,使用初始测试用例集执行各程序语义变异体,然后再使用故 障检测方法对初始测试用例集进行故障分析,计算得到每个测试用例集的变异评分和平均 消耗。最后使用测试用例优化策略对初始测试用例集进行优化,得到最终的优化序列。表3 给出了 7个实验程序对应的最终实验结果。
[0103] 表3 APFD值比较
[0105]表3分别记录了生成的测试用例集在最优排序和最差排序下的平均消耗和APFD 值,由表可知,在本发明提出的测试用例优化策略的作用下,对于同一个程序的相同的测试 用例集,优化后的测试用例排序APro值高于在最差排序下的APro值,说明了优化后的测试 用例排序能够更快的发现程序故障,平均消耗时间也较少。另外,实验发现程序的规模越 大,则最优排序和最差排序所表现出发现故障的能力差异也就越大,说明本发明提出的基 于语义变异算子的测试用例生成和优化方法非常适合大型的并行程序。因此,发明提出的 测试用例生成和优化方法对于并行程序是非常有效的,生成的测试用例可快速有效的检测 典型的并行故障,并且尽可能的消耗更少的时间和资源。
[0106]附图2-7是每个实验程序分别对应的实验结果图示,其中深色线代表测试用例最 差排序,浅色线线代表测试用例最优排序,纵坐标表示执行到当前测试用例所杀死变异体 的比例,横坐标为执行过的测试用例总数量。由图可知,在测试用例最优排序下往往执行了 少量的测试用例就可以杀死所有的变异体,而在测试用例最差排序下则需要执行更多的测 试用例才能杀死所有的变异体,这就表明本发明提出的方法生成的测试用例往往能够发现 更多的程序故障。
【主权项】
1. 一种基于语义变异算子的测试用例生成和优化方法,其特征在于步骤如下: 步骤1:将被测源程序作为输入,将语义变异算子作用于源程序,生成相对应的语义变 异体; 步骤2:使用基于混合执行的测试用例自动化生成工具jCUTE中的jcutec命令对语义变 异体进行插粧和编译,生成.class文件,然后使用jcute命令对.class文件进行混合执行, 生成与语义变异体相对应的初始测试用例; 步骤3:将每个初始测试用例作为输入,使用程序验证工具Java PathFinder执行所有 的语义变异体,得到每个初始测试用例相对应的执行结果:产生变异体总数量!^,单个测试 用例执行一个变异体的时间消耗tn,杀死变异体总数量K m,等价变异体个数Em; 步骤4:依据执行结果对初始测试用例先进行MS优化,再进行AC优化,得到优化的测试 用例排序: 所述的MS优化,即将测试用例按照变异评分降序排列,定义为:其中,Km为杀死变异体总数量,Tm为产生变异体总数量,Em为等价变异体个数; 所述的AC优化,即将测试用例按照平均时间消耗升序排列,定义为:其中,tn为单个测试用例执行一个变异体的时间消耗,1?为执行变异体总数量。2. 根据权利要求1所述的一种基于语义变异算子的测试用例生成和优化方法,其特征 在于所述步骤1中的语义变异算子包括以下20种: 1. RVK:移除volatile关键字:将volatile移除后,变量会被线程保存在本地的内存空 间中,而并非直接在主存中进行读写,最终导致数据读写的不一致; 2. SPCR:分割临界区,将一个临界区分割为两个临界区,每个临界区中的代码都仍然是 受保护的,但是原临界区的代码集合会改变属性; 3. MSBP:SynChr〇niZaed同步块的参数通常有this关键字或相关对象,该变异算子是将 this关键字或相关对象替换; 4. SHCR:移动临界区,将临界区上移或下移可能会引起冲突故障,这时共享的资源不在 是同步的了; 5. SKCR:缩小临界区,将临界区的代码移动到非临界区,会引发数据竞争; 6. ASTK:添加 Static关键词,在一个同步方法中使用static关键词表示这个类对象不 是一个实例对象,如果将一个非静态同步方法变为静态同步方法就会使之变为实例对象, 引起错误的锁故障; 7. RSTK:移除静态方法中的static关键词; 8. RSB:移除同步块,引起程序缺失必要的锁,从而导致同步错误; 9. MSL:改变同步块的位置,使未被初始化完成的对象被引用,可以导致双重验证的故 障; 10. MXT:作用于wai t ()、s 1 eep ()和j〇iη ()方法,改变这些方法包含的时间参数,该变异 算子使用相同类型不同值替换了时间参数,使线程等待的时间延长或是缩短,从而改变了 线程等待的时间; 11. RTXC:将wait()、join()、sleep()、yield()、notify()和notifyAll()方法调用移 除,移除wait()方法可以引起可能的冲突,移除join〇和sleep()方法能够引起sleep()故 障; 12. RJS:将join〇方法替换为sleepO方法; 13 )RCXC:将以下并行机制移除:Locks(lock()、un lock()),Condi tion( signal ()、 signalAll()),Semaphore(acquire()、release()),Latch(countDown()), ExecutorService(submit()),在该语义变异算子的作用下,会导致临界区缺失故障; 14. RFU:将unlock周围的f inal ly语句移除,f inal ly保证了锁最后被释放,如果该语句 被移除,那么发生异常的时候不能保证锁被最终释放,会导致临界资源缺失的故障; 15. ASK/RSK:添加/移除方法中的Synchronized关键词,如果该方法中存在临界区,则 ASK会引发死锁故障,而RSK则是程序员经常会犯的错误,可能会引发锁缺失的故障; 16. EXCR:扩展临界区,将非临界区的代码添加到临界区中,当另一个临界区也包含这 些代码时,会引发死锁; 17) 1?嫩:将11〇1^€7411()方法替换为11〇1^€7()方法; 18. MSF:改变信号量的公平性,信号量维护了进入资源的许可集合,在信号量的构造函 数中有一个可选的Boolean参数,当这个参数设为false时允许不公平地获得许可,MSF是将 该参数的true值替换为false或者false替换为true; 19 )MXC:作用于并发机制:Semaphores、Latches和Barriers,改变其使用数量; 20)MBR:改变CyclicBarrier类中构造函数中runnable参数,这个参数是在所有的线程 完成并且到达这个barrier时发生的,如果这个可执行线程参数存在的话将它移除。3. -种对权利要求1所述的优化测试用例排序进行评估的方法,其特征在于使用APFD 评估标准对候选的测试用例集排序进行评估:所述的APFD为故障检测平均百分比,定义为:其中,η是测试用例的数量,m表示程序中错误的个数,1巧是第一个检测到故障的测试用 例的位置;APFD越大,测试用例集发现错误的速度越快,这样的测试用例序列就越好。
【文档编号】G06F11/36GK105868116SQ201610234663
【公开日】2016年8月17日
【申请日】2016年4月15日
【发明人】郑炜, 王育, 杨喜兵, 吴潇雪
【申请人】西北工业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1