一种代码坏味道检测方法、装置、设备及存储介质

未命名 08-18 阅读:319 评论:0


1.本发明属于计算机技术领域,尤其涉及一种代码坏味道检测方法、装置、设备及存储介质。


背景技术:

2.代码坏味道是违背了软件开发原则的低质量需重构代码片段实体,又被称为代码反模式或技术债务。代码坏味道的检测可以帮助确定软件重构目标,软件重构是在不改变软件的功能和外部可见性的情况下,改进软件的结构,提高代码可读性、程序可扩展性和可重用性。软件重构技术是提升软件质量的重要方法,而代码坏味道检测直接为软件重构确定程序中需要重构的位置。
3.然而,目前的代码坏味道检测方法仍存在以下问题:1)目前存在的基于度量元与启发式规则的代码坏味道检测方法依赖人工设置检测规则与阈值,导致检测结果受较多主观因素影响。同时,该类方法无法根据软件项目的差异性进行动态地检测。2)目前存在的基于机器学习的代码坏味道检测方法依赖大量带标签的数据对模型进行训练,而目前代码坏味道检测领域缺少该种数据集。同时,在跨项目坏味道检测中,基于机器学习的检测方法也无法取得预期效果。3)现有检测方法与检测工具大多存在检测步骤多,涉及多种数据格式转换,流程复杂,工具不易用等问题。基于机器学习的检测方法需要将源代码转化成模型可以识别的特征,易用性较差。而插件工具使用时需先将软件项目导入平台中再使用工具进行坏味道检测。然而,在实际使用时许多软件项目由于版本不兼容而导致无法完成代码坏味道检测。


技术实现要素:

