[发明专利]一种性能缺陷自动检测的方法在审
申请号: | 202210060556.4 | 申请日: | 2022-01-19 |
公开(公告)号: | CN114490369A | 公开(公告)日: | 2022-05-13 |
发明(设计)人: | 王豫;熊俊;徐砚听;王林章 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 南京知识律师事务所 32207 | 代理人: | 张苏沛 |
地址: | 210023 江苏*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 性能 缺陷 自动检测 方法 | ||
软件系统在运行时出现性能问题,可能是由于代码中存在性能缺陷,如冗余的操作、变量重复赋值等。本发明提出一种方法,用来自动检测C/C++代码中潜在的性能缺陷,该方法首先基于性能缺陷的代码特征,定义用于表示该性能缺陷的标签,基于性能缺陷发生的语句序列,构建表示性能缺陷行为特征的标签约束集合;第二步,对源代码进行程序分析的构建过程间控制流图,在此基础上引入性能标签,构建带标签的过程间控制流图;第三步,在带标签的过程间控制流图上,通过深度优先遍历,同时收集路径上的标签序列,根据标签序列与标签约束集合的一致性,判定待检测系统是否存在性能缺陷,从而报告相应的性能缺陷。
技术领域
本发明涉及程序的静态分析技术。属于软件工程领域。
背景技术
软件的性能是除软件的功能之外开发者最关注的一个方面,其所造成的缺陷即软件性能缺陷指的是软件在运行过程中内存需求或者运行时间超过客观提供的资源或者不满足用户的需求。即使是非常著名的项目软件,也存在着许多这样的性能缺陷并且造成过严重的损失。然而现有针对于软件性能缺陷的检测或者修复方法还处于早期,相对于功能性缺陷的检测与修复,并不十分成熟。目前针对于软件性能缺陷的检测与修复工作主要在以下几个方面,一是静态分析,它们都是针对于某个特定的性能缺陷模式进行检测或者修复,例如数据结构的重复遍历,特定条件下不必要执行的代码块等等,因此检测广度有限,另一大类就是动态分析的方法,由于动态分析的优点可以准确的跟踪程序的运行情况,而性能缺陷往往与重复的内存读写或者代码的重复执行有关,因此动态分析的检测或者修复性能缺陷的工作比静态分析较多,这类工作大部分都是读取程序在一段时间内访问内存的情况,并检测是否冗余,一些工作显式地构造了值依赖图,来表示程序运行过程中值依赖关系,但是动态分析的消耗过高,即使采取了某些优化方法,例如采样,缩减值依赖图的大小等等,其消耗也远远超过静态分析技术。
由于编程语言的灵活性,开发者的编程基础、编程风格各异,导致程序中容易出现各种模式的性能问题。而目前基于静态分析、动态测试的技术需要针对缺陷模式设计检测方法,导致检测工具的开发难度大,性能缺陷的检测滞后。基于上下文无关文法可达性分析是一个解决思路,它是一种静态分析的技术,将缺陷的模式转化为一种特定的文法,并且将检测的问题转化为图可达性问题。然而,利用上下文无关文法存在几个问题:一是,虽然现在已经有多项式时间的算法解决图可达性问题,但是不同的缺陷拥有不同的文法,现在也没有一个成熟的工具提供统一的接口可以允许用户定义不同的上下文无关文法并检测;其次:不是所有的缺陷都可以用一个上下文无关文法表示,对于代码的性能缺陷而言,其往往与某些代码指令重复执行有关,这些重复执行造成了计算资源的浪费,因此,如果其存在一个文法,这个文法应该需要“记录执行的次数”这个特性,但是,上下文无关文法无法实现一般意义上的“计数”的,因此,对于这类缺陷,就没有存在对应的上下文无关文法。因此,本发明在一些性能缺陷问题的基础上,总结出它们的相同点,并可以用来检测更加广泛的一类缺陷。
发明内容
针对现有技术中存在的技术问题,本发明目的是为了解决这两个挑战。
为了实现上述发明目的,本发明采用的技术方案为:提供一个通用的接口,允许用户自定义构建标签的规则,本发明会自动生成每条指令对应的标签,只要制定在一些特定的指令上生成特定的标签的规则,本发明就能依据该规则生成带标签的过程间控制流图;第二,允许自定义关于构建好的标签的约束条件,这些约束总体分为两个大类:位置与数目约束,当一条由标签组成的序列产生时,那么它所有的标签的位置以及数目都已确定,本发明就能够检测此序列是否符合约束的条件了,本质上,这是从一个大的不精确的上下文无关文法中,通过约束的建立,去删除一些不符合约束的文法序列,从而得到一个符合缺陷的文法,正因为这种机制,使得该框架可以考虑标签之间的数目关系,这是所有的上下文无关文法可达性分析无法实现的。
本发明提出一种性能缺陷自动检测的方法,用来自动检测C/C++代码中潜在的性能缺陷,包括以下步骤:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210060556.4/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种机电设备电缆绝缘层剔除设备及方法
- 下一篇:一种电池与电池的加热方法