基于JAVA语言代码质量模糊测试系统及方法与流程
未命名
08-02
阅读:108
评论:0

基于java语言代码质量模糊测试系统及方法
技术领域
1.本发明属于程序测试技术领域,具体涉及一种基于java语言代码质量模糊测试系统及方法。
背景技术:
2.随着信息技术的发展,程序已经渗透到现代社会的方方面面,目前大多数场景需要使用软硬交互的方式进行信息沟通与采集,例如公共充电桩、共享充电宝均需要在使用前收集用户信息;当程序代码编写不善时,会使得程序的稳定性较差,被攻击时容易产生漏洞,致使用户隐私信息发生泄漏,因此提升程序代码质量势在必行。
3.程序漏洞可以被看作是隐藏在某个条件下的错误语句,一般通过向程序中输入大量测试用例,通过程序运行情况来发现这些错误语句,当被测程序配套的测试用例覆盖率高且均执行通过时,则认为该程序在一定程度上具有高可靠性。
4.目前测试用例的设计完全依赖个人能力和经验,这就导致用例的设计和选取耗时长、形式多样,质量参差不齐,容易产生用例的遗漏或冗余,测试覆盖率难以保证;针对该该问题,现有技术中提出了一些解决方案,如中国专利申请“cn202210021911.7”公开了一种基于覆盖引导模糊测试的深度强化学习程序测试方法,该方法首先生成初始案例集,然后将初始案例集交给待测试的深度强化学习软件运行,并判定该初始案例集是否触发错误,若触发错误,则认为该初始案例集是成功测试用例,然后设计覆盖分析器,分析收集到的案例是否形成新的覆盖,若形成新的覆盖,将其加入到种子池中,最后从新加入种子池的种子中选取部分种子执行变异操作,将变异种子作为测试输入。又例如中国专利申请“cn202010723505.6”公开了一种模糊测试的种子处理、模糊测试方法、系统和存储介质,该方法通过控制流图获取各程序块的静态权重,在模糊测试中对各程序块的运行次数进行统计,在每次模糊测试中根据各程序块的运行次数得到各程序块的动态权重,最后根据静态权重和动态权重对种子库中的种子进行评分,选择种子进行变异再次获得测试用例,种子评分越高其代码覆盖率越高,被选择的概率越高,根据测试用例的代码覆盖率将测试用例更新到种子库中。
5.然而上述两种方法均是在人工设计初始案例集上的基础上进行变异,虽然都根据历史数据对数据的变异方向进行引导,但是当出现代码编写出错,致使程序中出现无法到达的路径时,那么无论测试案例如何变异,也无法发现和测试此种路径,因此需要一种能够发现程序中存在无法到达路径的方法。
技术实现要素:
6.为解决上述问题,本发明提供了一种基于java语言代码质量模糊测试系统及方法,以解决现有技术中的问题。
7.为了达到上述的发明目的,本发明提出一种基于java语言代码质量模糊测试方法,包括:
8.步骤s1:获取目标程序的代码,所述代码由多条程序语句组成,基于所述代码生成控制流图,所述控制流图包括多个执行路径,每个所述执行路径包括多个基本块,每个所述基本块包括一组程序代码,且每组程序代码包括一个条件语句,同一所述执行路径内,各个所述基本块所包括的程序语句仅改变同一个输入变量的数值,在每个所述基本块内嵌入追踪语句,将数据输入至所述控制流图,数据进入至所述基本块且所述基本块完成对数据的处理后,所述追踪语句改变所述基本块的颜色,以追踪数据在所述执行路径内的运行轨迹;
9.步骤s2:生成数据集a,数据集a包括多个数据,数据集a用于遍历所述控制流图内所有的基本块,将数据集a中的测试数据输入至所述控制流图内,以将所述控制流图内所有所述基本块的颜色改变;
10.步骤s3:基于各个所述执行路径生成数据集不同数据集分别对应用于不同所述执行路径的测试,当需要对目标程序进行测试时,首先获取目标程序的所述控制流图,确定需要测试的所述执行路径,定位所述执行路径所对应的数据集,从数据集内随机选取多个测试数据,并依次输入至目标程序内。
11.进一步的,生成所述执行路径包括以下步骤:
12.步骤s11:获取程序语句的输入字符,基于所述输入字符生成输入字符集,从所述输入字符集内选择其中一个所述输入字符作为探测字符,自目标程序中的启动语句向下探测,依次筛选出改变所述探测字符数值的程序语句,当探测至第一个条件语句时,判断将所述探测字符单独输入至目标程序后,第一个条件语句的判断条件是否是对所述探测字符数值进行判断,是的情况下,将当前已经筛选出的程序语句与第一个条件语句结合为基本块,否的情况下,获取第一个条件语句中包括的字符,改变探测方向,向上探测包括条件语句字符的程序语句,探测完成后,停止生成所述基本块,并生成编码不规范警告;
13.步骤s12:在生成第一个所述基本块后,继续向下探测并筛选对所述探测字符数值影响的程序语句,当探测到第二个条件语句时,重复步骤s11,生成第二个所述基本块,将第二个所述基本块与第一个所述基本块连接,然后继续向下探测,直至完成对所述探测字符数值影响所有程序语句的筛选,生成所述执行路径;
14.步骤s13:当所述执行路径生成后,获取所述执行路径内所有条件语句所对应的执行语句,若所述执行语句未对所述探测字符的数值进行改变,则生成补充语句,并将未对所述探测字符数值进行改变的所述执行语句替换为所述补充语句。
15.进一步的,生成数据集包括以下步骤:
16.步骤s31:从所述控制流图内选取第一个所述执行路径,基于第一个所述执行路径内第一个所述基本块中条件语句p1的判断条件,及条件语句p1与所述启动语句之间的程序语句,生成数据集s
1,1
,数据集s
1,1
包括多个数据,数据集s
1,1
内的数据用于输入至目标程序,并将目标程序的运行引导至第一个所述执行路径的第二个所述基本块内;
17.步骤s32:将数据集s
1,1
中的数据依次输入至目标程序,获取每个数据在经过第一基本块后生成的数据集d1,数据集d1包括多个输出数据,基于条件语句p2的判断条件及条件语句p2与条件语句p1之间的程序语句,生成数据集v
1,2
;
18.步骤s33:获取数据集d1和数据集v
1,2
的交集数据集u
1,2
,交集数据集u
1,2
基于数据集d1与数据集s
1,1
的对应关系获取数据集s
1,2
,将数据集s
1,2
内的数据输入至目标程序后,数
据集s
1,2
内的数据用于输入至目标程序,并将目标程序的运行引导至第一个所述执行路径的第二个所述基本块内,重复本步骤,依次获取数据集
19.步骤s34:第一个所述执行路径根据其内部包含所述基本块的数量生成路径编码字符串i1i2…in
,每个所述基本块根据自身在执行路径内的位置,将路径编码中与自身次序对应的字符修改为1,其余字符修改为0,将修改后的字符串作为自身的编码,基于所述基本块的编码以及第一公式在对应所述执行路径的数据集内获取对应的测试集ε,所述第一公式为:
20.进一步的,在进行目标程序测试之前,基于以下步骤对所述控制流图进行测试:
21.步骤s21:定位所述基本块数量最多的所述执行路径,获取所述执行路径中最后一个所述基本块所对应的条件语句,基于条件语句和启动语句之间的程序语句生成第一数据,将所述第一数据输入至目标程序中,若目标程序运行所述第一数据后,所述执行路径所有所述基本块颜色被改变,则完成该所述执行路径的测试;
22.步骤s22:判断所述执行路径是否存在分支路径,是的情况下,重复所述步骤s21获取第二数据,基于所述第二数据对所述分支路径内进行测试,重复本步骤,直至完成对所述基本块数量最多所述执行路径的所有所述分支路径测试,并将获取到的数据整合为数据集a。
23.进一步的,每个所述基本块内设置数据集生成时间阈值,针对条件语句生成数据集时,若生成时间超过所述生成时间阈值,终止数据集的生成,并以当前生成的数据集为基础,继续生成下一个条件语句的数据集。
24.本发明还提供了一种基于java语言代码质量模糊测试系统,该系统用于实现上述所述的一种基于java语言代码质量模糊测试方法,该系统主要包括:
25.生成模块,获取目标程序的代码,所述代码由多条程序语句组成,基于所述代码生成控制流图,所述控制流图包括多个执行路径,每个所述执行路径包括多个基本块,每个所述基本块包括一组程序代码,且每组程序代码包括一个条件语句,同一所述执行路径内,各个所述基本块所包括的程序语句仅改变同一个输入变量的数值;
26.追溯模块,用于生成所述追踪语句,并嵌入至每个基本块所包含的代码内,数据进入至所述基本块且所述基本块完成对数据的处理后,所述追踪语句改变所述基本块的颜色,以追踪数据在所述执行路径内的运行轨迹;
27.第一测试模块,生成数据集a,数据集a包括多个数据,数据集a用于遍历所述控制流图内所有的基本块,将数据集a中的测试数据输入至所述控制流图内,以将所述控制流图内所有所述基本块的颜色改变;
28.第二测试模块,获取目标程序的所述控制流图,确定需要测试的所述执行路径,定位所述执行路径所对应的数据集,从数据集内随机选取多个测试数据,并依次输入至目标程序内;
29.计算模块,基于执行路径的数量计算生成数据集不同数据集分别对应用于不同执行路径的测试。
30.与现有技术相比,本发明的有益效果至少如下所述:
31.本发明首先基于程序语句构建控制流图,控制流图包括多个执行路径,同一执行
路径内,各个基本块所包括的程序语句仅改变同一个输入变量的数值,从而大大简化测试逻辑;然后在每个基本块内嵌入追踪语句,并对追踪语句是否成功嵌入进行测试,从而辅助测试人员追踪程序的执行情况,最后通过控制流图获取每个执行路径对应的数据集,将数据集内的数据输入至目标程序中进行测试;通过本发明,不仅解决了现有技术中随机生成测试用例不能检查程序语句存在无法达到路径的问题,而且依据本发明生成的控制流图可以直观的对目标程序的测试过程进行追踪,从而更加精准的定位出错的程序语句。
附图说明
32.图1为本发明基于java语言代码质量模糊测试方法的步骤流程图;
33.图2为本发明控制流图的原理示意图。
具体实施方式
34.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
35.可以理解,本技术所使用的术语“第一”、“第二”等可在本文中用于描述各种元件,但除非特别说明,这些元件不受这些术语限制。这些术语仅用于将第一个元件与另一个元件区分。举例来说,在不脱离本技术的范围的情况下,可以将第一xx脚本称为第二xx脚本,且类似地,可将第二xx脚本称为第一xx脚本。
36.如图1所示,一种基于java语言代码质量模糊测试方法,包括:
37.步骤s1:获取目标程序的代码,代码由多条程序语句组成,基于代码生成控制流图,控制流图包括多个执行路径,每个执行路径包括多个基本块,每个基本块包括一组程序代码,且每组程序代码包括一个条件语句,同一执行路径内,各个基本块所包括的程序语句仅改变同一个输入变量的数值,在每个基本块内嵌入追踪语句,将数据输入至控制流图,数据进入至基本块且基本块完成对数据的处理后,追踪语句改变基本块的颜色,以追踪数据在执行路径内的运行轨迹;
38.具体的,程序语句包括顺序语句、条件语句和循环语句,其中条件语句包括单独存在的if语句和if else语句,且针对if else语句,若数据满足if语句的判断条件,则执行if语句后的程序语句,否则执行else后的语句;如图2所示,控制流图包括基本块和用于连接两个基本块的边,基本块由多行顺序语句及一个条件语句组成,且条件语句位于基本块所包含代码的末行,当基本块执行至条件语句时,由于出现判断条件,因此程序会出现两种运行路径,也即控制流图会分支出两个基本块,因此通过程序代码生成控制流图,可以直观的展示程序的运行逻辑;进一步的,在执行路径生成时,若满足相应条件,同一执行路径基本块包含仅改变同一个输入变量的数值;例如目标程序需要输入包括字符x和y,则图2中第一条执行路径中,所有基本块所包括与x有关的语句,例如第一个执行路径l1中所有基本块仅包括如x=x+1,x=x+2之类的语句,通过此方法使得每条执行路径尽量仅对同一个字符变量进行测试,从而简化测试逻辑;再进一步的,本发明还在每个基本块内嵌入追踪语句,当基本块内的程序运行完成后,追踪语句将该基本块的颜色改变,例如将黑色改变为绿色,如此使得在对目标程序进行测试时,控制流图可以时时向外界展示程序的执行情况,从而进
一步辅助测试人员追踪程序的执行情况,而且当程序出错时,可以根据基本块的颜色定位程序停止执行的位置,从而更加精准的定位出错的程序语句。
39.步骤s2:生成数据集a,数据集a包括多个数据,数据集a用于遍历控制流图内所有的基本块,将数据集a中的测试数据输入至控制流图内,以将控制流图内所有基本块的颜色改变;
40.通过本步骤可以对各个基本块内是否成功嵌入追踪语句进行验证,保证控制流图的正常运行,提升程序测试速度,具体的,当基本块未成功嵌入追踪语句时,基本块内的程序执行完毕后,基本块的颜色未被改变,就会使得测试人员误认该基本块出现错误,从而对其进行检查,但实际上该基本块内的程序语句并未存在错误,在此情况下就会影响程序的测试进度。
41.步骤s3:基于各个执行路径生成数据集不同数据集分别对应用于不同执行路径的测试,当需要对目标程序进行测试时,首先获取目标程序的控制流图,确定需要测试的执行路径,定位执行路径所对应的数据集,从数据集内随机选取多个测试数据,并依次输入至目标程序内。
42.在获得控制流图的基础上,通过控制流图获取每个执行路径对应的数据集,例如图2中的控制流图内有5个执行路径,则执行路径反向生成数据集例如将数据集中的任意一个测试数据输入至目标程序后,目标程序将执行第一条执行路径上所有基本块所包含的程序语句,若控制流图内存在无法到达的基本块,由于数据集为反向生成,那么就无法生成对应于该基本块的数据集,因此,当基于控制流图生成数据集时,若存在某一执行路径的数据集无法生成,则表明该执行路径内存在无法到达的基本块,需要对该执行路径进行检查。
43.尤为注意的是,通过上述步骤s3,解决了现有技术中随机生成测试用例的方法,不能检查程序中存在无法达到路径的问题。
44.本发明首先基于程序语句构建控制流图,控制流图包括多个执行路径,同一执行路径内,各个基本块所包括的程序语句仅改变同一个输入变量的数值,从而大大简化测试逻辑;然后在每个基本块内嵌入追踪语句,并对追踪语句是否成功嵌入进行测试,从而辅助测试人员追踪程序的执行情况,最后通过控制流图获取每个执行路径对应的数据集,将数据集内的数据输入至目标程序中进行测试;通过本发明,不仅解决了现有技术中随机生成测试用例不能检查程序语句存在无法达到路径的问题,而且依据本发明生成的控制流图可以直观的对目标程序的测试过程进行追踪,从而更加精准的定位出错的程序语句。
45.上述技术方案在生成执行路径的过程中,每个执行路径从目标程序的代码抽取一个字符,然后搜索与该字符相关的程序语句,将相关的程序语句组成基本块,然而,当条件语句其后跟随的执行语句与字符数值无关时,则该代码将不会被抽取,如此就会导致组成基本块的代码缺失而无法执行,因此,本发明还提出以下步骤生成控制流图的基本块。
46.步骤s11:获取程序语句的输入字符,基于输入字符生成输入字符集,从输入字符集内选择其中一个输入字符作为探测字符,自目标程序中的启动语句向下探测,依次筛选出改变探测字符数值的程序语句,当探测至第一个条件语句时,判断将探测字符单独输入至目标程序后,第一个条件语句的判断条件是否是对探测字符数值进行判断,是的情况下,
将当前已经筛选出的程序语句与第一个条件语句结合为基本块,否的情况下,获取第一个条件语句中包括的字符,改变探测方向,向上探测包括条件语句字符的程序语句,探测完成后,停止生成基本块,并生成编码不规范警告;
47.具体的,启动语句为目标程序代码中的第一条语句,在进行探测前,首先获取程序中定义输入字符的语句,组成输入字符集,例如输入字符集包括x,y,z,则以x作为探测字符进行探测,以当探测到条件语句后,获取该条件语句的判断条件,若该判断条件能够执行,例如条件语句的判断条件为x》5,则表明判断条件与x相关,该条件语句能够正常进行判断并执行,则将该条件语句与之前的顺序语句组合为基本块,然后继续向下探测;进一步的,若在探测过程中,发现存在程序语句x=x+y,则表明该步骤前,字符y与字符x的值相关,此时改变探测方向,向上获取包括字符y的程序语句,在探测到启动语句停止,此时将探测到的包括字符x和字符y的顺序语句,以及条件语句组合为基本块;若判断条件为y》5,则表明判断条件与x无关,但由于字符y包括在输入字符集内,且探测过程中未发现字符y与字符x相关,因此程序继续向下探测;若判断条件为r》5,字符r未包括于字符数据集内,此时改变探测方向,即再以该条件语句为起点,向上对程序语句进行探测,获取所有包含r字符的程序语句,并将包含r字符的程序语句的基本块颜色变为黄色,表明该基本块存在未事先定义的字符,存在程序语句存在编写不规范的情况。
48.步骤s12:在生成第一个基本块后,继续向下探测并筛选对探测字符数值影响的程序语句,当探测到第二个条件语句时,重复步骤s11,生成第二个基本块,将第二个基本块与第一个基本块连接,然后继续向下探测,直至完成对探测字符数值影响所有程序语句的筛选,生成执行路径;
49.步骤s13:当执行路径生成后,获取执行路径内所有条件语句所对应的执行语句,若执行语句未对探测字符的数值进行改变,则生成补充语句,并将未对探测字符数值进行改变的执行语句替换为补充语句。
50.具体的,例如当字符x满足条件语句的判断条件后,条件语句后的执行语句将输出一段汉字,而该段汉字与字符x值无关,未对字符x的数值产生改变,此时将该执行语句删除,然而,删除该语句后系统将出现空缺,程序无法继续向下执行,因此将补充语句补入该位置,由于补充语句到的存在,使得程序能够继续向下执行,从而令数据在输入执行路径后,执行路径能够完整的运行至最后一个基本块。
51.生成数据集包括以下步骤:
52.步骤s31:从控制流图内选取第一个执行路径,基于第一个执行路径内第一个基本块中条件语句p1的判断条件,及条件语句p1与启动语句之间的程序语句,生成数据集s
1,1
,数据集s
1,1
包括多个数据,数据集s
1,1
内的数据用于输入至目标程序,并将目标程序的运行引导至第一个执行路径的第二个基本块内;
53.具体的,由于每个基本块内都包括一个条件语句,条件语句内包括判断条件,那么就可以根据判断条件及条件语句之前的顺序语句,反推出用于触发判断条件的输入数值,例如,条件语句p1的判断条件为x》5,而在第一个基本块内,条件语句p1与启动语句之间与x数值相关的程序语句只有x=x-3,那么生成数据集s
1,1
所包括的数据中,x的值只要大于8,数据输入至目标程序后,便可以到达第一个执行路径的第二个基本块内,那么同时也可以获取数据集s
2,1
,数据集s
2,1
的各个测试数据中,x的值只要小于等于8便可以执行第二执行
路径的第二个基本块内。
54.步骤s32:将数据集s
1,1
中的数据依次输入至目标程序,获取每个数据在经过第一基本块后生成的数据集d1,数据集d1包括多个输出数据,基于条件语句p2的判断条件及条件语句p2与条件语句p1之间的程序语句,生成数据集v
1,2
;
55.步骤s33:获取数据集d1和数据集v
1,2
的交集数据集u
1,2
,交集数据集u
1,2
基于数据集d1与数据集s
1,1
的对应关系获取数据集s
1,2
,将数据集s
1,2
内的数据输入至目标程序后,数据集s
1,2
内的数据用于输入至目标程序,并将目标程序的运行引导至第一个执行路径的第二个基本块内,重复本步骤,依次获取数据集
56.将数据集s
1,1
中的测试数据输入至目标程序后,数据集s
1,1
中的测试数据在经过第一个路径的第一基本块后,第一个基本块会对数据进行改变,生成新的数据进入至第二个基本块内,将这些新的数据组成数据集d1;然后再基于第二个基本块内条件语句的判断条件,以及第二基本块内的程序语句生成数据集v
1,2
,即当第一基本块输出的数据包括在数据集v
1,2
内时,数据可以将目标程序的运行路径,由第二个基本块引导至第三基本块;而数据集s
1,1
内的数据在经过第一个基本块后,生成的新数据组成了数据集d1,那么此时取数据集v
1,2
和数据集d1的交集数据集u
1,2
,而由于数据集d1中的数据与数据集s
1,1
中的数据存在对应关系,因此在获得数据集u
1,2
后,就可以根据对应关系,从数据集s
1,1
分割出数据集s
1,2
,将数据集s
1,2
的数据输入至目标程序后,便可将目标程序的运行引导至第一个执行路径的第三基本块内,重复此步骤,可以获取能够遍历第一个执行路径内所有基本块的数据集
57.步骤s34:第一个执行路径根据其内部包含基本块的数量生成路径编码字符串i1i2…in
,每个基本块根据自身在执行路径内的位置,将路径编码中与自身次序对应的字符修改为1,其余字符修改为0,将修改后的字符串作为自身的编码,基于基本块的编码以及第一公式在对应执行路径的数据集内获取对应的测试集ε,第一公式为:
[0058][0059]
当执行路径运行某个基本块出现错误时,需要对该基本块进行测试,此时可将基于基本块的编码选择对应的测试集,若在数据库内仅包括数据集虽然数据集也能针对执行路径上的所有基本块进行测试,然而会造成测试用例的减少,例如需要对第一个执行路径内的第三个基本块进行测,第三个基本块的编码为00100,那么将其代入至第一公式后会的数据集s
1,3
,虽然数据集包括能够测试第三个基本块的测试用例,然而数据集的数据范围小于数据集s
1,3
的数据范围,因此仅使用数据集进行测试必然会导致测试用例的减少,从而会影响软件的测试质量。
[0060]
在本实施例中,在进行目标程序测试之前,基于以下步骤对控制流图进行测试:
[0061]
步骤s21:定位基本块数量最多的执行路径,获取执行路径中最后一个基本块所对应的条件语句,基于条件语句和启动语句之间的程序语句生成第一数据,将第一数据输入至目标程序中,若目标程序运行第一数据后,执行路径所有基本块颜色被改变,则完成该执行路径的测试;
[0062]
步骤s22:判断执行路径是否存在分支路径,是的情况下,重复步骤s21获取第二数
据,基于第二数据对分支路径内进行测试,重复本步骤,直至完成对基本块数量最多执行路径的所有分支路径测试,并将获取到的数据整合为数据集a。
[0063]
通过本步骤首先对包括基本块最长的执行路径进行测试,然后以该执行路径为基础,测试与该执行路径的分支路径,从而可以保证能够对控制流图内所有基本块进行测试。
[0064]
每个基本块内设置数据集生成时间阈值,针对条件语句生成数据集时,若生成时间超过生成时间阈值,终止数据集的生成,并以当前生成的数据集为基础,继续生成下一个条件语句的数据集。
[0065]
通过此步骤,既能保证在时间内获取到足够多的数据集,又会避免在数据集趋于无限的情况下,系统卡在某个条件语句内,无法向上一级条件语句继续获取数据集。
[0066]
本发明还提供了一种基于java语言代码质量模糊测试系统,该系统用于实现上述的一种基于java语言代码质量模糊测试方法,该系统主要包括:
[0067]
生成模块,获取目标程序的代码,代码由多条程序语句组成,基于代码生成控制流图,控制流图包括多个执行路径,每个执行路径包括多个基本块,每个基本块包括一组程序代码,且每组程序代码包括一个条件语句,同一执行路径内,各个基本块所包括的程序语句仅改变同一个输入变量的数值;
[0068]
追溯模块,用于生成追踪语句,并嵌入至每个基本块所包含的代码内,数据进入至基本块且基本块完成对数据的处理后,追踪语句改变基本块的颜色,以追踪数据在执行路径内的运行轨迹;
[0069]
第一测试模块,生成数据集a,数据集a包括多个数据,数据集a用于遍历控制流图内所有的基本块,将数据集a中的测试数据输入至控制流图内,以将控制流图内所有基本块的颜色改变;
[0070]
第二测试模块,获取目标程序的控制流图,确定需要测试的执行路径,定位执行路径所对应的数据集,从数据集内随机选取多个测试数据,并依次输入至目标程序内;
[0071]
计算模块,基于执行路径的数量计算生成数据集不同数据集分别对应用于不同执行路径的测试。
[0072]
应该理解的是,虽然本发明各实施例的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,各实施例中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
[0073]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,上述的程序可存储于一个非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram
(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
[0074]
以上上述的实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0075]
以上上述的实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
[0076]
以上上述的仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
技术特征:
1.一种基于java语言代码质量模糊测试方法,其特征在于,包括:步骤s1:获取目标程序的代码,所述代码由多条程序语句组成,基于所述代码生成控制流图,所述控制流图包括多个执行路径,每个所述执行路径包括多个基本块,每个所述基本块包括一组程序代码,且每组程序代码包括一个条件语句,同一所述执行路径内,各个所述基本块所包括的程序语句仅改变同一个输入变量的数值,在每个所述基本块内嵌入追踪语句,将数据输入至所述控制流图,数据进入至所述基本块且所述基本块完成对数据的处理后,所述追踪语句改变所述基本块的颜色,以追踪数据在所述执行路径内的运行轨迹;步骤s2:生成数据集a,数据集a包括多个数据,数据集a用于遍历所述控制流图内所有的基本块,将数据集a中的测试数据输入至所述控制流图内,以将所述控制流图内所有所述基本块的颜色改变;步骤s3:基于各个所述执行路径生成数据集不同数据集分别对应用于不同所述执行路径的测试,当需要对目标程序进行测试时,首先获取目标程序的所述控制流图,确定需要测试的所述执行路径,定位所述执行路径所对应的数据集,从数据集内随机选取多个测试数据,并依次输入至目标程序内。2.根据权利要求1所述的基于java语言代码质量模糊测试方法,其特征在于,生成所述执行路径包括以下步骤:步骤s11:获取程序语句的输入字符,基于所述输入字符生成输入字符集,从所述输入字符集内选择其中一个所述输入字符作为探测字符,自目标程序中的启动语句向下探测,依次筛选出改变所述探测字符数值的程序语句,当探测至第一个条件语句时,判断将所述探测字符单独输入至目标程序后,第一个条件语句的判断条件是否是对所述探测字符数值进行判断,是的情况下,将当前已经筛选出的程序语句与第一个条件语句结合为基本块,否的情况下,获取第一个条件语句中包括的字符,改变探测方向,向上探测包括条件语句字符的程序语句,探测完成后,停止生成所述基本块,并生成编码不规范警告;步骤s12:在生成第一个所述基本块后,继续向下探测并筛选对所述探测字符数值影响的程序语句,当探测到第二个条件语句时,重复步骤s11,生成第二个所述基本块,将第二个所述基本块与第一个所述基本块连接,然后继续向下探测,直至完成对所述探测字符数值影响所有程序语句的筛选,生成所述执行路径;步骤s13:当所述执行路径生成后,获取所述执行路径内所有条件语句所对应的执行语句,若所述执行语句未对所述探测字符的数值进行改变,则生成补充语句,并将未对所述探测字符数值进行改变的所述执行语句替换为所述补充语句。3.根据权利要求2所述的基于java语言代码质量模糊测试方法,其特征在于,生成数据集包括以下步骤:步骤s31:从所述控制流图内选取第一个所述执行路径,基于第一个所述执行路径内第一个所述基本块中条件语句p1的判断条件,及条件语句p1与所述启动语句之间的程序语句,生成数据集s
1,1
,数据集s
1,1
包括多个数据,数据集s
1,1
内的数据用于输入至目标程序,并将目标程序的运行引导至第一个所述执行路径的第二个所述基本块内;步骤s32:将数据集s
1,1
中的数据依次输入至目标程序,获取每个数据在经过第一基本块后生成的数据集d1,数据集d1包括多个输出数据,基于条件语句p2的判断条件及条件语句
p2与条件语句p1之间的程序语句,生成数据集v
1,2
;步骤s33:获取数据集d1和数据集v
1,2
的交集数据集u
1,2
,交集数据集u
1,2
基于数据集d1与数据集s
1,1
的对应关系获取数据集s
1,2
,将数据集s
1,2
内的数据输入至目标程序后,数据集s
1,2
内的数据用于输入至目标程序,并将目标程序的运行引导至第一个所述执行路径的第二个所述基本块内,重复本步骤,依次获取数据集步骤s34:第一个所述执行路径根据其内部包含所述基本块的数量生成路径编码字符串i1i2…
i
n
,每个所述基本块根据自身在执行路径内的位置,将路径编码中与自身次序对应的字符修改为1,其余字符修改为0,将修改后的字符串作为自身的编码,基于所述基本块的编码以及第一公式在对应所述执行路径的数据集内获取对应的测试集ε,所述第一公式为:4.根据权利要求1所述的基于java语言代码质量模糊测试方法,其特征在于,在进行目标程序测试之前,基于以下步骤对所述控制流图进行测试:步骤s21:定位所述基本块数量最多的所述执行路径,获取所述执行路径中最后一个所述基本块所对应的条件语句,基于条件语句和启动语句之间的程序语句生成第一数据,将所述第一数据输入至目标程序中,若目标程序运行所述第一数据后,所述执行路径所有所述基本块颜色被改变,则完成该所述执行路径的测试;步骤s22:判断所述执行路径是否存在分支路径,是的情况下,重复所述步骤s21获取第二数据,基于所述第二数据对所述分支路径内进行测试,重复本步骤,直至完成对所述基本块数量最多所述执行路径的所有所述分支路径测试,并将获取到的数据整合为数据集a。5.根据权利要求4所述的基于java语言代码质量模糊测试方法,其特征在于,每个所述基本块内设置数据集生成时间阈值,针对条件语句生成数据集时,若生成时间超过所述生成时间阈值,终止数据集的生成,并以当前生成的数据集为基础,继续生成下一个条件语句的数据集。6.一种基于java语言代码质量模糊测试系统,用于实现如权利要求1-5任一项所述的基于java语言代码质量模糊测试方法,其特征在于,包括:生成模块,获取目标程序的代码,所述代码由多条程序语句组成,基于所述代码生成控制流图,所述控制流图包括多个执行路径,每个所述执行路径包括多个基本块,每个所述基本块包括一组程序代码,且每组程序代码包括一个条件语句,同一所述执行路径内,各个所述基本块所包括的程序语句仅改变同一个输入变量的数值;追溯模块,用于生成所述追踪语句,并嵌入至每个基本块所包含的代码内,数据进入至所述基本块且所述基本块完成对数据的处理后,所述追踪语句改变所述基本块的颜色,以追踪数据在所述执行路径内的运行轨迹;第一测试模块,生成数据集a,数据集a包括多个数据,数据集a用于遍历所述控制流图内所有的基本块,将数据集a中的测试数据输入至所述控制流图内,以将所述控制流图内所有所述基本块的颜色改变;第二测试模块,获取目标程序的所述控制流图,确定需要测试的所述执行路径,定位所述执行路径所对应的数据集,从数据集内随机选取多个测试数据,并依次输入至目标程序内;
计算模块,基于执行路径的数量计算生成数据集不同数据集分别对应用于不同执行路径的测试。
技术总结
基于JAVA语言代码质量模糊测试系统及方法,属于程序测试技术领域,包括步骤S1:获取目标程序的代码,基于代码生成控制流图,控制流图包括多个执行路径,每个执行路径包括多个基本块,在每个基本块内嵌入追踪语句,将数据输入至控制流图,数据进入至基本块且基本块完成对数据的处理后,追踪语句改变基本块的颜色,以追踪数据在执行路径内的运行轨迹;步骤S2:生成数据集A,数据集A用于遍历控制流图内所有的基本块,以将控制流图内所有基本块的颜色改变;步骤S3:基于各个执行路径生成数据集不同数据集分别对应用于不同执行路径的测试;通过本发明解决了现有技术中随机生成测试用例不能检查程序语句存在无法达到路径的问题。无法达到路径的问题。无法达到路径的问题。
技术研发人员:李刚
受保护的技术使用者:开元华创科技(集团)有限公司
技术研发日:2023.03.07
技术公布日:2023/7/31
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/
上一篇:一种矿山切石机及其驱动方法与流程 下一篇:无砟轨道作业方法及配套设备、装置