一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

源代码文件的缺陷发现方法及装置与流程

2022-10-13 05:03:36 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,尤其涉及一种源代码文件的缺陷发现方法及装置。


背景技术:

2.目前,随着api(应用程序接口)测试越来越精细化,测试需要对api的入口和出口进行频繁的校验,对入口的合法性需要做大量的组合和验证。在业务迭代高的情况下,重复的异常分析和验证需要耗费大量的人力成本和时间成本。


技术实现要素:

3.本技术实施例的目的是提供一种源代码文件的缺陷发现方法及系统,可以解决现有技术中由于重复对api进行异常分析和验证导致耗费大量的人力成本和时间成本的问题。
4.本技术实施例的一个方面提供了一种源代码文件的缺陷发现方法,包括:
5.获取待测源代码文件与目标源代码文件的差异信息;
6.根据所述差异信息确定待测应用程序接口,所述待测应用程序接口包括一个或多个;
7.针对每一个待测应用程序接口,执行接口测试操作,得到测试结果;
8.将所述测试结果与执行的接口测试操作对应的预期结果进行比较,并根据比较结果确定所述待测应用程序接口是否存在缺陷。
9.可选地,所述差异信息包括变更文件信息及变更文件中的变更代码的行数信息,所述根据所述差异信息确定待测应用程序接口包括:
10.根据所述变更文件信息从至少一个变更文件中筛选出应用程序接口定义文件;
11.根据所述行数信息及所述应用程序接口定义文件确定所述待测试应用程序接口。
12.可选地,所述根据所述变更文件信息从至少一个变更文件中筛选出应用程序接口定义文件包括:
13.根据所述变更文件信息从至少一个变更文件中筛选出具有预设后缀名的变更文件作为所述应用程序接口定义文件。
14.可选地,所述将所述测试结果与执行的接口测试操作对应的预期结果进行比较,并根据比较结果确定所述待测应用程序接口是否存在缺陷的步骤之后,还包括:
15.在确定待测应用程序接口存在缺陷时,生成缺陷报告单,并将所述缺陷报告单推送至预设用户。
16.可选地,针对每一个待测应用程序接口,执行接口测试操作,得到测试结果包括:
17.获取所述待测应用程序接口的入参信息,并根据所述入参信息生成与所述待测应用程序接口中包含的入参对应的测试用例集;
18.根据所述待测应用程序接口中包含的所有的入参对应的测试用例集生成用于对所述待测试目标应用程序接口进行测试的组合测试用例集及与所述组合测试用例集对应
的预期结果;
19.根据所述组合测试用例集对所述待测应用程序接口进行测试操作,得到测试结果。
20.可选地,所述测试用例集包括类型校验集、边界校验集及异常校验集。
21.可选地,所述方法还包括:
22.根据所述差异信息确定待测代码块文件;
23.从所述待测代码块文件中筛选出与每一个所述待测应用程序接口相关联的目标代码块;
24.采用预设的代码块规则判定算法对所述目标代码块进行校验,并根据校验结果确定所述目标代码块是否存在缺陷。
25.可选地,所述代码块规则判定算法包括基本语法规则及基本语法规范,所述采用预设的代码块规则判定算法对所述目标代码块进行校验,并根据校验结果确定所述目标代码块是否存在缺陷包括:
26.分别采用所述基本语法规则及所述基本语法规范对所述目标代码块进行校验,得到第一校验结果与第二校验结果;
27.根据所述第一校验结果与所述第二校验结果确定所述目标代码块是否存在缺陷。
28.可选地,所述从所述待测代码块文件中筛选出与每一个所述待测应用程序接口相关联的目标代码块包括:
29.从所述待测代码块文件中查找出与每一个所述待测应用程序接口相关联的方法名;
30.根据所述方法名定位所述目标代码块的命名代码,并将所述待测代码块文件中的所述命名代码至所述目标代码块的结束符号之间的代码作为所述目标代码块。
31.可选地,所述方法还包括:
32.根据所述行数信息从所述待测代码块文件中筛选出与所述行数信息相对应的待测代码行;
33.判断所述待测代码行是否属于所述目标代码块中包含的代码行;
34.若所述待测代码行不属于所述目标代码块中包含的代码行,则采用所述代码块规则判定算法对所述待测代码行进行校验,并根据校验结果确定所述待测代码行是否存在缺陷。
35.本技术实施例的一个方面还提供了一种源代码文件的缺陷发现装置,包括:
36.获取模块,用于获取待测源代码文件与目标源代码文件的差异信息;
37.确定模块,用于根据所述差异信息确定待测应用程序接口,所述待测应用程序接口包括一个或多个;
38.测试模块,用于针对每一个待测应用程序接口,执行接口测试操作,得到测试结果;
39.比较模块,用于将所述测试结果与执行的接口测试操作对应的预期结果进行比较,并根据比较结果确定所述待测应用程序接口是否存在缺陷。
40.本技术还提供了一种计算机设备,所述计算机设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序
时实现上述方法的步骤。
41.本技术还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述方法的步骤。
42.本技术实施例提供的源代码文件的缺陷发现方法,通过获取待测源代码文件与目标源代码文件的差异信息;根据所述差异信息确定待测应用程序接口,所述待测应用程序接口包括一个或多个;针对每一个待测应用程序接口,执行接口测试操作,得到测试结果;将所述测试结果与执行的接口测试操作对应的预期结果进行比较,并根据比较结果确定所述待测应用程序接口是否存在缺陷,从而实现只对发生变化的应用程序接口进行测试,而无需对已经测试过的应用程序接口进行重复测试,可以节省测试时间,缩短测试周期。同时,由于本技术中的缺陷发现方法,只需要在非业务场景下进行应用程序接口测试,因而,本技术中的缺陷发现方法,相对于现有技术中需要在业务场景下进行应用程序接口测试而言,可以更加快速发现应用程序接口中存在的缺陷。
附图说明
43.图1为本技术实施例的源代码文件的缺陷发现方法的环境示意图;
44.图2为本技术所述的源代码文件的缺陷发现方法的一种实施例的流程图;
45.图3为本技术一实施方式中根据所述差异信息确定待测应用程序接口的步骤细化流程示意图;
46.图4为本技术所述的源代码文件的缺陷发现方法的另一种实施例的流程图;
47.图5为本技术一实施方式中从所述待测代码块文件中筛选出与每一个所述待测应用程序接口相关联的目标代码块的步骤细化流程示意图;
48.图6为本技术一实施方式中采用预设的代码块规则判定算法对所述目标代码块进行校验,并根据校验结果确定所述目标代码块是否存在缺陷的步骤细化流程示意图;
49.图7为本技术所述的源代码文件的缺陷发现方法的另一种实施例的流程图;
50.图8为本技术所述的源代码文件的缺陷发现装置的一种实施例的程序模块图;
51.图9为本技术实施例提供的执行源代码文件的缺陷发现方法的计算机设备的硬件结构示意图。
具体实施方式
52.以下结合附图与具体实施例进一步阐述本技术的优点。
53.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
54.在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或相关联的列出项目的任何或所有可能组合。
55.应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这
些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
56.在本技术的描述中,需要理解的是,步骤前的数字标号并不标识执行步骤的前后顺序,仅用于方便描述本技术及区别每一步骤,因此不能理解为对本技术的限制。
57.图1示出了本技术实施例提供的应用场景的一种示意图,该应用场景包括:源代码文件存储系统10及源代码文件的缺陷发现终端20,其中:
58.源代码文件存储系统10,用于存储各个版本的源代码文件,包括待测源代码文件及目标源代码文件,并对待测源代码文件与目标源代码文件进行比较,得到待测源代码文件与目标源代码文件的差异信息。
59.其中,源代码文件存储系统10可以为gitlab,gitlab是一个仓库管理系统,一般用来管理代码分支和版本等信息。
60.源代码文件的缺陷发现终端20可以为平板电脑、笔记本电脑、台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者服务器所组成的服务器集群)等。
61.参阅图2,其为本技术一实施例的源代码文件的缺陷发现方法的流程示意图。可以理解,本方法实施例中的流程图不用于对执行步骤的顺序进行限定。从图中可以看出,本实施例中所提供的源代码文件的缺陷发现方法包括:
62.步骤s20、获取待测源代码文件与目标源代码文件的差异信息。
63.具体地,所述待测源代码文件为需要进行缺陷发现的源代码文件,比如,开发好的最新版本的应用程序(app)代码文件。所述目标源代码文件为历史版本的应用程序代码文件,其可以为当前版本的上一个版本的代码文件,也可以为任意其他的历史版本的应用程序代码文件。
64.所述差异信息指的是用于记载所述待测源代码文件相对所述目标代码文件发生变化的信息,所述差异信息可以包括变更文件信息、变更文件中的变更代码的行数信息、改动人等信息。
65.其中,所述变更文件信息可以包括发生变更的代码文件的后缀名、发生变更的代码文件的源代码。所述变更文件中的变更代码的行数信息指的是具体发生变更的代码在所述变更文件中所处的具体行数,比如,所述行数信息为4,则表明所述变更文件中的第4行代码发生了变更。
66.在一实施方式中,可以通过调用gitlab提供的用于处理diff能力的api接口来获取所述待测源代码文件与所述目标源代码文件的差异信息。
67.可以理解的是,当通过调用gitlab提供的用于处理diff能力的api接口来获取所述差异信息时,需要由用户预先将所述待测源代码文件与所述目标源代码文件上传至gitlab中。
68.其中,gitlab是一个仓库管理系统,一般用来管理代码分支和版本等信息。gitlab除了提供了正常的分支上传和下载,项目管理等功能,还在每次commit(提交)代码的时候提供了diff(差异)的功能。用于比较指定的两次commit的代码文件。如果没有目标比较
commit,就会使用master作为被比较对象。
69.gitlab的diff能力,提供了一个api接口可供使用,diff除了会返回文件、差异、改动人等信息,还会含有改动的具体行数。
70.步骤s21、根据所述差异信息确定待测应用程序接口,所述待测应用程序接口包括一个或多个。
71.具体地,所述待测应用程序接口为发生代码变更的应用程序接口(api),所述待测api可以只有一个,也可以有多个,具体的个数根据差异信息确定。
72.在一示例性的实施方式中,当所述差异信息包括变更文件信息及变更文件中的变更代码的行数信息时,参阅图3,所述根据所述差异信息确定待测应用程序接口包括:
73.步骤s30,根据所述变更文件信息从至少一个变更文件中筛选出应用程序接口定义文件。
74.具体地,由于一个应用程序的源代码文件通常由多种类型的代码文件组成,比如,包括配置代码文件、api接口定义代码文件、普通的代码块文件等,而变更文件信息中包含有发生变化的所有变更文件的信息,这样,当获取到变更文件信息后,即可以根据该变更文件信息从至少一个变更文件中筛选出应用程序接口定义文件。
75.其中,变更文件指的是相对于目标源代码文件中的对应类型的文件而言,代码发生了变更的文件。
76.在一示例性的实施方式中,所述根据所述变更文件信息从至少一个变更文件中筛选出应用程序接口定义文件包括:根据所述变更文件信息从至少一个变更文件中筛选出具有预设后缀名的变更文件作为所述应用程序接口定义文件。
77.具体地,由于应用程序接口定义文件相对于所述待测源代码文件中的其他类型的代码文件而言,其后缀名不相同,且其具有特有的后缀名。因此,在本实施例中,在筛选所述应用程序接口定义文件的过程中,可以直接对所有的变更文件的后缀名进行匹配,当找到具有该具有的后缀名的文件时,即可以将该文件作为所述应用程序接口定义文件。
78.其中,所述应用程序接口定义文件为用于对app中包含的api进行定义的文件,其包括入参的结构和出参的结构,以及入参和出参字段的类型等。该应用程序接口定义文件具有预设的后缀名。
79.需要说明的是,采用不同语言开发的所述待测源代码文件,应用程序接口定义文件的后缀名一般不同,比如,采用go语言开发的所述待测源代码文件,其中的应用程序接口定义文件的后缀名为.pb。
80.在一示例性的实施方式中,也可以先通过先找到待测代码块文件(查找方式下文已详细描述,在此处不赘述),然后根据找到的待测代码块文件找到所述应用程序接口定义文件。
81.具体而言,在找到待测代码块文件后,可以找到相同路径下的最近的一个文件集合(应用程序接口定义文件和实际代码文件(即所述待测代码块文件)会在一个路径的文件夹里,即文件集合),通过从该文件集合中找到所述应用程序接口定义文件。
82.步骤s31,根据所述行数信息及所述应用程序接口定义文件确定所述待测试应用程序接口。
83.具体地,由于所述行数信息记载了发生变化的代码具体在所述应用程序接口定义
文件中的哪一行,这样,在获取到所述应用程序接口定义文件后,即可以根据所述行数信息从所述应用程序接口定义文件中找到与该行数信息相对应的代码行。由于代码行必定属于某一个应用程序接口的代码,因此,在找到该代码行后,即可以通过该代码行查到与该代码行相关联的应用程序接口。
84.步骤s22,针对每一个待测应用程序接口,执行接口测试操作,得到测试结果。
85.具体地,在通过对每一个待测应用程序接口,都执行接口测试操作,从而将所述待测源代码文件中的所有应用程序接口中存在的缺陷找出来,实现api的全量测试。
86.其中,针对每一个待测应用程序接口,执行接口测试操作,得到测试结果包括:
87.步骤a、获取所述待测应用程序接口的入参信息,并根据所述入参信息生成与所述待测应用程序接口中包含的入参对应的测试用例集。
88.具体地,所述入参信息包括入参的名称信息以及入参的类型信息。一般而言,每一个待测应用程序接口中会包括多个入参,则在根据入参信息生成测试用例集时,针对每一个入参,都会生成与该入参相对应的测试用例集。假设待测应用程序接口中包含有3个入参,则需要生成3个测试用例集,每一个入参对应一个测试用例集。
89.在一示例性的实施方式中,为了实现对待测应用程序接口的全面测试,所述测试用例集可以包括类型校验集、边界校验集及异常校验集。
90.其中,所述类型校验集为用于对入参类型进行校验的用例集,比如,某一个入参的类型是string类型,则需要生成string类型、int类型、float类型等的数据作为类型校验集。
91.所述边界校验集为对用于对入参的边界值进行校验的用例集,比如,某一个入参的类型是int类型,就需要生成包含有0,负数,int最大值等的数据作为边界校验集。
92.所述异常校验集为用于对入参的异常情况进行校验的用例集,比如,某一个入参的值包含多个数,则需要生成包含该值不传的情况,或者入参的值多传、少传等的数据作为异常校验集。
93.在一实施方式中,所述测试用例集还可以包括业务值校验集,所述业务值校验集为用于对业务场景进行校验的用例集。
94.在本实施例中,根据所述入参信息生成与所述待测应用程序接口中包含的入参对应的测试用例集的具体生成方式可以参照现有技术中的测试用例集的生成方式,具体的实现方式在本实施例中不再赘述。
95.步骤b、根据所述待测应用程序接口中包含的所有的入参对应的测试用例集生成用于对所述待测试目标应用程序接口进行测试的组合测试用例集及与所述组合测试用例集对应的预期结果。
96.具体地,将所有的入参对应的测试用例集中包含的入参的值进行穷举组合,并且每一个穷举组合作为一个组合测试用例,所有的组合测试用例组成所述组合测试用例集。
97.作为示例,待测应用程序接口包括入参a与入参b。入参a的类型校验集中包含2个数据、边界校验集中包含2个数据、异常校验集中包含有2个数据。入参b的类型校验集中包含2个数据、边界校验集中包含2个数据、异常校验集中包含有2个数据。在进行组合测试用例集的生成时,可以将入参a的类型校验集中包含的2个数据依次与入参b的类型校验集中包含2个数据中的每一个数据进行组合、与边界校验集中包含2个数据中的每一个数据进行
组合、与异常校验集中包含有2个数据中的每一个数据进行组合,得到12个测试用例。同理,可以将入参a的边界校验集中包含2个数据依次与入参b的类型校验集中包含2个数据中的每一个数据进行组合、与边界校验集中包含2个数据中的每一个数据进行组合、与异常校验集中包含有2个数据中的每一个数据进行组合,得到12个测试用例。同理,可以将入参a的常校验集中包含的2个数据依次与入参b的类型校验集中包含2个数据中的每一个数据进行组合、与边界校验集中包含2个数据中的每一个数据进行组合、与异常校验集中包含有2个数据中的每一个数据进行组合,得到12个测试用例。最终组合成36个测试用例,并将该36个测试用例组成所述组合测试用例集。
98.在本实施例中,每一个组合测试用例会有一个对应的预期结果,该预期结果为应用程序接口的返回值的预期值,比如,api入参的类型都是string,返回值类型是一个字典的结构,那么类型都符合的组合,值的字段不特殊,非边界,非异常,则预期返回值状态为0,预期返回值的结构为一个字典的格式。
99.步骤c、根据所述组合测试用例集对所述待测应用程序接口进行测试操作,得到测试结果。
100.具体地,对于组合测试用例集中的每一个测试用例都会对所述待测应用程序接口进行测试操作,得到一个测试结果。在进行测试操作时,每一个组合测试用例可以参照api定义对所述待测应用程序接口进行请求,从而得到请求结果,即得到测试结果。
101.作为示例,组合测试用例集中包含有10个组合测试用例,则最终可以得到10个测试结果。
102.步骤s23,将所述测试结果与执行的接口测试操作对应的预期结果进行比较,并根据比较结果确定所述待测应用程序接口是否存在缺陷。
103.具体地,在执行测试操作后,每得到一个测试结果,都会将该测试结果与对应的预期结果进行比较,以便可以根据当次的比较结果来确定所述待测应用程序接口是否存在缺陷。
104.本技术实施例提供的源代码文件的缺陷发现方法,通过获取待测源代码文件与目标源代码文件的差异信息;根据所述差异信息确定待测应用程序接口,所述待测应用程序接口包括一个或多个;针对每一个待测应用程序接口,执行接口测试操作,得到测试结果;将所述测试结果与执行的接口测试操作对应的预期结果进行比较,并根据比较结果确定所述待测应用程序接口是否存在缺陷,从而实现只对发生变化的应用程序接口进行测试,而无需对已经测试过的应用程序接口进行重复测试,可以节省测试时间,缩短测试周期。同时,由于本技术中的缺陷发现方法,只需要在非业务场景下进行应用程序接口测试,因而,本技术中的缺陷发现方法,相对于现有技术中需要在业务场景下进行应用程序接口测试而言,可以更加快速发现应用程序接口中存在的缺陷。
105.在一示例性的实施方式中,为了用户可以及时对应用程序接口中存在的缺陷进行处理,所述将所述测试结果与执行的接口测试操作对应的预期结果进行比较,并根据比较结果确定所述待测应用程序接口是否存在缺陷的步骤之后,还包括:
106.在确定待测应用程序接口存在缺陷时,生成缺陷报告单,并将所述缺陷报告单推送至预设用户。
107.具体地,当确定测试应用程序接口存在缺陷时,可以生成缺陷报告单。其中,所述
缺陷报告单可以包括应用程序接口名称,存在的缺陷详情信息等。
108.在一实施方式中,可以通过jira提供的报告单上传api,自动生成缺陷报告单,并将生成的缺陷报告单推送至预设用户。其中,所述预设用户为预先设定的用于接收所述缺陷报告单的用户。
109.需要说明的是,jira是一种代码缺陷管理工具,一般新建缺陷关联到对应人,jira会发出相应的推送消息到关联人。
110.在一示例性的实施方式中,为了提高缺陷发现的覆盖率,参阅图4,所述方法还包括:
111.步骤s40,根据所述差异信息确定待测代码块文件。
112.具体地,所述待测代码块文件为存在代码变更的普通代码文件。
113.需要说明的是,所述普通代码文件为用于记载实际对应用程序接口的请求进行运算和处理的代码的文件。
114.在一实施方式中,可以根据差异信息中包含的变更文件信息筛选出具有特定后缀的文件作为所述待测代码块文件。一般而言,所述待测代码块文件采用不同的语言开发,其具有的特定的后缀名也不同。比如,go语言的后缀名是.go,python语言的后缀名是.py。
115.步骤s41,从所述待测代码块文件中筛选出与每一个所述待测应用程序接口相关联的目标代码块。
116.具体地,每一个应用程序接口都具有一段目标代码块用于实现该应用程序接口的功能。因此,在找到所述待测代码块后,可以从该代码块中筛选出与待测应用程序接口相关联的目标代码块。
117.在一示例性的实施方式中,参阅图5,所述从所述待测代码块文件中筛选出与每一个所述待测应用程序接口相关联的目标代码块包括:
118.步骤s50,从所述待测代码块文件中查找出与每一个所述待测应用程序接口相关联的方法名。
119.具体地,在代码规范中,每一个应用程序接口都会唯一指定一个方法来实现该应用程序接口的功能,因此,在本实施例中,可以通过从所述待测代码块文件中查找与所述待测应用程序接口相关联的方法名的方式来查找所述目标代码块。
120.作为示例,应用程序接口a指定的方法为方法a,则可以从所述待测代码块文件中查找出方法a来找到所述目标代码块。
121.步骤s51,根据所述方法名定位所述目标代码块的命名代码,并将所述待测代码块文件中的所述命名代码至所述目标代码块的结束符号之间的代码作为所述目标代码块。
122.具体地,在找到方法名后,可以通过该方法名定位出用于对该目标代码块进行命名的命名代码,即对该方法进行命名的代码,同时,通过该方法名也可以在各行代码中找到该目标代码块的结束符号。
123.在找到命名代码及结束符号的代码之后,即可以将两者之间的所有代码作为所述目标代码块。
124.步骤s42,采用预设的代码块规则判定算法对所述目标代码块进行校验,并根据校验结果确定所述目标代码块是否存在缺陷。
125.具体地,所述代码块规则判定算法为用于判定代码是否存在缺陷的算法。
126.在一示例性的实施方式中,所述代码块规则判定算法包括基本语法规则及基本语法规范。其中,基本语法规则为用于对代码撰写的语法是否正确进行判别的规则,比如,一个代码块符号“{}”必须成对出现,又比如,if和else中不能只有一个有返回值等。所述基本语法规范为对代码撰写是否符合规范进行判别的规范,比如,对于代码中的时间撰写规范,必须采用**年**月**日的方式,对于关键字要求大写撰写的,则必须大写撰写,而不能采用小写撰写。
127.参阅图6,所述采用预设的代码块规则判定算法对所述目标代码块进行校验,并根据校验结果确定所述目标代码块是否存在缺陷包括:步骤s60,分别采用所述基本语法规则及所述基本语法规范对所述目标代码块进行校验,得到第一校验结果与第二校验结果;步骤s61,根据所述第一校验结果与所述第二校验结果确定所述目标代码块是否存在缺陷。
128.具体地,在对目标代码块进行缺陷检测的过程中,需要分别采用基本语法规则及基本语法规范对所述目标代码块进行校验,只有两者校验都通过时,才可以确定所述目标代码块不存在缺陷,当两者校验结果中至少存在一个校验结果不通过时,则可以确定目标代码块存在缺陷。
129.在本实施例中,在确定目标代码块存在缺陷后,也可以生成缺陷报告单推送到相关人。
130.需要说明的是,本实施例中在对目标代码块进行校验时,是按照字符串的方式进行校验的,即对目标代码块中的每一个代码都进行字符串形式的校验。
131.在一示例性的实施方式,参阅图7,为了提高缺陷发现的全面性,所述方法还包括:
132.步骤s70,根据所述行数信息从所述待测代码块文件中筛选出与所述行数信息相对应的待测代码行;步骤s71,判断所述待测代码行是否属于所述目标代码块中包含的代码行;步骤s72,若所述待测代码行不属于所述目标代码块中包含的代码行,则采用所述代码块规则判定算法对所述待测代码行进行校验,并根据校验结果确定所述待测代码行是否存在缺陷。
133.具体地,由于行数信息记载了具体发生变更的代码在所述待测代码块文件中所处的具体行数,因此,可以根据该行数信息来筛选出具体发生变更的待测代码行。在得到待测代码行后,可以判断该待测代码行是否属于所述目标代码块中的代码行,若属于,则由于在对目标代码块的检测中,以对该待测代码行进行校验,因此,无需再对该待测代码行进行校验,当待测代码行不属于目标代码块中的代码行时,才需要采用所述代码块规则判定算法对所述待测代码行进行校验,并根据校验结果确定所述待测代码行是否存在缺陷。
134.可以理解的是,在检测到存在缺陷后,也可以生成缺陷报告单推送到相关人。
135.参阅图8所示,是本技术源代码文件的缺陷发现装置80一实施例的程序模块图。
136.本实施例中,所述源代码文件的缺陷发现装置80包括一系列的存储于存储器上的计算机程序指令,当该计算机程序指令被处理器执行时,可以实现本技术各实施例的源代码文件的缺陷发现功能。在一些实施例中,基于该计算机程序指令各部分所实现的特定的操作,源代码文件的缺陷发现装置80可以被划分为一个或模块,具体可以划分的模块如下:
137.获取模块81,用于获取待测源代码文件与目标源代码文件的差异信息;
138.确定模块82,用于根据所述差异信息确定待测应用程序接口,所述待测应用程序接口包括一个或多个;
139.测试模块83,用于针对每一个待测应用程序接口,执行接口测试操作,得到测试结果;
140.比较模块84,用于将所述测试结果与执行的接口测试操作对应的预期结果进行比较,并根据比较结果确定所述待测应用程序接口是否存在缺陷。
141.在一示例性的实施方式中,所述差异信息包括变更文件信息及变更文件中的变更代码的行数信息,所述确定模块82,还用于根据所述变更文件信息从至少一个变更文件中筛选出应用程序接口定义文件;根据所述行数信息及所述应用程序接口定义文件确定所述待测试应用程序接口。
142.在一示例性的实施方式中,确定模块82,还用于根据所述变更文件信息从至少一个变更文件中筛选出具有预设后缀名的变更文件作为所述应用程序接口定义文件。
143.在一示例性的实施方式中,所述源代码文件的缺陷发现装置80还包括生成模块:
144.所述生成模块,用于在确定待测应用程序接口存在缺陷时,生成缺陷报告单,并将所述缺陷报告单推送至预设用户。
145.在一示例性的实施方式中,针对每一个待测应用程序接口,执行接口测试操作,得到测试结果包括:
146.获取所述待测应用程序接口的入参信息,并根据所述入参信息生成与所述待测应用程序接口中包含的入参对应的测试用例集;
147.根据所述待测应用程序接口中包含的所有的入参对应的测试用例集生成用于对所述待测试目标应用程序接口进行测试的组合测试用例集及与所述组合测试用例集对应的预期结果;
148.根据所述组合测试用例集对所述待测应用程序接口进行测试操作,得到测试结果。
149.在一示例性的实施方式中,所述测试用例集包括类型校验集、边界校验集及异常校验集。
150.在一示例性的实施方式中,所述源代码文件的缺陷发现装置80还包括筛选模块及校验模块。
151.所述确定模块82,还用于根据所述差异信息确定待测代码块文件;
152.所述筛选模块,用于从所述待测代码块文件中筛选出与每一个所述待测应用程序接口相关联的目标代码块;
153.所述校验模块,用于采用预设的代码块规则判定算法对所述目标代码块进行校验,并根据校验结果确定所述目标代码块是否存在缺陷。
154.在一示例性的实施方式中,所述代码块规则判定算法包括基本语法规则及基本语法规范,所述校验模块,还用于分别采用所述基本语法规则及所述基本语法规范对所述目标代码块进行校验,得到第一校验结果与第二校验结果;根据所述第一校验结果与所述第二校验结果确定所述目标代码块是否存在缺陷。
155.在一示例性的实施方式中,所述筛选模块,还用于从所述待测代码块文件中查找出与每一个所述待测应用程序接口相关联的方法名;根据所述方法名定位所述目标代码块的命名代码,并将所述待测代码块文件中的所述命名代码至所述目标代码块的结束符号之间的代码作为所述目标代码块。
156.在一示例性的实施方式中,所述源代码文件的缺陷发现装置80还包括判断模块。
157.所述筛选模块,还用于根据所述行数信息从所述待测代码块文件中筛选出与所述行数信息相对应的待测代码行;
158.所述判断模块,用于判断所述待测代码行是否属于所述目标代码块中包含的代码行;
159.所述校验模块,还用于若所述待测代码行不属于所述目标代码块中包含的代码行,则采用所述代码块规则判定算法对所述待测代码行进行校验,并根据校验结果确定所述待测代码行是否存在缺陷。
160.图9示意性示出了根据本技术实施例的适于实现源代码文件的缺陷发现方法的计算机设备9的硬件架构示意图。本实施例中,计算机设备9是一种能够按照事先设定或者存储的指令,自动进行数值计算出和/或信息处理的设备。例如,可以是平板电脑、笔记本电脑、台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者服务器所组成的服务器集群)等。如图9所示,计算机设备9至少包括但不限于:可通过系统总线相互通信链接存储器120、处理器121、网络接口122。其中:
161.存储器120至少包括一种类型的计算机可读存储介质,该可读存储介质可以是易失性的,也可以是非易失性的,具体而言,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、随机访问存储器(ram)、静态随机访问存储器(sram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器120可以是计算机设备9的内部存储模块,例如该计算机设备9的硬盘或内存。在另一些实施例中,存储器120也可以是计算机设备9的外部存储设备,例如该计算机设备9上配备的插接式硬盘,智能存储卡(smart media card,简称为smc),安全数字(secure digital,简称为sd)卡,闪存卡(flash card)等。当然,存储器120还可以既包括计算机设备9的内部存储模块也包括其外部存储设备。本实施例中,存储器120通常用于存储安装于计算机设备9的操作系统和各类应用软件,例如源代码文件的缺陷发现方法的程序代码等。此外,存储器120还可以用于暂时地存储已经输出或者将要输出的各类数据。
162.处理器121在一些实施例中可以是中央处理器(central processing unit,简称为cpu)、控制器、微控制器、微处理器、或其它源代码文件的缺陷发现芯片。该处理器121通常用于控制计算机设备9的总体操作,例如执行与计算机设备9进行数据交互或者通信相关的控制和处理等。本实施例中,处理器121用于运行存储器120中存储的程序代码或者处理数据。
163.网络接口122可包括无线网络接口或有线网络接口,该网络接口122通常用于在计算机设备9与其它计算机设备之间建立通信链接。例如,网络接口122用于通过网络将计算机设备9与外部终端相连,在计算机设备9与外部终端之间的建立数据传输通道和通信链接等。网络可以是企业内部网(intranet)、互联网(internet)、全球移动通讯系统(global system of mobile communication,简称为gsm)、宽带码分多址(wideband code division multiple access,简称为wcdma)、4g网络、5g网络、蓝牙(bluetooth)、wi-fi等无线或有线网络。
164.需要指出的是,图9仅示出了具有部件120~122的计算机设备,但是应理解的是,
并不要求实施所有示出的部件,可以替代的实施更多或者更少的部件。
165.在本实施例中,存储于存储器120中的源代码文件的缺陷发现方法可以被分割为一个或者程序模块,并由一个或处理器(本实施例为处理器121)所执行,以完成本技术。
166.本技术实施例提供了一种计算机可读存储介质,计算机可读存储介质其上存储有计算机程序,计算机程序被处理器执行时实现实施例中的源代码文件的缺陷发现方法的步骤。
167.本实施例中,计算机可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、随机访问存储器(ram)、静态随机访问存储器(sram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁性存储器、磁盘、光盘等。在一些实施例中,计算机可读存储介质可以是计算机设备的内部存储单元,例如该计算机设备的硬盘或内存。在另一些实施例中,计算机可读存储介质也可以是计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(smart media card,简称为smc),安全数字(secure digital,简称为sd)卡,闪存卡(flash card)等。当然,计算机可读存储介质还可以既包括计算机设备的内部存储单元也包括其外部存储设备。本实施例中,计算机可读存储介质通常用于存储安装于计算机设备的操作系统和各类应用软件,例如实施例中的源代码文件的缺陷发现方法的程序代码等。此外,计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的各类数据。
168.以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到至少两个网络单元上。可以根据实际的需要筛选出其中的部分或者全部模块来实现本技术实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
169.通过以上的实施方式的描述,本领域普通技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。
170.最后应说明的是:以上各实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述各实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献