文摘
突变检测技术来评估质量的一个测试套件。然而,昂贵的计算从大量的突变体影响变异测试的实际应用,并减少突变体的数量合理的变异测试的一种有效的方式。我们提出一个新的方法来减少突变体通过分析测试程序中的语句之间的主导地位。该方法只选择nondominated语句产生的突变体,和主导语句产生的突变体减少。将该方法应用于九个程序后,实验结果表明,我们的方法可以减少超过75%的突变体和维护突变充分性。
1。介绍
变异测试是fault-oriented测试技术首先提出的《哈姆雷特》(1)和DeMillo et al。2]。在突变测试中,测试下的程序根据给定突变语法规则(变异算子),并且每个变异版本是一种突变。当一个变异不同于原来的程序在执行后的输出相同的测试用例,据说突变被测试用例。特别的突变体,函数等于原来的程序,不能被任何测试用例是等价的。突变分数评价充分性的一个给定的测试套件被杀害的数量的比率计算突变体的非等值的。
经验表明,突变体可以反映真实程序中的错误3- - - - - -5]。一般来说,变异测试是用来评估一个测试套件的质量(6]或辅助生成测试套件具有较高的故障检测能力(7]。然而,大量的突变体产生的程序测试下导致高成本,阻碍了突变检测的广泛应用。根据最近的一项调查(8),大量的突变体,时至今日,被认为是最重要的一个变异测试的问题。
实际上,大多数错误程序倾向于定位在几个语句而不是所有的语句。似乎对所有的语句执行变异算子是不必要的。对于给定的测试套件,研究表明,变异的语句执行次数越多,越高的可能性造成相应的突变体(9,10]。灵感来自这,我们只关注一些语句(而不是所有的语句)程序,只有从这些语句选择产生的突变体,从而减少变异测试的成本。
针对这一点,我们希望确定一个子集的语句覆盖的测试套件将涵盖所有程序中的语句。因此,我们提出一个新方法识别nondominated语句在程序中。该方法只选择nondominated语句产生的突变体,和其他突变会减少。九个项目的实验结果显示,我们的方法可以减少大量的突变体在突变充足率没有重大损失。
本文的其余部分组织如下:部分2总结了相关工作;该方法将详细描述的部分3,包括定义为初步确定nondominated语句和一个例子说明;部分4评估我们的方法通过一系列的实验研究;最后,部分5总结我们的贡献。
2。相关工作
注重节约成本在突变测试中,在本节中,我们首先国家减少变异的现有方法,然后讨论优化变异测试的方法;因为我们的方法是基于相关分析,我们最终总结相关分析,特别是在突变测试。
2.1。减少变异
减少变异突变体可以节省成本的测试。在贾和哈曼的调查总结11),减少变异的经典方法包括突变采样和选择性突变测试非常简单实用,但他们无法实现高还原速度的同时保持高突变充分性;虽然高阶突变体(霍姆斯)既能减少突变体的数量和代表复杂真实的缺点,产生霍姆斯的成本非常昂贵。二阶突变体(索姆)减少一半数量的突变体,可以代替霍姆斯的妥协。Kintis等人提出了基于控制策略结合索姆节点之间的关系在程序的控制流图(CFG) (12]。值得注意的是,许多索姆生成没有必要,因为他们很容易杀死。
可以节省一些成本通过消除等效突变体。姚等人发现等效突变体的分布特征和顽固的突变体通过人工分析(13设计),他们的工作是有益变异算子,以避免产生等效突变体。解决的问题检测杀死非等效的等效突变体和生成测试数据的狭窄空间,哈曼等人分析了节点之间的依赖关系和变量(14]。神庙等人应用程序切片来简化程序,从而减少努力在检测等效突变体(15]。与他们的方法相比,我们只考虑nondominated语句(节点),似乎和我们的方法比,粗粒的14比(),但细15]。然而,据报道,等效突变体的比例只有10% -40%16,17]。
我们探索新的方法来减少突变体,我们的方法只选择一小部分突变体产生程序中语句的一个子集。
2.2。变异测试的优化
突变是弱杀如果其状态立即执行变异后不同于原始程序。虽然弱变异测试似乎效果低于强突变测试,调查显示(8)、弱突变可以节省大部分执行时间不执行变异后的代码语句。
加快弱变异测试,Durelli等人构建虚拟machine-integrated环境突变测试(18]。通过使用noninterpretive系统的高速,金等人开发了一个Java突变系统保存成本弱突变测试(19]。Papadakis Malevris提出了转换方法进一步提高弱变异测试(20.]。在他们的方法,他们把突变体变成了变异分支和集成所有的变异分支到原始的项目组建一个新的项目,和覆盖变异分支显示杀戮中相应的突变体弱变异测试。然而,大量的突变体分行的新计划增加其复杂性。此外,他们杀死突变体生成测试用例通过选择路径覆盖(7]。和许多突变引起非常大的搜索空间,从而增加成本生成测试用例。
对于给定的测试用例,张等人发现多次突变语句执行时,概率越高相应的突变体被杀(9]。根据观察,张等人之前优先测试用例,执行测试用例,更有可能杀死突变体(10]。和他们的方法节省了一半变异测试的成本。灵感来自上面的观察,我们选择突变体根据原来的语句,我们希望选择的可以维持突变充分性。
2.3。相关分析
变异测试的相关分析很有帮助。山等人结合复合突变体根据突变语句的语句之间的相关性和生成测试用例杀死复合突变体(21]。他们的方法减少了突变体的数量和产生更少数量的测试用例。徐相关性分析突变体中产生的条件语句和减少约20%基于控制和等效突变体之间的关系这些突变体22]。
包容被发现节点之间通过Kintis et al .,在分析CFG中的节点之间的相关性(12]。卡明斯基等人证明了ROR变异算子的三个突变规则包含其他四个突变规则ROR (23]。阿曼等人发现了多余的突变体通过分析突变体之间的动态包容后执行突变体对一个给定的测试套件(24]。库尔茨等人进一步定义了包容真正的包容,描述动态包容,和静态包容,包容之间突变体的突变包容图(味精)25]。味精,根节点包含其他节点;,相对应的测试用例,杀死突变体根节点可以杀死包含突变体。库尔茨等人自动构造测试用例生成的静态味精和杀死相对应的突变体根节点(26),以节省成本生成测试用例。
在我们先前的研究[27),我们改变了突变体的突变枝条来反映相应的突变体是否弱杀与否,并组成了一个新程序插入所有的变异分支到原始的程序;nondominated的,相应减少后的突变体,是在分析获得突变体之间的支配关系分支。我们之前的方法可以进一步提高弱变异测试只覆盖nondominated变异分支,和生成的测试用例可以覆盖所有变异分支,即弱杀死所有的突变体。
灵感来自上面的研究,我们只选择nondominated语句在程序中产生的突变体。该方法和我们先前的研究有一些相似的特征如下:(1)基于语句之间的优势分析(变异分支),(2)nondominated语句(变异分支)对应于还原后的突变体,和(3)支配关系图是用来描述优势关系。
此外,该方法有一些具体功能如下:(1)没有必要构建突变体的分支机构或成立一个新的计划。(2)分析了优势关系中语句的原始程序而不是突变的树枝中形成程序。由于原始报表的数量明显小于变异分支机构的数量,这将是更有效的分析优势之间的关系最初的语句。(3)可能存在优势选择突变体在我们之间的关系的方法。在我们先前的研究中,没有主导地位之间的关系减少后突变体。(4)支配关系图中的一个节点代表一个原始语句和一个边缘是语句之间的支配关系。不同,在我们先前的研究,主导地位关系图中的一个节点是一个突变的分支和一个边缘显示一对突变分支之间的支配关系。
3所示。该方法
为了减少突变体,我们首先分析程序中的语句之间的支配关系,和nondominated语句;然后,我们根据nondominated语句选择突变体;最后,给出了一个例子作为初步说明。
3.1。主导地位的关系
假设程序测试下 ,和语句的集合,可以突变是年代。应用变异算子 ,突变体的集合来标示 。由于突变体在从生成 , 和变异的声明有相同的可达性,也就是说,对于任何测试用例 ,如果t执行在 ,然后t必须执行所有突变语句 。
众所周知,杀死一个突变体的可达性是第一个条件,和其他的必要性和充分性。为和 ,生成的突变体集和分别。如果和有相同的可达性 ,造成的突变体的可达性和都是一样的。因此,可达性条件可以由相应的原始语句。
重点,相关性存在的可达性条件语句中。如图1,如果声明”执行”(第4行),那么“”(第3行)必须被执行。类似地,如果““执行(第6行),声明””(第3行),“”(第4行),““(第5行)必须被执行。这个关系被称为优势关系,其定义如下。
定义1。(优势关系)。假设语句在
。对于任何
,如果执行,然后必须执行,我们说占主导地位
,表示为
。在这种情况下,控制语句和吗是主导的声明。
所有语句之间的支配关系的集合年代称为主导地位关系集,表示吗
。应该注意的是,统治关系的概念已经之前定义减少目标需要覆盖的数量(28]。在这里,我们使用支配关系,协助选择突变体。
因此,如果
,执行的概率不小于执行吗
。原因如下:执行的测试用例还必须执行
,和其他测试,无法执行也可以执行
。结果,突变体的突变语句执行的概率不少于,在吗
。虽然满足了可达性并不意味着杀死一个突变,我们有一个基本的直觉,更多次变异的语句执行,死亡的概率越高相应的突变体。
3.2。Nondominated声明
图中的代码1有12个可变的声明,表示吗 。和这些语句之间的支配关系是通过人工分析,表中列出1。
自执行的概率主要声明不小于其主导的声明中,基于直觉在前面的小节中,直观,突变体产生一个主导语句可以比这更可能被杀的控制语句。
此外,声明中可以控制或主导。我们的目标是找到并不是由任何语句的语句,并nondominated这样的声明。nondominated声明的定义可以如下。
定义2。(nondominated语句)。假设是一个声明
。如果
,这样
,
是一个nondominated声明。
所有nondominated语句的集合来标示
。有一个有趣的现象:和
,
,与此同时
。在这种情况下,我们只保留其中一个,另一个将被删除。作为一个通用规则,我们保留和删除
,如果
。如表所示1,将被删除自
。
3.3。确定Nondominated语句
主导语句之间的关系可以被描述在优势关系图,及其定义如下。
定义3。(优势关系图)。支配关系图是一个方向性图,表示
,在哪里的顶点集语句在吗P和是定向边的集合。为
,有一个方向的边缘当且仅当
。
根据定义,当且仅当
,和当且仅当
。在
,顶点的入度显示的语句数量占主导地位
,的学位反映了由语句的数量
。一个顶点入度为零意味着没有为了使持有。因此,入度为零的顶点的支配关系图对应nondominated语句。
图2程序的主导地位关系图在图吗1。从定义3和图2nondominated语句的集合的程序图1是
。对于一个测试组T,如果T可以执行所有的语句吗
,T将执行所有的语句吗年代。相应的突变组
,和是
,和
,分别。为T,如果
,变异的语句的执行时间不超过突变的语句吗
。因此,我们只选择相对应的语句产生的突变体和入度为零的顶点。
在执行所有的传统(方法级)变异算子MuClipse程序图1115突变体产生,表中列出2,包括18等价的(斜体的值在表2)。在突变体在表中2,选择36 nondominated语句产生的突变体进行突变检测。
3.4。说明性的例子
是否选择突变体可以保持突变充足率将初步说明了一个例子。
给定的测试集T包括11个测试用例,列在表中3,每个测试用例编写JUnit断言的形式, 。的参数断言的期望值通过执行程序对一个给定的输入,和是这个项目的真正价值通过执行相同的输入。如果真正的价值等于预期值,返回true的断言。例如, (在表3),输入的期望值9,真正的价值是什么 。
此外,突变体死于11个测试用例表中列出3。从表3之后,我们观察。(1)24突变体被给定的测试用例,和十二个突变体是等价的(表中列出3)。(2)有效的测试集选择的突变体 。因此,变异的T是 ;也就是说,T杀死所有的非等值的的所选的突变体。
重要的是,我们更关心的是是否选择突变体可以作为适当的突变体在评估一个给定的测试集,也就是说,有多少突变体将被选中的突变体的有效的测试用例。此外,我们执行115突变体 ,和杀死变异是列在表中4。如表所示4,杀死94非等值的突变体,和三个非等值的AOIS_14的活着,LOI_6 ROR_10。突变分数可以计算的 。
上面的例子中初步说明,我们的方法可以减少大量的突变体(突变体),选择突变体(减少后的突变体)可以保持突变充足率损失突变分数(3.09%)。下一节将进行系列实验进一步评估该方法。
4所示。实验和分析
评估我们的方法,本节首先提出需要回答的问题;然后,给出了项目实验,实验过程描述;最后,列出了实验结果和分析。
4.1。研究问题
识别nondominated语句的目的是选择突变体,从而减少变异测试的成本。针对这一点,需要回答以下问题:(1)该方法可以减少突变体的数量吗?要回答这个问题,我们首先要确定nondominated语句在分析优势语句在程序之间的关系。然后,选择nondominated语句产生的突变体。最后,还原速度的比率计算的数量降低了突变体的突变体。(2)可以选择的突变体保持突变充足吗?要回答这个问题,我们首先对给定的测试用例和执行所有的突变体计算突变分数。然后,我们执行选定的突变体对相同的测试用例。最后,我们执行的所有突变体的有效的测试用例选择突变体,研究突变分数的变化,分析选定的突变体能否保持突变充分性。(3)是该方法比突变采样方法更有效?要回答这个问题,我们首先检测选择突变体的等效突变体。然后,对于每个项目,我们随机样本相同数量的非等值的突变体根据非等值的选择突变体的数量和执行取样突变体对给定的测试用例。最后,我们对有效的测试用例执行所有的突变体的突变体和调查采样突变分数的变化之间的随机抽样方法和我们的方法。
4.2。实验项目
九个项目(包)在表5选择的实验。在这些项目中,J1-J3突变测试中常用的和可以获得详细的信息20.]。J4-J9来自Apache的开源项目(http://commons.apache.org),在阁下扩展java。数学和数学功能(提供业务http://commons.apache.org/proper/commons-lang/javadocs/api-release/index.html);J5简化常见MessageDigest任务并提供一个兼容的地穴方法支持MD5, sha - 256和sha - 512 (http://commons.apache.org/proper/commons-codec/apidocs/index.html);卫星提供了处理和操纵文本(类http://commons.apache.org/proper/commons-lang/javadocs/api-release/index.html);J7提供一个API来解析命令行选项传递给程序(http://commons.apache.org/proper/commons-cli/);J8提供高度可重用的静态的实用方法,主要关注将值添加到java。朗类(http://commons.apache.org/proper/commons-lang/javadocs/api-release/index.html);线性代数J9提供支持,如计算一个方阵的LUP-decomposition (http://commons.apache.org/proper/commons - math/javadocs/api - 3.0 / index . html)。
总LOC(代码行)的项目表5是29852。这些项目包括145类和2379个方法,和101测试方法。未测试的方法有以下特点:(1)之类的简单方法或 ,(2)小方法和几个或十行代码,和(3)只生成数十个或几十个突变体的方法。
在我们的实验中,通过使用MuClipse突变体自动生成和执行。MuClipse是MuJava为Eclipse插件,它提供了15个传统变异算子。后所有传统的变异算子应用到九个项目,13198突变体生成的表中列出5。在这些项目中,从J9突变体的最大数量是5153,从j - 1突变体的最少数量是111。
4.3。实验过程
以下环境下进行的实验是:英特尔(R)的核心(TM) i5 - 4590 CPU @ 3.30 GHz 3.30 GHz, 16.0 GB ROM,微软Windows 7 Service Pack 1操作系统,和Eclipse SDK 4.2.2 MuClipse 1.3插件。MuClipse可以提供每个突变体的状态(死亡或活着)后执行针对给定的测试用例,并比较突变体与原计划的观点“突变体和结果。“所有的测试用例编写JUnit断言的形式。
为每个项目表5,我们首先分析语句之间的支配关系。然后,我们构建优势关系图和搜索nondominated语句根据相应的顶点的入度为零。最后,选择nondominated语句产生的突变体,这些突变体的后减少。
优势识别方法是至关重要的。我们确定语句之间的支配关系通过人工分析,因为它很难建立语义自动识别规则。主导地位之间的关系似乎语句可以大约被执行程序对测试用例;然而,获得主导地位关系并不语义准确,以便选择突变体的质量较差。针对识别的精度优势关系可能会受到一些因素的影响,如测试人员的技能和熟悉项目,我们总是检查结果(nondominated语句)一次或多次通过复核和检查。
测试用例需要执行前后的突变体,以评估我们的方法的有效性维护突变充分性。在我们的实验中,测试用例的程序J1-J3属(Randoop海星的Eclipse)。Randoop可以为Java类自动生成JUnit测试用例通过设置测试用例的数量或时间限制。和生成测试用例的数量J1-J3表中列出6(列“测试用例”)。提供的测试用例J4-J9连同相应的开源项目,选择和测试用例的方法根据相应的测试类(es)和测试方法(年代)。有时,考虑到测试方法在测试类包含几个测试用例,我们将测试方法分成几个测试方法,和每个测试方法包括一个测试用例。
虽然有些项目表5通常出现在先前的研究中,这些项目由不同的突变编码在不同语言或突变的工具。结果,在计算突变分数之前,等效突变体在表的所有项目5应该被检测到。和,每个程序的突变体是对给定的测试用例,执行和突变体活着是手动分析“比较突变体”面板。语义变异活着时不同于原来的计划,突变活着是等价的。,发现等效突变体的数量表中列出的所有项目6。
4.4。实验结果和分析
4.1.1。减少变异
该方法应用于项目表5,减少变异率表中列出7。和表6还列出了前后语句和突变体的数量减少。从表7,我们有以下的观察:(1)可变的语句的所有项目的数量是1776,并且这些语句生成13198突变体;(2)后将我们的方法应用到九个项目,获得384 nondominated语句,这些nondominated 2820突变体的产生。
显然,nondominated语句仅占21.62% ( )所有的可变的语句。在所有的项目,nondominated语句的最低比例为15.50% ( )从J9,最高的是33.71% ( )从卫星。在表“还原速度”7的比例,计算的数量降低了突变体的突变体的数量,反映了该方法的有效性。优势分析之后,我们的方法可以减少10378(13198 - 2820)突变体,达到平均76.34%的速度减少。
表7表明许多突变体减少,减少变异率从64.92%(从J2)到84.09%(从J7)。减少变异率高的原因是,近80%可变的语句是主导和生成的突变体减少。然而,对于一个项目,突变体不仅涉及语句的数量,还要等其他因素的变量可以执行语句和变异算子。最终,我们的方法可以减少大量的突变体只有选择nondominated语句产生的突变体。
10/24/11。选中的突变体的有效性
为了检查是否选择突变体(减少后的突变体)可以代表所有的突变体来评估给定的测试用例,我们进行实验如下步骤:(1)我们首先执行所有的突变体对给定的测试用例来计算突变分数表中列出6。(2)获得的有效的测试用例(表8)后执行选定的突变体对给定的测试用例。(3)所有的突变体都对有效的测试用例执行步骤(2)中获得检查是否有效的测试用例表8可以有效的对所有的突变体。
实验结果在表中列出6和8,从表6,我们有三个观察:(1)所有程序生成13198突变体,包括1105等价的(占8.37%)和非等效的突变体的数量是12093 ( )。(2)给定的测试用例的数量是1493。(3)杀死11420突变体,所有的测试用例和突变的平均分数是93.01%。在这些项目中,从j - 1突变分数是100%,最高和最低的85.30%来自卫星。“有效的测试用例”表6是那些杀死突变体。尽管考虑到测试用例的数量是1493,有效的只有540人。这说明,很多测试用例在给定的测试用例是冗余的。
表8显示选中的突变体的有效性。从表8,我们有四个观察:(1)选择突变体的数量是2820包括308等价的(占10.92%),和减少后的非等值的突变体的数量是2512 ( )。(2)给定的测试用例(1493个测试用例或540有效的测试用例表6)杀死2336突变体选择和突变的平均得分是91.73%。在这些项目中,从J9突变分数是最高的99.12%和最低的85.48%从阁下。(3)选择突变体的有效测试用例的数量是384,这是151 ( )不到有效的测试用例的数量表6。(4)384年有效的测试用例杀死11199突变体在执行所有突变体的有效的测试用例选择突变体,和突变的平均分数是90.66%。
结果表6和8建议(1)给定的测试用例实现93.01%的突变分数后执行所有的突变体,如表所示6;(2)和有效的测试用例的选择突变体实现90.66%的突变分数后执行所有的突变体。因此,当采用选择突变体突变充足率下降2.35%评估给定的测试用例,而不是所有的突变体。下降2.35%的突变分数表明,省略了一些有价值的突变体只有选择nondominated语句产生的突变体。和与变异减少76.34%相比,突变分数的下降似乎微妙。
应该注意的是,我们的手工任务可能犯错误在分析优势语句之间的关系时,和影响的错误如下:(1)如果nondominated主导的语句是错误的,我们将获得一个更高的减速率,但较低的突变充足率因为更多的突变体(包括一些有价值的突变体)。(2)如果主导nondominated的语句是错误的决定,一个较低的还原速度将获得没有进一步失去突变充分性。
4.4.3。与突变抽样法进行比较
突变取样是一个非常简单和实用的方法,减少突变体,即随机突变的比例样本执行变异测试和取样后突变体的减少。我们的方法和变异抽样后分享相似的特点:(1)对所有的传统变异算子MuClipse代替一些变异算子;(2)样品(选择)的一个子集执行变异突变体测试。此外,我们的方法仍有以下特性:(1)根据nondominated语句,而不是我们选择突变体随机抽样;(2)不能预先确定的还原速度的方法。有鉴于此,我们比较我们与突变抽样法的方法。
考虑变异抽样的随机性不能确保相同数量的等效突变体的突变体采样方法,我们消除这种影响仅抽样的非等值的突变体。因此,我们首先随机样本根据表相同数量的非等值的突变体8;然后取样突变体对给定的执行测试用例;最后,所有的突变体都对有效的测试用例执行取样的突变体。表9列出了以上实验的结果。
从表9之后,我们观察:(1)相同数量(2512)的非等值的突变体是由突变抽样方法抽样;(2)2188突变体被杀死在执行这些采样突变体对给定的测试用例(1493个测试用例),和突变的平均分数是85.24%;(3)有效的测试用例的数量取样突变体在桌子上9是342;和(4)杀死10764突变体,这些有效的测试用例和突变分数是85.22%。
之间的比较方法和变异抽样表明,(1)相同的测试用例实现不同的突变分数后执行取样(选择)突变体。在细节中,突变分数表9为85.24%,小于6.49%,在桌子上吗8。(2)有效的测试用例的数量表9是342年,这些测试用例实现85.22%的突变分数后执行所有突变体(5.44%不到,在桌子上吗8不到7.79%,在表中6)。这进一步说明更有价值突变体已经减少变异抽样法。
4.4.4。假设检验的实验结果
我们进行Wilcoxon (Mann-Whitney)测试科学反映是否有突变分数之间的显著差异之前和之后变异减少0.05显著性水平,以及测试结果列在表10。
在表10,Wilcoxon测试值之间的突变分数减少突变后我们的方法和减少变异之前是0.289。这意味着没有显著差异 ,和我们纪念“−”列”的分析结果。”然而,值之间的突变分数后减少变异的突变体采样和变异减少0.024(前 ),表示有显著性差异(见表中“+”标志10)。因此,我们的方法可以保持突变充分性。
从上面的结果,我们可以得出结论如下:我们的方法可以减少大量的突变体没有突变充分性的重大损失。然而,我们一样的还原速度方法,突变抽样突变分数有很大的损失。
5。结论
突变检测的高成本造成大量的突变体,严重影响变异测试的实际应用,通过减少突变体可以保存。
减少突变的新方法,提出了通过分析程序中的语句之间的支配关系。和本文的主要贡献如下:(1)提出了基于优势的方法减少突变体。该方法首先分析了主导地位语句之间的关系;支配关系图是为了帮助确定nondominated语句。最后,我们只有选择nondominated语句产生的突变体进行突变检测。(2)初步说明了该方法的有效性的一个例子。将该方法应用于九个程序后,实验结果表明,我们的方法可以显著降低突变体的数量,减少后的突变体可以保持高变异充分性。此外,我们也比较与突变的抽样方法,结果表明,我们的方法更有效。
在我们的方法中,nondominated语句手动检测。手动分析很准确,但费时。我们将开发工具来有效地分析了优势关系,确定nondominated语句,从而提高我们的方法的实用性。和冗余的突变体之前或者之后减少变异的方法,指出在Papadakis [8),充气突变分数;因此,它是必要的,并承诺为我们设计一个可信赖的工具来生成突变突变体没有冗余的。
数据可用性
此外,我们最初的实验资源包括很多项目和擅长。这些文件是复杂的转换为CIF;因此,我们响应的源文件作为附件发送电子邮件。
的利益冲突
作者宣称没有利益冲突。
确认
这项工作是由中国国家自然科学基金共同支持(61872168号,61502212,61573362,61703188,和61902161),江苏师范大学博士学位教师研究支持计划(xlr042 17号和17 xlr001),和广西重点实验室(不受信任的软件。kx201704)。
补充材料
我们的实验过程的详细信息。(补充材料)