4.本发明的目的在于提供一种代码坏味道检测方法、装置、设备及存储介质,旨在解决由于现有技术无法提供一种有效的代码坏味道检测方法,导致代码坏味道检测准确率不佳的问题。
5.第一方面,本发明提供了一种代码坏味道检测方法,所述方法包括下述步骤:
6.步骤a、接收输入的待检测软件项目,获取所述待检测软件项目的当前坏味道检测种类;
7.步骤b、获取所述当前坏味道检测种类的关联软件度量元,计算所述待检测软件项目中每个代码实体中每个所述关联软件度量元的值及所有代码实体中每个所述关联软件度量元的平均值;
8.步骤c、根据所述当前坏味道检测种类、所述平均值,获取所述当前坏味道检测种类的预检测规则,根据所述预检测规则对所述待检测软件项目中的所有代码实体进行预检,得到所述当前坏味道检测种类的坏味道嫌疑实体集;
9.步骤d、根据所述当前坏味道检测种类的影响因子集、所述关联软件度量元的值及平均值,对所述坏味道嫌疑实体集中每一个坏味道嫌疑实体进行终检,得到具有所述当前
坏味道检测种类的坏味道实体集并输出;
10.步骤e、当所述待检测软件项目的所有坏味道检测种类未检测完成时,获取所述待检测软件项目的下一坏味道检测种类,将下一坏味道检测种类设置为当前坏味道检测种类并跳转至步骤b,以对下一坏味道检测种类进行检测,直至完成所述待检测软件项目的所有坏味道检测种类的检测。
11.在一些实施例中,获取所述待检测软件项目的当前坏味道检测种类的步骤,包括:
12.获取坏味道实例数据集中预设数量个坏味道种类的坏味道间相生关系,将所述坏味道间相生关系量化为影响因子;
13.获取所有所述影响因子大于预设因子阈值的坏味道种类对,将所有所述坏味道种类对对应的坏味道种类确定为坏味道检测种类,根据每个坏味道检测种类的影响因子集中的元素数量,确定所有所述坏味道检测种类的检测优先级;
14.按照所有所述坏味道检测种类的检测优先级高低,获取所述待检测软件项目的当前坏味道检测种类。
15.在一些实施例中,将所述坏味道间相生关系量化为影响因子的量化公式为其中,i≠j,f
csi,j
表示坏味道种类i对坏味道种类j的影响因子,|csi|表示坏味道种类i出现的次数,|csi∧csj|表示坏味道种类i和坏味道种类j共同出现的次数。
16.在一些实施例中,根据所述当前坏味道检测种类的影响因子集、所述关联软件度量元的值及平均值,对所述坏味道嫌疑实体集中每一个坏味道嫌疑实体进行终检的步骤,包括:
17.根据所述当前坏味道检测种类的影响因子集和检测优先级,计算当前检测的坏味道嫌疑实体的初始可能性值;
18.根据所述关联软件度量元的值及平均值,计算所述当前检测的坏味道嫌疑实体中所有所述关联软件度量元的度量元偏离值;
19.基于所述初始可能性值以及所述度量元偏离值,获取所述当前检测的坏味道嫌疑实体具有所述当前坏味道检测种类的最终可能性值;
20.当所述最终可能性值大于预设种类阈值时,确定所述当前检测的坏味道嫌疑实体具有所述当前坏味道检测种类,否则不具有所述当前坏味道检测种类。
21.在一些实施例中,计算所述待检测软件项目中每个代码实体中每个所述关联软件度量元的值及所有代码实体中每个所述关联软件度量元的平均值的步骤,包括:
22.遍历所述待检测软件项目中的所有源代码文件,将所述源代码文件中的类层代码实体及方法层代码实体解析并转化为类层抽象语法树及方法层抽象语法树,提取所述类层抽象语法树及方法层抽象语法树的节点结构信息和语义信息;
23.根据所述节点结构信息和语义信息,计算所述待检测软件项目中每个代码实体中每个所述关联软件度量元的值及所有代码实体中每个所述关联软件度量元的平均值。
24.在一些实施例中,通过ast解析器将所述源代码文件中的类层代码实体及方法层代码实体解析并转化为类层抽象语法树及方法层抽象语法树。
25.在一些实施例中,根据所述当前坏味道检测种类、所述平均值,获取所述当前坏味道检测种类的预检测规则的步骤,包括:
26.获取所述当前坏味道检测种类的预检测初始规则,使用所述平均值对所述预检测初始规则进行实例化,得到所述当前坏味道检测种类的预检测规则。
27.第二方面,本发明提供了一种代码坏味道检测装置,所述装置包括:
28.检测种类获取单元,用于接收输入的待检测软件项目,获取所述待检测软件项目的当前坏味道检测种类;
29.值计算单元,用于获取所述当前坏味道检测种类的关联软件度量元,计算所述待检测软件项目中每个代码实体中每个所述关联软件度量元的值及所有代码实体中每个所述关联软件度量元的平均值;
30.代码预检单元,用于根据所述当前坏味道检测种类、所述平均值,获取所述当前坏味道检测种类的预检测规则,根据所述预检测规则对所述待检测软件项目中的所有代码实体进行预检,得到所述当前坏味道检测种类的坏味道嫌疑实体集;
31.代码终检单元,用于根据所述当前坏味道检测种类的影响因子集、所述关联软件度量元的值及平均值,对所述坏味道嫌疑实体集中每一个坏味道嫌疑实体进行终检,得到具有所述当前坏味道检测种类的坏味道实体集并输出;以及
32.检测设置单元,用于当所述待检测软件项目的所有坏味道检测种类未检测完成时,获取所述待检测软件项目的下一坏味道检测种类,将下一坏味道检测种类设置为当前坏味道检测种类并触发所述值计算单元,以对下一坏味道检测种类进行检测,直至完成所述待检测软件项目的所有坏味道检测种类的检测。
33.第三方面,本发明还提供了一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上所述方法的步骤。
34.第四方面,本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如上所述方法的步骤。
35.本发明在接收输入的待检测软件项目后,获取待检测软件项目的当前坏味道检测种类,获取当前坏味道检测种类的关联软件度量元,计算待检测软件项目中每个代码实体中关联软件度量元的值及平均值,进而获取当前坏味道检测种类的预检测规则,根据预检测规则对待检测软件项目中的所有代码实体进行预检,得到当前坏味道检测种类的坏味道嫌疑实体集,根据当前坏味道检测种类的影响因子集、关联软件度量元的值及平均值,对坏味道嫌疑实体集中每一个坏味道嫌疑实体进行终检,得到具有当前坏味道检测种类的坏味道实体集,从而根据待检测软件项目差异化地、动态选择坏味道检测参数,提高了待检测软件项目的检测准确率。
附图说明
36.图1是本发明实施例一提供的代码坏味道检测方法的流程示意图;
37.图2是本发明实施例二提供的代码坏味道检测方法的流程示意图;
38.图3是本发明实施例三提供的代码坏味道检测装置的结构示意图;
39.图4是本发明实施例四提供的计算机设备的结构示意图。
具体实施方式
40.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
41.应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。且在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。术语“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
42.为了保持本发明实施例的以下说明清楚且简明,本说明书省略了部分已知功能和已知部件的详细说明。
43.以下结合具体实施例对本发明的具体实现进行详细描述:
44.实施例一:
45.图1示出了本发明实施例一提供的代码坏味道检测方法的实现流程,为了便于说明,仅示出了与本发明实施例相关的部分,详述如下:
46.在步骤s101中,接收输入的待检测软件项目,获取待检测软件项目的当前坏味道检测种类。
47.本发明实施例适用于计算机设备,例如,个人计算机、服务器,以对软件源代码中的坏味道进行检测。在这里,进行坏味道检测的软件以待检测软件项目的形式表示或描述,具体地,该待检测软件项目可以为一压缩包,可以包括源代码文件以及软件运行的配置文件等。在对待检测软件项目进行坏味道检测时,需要对待检测软件项目中的所有源代码文件进行不同种类的坏味道检测,每个被检测的坏味道可以称为坏味道检测种类。作为示例地,这些坏味道可以包括过大类(large class)、过长方法(long method)、message chains(消息链)、feature envy(过度依赖)、spaghetti code(面条式代码)等,当前坏味道检测种类为待检测软件项目当前或此次要检测的坏味道。
48.在步骤s102中,获取当前坏味道检测种类的关联软件度量元,计算待检测软件项目中每个代码实体中每个关联软件度量元的值及所有代码实体中每个关联软件度量元的平均值。
49.在本发明实施例中,待检测软件项目中的每个源代码文件可以包括多个代码实体,例如,类层代码实体,方法层代码实体,在对软件源代码中的坏味道进行检测时,通过检测代码实体具有的坏味道种类来实现,不同的软件度量元组合可判定和检测代码实体中的不同种类的坏味道,这些软件度量元可以称为代码坏味道的关联软件度量元。在获取待检测软件项目的当前坏味道检测种类后,获取当前坏味道检测种类的关联软件度量元,计算待检测软件项目中每个代码实体中关联软件度量元的值,进而基于待检测软件项目中每个
代码实体中关联软件度量元的值,计算待检测软件项目中所有代码实体中该关联软件度量元的平均值,以用于后续代码坏味道的检测。
50.在步骤s103中,根据当前坏味道检测种类、平均值,获取当前坏味道检测种类的预检测规则,根据预检测规则对待检测软件项目中的所有代码实体进行预检,得到当前坏味道检测种类的坏味道嫌疑实体集。
51.在本发明实施例中,预检测规则可对待检测软件项目中的所有代码实体进行预检,得到当前坏味道检测种类的坏味道嫌疑实体集,即待检测软件项目中可能具有当前坏味道检测种类的所有代码实体。预检测规则基于每个代码实体中每个关联软件度量元的值及所有代码实体中每个关联软件度量元的平均值设置,可预先设置,也可从专家知识库或通过神经网络提取得到,作为示例地,预检测规则可以是多个不同的软件度量元值的判定规则的逻辑运算。
52.在步骤s104中,根据当前坏味道检测种类的影响因子集、关联软件度量元的值及平均值,对坏味道嫌疑实体集中每一个坏味道嫌疑实体进行终检,得到具有当前坏味道检测种类的坏味道实体集并输出。
53.在本发明实施例中,当一种坏味道i在一个代码实体出现时,另一个坏味道j在同一代码实体也同时出现,表明坏味道间存在相生关系,此时,可以认为坏味道i对坏味道j存在影响,影响因子则为一种坏味道对另一种坏味道的影响程度。本发明实施例将坏味道间相生关系量化为影响因子,进而根据当前坏味道检测种类的影响因子集、关联软件度量元的值及平均值,对坏味道嫌疑实体集中每一个坏味道嫌疑实体进行终检,得到具有当前坏味道检测种类的坏味道实体集,从而最终实现待检测软件项目的当前坏味道检测种类的检测。
54.在步骤s105中,判断待检测软件项目的所有坏味道检测种类是否均检测完成。
55.在本发明实施例中,判断待检测软件项目的所有坏味道检测种类是否均检测完成,当待检测软件项目的所有坏味道检测种类均检测完成时,表明待检测软件项目的所有坏味道检测已完成,此时执行步骤s106,以结束待检测软件的检测。当待检测软件项目的所有坏味道检测种类未检测完成时,执行步骤s107,以对待检测软件项目的剩余坏味道检测种类继续进行检测。
56.在步骤s106中,结束待检测软件项目的检测。
57.在步骤s107中,获取待检测软件项目的下一坏味道检测种类,将下一坏味道检测种类设置为当前坏味道检测种类。
58.在本发明实施例中,当待检测软件项目的所有坏味道检测种类未检测完成时,获取待检测软件项目的下一坏味道检测种类,将下一坏味道检测种类设置为当前坏味道检测种类,跳转至步骤s102,继续对待检测软件项目的下一坏味道检测种类进行检测,直至完成待检测软件项目的所有坏味道检测种类的检测。
59.本发明实施例在接收输入的待检测软件项目后,获取待检测软件项目的当前坏味道检测种类,获取当前坏味道检测种类的关联软件度量元,计算待检测软件项目中每个代码实体中关联软件度量元的值及平均值,进而获取当前坏味道检测种类的预检测规则,根据预检测规则对待检测软件项目中的所有代码实体进行预检,得到当前坏味道检测种类的坏味道嫌疑实体集,根据当前坏味道检测种类的影响因子集、关联软件度量元的值及平均
值,对坏味道嫌疑实体集中每一个坏味道嫌疑实体进行终检,得到具有当前坏味道检测种类的坏味道实体集,从而根据待检测软件项目差异化、动态选择坏味道检测参数,提高了待检测软件项目的检测准确率。
60.实施例二:
61.图2示出了本发明实施例二提供的代码坏味道检测方法的实现流程,为了便于说明,仅示出了与本发明实施例相关的部分,详述如下:
62.在步骤s201中,获取坏味道实例数据集中预设数量个坏味道种类的坏味道间相生关系,将坏味道间相生关系量化为影响因子。
63.本发明实施例适用于计算机设备,例如,个人计算机、服务器,以对软件源代码中的坏味道进行检测。在这里,进行坏味道检测的软件以待检测软件项目的形式表示或描述,具体地,该待检测软件项目可以为一压缩包,可以包括源代码文件以及软件运行的配置文件等。在对待检测软件项目进行坏味道检测时,需要对待检测软件项目中的所有源代码文件进行不同种类的坏味道检测,作为示例地,这些坏味道可以包括过大类(large class)、过长方法(long method)、message chains(消息链)、feature envy(过度依赖)、spaghetti code(面条式代码)等。
64.在本发明实施例中,预设数量个坏味道种类为可能需要检测的坏味道种类,为了得到待检测软件项目的最终坏味道检测种类,需要获取预设数量个坏味道种类两两之间的影响因子,进而根据影响因子对该预设数量个坏味道种类进行筛选,得到待检测软件项目的坏味道检测种类。在获取坏味道间的影响因子时,通过坏味道实例数据集获取该预设数量个坏味道种类的坏味道间相生关系,将坏味道间相生关系量化为影响因子。可选地,将坏味道间相生关系量化为影响因子的量化公式为其中,i≠j,f
csi,j
表示坏味道种类i对坏味道种类j的影响因子,|csi|为坏味道种类i出现的次数,|csi∧csj|为坏味道种类i和坏味道种类j共同出现的次数,从而通过影响因子准确表示坏味道种类的坏味道间相生关系,提高后续的检测准确度。
65.在步骤s202中,获取所有影响因子大于预设因子阈值的坏味道种类对,将所有坏味道种类对对应的坏味道种类确定为坏味道检测种类,根据每个坏味道检测种类的影响因子集中的元素数量,确定所有坏味道检测种类的检测优先级。
66.在本发明实施例中,当坏味道种类两两之间的影响因子大于预设因子阈值时,表明两个坏味道种类之间有较强的关联关系,会对坏味道的检测结果产生较大影响,此时,将该大于预设因子阈值的影响因子对应的坏味道种类对(两个坏味道)设置为坏味道检测种类。作为示例地,若坏味道messgae chain(消息链)对坏味道large class(过大类)的影响因子为0.13、预设因子阈值为0.1,则坏味道messgae chain(消息链)和large class(过大类)均被设置为坏味道检测种类。
67.在本发明实施例中,一个坏味道(种类)的影响因子集中元素越多,表明可以对该坏味道产生影响的其他坏味道就越多,如果影响因子集为空集,说明没有其他坏味道对该坏味道产生影响,而该坏味道却可能给其他坏味道带来影响。因此,为了提到后续坏味道检测的准确度,在得到所有要检测的坏味道种类后,根据每个坏味道检测种类的影响因子集中的元素数量,确定所有坏味道检测种类的检测优先级。具体地,影响因子集中的元素数量
越少,对应的坏味道检测种类的检测优先级越高,影响因子集中的元素数量越多,对应的坏味道检测种类的检测优先级越低,即检测优先级越高的坏味道检测种类越先检测,检测优先级越低的坏味道检测种类越后检测。作为示例地,可按照检测优先级由高到低,将对应的坏味道检测种类存储到坏味道检测检测队列中,以便于后续按照检测优先级由高到低对坏味道检测种类进行检测。
68.在步骤s203中,按照所有坏味道检测种类的检测优先级高低,获取待检测软件项目的当前坏味道检测种类。
69.在本发明实施例中,所有坏味道检测种类的检测优先级高低确定后,即可按照坏味道检测种类的检测优先级,依次对待检测软件项目的坏味道进行检测,当前坏味道检测种类为剩余未检测坏味道中检测优先级最高的坏味道。
70.在步骤s204中,获取当前坏味道检测种类的关联软件度量元,计算待检测软件项目中每个代码实体中每个关联软件度量元的值及所有代码实体中每个关联软件度量元的平均值。
71.在本发明实施例中,待检测软件项目中的每个源代码文件可以包括多个代码实体,例如,类层代码实体,方法层代码实体,在对软件源代码中的坏味道进行检测时,通过检测代码实体具有的坏味道种类来实现,不同的软件度量元组合可判定和检测代码实体中的不同种类的坏味道。在获取待检测软件项目的当前坏味道检测种类后,获取当前坏味道检测种类的关联软件度量元,计算待检测软件项目中每个代码实体中每个关联软件度量元的值及所有代码实体中每个关联软件度量元的平均值。
72.可选地,在计算待检测软件项目中每个代码实体中每个关联软件度量元的值及所有代码实体中每个关联软件度量元的平均值时,遍历待检测软件项目中的所有源代码文件,将源代码文件中的类层代码实体及方法层代码实体解析并转化为类层抽象语法树及方法层抽象语法树,提取类层抽象语法树及方法层抽象语法树的节点结构信息和语义信息,最后根据节点结构信息和语义信息,计算待检测软件项目中每个代码实体中每个关联软件度量元的值及所有代码实体中每个关联软件度量元的平均值,从而用于后续获取该待检测软件项目的差异化坏味道预检测规则,提高坏味道检测的准确度。进一步地,在一些实施例中,通过抽象语法树(abstract syntax tree,ast)解析器将源代码文件中的类层代码实体及方法层代码实体解析并转化为类层抽象语法树及方法层抽象语法树。
73.在步骤s205中,获取当前坏味道检测种类的预检测初始规则,使用平均值对预检测初始规则进行实例化,得到当前坏味道检测种类的预检测规则。
74.在本发明实施例中,代码坏味道由相应软件度量元对其进行描述,例如,用于描述坏味道spaghetti code(面条式代码)的软件度量元可以为loc(lines of code)、nmnoparam(number of methods without parameters)和nogv(number of global variables),在坏味道检测种类进行判定时,可通过对其关联的软件度量元进行预检测或预判定,预先或初步确定待检测软件项目是否具有坏味道检测种类。预检测初始规则基于软件中每个代码实体中每个关联软件度量元的值和所有代码实体中坏味道检测种类的所有关联软件度量元的平均值设置,这样,可针对不同待检测软件差异化地设置坏味道检测阈值,提升待检测软件项目检测结果的准确率。因此,在获取当前坏味道检测种类的预检测初始规则之前,可预先设置每个坏味道检测种类的预检测规则,在这里将该预检测规则称
为预检测初始规则,具体地,可通过专家知识进行设置,也可以通过深度学习网络提取得到。在获取当前坏味道检测种类的预检测初始规则之后,使用待检测软件项目中所有代码实体中坏味道检测种类的关联软件度量元的平均值对预检测初始规则进行实例化,以得到当前坏味道检测种类的预检测规则。作为示例地,例如,坏味道spaghetti code(面条式代码)的预检测规则为:loc》loc
avg
&nmnoparam》nmnoparam
avg
&nogv》nogv
avg
,其中,loc
avg
表示待检测软件项目中所有代码实体中软件度量元loc的平均值,nmnoparam
avg
表示待检测软件项目中所有代码实体中软件度量元nmnoparam的平均值,nogv
avg
表示待检测软件项目中所有代码实体中软件度量元nogv的平均值。
75.在步骤s206中,根据预检测规则对待检测软件项目中的所有代码实体进行预检,得到当前坏味道检测种类的坏味道嫌疑实体集。
76.在本发明实施例中,预检测规则可对待检测软件项目中的所有代码实体进行预检,得到当前坏味道检测种类的坏味道嫌疑实体集,即待检测软件项目中可能具有当前坏味道检测种类的所有代码实体。在对待检测软件项目中每个代码实体进行预检时,具体地,可将代码实体中每个关联软件度量元的值与对应的平均值进行对比,之后将所有关联软件度量元的对比结果进行逻辑运算,通过最终的运算结果确定当前代码实体是否为坏味道嫌疑实体。
77.在步骤s207中,根据当前坏味道检测种类的影响因子集、关联软件度量元的值及平均值,对坏味道嫌疑实体集中每一个坏味道嫌疑实体进行终检,得到具有当前坏味道检测种类的坏味道实体集并输出。
78.在本发明实施例中,将坏味道间相生关系量化为影响因子,进而根据当前坏味道检测种类的影响因子集、关联软件度量元的值及平均值,对坏味道嫌疑实体集中每一个坏味道嫌疑实体进行终检,得到具有当前坏味道检测种类的坏味道实体集,从而最终实现待检测软件项目的当前坏味道检测种类的检测。当一种坏味道i在一个代码实体出现时,另一个坏味道j在同一代码实体也同时出现,可以认为坏味道i对坏味道j存在影响,影响因子可以理解为一种坏味道对另一种坏味道的影响程度。例如,坏味道messgae chain对坏味道large class的影响因子为0.13,表示当message chain在一个代码实体中出现时,large class同时出现的可能性为0.13。坏味道的影响因子集为对该味道存在影响的其他坏味道的对应影响因子的集合,具体地,例如,坏味道long method(过长方法)的影响因子集可表示为:{(feature envy,0.18),(spaghetti code,0.12)},从该影响因子集可以看出,对坏味道long method存在影响的坏味道为feature envy以及spaghetti code,坏味道feature envy对坏味道long method的影响因子为0.18,坏味道spaghetti code对坏味道long method的影响因子为0.12。
79.可选地,根据当前坏味道检测种类的影响因子集、关联软件度量元的值及平均值,对坏味道嫌疑实体集中每一个坏味道嫌疑实体进行终检的步骤,包括:
80.(1)根据当前坏味道检测种类的影响因子集和检测优先级,计算当前检测的坏味道嫌疑实体的初始可能性值;
81.在本发明实施例中,初始可能性值用于当前坏味道检测种类最终检测过程中初步判断坏味道嫌疑实体是否具有当前坏味道检测种类。可选地,可通过下述公式计算当前检测的坏味道嫌疑实体的初始可能性值:
[0082][0083]
其中,表示当前坏味道检测种类sj的影响因子集,当该集合为空集时,p
ini
为0,表示当前坏味道检测时坏味道sj在当前检测的坏味道嫌疑实体ck中影响因子集(实际影响因子集),是的子集,m表示中的元素个数,表示坏味道sj在ck中的影响因子,通过获得,具体地,获取检测优先级大于当前坏味道检测种类的已检测坏味道种类,若坏味道嫌疑实体ck不具有该已检测坏味道种类,则从去掉该已检测坏味道种类对应的集合元素(影响因子)。
[0084]
(2)根据关联软件度量元的值及平均值,计算当前检测的坏味道嫌疑实体中所有关联软件度量元的度量元偏离值;
[0085]
在本发明实施例中,根据关联软件度量元的值及平均值,计算当前检测的坏味道嫌疑实体中所有关联软件度量元的度量元偏离值,以进一步准确评估当前检测的代码实体中当前坏味道检测种类的关联软件度量元的偏离值,偏离值反应了一个软件度量元与软件开发标准的偏离程度,偏离程度越大,表明该坏味道嫌疑实体实际具有当前坏味道检测种类的可能性越大。可选地,通过以下公式计算当前检测的坏味道嫌疑实体中所有关联软件度量元的度量元偏离值:
[0086][0087]
其中,mi表示坏味道嫌疑实体中软件度量元i的值,mi
avg
表示该软件度量元i在待检测软件项目中的平均值,(m1,m2,m3,
……
,m
10
)表示预设的边界值。
[0088]
(3)基于初始可能性值以及所有关联软件度量元的度量元偏离值,获取当前检测的坏味道嫌疑实体具有当前坏味道检测种类的最终可能性值;
[0089]
(4)当最终可能性值大于预设种类阈值时,确定当前检测的坏味道嫌疑实体具有当前坏味道检测种类,否则不具有当前坏味道检测种类。
[0090]
在本发明实施例中,得到初始可能性值以及当前坏味道检测种类的所有关联软件度量元的度量元偏离值后,即可获取当前检测的坏味道嫌疑实体具有当前坏味道检测种类的最终可能性值,当最终可能性值大于预设种类阈值时,确定当前检测的坏味道嫌疑实体具有当前坏味道检测种类,否则不具有当前坏味道检测种类。可选地,通过以下公式获取当前检测的坏味道嫌疑实体具有当前坏味道检测种类的最终可能性值:
[0091][0092]
其中,p
cs
表示当前检测的坏味道嫌疑实体ck具有当前坏味道检测种类sj的可能性,p
ini
表示初始可能性,p
mi
为当前坏味道检测种类sj关联软件度量元i的度量元偏离值。
[0093]
在步骤s208中,判断待检测软件项目的所有坏味道检测种类是否均检测完成。
[0094]
在本发明实施例中,判断待检测软件项目的所有坏味道检测种类是否均检测完成,当待检测软件项目的所有坏味道检测种类均检测完成时,表明待检测软件项目的所有坏味道检测已完成,此时执行步骤s209,以结束待检测软件的检测。当待检测软件项目的所有坏味道检测种类未检测完成时,执行步骤s210,以对待检测软件项目的剩余坏味道检测种类进行检测。
[0095]
在步骤s209中,结束待检测软件项目的检测。
[0096]
在步骤s210中,获取待检测软件项目的下一坏味道检测种类,将下一坏味道检测种类设置为当前坏味道检测种类。
[0097]
在本发明实施例中,当待检测软件项目的所有坏味道检测种类未检测完成时,获取待检测软件项目的下一坏味道检测种类,将下一坏味道检测种类设置为当前坏味道检测种类,跳转至步骤s204,继续对待检测软件项目的下一坏味道检测种类进行检测,直至完成待检测软件项目的所有坏味道检测种类的检测。
[0098]
本发明实施例在接收输入的待检测软件项目后,获取待检测软件项目的当前坏味道检测种类,获取当前坏味道检测种类的关联软件度量元,计算待检测软件项目中每个代码实体中关联软件度量元的值及平均值,进而获取当前坏味道检测种类的预检测规则,根据预检测规则对待检测软件项目中的所有代码实体进行预检,得到当前坏味道检测种类的坏味道嫌疑实体集,根据当前坏味道检测种类的影响因子集、关联软件度量元的值及平均值,对坏味道嫌疑实体集中每一个坏味道嫌疑实体进行终检,得到具有当前坏味道检测种类的坏味道实体集,从而根据待检测软件项目差异化、动态选择坏味道检测参数,提高了待检测软件项目的检测准确率。
[0099]
实施例三:
[0100]
图3示出了本发明实施例三提供的代码坏味道检测装置的结构,为了便于说明,仅示出了与本发明实施例相关的部分,其中包括:
[0101]
检测种类获取单元31,用于接收输入的待检测软件项目,获取待检测软件项目的当前坏味道检测种类;
[0102]
值计算单元32,用于获取当前坏味道检测种类的关联软件度量元,计算待检测软件项目中每个代码实体中每个关联软件度量元的值及所有代码实体中每个关联软件度量元的平均值;
[0103]
代码预检单元33,用于根据当前坏味道检测种类、平均值,获取当前坏味道检测种类的预检测规则,根据预检测规则对待检测软件项目中的所有代码实体进行预检,得到当前坏味道检测种类的坏味道嫌疑实体集;
[0104]
代码终检单元34,用于根据当前坏味道检测种类的影响因子集、关联软件度量元的值及平均值,对坏味道嫌疑实体集中每一个坏味道嫌疑实体进行终检,得到具有当前坏味道检测种类的坏味道实体集并输出;以及
[0105]
检测设置单元35,用于当待检测软件项目的所有坏味道检测种类未检测完成时,获取待检测软件项目的下一坏味道检测种类,将下一坏味道检测种类设置为当前坏味道检测种类并触发值计算单元32,以对下一坏味道检测种类继续进行检测,直至完成待检测软件项目的所有坏味道检测种类的检测。
[0106]
在本发明实施例中,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,在实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块实现,即将该装置的内部结构划分成不同的功能单元或模块,以实现以上描述的全部或者部分功能。该装置的各单元、模块可由相应的硬件或软件单元实现,各单元、模块可以为独立的软、硬件单元,也可以集成为一个软、硬件单元,在此不用以限制本发明。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本技术的保护范围。该装置中的单元、模块的具体工作过程,可以参考前述方法实施例中的对应描述,在此不再赘述。
[0107]
实施例四:
[0108]
图4示出了本发明实施例四提供的计算机设备的结构,为了便于说明,仅示出了与本发明实施例相关的部分。
[0109]
本发明实施例的计算机设备4包括处理器40、存储器41以及存储在存储器41中并可在处理器40上运行的计算机程序42。该处理器40执行计算机程序42时实现上述各个代码坏味道检测方法实施例中的步骤,例如图1所示的步骤s101至s107。或者,处理器40执行计算机程序42时实现上述装置实施例中各单元的功能,例如图3所示单元31至35的功能。
[0110]
本发明实施例的计算机设备可以为个人计算机、服务器。该计算机设备4中处理器40执行计算机程序42时实现代码坏味道检测方法时实现的步骤可参考前述方法实施例的描述,在此不再赘述。
[0111]
实施例五:
[0112]
在本发明实施例中,提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现上述代码坏味道检测方法实施例中的步骤,例如,图1所示的步骤s101至s107。或者,该计算机程序被处理器执行时实现上述装置实施例中各单元的功能,例如图3所示单元31至35的功能。
[0113]
本发明实施例在接收输入的待检测软件项目后,获取待检测软件项目的当前坏味道检测种类,获取当前坏味道检测种类的关联软件度量元,计算待检测软件项目中每个代码实体中关联软件度量元的值及平均值,进而获取当前坏味道检测种类的预检测规则,根据预检测规则对待检测软件项目中的所有代码实体进行预检,得到当前坏味道检测种类的坏味道嫌疑实体集,根据当前坏味道检测种类的影响因子集、关联软件度量元的值及平均值,对坏味道嫌疑实体集中每一个坏味道嫌疑实体进行终检,得到具有当前坏味道检测种类的坏味道实体集,从而根据待检测软件项目差异化、动态选择坏味道检测参数,提高了待检测软件项目的检测准确率。
[0114]
本发明实施例的计算机可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在
本发明实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0115]
以上各实施例仅用以说明本发明的技术方案,而非对其限制,尽管参照前述各实施例对本发明进行了详细的说明,本领域技术人员应当理解,以上实施例中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
[0116]
此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本发明的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。

