CN108446213B - 一种静态代码质量分析方法和装置 - Google Patents
一种静态代码质量分析方法和装置 Download PDFInfo
- Publication number
- CN108446213B CN108446213B CN201710081777.9A CN201710081777A CN108446213B CN 108446213 B CN108446213 B CN 108446213B CN 201710081777 A CN201710081777 A CN 201710081777A CN 108446213 B CN108446213 B CN 108446213B
- Authority
- CN
- China
- Prior art keywords
- code
- defect
- rule
- quality analysis
- quality
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/77—Software metrics
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Tests Of Electronic Circuits (AREA)
- General Factory Administration (AREA)
Abstract
涉及软件工程技术领域,尤其涉及静态代码质量分析方法和装置,用以提高代码质量分析的效率和准确性。对待分析代码采用模式匹配的方法进行质量分析后确定待分析代码的缺陷趋势,根据缺陷趋势确定采用逻辑路径的方法对待分析代码进行质量分析所使用的至少一条第二代码质量检查规则,并采用至少一条第二代码质量检查规则进行质量分析得到最终的质量分析结果。由于采用模式匹配的方法可较快速地得到质量分析结果,利用该质量分析结果预测待分析代码的缺陷趋势,这样根据缺陷趋势进一步选择代码质量检查规则,一方面可以自动化确定规则,节省了人力和时间,另一方面,保证了所选择规则的客观性和准确性,进而保证质量分析结果的准确性。
Description
技术领域
本发明涉及软件工程技术领域,尤其涉及一种静态代码质量分析方法和装置。
背景技术
现在,越来越多的产品(或系统)由运行在其上的软件来控制。因此,软件的质量对于该产品(或系统)的运行尤为重要。进而,如何有效地管理一个软件的质量也就成为一个亟需解决的问题。
静态软件代码质量分析是软件质量管理的一个行之有效的方法。与传统主要依赖于人力的测试方法相比较,静态代码质量分析可利用计算机的计算能力对代码进行质量检查。
图1示出了目前的一种静态代码质量分析过程。待分析的代码CODE输入静态代码质量分析装置10,静态代码质量分析装置10基于检查规则R对代码CODE进行质量分析,输出质量分析的结果F,其中包括缺陷D和/或警告W。
静态代码质量分析的核心在于如何分析代码以识别潜在的质量问题。目前,静态代码质量分析有两种主要的技术:模式匹配和基于逻辑路径的分析。
模式匹配是早期的静态代码质量分析的主要方法,其基本原理是定义一组编程规则,基于这些规则检查代码,若代码违背这些规则,则判定为可疑的编程模式,上报质量问题。模式匹配的优势是简单且能快速得到分析结果。但采用模式匹配方法只是检查可能引起质量问题的程序代码,容易出现大量错误的告警,需要耗费很多人工对结果进行进一步的筛查分析。
基于逻辑路径的方法是当前主要采用的一种静态代码质量分析方法,代码质量分析装置需要逐一列举待分析代码的所有内在逻辑执行路径,然后针对每一条内在逻辑执行路径,应用代码质量检查规则来识别潜在的质量问题。与模式匹配相比,基于逻辑路径的方法方法可以获得更准确的分析结果。在分析之前需要人工定义规则,费时费力。并且分析结果的准确性也会依赖于每一条内在逻辑执行路径上的规则。如果规则定义得过少,质量分析的过程耗时较短,但可能会漏掉一些关键的缺陷。如果规则定义得过多,则分析过程过于复杂,耗时长,分析结果总量也会非常庞大,仍需要耗费一定的人工来筛选出真正的质量问题。
发明内容
有鉴于此,本发明提供一种静态代码质量分析方法和装置,用以提高静态代码质量分析的效率和分析结果的准确性。
第一方面,提供一种静态代码质量分析方法。该方法中,首先可基于至少一条第一代码质量检查规则,对待分析代码采用模式匹配的方法进行质量分析,得到至少一条第一质量分析结果;然后根据所述至少一条第一质量分析结果,确定所述待分析代码的缺陷趋势;接下来根据所述缺陷趋势,确定至少一条第二代码质量检查规则;最后,基于所述至少一条第二代码质量检查规则,采用逻辑路径的方法对所述待分析代码进行质量分析,得到至少一条第二质量分析结果。
由于采用模式匹配的方法可以能够较快速地得到质量分析结果,但并不将该结果作为最终的质量分析结果,而是利用该质量分析结果确定待分析代码的缺陷趋势,这样根据缺陷趋势进一步确定采用逻辑路径的方法进行质量分析所使用的规则,一方面易于实现自动化确定规则,节省了人力和时间,另一方面,保证了所选择规则的客观性和准确性,进而保证质量分析结果的准确性。
可选地,所述缺陷趋势包括至少一条缺陷,以及所述待分析代码发生所述至少一条缺陷中的每一条缺陷的第一概率。
这样,缺陷趋势就能够表示所述待分析代码中可能存在哪些缺陷,且存在每一种缺陷的概率。
可选地,所述至少一条第一代码质量检查规则中的每一条对应于至少一种缺陷,符合该规则的代码中出现该规则所对应的每一条缺陷的第二概率均大于预设的第二缺陷概率阈值。该方法中,在根据所述至少一条第一质量分析结果,预测得到所述待分析代码的缺陷趋势之前,还包括:对于所述至少一条第一代码质量检查规则所对应的每一种缺陷,确定该缺陷所对应的所述至少一条代码质量检查规则中的每一条;对于确定的每一条,得到所述至少一条第一质量分析结果中,符合该条代码质量检查规则的结果出现的第一次数;根据得到的所有所述第一次数,得到该缺陷可能出现的第二次数;根据得到的所有所述第二次数,预测所述待分析代码出现该缺陷的所述第一概率。
提供了一种根据模式匹配的方法得到的质量分析结果来预测待分析代码的缺陷趋势。
可选地,该方法中,可仅根据所述缺陷趋势来确定采用逻辑路径的方法进行代码质量分析所使用的第二代码质量检查规则。
或者,可选地,该方法中,不仅根据所述缺陷趋势,还根据及下列因素中的至少一个,确定所述至少一条第二代码质量检查规则:无缺陷的代码在使用一条规则进行代码质量分析时被误判为存在缺陷的第三概率;使用一条规则检查缺陷时所使用的检查算法对处理器的占用率。
第二方面,本发明实施例提供一种静态代码质量分析装置,包括:一个第一检查模块,用于基于至少一条第一代码质量检查规则,对待分析代码采用模式匹配的方法进行质量分析,得到至少一条第一质量分析结果;一个趋势确定模块,用于根据所述至少一条第一质量分析结果,确定所述待分析代码的缺陷趋势;一个规则确定模块,用于根据所述缺陷趋势,确定至少一条第二代码质量检查规则;以及一个第二检查模块,用于基于所述至少一条第二代码质量检查规则,采用基于逻辑路径的方法对所述待分析代码进行质量分析,得到至少一条第二质量分析结果。
由于采用模式匹配的方法可以能够较快速地得到质量分析结果,但并不将该结果作为最终的质量分析结果,而是利用该质量分析结果确定待分析代码的缺陷趋势,这样根据缺陷趋势进一步确定采用逻辑路径的方法进行质量分析所使用的规则,一方面易于实现自动化确定规则,节省了人力和时间,另一方面,保证了所选择规则的客观性和准确性,进而保证质量分析结果的准确性。
可选地,所述趋势确定模块所确定的所述缺陷趋势包括至少一条缺陷,以及所述待分析代码发生所述至少一条缺陷中的每一条缺陷的第一概率。
这样,缺陷趋势就能够表示所述待分析代码中可能存在哪些缺陷,且存在每一种缺陷的概率。
可选地,所述第一检查模块所使用的所述至少一条第一代码质量检查规则中的每一条对应于至少一种缺陷,符合该规则的代码中出现该规则所对应的每一条缺陷的第二概率均大于预设的第二缺陷概率阈值;所述趋势确定模块,还用于在根据所述至少一条第一质量分析结果,预测得到所述待分析代码的缺陷趋势之前,对于所述至少一条第一代码质量检查规则所对应的每一种缺陷,确定该缺陷所对应的所述至少一条代码质量检查规则中的每一条;对于确定的每一条,得到所述至少一条第一质量分析结果中,符合该条代码质量检查规则的结果出现的第一次数;根据得到的所有所述第一次数,得到该缺陷可能出现的第二次数;根据得到的所有所述第二次数,预测所述待分析代码出现该缺陷的所述第一概率。
提供了一种根据模式匹配的方法得到的质量分析结果来预测待分析代码的缺陷趋势。
可选地,所述规则确定模块具体用于:仅根据所述缺陷趋势确定所述至少一条第二代码质量检查规则。
或者,可选地,所述规则确定模块具体用于:根据所述缺陷趋势,以及下列因素中的至少一个,确定所述至少一条第二代码质量检查规则:无缺陷的代码在使用一条规则进行代码质量分析时被误判为存在缺陷的第三概率;使用一条规则检查缺陷时所使用的检查算法对处理器的占用率。
这样在确定第二代码质量检查规则时,不仅依据所述待分析代码的缺陷趋势,还根据代码质量检查规则本身的误判的属性和/或对系统资源的占用来选择规则,可依据不同的分析需求来灵活选择规则,以得到期望的分析结果。
第三方面,提供一种静态代码质量分析装置,包括:至少一个存储器,用于存储机器可读指令;至少一个处理器,用于调用所述机器可读指令,执行如第一方面,或第一方面的任一种可选实现方式所提供的方法。
第四方面,提供一种机器可读介质,所述机器可读介质上存储有机器可读指令,所述机器可读指令在被处理器执行时,使所述处理器执行第一方面,或第一方面的任一种可选实现方式所提供的方法。
第五方面,提供一种机器可读指令,所述机器可读指令在被处理器执行时,使所述处理器执行使所述处理器执行第一方面,或第一方面的任一种可选实现方式所提供的方法。
附图说明
图1示出了目前的一种静态代码质量分析过程;
图2为本发明实施例提供的一种静态代码质量分析方法的流程图;
图3为本发明实施例提供的第一种静态代码质量分析装置的结构示意图;
图4为本发明实施例提供的第二种静态代码质量分析装置的结构示意图;
图5为本发明实施例提供的一种静态代码质量分析过程的示意图。
附图标记列表:
CODE:待分析代码 10:静态代码质量分析装置 R:代码质量检查规则
F:质量分析结果 D:缺陷 W:警告
S201:模式匹配的质量分析 S202:确定缺陷趋势 S203:选择规则
S204:逻辑路径的质量分析 S2021:确定规则 S2022:计算第一次数
S2023:计算第二次数 S2024:计算第一概率
30、40:静态代码质量分析装置
301:第一检查模块 302:趋势确定模块 303:规则确定模块
304:第二检查模块 401:至少一个存储器 402:至少一个处理器
CODE:待分析代码 R1:至少一条第一代码质量检查规则
R2:至少一条第二代码质量检查规则 R3:至少一条第三代码质量检查规则
F1:至少一条第一质量分析结果 FT:缺陷趋势
F2:至少一条第二质量分析结果
51:模式匹配的质量分析 52:缺陷预测 53:规则确定
54:逻辑路径的质量分析
具体实施方式
如前所述,目前的静态代码质量分析方法中,模式匹配的方法容易导致出现大量错误的告警,人工筛选费时费力。基于逻辑路径的方法需要人工配置规则,且分析结果的准确性依赖于规则的定义,对检测人员的经验依赖度较高。
本发明实施例中,首先对待分析代码采用模式匹配的方法进行质量分析,然后基于得到质量分析结果来确定待分析代码的缺陷趋势,接下来根据确定的缺陷趋势,确定采用逻辑路径的方法对所述待分析代码进行质量分析所使用的至少一条第二代码质量检查规则,并采用至少一条第二代码质量检查规则进行质量分析得到最终的质量分析结果。由于采用模式匹配的方法可以能够较快速地得到质量分析结果,但并不将该结果作为最终的质量分析结果,而是利用该质量分析结果确定待分析代码的缺陷趋势,这样根据缺陷趋势进一步确定采用逻辑路径的方法进行质量分析所使用的规则,一方面易于实现自动化确定规则,节省了人力和时间,另一方面,保证了所选择规则的客观性和准确性,进而保证质量分析结果的准确性。
下面结合附图对本发明实施例提供的方法和设备进行详细说明。
首先,参照图2介绍本发明实施例提供的静态代码质量分析方法。如图2所示,该方法可包括如下步骤:
S201:基于至少一条第一代码质量检查规则,对待分析代码采用模式匹配的方法进行质量分析,得到至少一条第一质量分析结果。
可选地,上述至少一条第一代码质量检查规则中的每一条对应于至少一种缺陷,符合该规则的代码中出现该规则所对应的每一条缺陷的第二概率均大于预设的第二缺陷概率阈值。
S202:根据至少一条第一质量分析结果,确定待分析代码的缺陷趋势。
可选地,该缺陷趋势可包括至少一条缺陷,以及所述待分析代码发生所述至少一条缺陷中的每一条缺陷的第一概率。
可选地,步骤S202可通过如下可选子步骤实现:
S2021:对于至少一条第一代码质量检查规则所对应的每一种缺陷,确定该缺陷所对应的至少一条代码质量检查规则中的每一条;
S2022:对于子步骤S2021中确定的每一条代码质量检查规则,从步骤S201中得到的至少一条第一质量分析结果中,符合该条代码质量检查规则的结果出现的第一次数;
S2023:根据子步骤S2022得到的所有第一次数,得到该缺陷可能出现的第二次数;
S2024:根据子步骤S2023得到的所有第二次数,预测待分析代码出现该缺陷的第一概率。
S203:根据步骤S202确定的缺陷趋势,确定至少一条第二代码质量检查规则。
可选地,步骤S203可通过如下方式实现:
根据步骤S202中得到的缺陷趋势,以及下列因素中的至少一个,确定上述至少一条第二代码质量检查规则:
无缺陷的代码在使用一条规则进行代码质量分析时被误判为存在缺陷的第三概率;
使用一条规则检查缺陷时所使用的检查算法对处理器的占用率。
步骤S203的一个具体的例子可参见图5所示的静态代码质量分析过程。
S204:基于步骤S203确定的至少一条第二代码质量检查规则,采用逻辑路径的方法对待分析代码进行质量分析,得到至少一条第二质量分析结果。
参见图3,本发明实施例还提供一种静态代码质量分析装置30,包括:
一个第一检查模块301,用于基于至少一条第一代码质量检查规则,对待分析代码采用模式匹配的方法进行质量分析,得到至少一条第一质量分析结果;
一个趋势确定模块302,用于根据至少一条第一质量分析结果,确定待分析代码的缺陷趋势;
一个规则确定模块303,用于根据上述缺陷趋势,确定至少一条第二代码质量检查规则;
一个第二检查模块304,用于基于所述至少一条第二代码质量检查规则,采用逻辑路径的方法对待分析代码进行质量分析,得到至少一条第二质量分析结果。
可选地,趋势确定模块302所确定的缺陷趋势包括至少一条缺陷,以及待分析代码发生至少一条缺陷中的每一条缺陷的第一概率。
可选地,第一检查模块301所使用的至少一条第一代码质量检查规则中的每一条对应于至少一种缺陷,符合该规则的代码中出现该规则所对应的每一条缺陷的第二概率均大于预设的第二缺陷概率阈值。
趋势确定模块302,还用于在根据至少一条第一质量分析结果,预测得到待分析代码的缺陷趋势之前,对于至少一条第一代码质量检查规则所对应的每一种缺陷,确定该缺陷所对应的至少一条代码质量检查规则中的每一条;对于确定的每一条,得到至少一条第一质量分析结果中,符合该条代码质量检查规则的结果出现的第一次数;根据得到的所有第一次数,得到该缺陷可能出现的第二次数;根据得到的所有第二次数,预测待分析代码出现该缺陷的第一概率。
可选地,规则选择模块303可根据趋势确定模块3021确定的待分析代码的缺陷趋势,以及下列因素中的至少一个确定至少一条第二代码质量检查规则:
无缺陷的代码在使用一条规则进行代码质量分析时被误判为存在缺陷的第三概率;
使用一条规则检查缺陷时所使用的检查算法对处理器的占用率。
参见图4,本发明实施例还提供一种静态代码质量分析装置40,包括:至少一个存储器401,用于存储机器可读指令;至少一个处理器402,用于调用机器可读指令,执行本发明实施例提供的静态代码质量分析方法。
图4所示的静态代码质量分析装置40可视为图3所示的静态代码质量分析30的一种具体的实现方式。其中,第一检查模块301、趋势确定模块302、规则确定模块303和第二检查模块304可为程序模块,存储在至少一个存储器,作为机器可读指令,至少一个处理器402调用这些程序模块,实现这些程序模块的功能。
图5为本发明实施例提供的一种静态代码质量分析过程的示意图。图5所示的过程可视为前面各实施例的一个具体的实现方式。
如图5所示,该过程中,待分析代码CODE被输入本发明实施例提供的静态代码质量分析装置中(该装置可以是前述的静态代码质量分析装置30或静态代码质量分析装置40)。
首先,该装置对输入的待分析代码采用模式匹配的方法进行第一次质量分析(即图5中的方框51中的处理)。该第一次质量分析可通过执行前述的步骤S201来完成,所基于的至少一条第一代码质量检查规则可为图5中的R1,得到的至少一条第一质量分析结果可为图5中的F1。可选地,若该装置为前述的静态代码质量分析装置30,则该第一次质量分析可由第一检查模块301完成。
方框51的输出并不作为最终的质量分析结果,而是用来进行后续的缺陷预测,用于预测待分析代码CODE的缺陷趋势FT。
其中,至少一条第一代码质量检查规则R1可被预先定义,R1中的每一条代码质量检查规则代表一种容易出错的代码模式,若代码具有该容易出错的代码模式,若果代码编写不当,则代码出现缺陷的概率大于预设的第一缺陷概率阈值。
以C++语言撰写待分析代码CODE为例,第一代码质量检查规则与缺陷类型的对应关系的一个示例可如下面的表1所列:
表1
第一代码质量检查规则R1 | 缺陷类型 |
数据类型之间的强制转换 | 内存损坏(Memory corruption) |
数据类型之间的强制转换 | 数据取值错误 |
指针指向指针 | 内存损坏 |
基类的指针被直接转换成继承类的指针 | 内存泄露 |
基类的指针被直接转换成继承类的指针 | 对象初始化错误 |
在switch语句中没有默认路径 | 控制流错误 |
…… | …… |
然后,该装置根据至少一条第一质量分析结果F1,确定待分析代码CODE的缺陷趋势FT(即图5中方框52的处理)。图5所示的过程中,该缺陷趋势包括至少一条缺陷,以及待分析代码CODE发生该至少一条缺陷中的每一条缺陷的第一概率。可通过执行前述的步骤S202来确定待分析代码CODE的缺陷趋势FT。可选地,若该装置为前述的静态代码质量分析装置30,则可由趋势确定模块302确定待分析代码CODE的缺陷趋势FT。
仍以C++语言撰写待分析代码CODE为例,表2中给出了方框51输出的至少一条第一质量分析结果F1的例子。
表2
表2中的第二列即为前述的子步骤S2022中确定的第一次数。比如:对于“数据类型之间的强制转换”,在F1中出现的次数为132次。这里,以10K行代码为例加以说明。该第一次数的统计可由前述的子步骤S2022实现。
基于表2统计出的第一次数,再结合表1示出的对应关系,得到一种缺陷可能出现的第二次数,即表2中与该缺陷对应的各第一代码质量检查规则出现的总次数,如下面的表3中的第二列所示。
表3
比如:表1中缺陷类型“内存损坏”与“数据类型之间的强制转换”和“指针指向指针”两种第一代码质量检查规则(可疑编程模式)相关。表2中F1中符合这两种规则的第一质量分析结果出现次数的总数,,即对应于该缺陷的可疑编程模式在待分析代码CODE中出现的总次数为132+19=151次。该第二次数的统计可由前述的子步骤S2023实现。
基于以往的项目经验统计可以得到在一个软件中“数据类型之间的强制转换”或“指针指向指针”这两种可疑编程模式的平均出现次数是多少,比如:该平均次数为100。由于表3中与“内存损坏”缺陷相关的可疑编程模式出现的次数为151次,比该平均次数多50%,即非常显著地偏多,因此,基于该可疑编程模式使用不当容易导致“内存损坏”缺陷这一软件编程实践中的常识,可将其标记为“高风险”缺陷。换言之,预测“内存损坏”缺陷出现的概率会比较高,比如:如前所述,高于预设的第一概率阈值。通过该方式可以评估每一种缺陷出现的第一概率,得到表3中的第四列。缺陷出现概率的评估可由前述的子步骤S2024实现。
接下来,该装置根据确定的待分析代码CODE的缺陷趋势FT,确定用于采用逻辑路径的方法对待分析代码CODE进行质量分析所基于的至少一条第二代码质量检查规则R2(即图5中的方框53的处理)。其中,方框53中可由前述的子步骤S203执行,即根据方框51输出的缺陷趋势,确定用于采用逻辑路径的方法进行质量分析所使用的至少一条第二代码质量检查规则R2。其中,R2可从至少一条第三代码质量检查规则R3中选择。该至少一条第三代码质量检查规则R3可预先定义,比如为一个用于采用逻辑路径的方法进行质量分析所使用的规则的全集。
下面的表4示出了用于采用逻辑路径的方法进行质量分析所使用的规则的一种分类。该分类基于该规则检查缺陷的准确性和/或使用该规则进行质量分析时对处理器的占用情况。
表4
第三代码质量检查规则R3 | 缺陷类型 | 分类 |
规则1、数组下标取值超范围 | 内存损坏 | 基本 |
规则2、在某一路径上内存未被释放 | 内存泄露 | 基本 |
规则3、可能引用了空指针 | 内存损坏 | 基本 |
规则4、指针在被检查是否为空之前被使用 | 内存损坏 | 高级 |
规则5、…… | 数据取值错误 | 基本 |
规则6、…… | 内存泄露 | 高级 |
规则7、…… | 数据取值错误 | 高级 |
规则8、…… | 控制流错误 | 基本 |
…… | …… | …… |
表4中,每一行对应一条第二代码质量检查规则,可用于检测在一条单独的内在逻辑执行路径上是否存在某种缺陷。
比如:对于表4中一条分类为“基本”的第三代码质量检查规则,无缺陷的代码在使用该规则进行代码质量分析时被误判为存在缺陷的第三概率较低,且使用该规则检查缺陷时所使用的算法对处理器的占用率较低。比如:无缺陷的代码在使用该规则进行代码质量分析时被误判为存在缺陷的第三概率不高于预设的第三概率阈值,且使用该规则检查缺陷时所使用的算法对处理器的占用率不大于预设的处理器占用率阈值。
再比如:对于表4中一条分类为“高级”的第三代码质量检查规则,无缺陷的代码在使用该规则进行代码质量分析时被误判为存在缺陷的第三概率较高并且使用该规则检查缺陷时所使用的算法对处理器的占用率较高。比如:无缺陷的代码在使用该规则进行代码质量分析时被误判为存在缺陷的第三概率高于预设的第三概率阈值,且使用该规则检查缺陷时所使用的算法对处理器的占用率大于预设的处理器占用率阈值。
一种可选的实现方式是,对于表3中具有“高风险”的缺陷趋势的缺陷,使用表4中该“高风险”的缺陷所对应的分类为“基本”和“高级”的规则对待分析代码CODE进行分析;对于表3中中具有“中等风险”的缺陷趋势的缺陷,使用表4中该“中等风险”的缺陷所对应的分类为“基本”的规则对待分析代码CODE进行质量分析;忽略表3中具有“低风险”的缺陷趋势的缺陷。该可选的实现方式中,规则1、3、4和5会被选择用于进行方框54中的质量分析。
最后,该装置基于R2,采用逻辑路径的方法对待分析代码CODE进行质量分析,得到至少一条质量分析结果F2(即图5中方框54的处理)。
以上方式仅为示例,诸如统计分布、贝叶斯置信网络等方法可以用于前述的质量分析和/或规则选择的处理。
综上,与目前的静态代码质量分析过程相比,本发明实施例提供的静态代码质量分析方案中,通过模式匹配的静态代码质量分析得到缺陷趋势,实现上简单易行;基于得到的缺陷趋势确定采用逻辑路径的方法进行静态代码质量分析时所使用的代码质量检查规则,避免了人工配置规则耗时耗力。由于准确地确定了代码质量检查规则,因此能够较准确地得到分析结果,大大降低了人工筛选的工作量。采用本发明实施例提供的方案能够提高软件质量管理的效率。
本发明实施例还提供一种机器可读介质,该机器可读介质上存储有机器可读指令,该机器指令在被处理器执行时,使处理器执行前述的任一种静态代码质量分析方法。具体地,可以提供配有机器可读介质的系统或者装置,在该机器可读介质上存储着实现上述实施例中任一实施例的功能的机器可读指令,且使该系统或者装置的计算机或处理器读出并执行存储在该机器可读介质中的机器指令。
在这种情况下,从机器可读介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此机器可读代码和存储机器可读代码的机器可读介质构成了本发明的一部分。
机器可读介质的实施例包括软盘、硬盘、磁光盘、光盘(如CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVD+RW)、磁带、非易失性存储卡和ROM。可选择地,可以由通信网络从服务器计算机上或云上下载程序代码。
需要说明的是,上述各流程和各系统结构图中不是所有的步骤和模块都是必须的,可以根据实际的需要忽略某些步骤或模块。各步骤的执行顺序不是固定的,可以根据需要进行调整。上述各实施例中描述的系统结构可以是物理结构,也可以是逻辑结构,即,有些模块可能由同一物理实体实现,或者,有些模块可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。
以上各实施例中,硬件单元可以通过机械方式或电气方式实现。例如,一个硬件单元可以包括永久性专用的电路或逻辑(如专门的处理器,FPGA或ASIC)来完成相应操作。硬件单元还可以包括可编程逻辑或电路(如通用处理器或其它可编程处理器),可以由软件进行临时的设置以完成相应操作。具体的实现方式(机械方式、或专用的永久性电路、或者临时设置的电路)可以基于成本和时间上的考虑来确定。
上文通过附图和优选实施例对本发明进行了详细展示和说明,然而本发明不限于这些已揭示的实施例,基与上述多个实施例本领域技术人员可以知晓,可以组合上述不同实施例中的代码审核手段得到本发明更多的实施例,这些实施例也在本发明的保护范围之内。
Claims (11)
1.静态代码质量分析方法,其特征在于,包括:
基于至少一条第一代码质量检查规则,对待分析代码采用模式匹配的方法进行质量分析,得到至少一条第一质量分析结果;
根据所述至少一条第一质量分析结果,确定所述待分析代码的缺陷趋势;
根据所述缺陷趋势,确定至少一条第二代码质量检查规则;
基于所述至少一条第二代码质量检查规则,采用逻辑路径的方法对所述待分析代码进行质量分析,得到至少一条第二质量分析结果。
2.如权利要求1所述的方法,其特征在于,所述缺陷趋势包括至少一条缺陷,以及所述待分析代码发生所述至少一条缺陷中的每一条缺陷的第一概率。
3.如权利要求2所述的方法,其特征在于,
所述至少一条第一代码质量检查规则中的每一条对应于至少一种缺陷,符合该规则的代码中出现该规则所对应的每一条缺陷的第二概率均大于预设的第二缺陷概率阈值;
在根据所述至少一条第一质量分析结果,预测得到所述待分析代码的缺陷趋势之前,还包括:对于所述至少一条第一代码质量检查规则所对应的每一种缺陷,
确定该缺陷所对应的所述至少一条代码质量检查规则中的每一条;
对于确定的每一条,得到所述至少一条第一质量分析结果中,符合该条代码质量检查规则的结果出现的第一次数;
根据得到的所有所述第一次数,得到该缺陷可能出现的第二次数;
根据得到的所有所述第二次数,预测所述待分析代码出现该缺陷的所述第一概率。
4.如权利要求2或3所述的方法,其特征在于,根据所述缺陷趋势,确定至少一条第二代码质量检查规则,包括:根据所述缺陷趋势,以及下列因素中的至少一个,确定所述至少一条第二代码质量检查规则:
无缺陷的代码在使用一条规则进行代码质量分析时被误判为存在缺陷的第三概率;
使用一条规则检查缺陷时所使用的检查算法对处理器的占用率。
5.静态代码质量分析装置(30),其特征在于,包括:
一个第一检查模块(301),用于基于至少一条第一代码质量检查规则,对待分析代码采用模式匹配的方法进行质量分析,得到至少一条第一质量分析结果;
一个趋势确定模块(302),用于根据所述至少一条第一质量分析结果,确定所述待分析代码的缺陷趋势;
一个规则确定模块(303),用于根据所述缺陷趋势,确定至少一条第二代码质量检查规则;
一个第二检查模块(304),用于基于所述至少一条第二代码质量检查规则,采用基于逻辑路径的方法对所述待分析代码进行质量分析,得到至少一条第二质量分析结果。
6.如权利要求5所述的装置(30),其特征在于,所述趋势确定模块(302)所确定的所述缺陷趋势包括至少一条缺陷,以及所述待分析代码发生所述至少一条缺陷中的每一条缺陷的第一概率。
7.如权利要求6所述的装置(30),其特征在于,所述第一检查模块(301)所使用的所述至少一条第一代码质量检查规则中的每一条对应于至少一种缺陷,符合该规则的代码中出现该规则所对应的每一条缺陷的第二概率均大于预设的第二缺陷概率阈值;
所述趋势确定模块(302),还用于在根据所述至少一条第一质量分析结果,预测得到所述待分析代码的缺陷趋势之前,对于所述至少一条第一代码质量检查规则所对应的每一种缺陷,
确定该缺陷所对应的所述至少一条代码质量检查规则中的每一条;
对于确定的每一条,得到所述至少一条第一质量分析结果中,符合该条代码质量检查规则的结果出现的第一次数;
根据得到的所有所述第一次数,得到该缺陷可能出现的第二次数;
根据得到的所有所述第二次数,预测所述待分析代码出现该缺陷的所述第一概率。
8.如权利要求6或7所述的装置(30),其特征在于,所述规则确定模块(303)具体用于:根据所述缺陷趋势,以及下列因素中的至少一个,确定所述至少一条第二代码质量检查规则:
无缺陷的代码在使用一条规则进行代码质量分析时被误判为存在缺陷的第三概率;
使用一条规则检查缺陷时所使用的检查算法对处理器的占用率。
9.静态代码质量分析装置(40),其特征在于,包括:
至少一个存储器(401),用于存储机器可读指令;
至少一个处理器(402),用于调用所述机器可读指令,执行如权利要求1~4任一项所述的方法。
10.一种机器可读介质,其特征在于,所述机器可读介质上存储有机器可读指令,所述机器可读指令在被处理器执行时,使所述处理器执行权利要求1~4中任一项所述的方法。
11.一种机器可读指令,其特征在于,所述机器可读指令在被处理器执行时,使所述处理器执行权利要求1~4中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710081777.9A CN108446213B (zh) | 2017-02-15 | 2017-02-15 | 一种静态代码质量分析方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710081777.9A CN108446213B (zh) | 2017-02-15 | 2017-02-15 | 一种静态代码质量分析方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108446213A CN108446213A (zh) | 2018-08-24 |
CN108446213B true CN108446213B (zh) | 2021-08-17 |
Family
ID=63190428
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710081777.9A Active CN108446213B (zh) | 2017-02-15 | 2017-02-15 | 一种静态代码质量分析方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108446213B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111913872A (zh) * | 2019-05-09 | 2020-11-10 | 南京大学 | 一种基于缺陷预测的软件静态检查警告排序优化方法 |
EP4365744A1 (en) * | 2021-07-29 | 2024-05-08 | Siemens Aktiengesellschaft | Software security defect prediction method and device, and computer readable medium |
CN113836020A (zh) * | 2021-09-24 | 2021-12-24 | 中国电信股份有限公司 | 代码检测方法、装置及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102193859A (zh) * | 2010-03-03 | 2011-09-21 | 腾讯科技(深圳)有限公司 | 一种代码分析方法及系统 |
CN103294594A (zh) * | 2013-05-08 | 2013-09-11 | 南京大学 | 一种基于测试的静态分析误报消除方法 |
CN103793652A (zh) * | 2012-10-29 | 2014-05-14 | 广东电网公司信息中心 | 一种基于静态分析的应用系统代码安全扫描装置 |
CN106354632A (zh) * | 2016-08-24 | 2017-01-25 | 北京奇虎测腾科技有限公司 | 一种基于静态分析技术的源代码检测系统及方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9176828B2 (en) * | 2012-09-04 | 2015-11-03 | Opshub, Inc. | System and method for merging results from multiple runs based on run inputs |
-
2017
- 2017-02-15 CN CN201710081777.9A patent/CN108446213B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102193859A (zh) * | 2010-03-03 | 2011-09-21 | 腾讯科技(深圳)有限公司 | 一种代码分析方法及系统 |
CN103793652A (zh) * | 2012-10-29 | 2014-05-14 | 广东电网公司信息中心 | 一种基于静态分析的应用系统代码安全扫描装置 |
CN103294594A (zh) * | 2013-05-08 | 2013-09-11 | 南京大学 | 一种基于测试的静态分析误报消除方法 |
CN106354632A (zh) * | 2016-08-24 | 2017-01-25 | 北京奇虎测腾科技有限公司 | 一种基于静态分析技术的源代码检测系统及方法 |
Non-Patent Citations (1)
Title |
---|
相关路径静态分析中协同式逆向推理方法;郭曦等;《软件学报》;20140819;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN108446213A (zh) | 2018-08-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10901401B2 (en) | Plan generation apparatus, method and computer readable medium for multi-process production of intermediate product | |
CN111538642B (zh) | 一种异常行为的检测方法、装置、电子设备及存储介质 | |
CN112262320A (zh) | 集成电路剖析和异常检测 | |
US10671627B2 (en) | Processing a data set | |
CN108446213B (zh) | 一种静态代码质量分析方法和装置 | |
CN108399115B (zh) | 一种运维操作检测方法、装置及电子设备 | |
CN105182207B (zh) | 一种芯片错误注入测试方法及装置 | |
CN105630656A (zh) | 基于日志模型的系统健壮性分析方法及装置 | |
CN114461534A (zh) | 软件性能测试方法、系统、电子设备及可读存储介质 | |
CN103914374A (zh) | 基于程序切片和频繁模式提取的代码缺陷检测方法及装置 | |
CN109818808B (zh) | 故障诊断方法、装置和电子设备 | |
CN106407246B (zh) | Sql执行计划管理的方法及装置 | |
CN112598326A (zh) | 模型迭代方法、装置、电子设备及存储介质 | |
CN113392000A (zh) | 测试用例执行结果分析方法、装置、设备及存储介质 | |
CN116627804A (zh) | 基于人工智能的测试方法、系统、电子设备及存储介质 | |
CN115576831A (zh) | 一种测试案例推荐方法、装置、设备及存储介质 | |
CN111309584A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN113220594B (zh) | 自动化测试方法、装置、设备及存储介质 | |
US20230011129A1 (en) | Log analyzer for fault detection | |
CN108763092B (zh) | 一种基于交叉验证的代码缺陷检测方法及装置 | |
CN108509347B (zh) | 等价变异体识别方法及装置 | |
CN107102938B (zh) | 测试脚本的更新方法及装置 | |
CN115576850B (zh) | 数据指标测试方法、装置、电子设备及存储介质 | |
KR102669206B1 (ko) | 인공지능 시스템의 생애주기 기반 신뢰성 평가 방법 및 장치 | |
CN114564853B (zh) | 一种基于fmea数据的评价报告的生成方法及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |