[发明专利]一种性能缺陷自动检测的方法在审
| 申请号: | 202210060556.4 | 申请日: | 2022-01-19 |
| 公开(公告)号: | CN114490369A | 公开(公告)日: | 2022-05-13 |
| 发明(设计)人: | 王豫;熊俊;徐砚听;王林章 | 申请(专利权)人: | 南京大学 |
| 主分类号: | G06F11/36 | 分类号: | G06F11/36 |
| 代理公司: | 南京知识律师事务所 32207 | 代理人: | 张苏沛 |
| 地址: | 210023 江苏*** | 国省代码: | 江苏;32 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 性能 缺陷 自动检测 方法 | ||
1.一种性能缺陷自动检测的方法,用来自动检测C/C++代码中潜在的性能缺陷,所述方法包括如下步骤:
步骤1:基于性能缺陷的代码特征,定义能够用于表示该性能缺陷的标签,基于性能缺陷发生的语句序列,构建表示性能缺陷行为特征的标签约束集合;
步骤2:对源代码进行程序分析构建过程间控制流图,并基于控制流图和步骤1标签构建的规则引入性能标签,构建带标签的过程间控制流图;
步骤3:基于步骤1的约束集合,在步骤2生成的带标签过程间控制流图上寻找满足约束的路径,其过程为:通过深度优先遍历的方式,寻找图中的一条路径,收集该路径产生的一组由标签组成的序列,根据标签序列与标签约束集合的一致性,判断该序列是否满足约束给定的条件,即是否存在性能缺陷,从而报告相应的性能缺陷,实现性能缺陷的自动检测。
2.根据权利要求1所述的一种性能缺陷自动检测的方法,其特征在于,所述步骤1具体如下:
步骤1.1:基于性能缺陷的代码特征,定义用于表达性能缺陷的所有标签对象,标签对象使用一个字符串表示;
步骤1.2:定义基于指令的标签构建规则,对于待检测的性能缺陷问题发生的语句序列,即每一条指令,生成有关此指令的标签对象,该标签就是对该指令的一个抽象的描述,描述了该指令的行为;
步骤1.3:定义用于构建标签的复杂约束的四种原子约束,分别是数目约束:获取一个标签的数目,位置约束:获取一个标签的位置,匹配约束:判断两个标签是否“匹配”,近邻约束:表示两个标签的位置相邻;
步骤1.4:定义复合约束,使用步骤1.3的四种原子约束构建更加复杂的约束用来描述缺陷的特征,即逻辑约束:一个约束通过逻辑与,逻辑或和逻辑非构成一个复合约束,以及布尔约束:两个约束通过一系列数学运算构成,返回为真或假;
步骤1.5:根据所检测的性能缺陷发生时的语句序列,构造对应的标签序列,通过对此标签序列的分析,使用步骤1.4复合约束来构建描述性能缺陷特征的约束集合。
3.根据权利要求1所述的一种性能缺陷自动检测的方法,其特征在于,所述步骤2具体如下:
步骤2.1:构建带标签的过程间控制流图,一个带标签的过程间控制流图指的是每个节点都拥有若干个标签,在步骤1基础上,为控制流图的每一个节点根据构建规则生成某干个标签;
步骤2.2:压缩步骤2.1生成的带标签的过程间控制流图,这是因为在该图的许多节点上可能没有任何的标签,因此在步骤2.1之后删除这些节点,具体过程为:对于空标签的节点,如果该节点出度入度都为1,直接将前驱结点与后继节点相连,并删除此节点,因为本发明生成的带标签的过程间控制流图每个节点都对应一条指令,因此这种冗余的指令很多,有利于加快之后的检测步骤;
步骤2.3:将构建的约束附加在带标签的过程间控制流图,表示标签在该图上需满足的约束。
4.根据权利要求1所述的一种性能缺陷自动检测的方法,其特征在于,所述步骤3具体如下:
步骤3.1:基于以上步骤构建的带标签的过程间控制流图和约束集合,对于该图进行深度优先遍历,获取当前节点的所有标签;
步骤3.2:对于步骤3.1的每一个标签,获取包含此标签的约束,对于每一个约束分别判断;
步骤3.3:假设步骤3.2的某个约束属于原子约束,如果该约束是数目约束,则获取它的数目,如果该约束是近邻关系,则获取它的近邻标签,如果约束是位置约束,则获取它的位置,如果该约束是匹配约束,处理则稍稍不同,本发明为每一对匹配的标签,初始化一个栈,每次需要匹配的时候,压栈或者弹出栈,当栈空,则表明无法匹配;
步骤3.4:如果该约束为复合约束,那么结果是组成他们的原子约束判断结果的相应的结合,例如:约束C=C1C2为真表示约束C1和约束C2在同一条路径上都为真;
步骤3.5:在检测到如上满足所有约束的路径之后,就可以将该路径(所有节点组成的路径)储存并报告。
5.根据权利要求2所述的一种性能缺陷自动检测的方法,步骤1.3提出的四种原子约束特征支持对标签的数目的特征检查,因此有助于性能缺陷的检测;四种原子约束分别是:1)数目约束,给定一个标签,获取它的数目,记为N(L),2)位置约束,记为P(L),3)匹配约束,给定两个标签,判断这两个标签是否是匹配的,匹配意味着它们满足“括号”匹配关系,记为M(L1,L2),4)近邻约束,给定两个标签,与一个整数N,判断它们的位置之差是否等于这个整数N,记为A(L1,L2,N)。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210060556.4/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种机电设备电缆绝缘层剔除设备及方法
- 下一篇:一种电池与电池的加热方法