技术特征:
1.一种代码坏味道检测方法,其特征在于,所述方法包括下述步骤:步骤a、接收输入的待检测软件项目,获取所述待检测软件项目的当前坏味道检测种类;步骤b、获取所述当前坏味道检测种类的关联软件度量元,计算所述待检测软件项目中每个代码实体中每个所述关联软件度量元的值及所有代码实体中每个所述关联软件度量元的平均值;步骤c、根据所述当前坏味道检测种类、所述平均值,获取所述当前坏味道检测种类的预检测规则,根据所述预检测规则对所述待检测软件项目中的所有代码实体进行预检,得到所述当前坏味道检测种类的坏味道嫌疑实体集;步骤d、根据所述当前坏味道检测种类的影响因子集、所述关联软件度量元的值及平均值,对所述坏味道嫌疑实体集中每一个坏味道嫌疑实体进行终检,得到具有所述当前坏味道检测种类的坏味道实体集并输出;步骤e、当所述待检测软件项目的所有坏味道检测种类未检测完成时,获取所述待检测软件项目的下一坏味道检测种类,将下一坏味道检测种类设置为当前坏味道检测种类并跳转至步骤b,以对下一坏味道检测种类进行检测,直至完成所述待检测软件项目的所有坏味道检测种类的检测。2.如权利要求1所述的方法,其特征在于,获取所述待检测软件项目的当前坏味道检测种类的步骤,包括:获取坏味道实例数据集中预设数量个坏味道种类的坏味道间相生关系,将所述坏味道间相生关系量化为影响因子;获取所有所述影响因子大于预设因子阈值的坏味道种类对,将所有所述坏味道种类对对应的坏味道种类确定为坏味道检测种类,根据每个坏味道检测种类的影响因子集中的元素数量,确定所有所述坏味道检测种类的检测优先级;按照所有所述坏味道检测种类的检测优先级高低,获取所述待检测软件项目的当前坏味道检测种类。3.如权利要求2所述的方法,其特征在于,将所述坏味道间相生关系量化为影响因子的量化公式为其中,i≠j,f
csi,j
表示坏味道种类i对坏味道种类j的影响因子,|cs
i
|表示坏味道种类i出现的次数,|cs
i
∧cs
j
|表示坏味道种类i和坏味道种类j共同出现的次数。4.如权利要求2所述的方法,其特征在于,根据所述当前坏味道检测种类的影响因子集、所述关联软件度量元的值及平均值,对所述坏味道嫌疑实体集中每一个坏味道嫌疑实体进行终检的步骤,包括:根据所述当前坏味道检测种类的影响因子集和检测优先级,计算当前检测的坏味道嫌疑实体的初始可能性值;根据所述关联软件度量元的值及平均值,计算所述当前检测的坏味道嫌疑实体中所有所述关联软件度量元的度量元偏离值;基于所述初始可能性值以及所述度量元偏离值,获取所述当前检测的坏味道嫌疑实体具有所述当前坏味道检测种类的最终可能性值;
当所述最终可能性值大于预设种类阈值时,确定所述当前检测的坏味道嫌疑实体具有所述当前坏味道检测种类,否则不具有所述当前坏味道检测种类。5.如权利要求1所述的方法,其特征在于,计算所述待检测软件项目中每个代码实体中每个所述关联软件度量元的值及所有代码实体中每个所述关联软件度量元的平均值的步骤,包括:遍历所述待检测软件项目中的所有源代码文件,将所述源代码文件中的类层代码实体及方法层代码实体解析并转化为类层抽象语法树及方法层抽象语法树,提取所述类层抽象语法树及方法层抽象语法树的节点结构信息和语义信息;根据所述节点结构信息和语义信息,计算所述待检测软件项目中每个代码实体中每个所述关联软件度量元的值及所有代码实体中每个所述关联软件度量元的平均值。6.如权利要求5所述的方法,其特征在于,通过ast解析器将所述源代码文件中的类层代码实体及方法层代码实体解析并转化为类层抽象语法树及方法层抽象语法树。7.如权利要求1所述的方法,其特征在于,根据所述当前坏味道检测种类、所述平均值,获取所述当前坏味道检测种类的预检测规则的步骤,包括:获取所述当前坏味道检测种类的预检测初始规则,使用所述平均值对所述预检测初始规则进行实例化,得到所述当前坏味道检测种类的预检测规则。8.一种代码坏味道检测装置,其特征在于,所述装置包括:检测种类获取单元,用于接收输入的待检测软件项目,获取所述待检测软件项目的当前坏味道检测种类;值计算单元,用于获取所述当前坏味道检测种类的关联软件度量元,计算所述待检测软件项目中每个代码实体中每个所述关联软件度量元的值及所有代码实体中每个所述关联软件度量元的平均值;代码预检单元,用于根据所述当前坏味道检测种类、所述平均值,获取所述当前坏味道检测种类的预检测规则,根据所述预检测规则对所述待检测软件项目中的所有代码实体进行预检,得到所述当前坏味道检测种类的坏味道嫌疑实体集;代码终检单元,用于根据所述当前坏味道检测种类的影响因子集、所述关联软件度量元的值及平均值,对所述坏味道嫌疑实体集中每一个坏味道嫌疑实体进行终检,得到具有所述当前坏味道检测种类的坏味道实体集并输出;以及检测设置单元,用于当所述待检测软件项目的所有坏味道检测种类未检测完成时,获取所述待检测软件项目的下一坏味道检测种类,将下一坏味道检测种类设置为当前坏味道检测种类并触发所述值计算单元,以对下一坏味道检测种类进行检测,直至完成所述待检测软件项目的所有坏味道检测种类的检测。9.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述方法的步骤。10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述方法的步骤。

技术总结
本发明适用计算机技术领域,提供了一种代码坏味道检测方法、装置、设备及存储介质,该方法包括:获取待检测软件项目的当前坏味道检测种类;获取当前坏味道检测种类的关联软件度量元,计算待检测软件项目中每个代码实体中每个关联软件度量元的值及所有代码实体中每个关联软件度量元的平均值,获取当前坏味道检测种类的预检测规则,根据预检测规则对待检测软件项目中的所有代码实体进行预检,得到当前坏味道检测种类的坏味道嫌疑实体集,根据当前坏味道检测种类的影响因子集、关联软件度量元的值及平均值,对每一个坏味道嫌疑实体进行终检,得到具有当前坏味道检测种类的坏味道实体集,如此完成所有坏味道检测种类的检测。如此完成所有坏味道检测种类的检测。如此完成所有坏味道检测种类的检测。


技术研发人员:毛斐巧 钟凯航 杜智华
受保护的技术使用者:深圳大学
技术研发日:2023.05.15
技术公布日:2023/8/16
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