CN108804326A - 一种软件代码自动检测方法 - Google Patents
一种软件代码自动检测方法 Download PDFInfo
- Publication number
- CN108804326A CN108804326A CN201810597703.5A CN201810597703A CN108804326A CN 108804326 A CN108804326 A CN 108804326A CN 201810597703 A CN201810597703 A CN 201810597703A CN 108804326 A CN108804326 A CN 108804326A
- Authority
- CN
- China
- Prior art keywords
- defect
- analysis
- program
- automatic testing
- testing method
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种软件代码自动检测方法,包括如下步骤:S1)设置缺陷模式数据库,输入待测程序源代码文件;S2)先采用语法抽象树对待测源代码进行初步分析;S3)接着再对初步分析后的源代码进行:程序变量的值范围分析、跨函数分析、不可达路径分析以及别名分析;S4)为待测程序产生不同的缺陷模式状态机实例并进行缺陷模式匹配,按照状态转换条件计算各个状态机实例的状态变迁,并在检查点报表中记录缺陷IP;S5)对检查点报表中记录的缺陷IP进行确认,剔除误报的缺陷IP。本发明提供的软件代码自动检测方法,能够实现代码规则自动化检查,大大提高效率,并降低误报的几率。
Description
技术领域
本发明涉及一种检测方法,尤其涉及一种软件代码自动检测方法。
背景技术
在Java软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代码缺陷。Java代码分析工具能够在代码构建过程中帮助开发人员快速、有效地定位代码缺陷并及时纠正这些问题,从而极大地提高软件可靠性并节省软件开发和测试成本。
目前的软件代码检测方式存在以下不足:
1、存在误报或漏报的可能性,降低静态分析的有效性;
2、输出结果仍然全部需要人工确认,增加了开发成本。
发明内容
本发明所要解决的技术问题是提供一种软件代码自动检测方法,能够实现代码规则自动化检查,大大提高效率,并降低误报的几率。
本发明为解决上述技术问题而采用的技术方案是提供一种软件代码自动检测方法,包括如下步骤:S1)设置缺陷模式数据库,输入待测程序源代码文件;S2)先采用语法抽象树对待测源代码进行初步分析;S3)接着再对初步分析后的源代码进行:程序变量的值范围分析、跨函数分析、不可达路径分析以及别名分析;S4)为待测程序产生不同的缺陷模式状态机实例并进行缺陷模式匹配,按照状态转换条件计算各个状态机实例的状态变迁,并在检查点报表中记录缺陷IP;S5)对检查点报表中记录的缺陷IP进行确认,剔除误报的缺陷IP。
上述的软件代码自动检测方法,其中,所述步骤S1)中输入的待测源代码是已经编译通过的文件,包括编译时所调用的其它头文件和系统文件,所述步骤S2)通过扫描待测源代码,经过预处理、词法分析和语法分析,产生与程序对应的语法抽象树。
上述的软件代码自动检测方法,其中,所述步骤S3)中程序变量的值范围分析过程如下:通过扩展区间抽象,进行数值区间集运算以及布尔变量、引用变量和数组变量的区间运算,得到各个程序点处变量的取值范围。
上述的软件代码自动检测方法,其中,所述步骤S3)中不可达路径分析过程如下:利用扩展区间运算得到的变量取值范围,判断出一些不可达路径进而减少误报。
上述的软件代码自动检测方法,其中,所述步骤S3)中跨函数分析过程如下:利用函数摘要代替函数调用,首先由过程内部分析的结果得到一个函数摘要;当分析到该函数的调用时,就将该函数摘要作为函数调用的替代进行使用。
上述的软件代码自动检测方法,其中,所述步骤S3)中别名分析过程如下:采用必需的别名,可能的别名和不允许的别名来描述指针之间的关系。
上述的软件代码自动检测方法,其中,所述步骤S4)还包括提供程序源代码文件的完整性、程序度量信息和缺陷分布情况。
上述的软件代码自动检测方法,其中,所述步骤S1)中的缺陷模式数据库中预存共性缺陷模式,所述步骤S4)将待分析代码与已有的共性缺陷模式采用多种不同的缺陷分析检测算法进行模式匹配,并为每种缺陷分析检测算法设定误报率,所述步骤S5)根据程序源代码文件的完整性、程序度量信息和缺陷分布情况,结合每种缺陷分析检测算法预先设定的误报率,剔除误报的缺陷IP。
本发明对比现有技术有如下的有益效果:本发明提供的软件代码自动检测方法,采用自动化驱动的方式及缺陷代码误报比例值来实现代码规则自动化检查,对缺陷模式匹配模式最后得出的结果进行判断,分析其结果是否为误报,最后根据分析结果给出优化方案。
附图说明
图1为本发明软件代码自动检测流程示意图;
图2为本发明软件代码自动检测系统架构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的描述。
图1为本发明软件代码自动检测流程示意图。
请参见图1,本发明提供的软件代码自动检测方法,使用了缺陷模式检测的一般模型,共包括五大模块:输入源代码文件、基本分析、提高精度分析、自动测试及输出结果分析文件,各个模块之间的调用关系和具体功能如图2所示。
1输入
(1)待测程序源文件:输入的待测源代码是已经编译通过的文件,包括编译时所调用的其它头文件和系统文件等。
(2)缺陷模式数据库:缺陷数据库包含各种缺陷模式,采用统一的文件形式来存储(如xml)。
2基本分析
构造抽象语法树(Abstract Syntax Tree,AST):扫描待测源代码,经过预处理、词法分析、语法分析,产生与程序对应的抽象语法树。抽象语法树是后续分析的基础,是源程序的初步抽象。
3提高精度
较高的精确度对于缺陷检测至关重要,提高分析精度是影响检测结果准确率和效率的关键技术。
(1)程序变量的值范围分析:静态分析程序中变量的值范围分析是提高测试精度和效率的重要基础。通过扩展抽象解释理论中的区间抽象,支持数值区间集运算以及布尔变量、引用变量和数组变量等多种数据类型的区间运算,可以得到各个程序点处变量的取值范围。
(2)跨函数分析:利用函数摘要代替函数调用,首先由过程内部分析的结果得到一个函数摘要;当分析到该函数的调用时,就将该函数摘要作为函数调用的替代进行使用。函数摘要可以看作是以函数为一单位,对函数实际语义的抽象。
(3)不可达路径分析:不可达路径指的是控制流上那些组合条件矛盾的路径,这些路径在实际中不可能执行。如果静态分析在一条不可达路径上报告了一个缺陷,那么这是个误报。利用扩展区间运算得到的变量取值范围,能够判断出一些不可达路径进而减少误报。
(4)别名分析:程序中的指针别名分析是一个数据流问题,其目的在于了解可能指向同一个内存地址的指针集。分析算法常采用“必需的别名(must alias)",“可能的别名(may alias)”和“不允许的别名(cannot alias)”来描述指针之间的关系。
4自动测试
本发明采用自动化驱动的方式及缺陷代码误报比例值来实现代码规则自动化检查。
缺陷模式匹配:事先从代码分析经验中收集足够多的共性缺陷模式,将待分析代码与已有的共性缺陷模式进行模式匹配,从而完成软件的安全分析。这种方式的优点是简单方便,但是要求内置足够多缺陷模式,且容易产生误报。
本发明根据测试的配置,该模块为待测程序产生不同的缺陷模式状态机实例并进行缺陷模式匹配,匹配的过程即沿着控制流按照状态转换条件计算各个状态机实例的状态变迁,如果发现在控制流图的某一节点上出现错误状态就向检查点InspectionPoint,IP)报表中输出一条缺陷IP记录。
5结果分析
对于IP报表中的缺陷报告需要进行人工确认,以除去其中的误报,形成最终的缺陷报表。对误报信息有一个权值来作对比,以提供足够的缺陷信息以帮助测试人员进行方便、准确的确认。同时可以给出一些辅助的程序理解信息,包括文件的完整性、程序度量信息、缺陷分布情况等。
6更新缺陷数据库
对检测代码进行及时的更新及优化,降低误报率。
其权值指标量化如下所示:
静态分析的输出是IP集合,对于每个IP通常需要人工判定该IP是否为真正的缺陷,考虑到程序的逻辑复杂性以及测试代价等因素,IP经确认后分为3种情况,分别为:缺陷、误报和不确定。
设P是待测程序集,M是待测缺陷模式的集合,A为缺陷分析检测算法,用IPY(P,M,A),IPN(P,M,A),IPU(P,M,A)分别表示IP确认为缺陷的数目,确认为非缺陷(即误报)的数目,以及不能确定的IP数目,那么IPY(P,M,A)+IPN(P,M,A)+IPU(P,M,A)=IP(P,M,A),即IP(P,M,A)为整个测试程序集的缺陷总数。定义如下量化指标。
定义软件的缺陷密度:
(单位:缺陷/KLOC)
表示算法A检测出程序集P中每KLOC的缺陷数,其中Line(P)表示P的代码总行数。
定义算法A检测P中缺陷M的准确率为:
定义算法A检测P中缺陷M的误报率为:
定义算法A对于检测P中缺陷M的实用性率为:
当其小于0时,则判定其检测结果不具有参考意义。
定义假设P中所含缺陷M的总数目为Defect(P,M),则算法A检测P中缺陷M所得结果漏报率为:
理论上,在M和P给定之后,IP(P,M)是确定的,但是在实践中很难得到IP(P,M)。本发明的步骤S4)将待分析代码与已有的共性缺陷模式采用多种不同的缺陷分析检测算法进行模式匹配,并为每种缺陷分析检测算法设定误报率;所述步骤S5)根据程序源代码文件的完整性、程序度量信息和缺陷分布情况,结合每种缺陷分析检测算法预先设定的误报率,剔除误报的缺陷IP。比如采用某种算法剔除的误报IP已经达到预设误报率,则立即换用另一种算法继续剔除误报的缺陷IP。如果存在某种算法对应为不确定IP,但经另一种算法检测确定为缺陷的情况,需输出为不确定IP由人工进行核查分析,再根据分析结果进行优化更新缺陷数据库。假设不同的测试工具算法为A1,A2,..,An,最后用来近似表示IP(P,M),从而很好的兼顾效率和误报几率。
虽然本发明已以较佳实施例揭示如上,然其并非用以限定本发明,任何本领域技术人员,在不脱离本发明的精神和范围内,当可作些许的修改和完善,因此本发明的保护范围当以权利要求书所界定的为准。
Claims (8)
1.一种软件代码自动检测方法,其特征在于,包括如下步骤:
S1)设置缺陷模式数据库,输入待测程序源代码文件;
S2)先采用语法抽象树对待测源代码进行初步分析;
S3)接着再对初步分析后的源代码进行:程序变量的值范围分析、跨函数分析、不可达路径分析以及别名分析;
S4)为待测程序产生不同的缺陷模式状态机实例并进行缺陷模式匹配,按照状态转换条件计算各个状态机实例的状态变迁,并在检查点报表中记录缺陷IP;
S5)对检查点报表中记录的缺陷IP进行确认,剔除误报的缺陷IP。
2.如权利要求1所述的软件代码自动检测方法,其特征在于,所述步骤S1)中输入的待测源代码是已经编译通过的文件,包括编译时所调用的其它头文件和系统文件,所述步骤S2)通过扫描待测源代码,经过预处理、词法分析和语法分析,产生与程序对应的语法抽象树。
3.如权利要求1所述的软件代码自动检测方法,其特征在于,所述步骤S3)中程序变量的值范围分析过程如下:通过扩展区间抽象,进行数值区间集运算以及布尔变量、引用变量和数组变量的区间运算,得到各个程序点处变量的取值范围。
4.如权利要求3所述的软件代码自动检测方法,其特征在于,所述步骤S3)中不可达路径分析过程如下:利用扩展区间运算得到的变量取值范围,判断出一些不可达路径进而减少误报。
5.如权利要求1所述的软件代码自动检测方法,其特征在于,所述步骤S3)中跨函数分析过程如下:利用函数摘要代替函数调用,首先由过程内部分析的结果得到一个函数摘要;当分析到该函数的调用时,就将该函数摘要作为函数调用的替代进行使用。
6.如权利要求1所述的软件代码自动检测方法,其特征在于,所述步骤S3)中别名分析过程如下:采用必需的别名,可能的别名和不允许的别名来描述指针之间的关系。
7.如权利要求1所述的软件代码自动检测方法,其特征在于,所述步骤S4)还包括提供程序源代码文件的完整性、程序度量信息和缺陷分布情况。
8.如权利要求7所述的软件代码自动检测方法,其特征在于,所述步骤S1)中的缺陷模式数据库中预存共性缺陷模式,所述步骤S4)将待分析代码与已有的共性缺陷模式采用多种不同的缺陷分析检测算法进行模式匹配,并为每种缺陷分析检测算法设定误报率,所述步骤S5)根据程序源代码文件的完整性、程序度量信息和缺陷分布情况,结合每种缺陷分析检测算法预先设定的误报率,剔除误报的缺陷IP。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810597703.5A CN108804326B (zh) | 2018-06-12 | 2018-06-12 | 一种软件代码自动检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810597703.5A CN108804326B (zh) | 2018-06-12 | 2018-06-12 | 一种软件代码自动检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108804326A true CN108804326A (zh) | 2018-11-13 |
CN108804326B CN108804326B (zh) | 2022-05-27 |
Family
ID=64088439
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810597703.5A Active CN108804326B (zh) | 2018-06-12 | 2018-06-12 | 一种软件代码自动检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108804326B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110673843A (zh) * | 2019-09-16 | 2020-01-10 | 上海交通大学 | 一种基于数据的软件模块行为状态机还原方法 |
CN110765003A (zh) * | 2019-09-24 | 2020-02-07 | 贝壳技术有限公司 | 代码检测方法、装置以及设备、存储介质 |
CN111258876A (zh) * | 2018-11-30 | 2020-06-09 | 中国移动通信集团浙江有限公司 | 一种微服务架构下的精确回归测试方法及装置 |
CN111290777A (zh) * | 2020-01-23 | 2020-06-16 | 复旦大学 | 一种面向软件代码单元和代码度量的演化历史切片方法 |
CN112650675A (zh) * | 2020-12-23 | 2021-04-13 | 广州汉全信息科技股份有限公司 | 一种区块链的代码检测方法、装置和计算机设备 |
CN114020634A (zh) * | 2021-11-11 | 2022-02-08 | 中国电子科技集团公司第十五研究所 | 一种软件产品自主可控度的测评方法及系统 |
CN118113301A (zh) * | 2024-04-26 | 2024-05-31 | 中国气象局地球系统数值预报中心 | 一种数值天气预报模式程序的程序代码检查方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101286132A (zh) * | 2008-06-02 | 2008-10-15 | 北京邮电大学 | 一种基于软件缺陷模式的测试方法及系统 |
US20110291985A1 (en) * | 2010-05-28 | 2011-12-01 | Takeshi Wakako | Information terminal, screen component display method, program, and recording medium |
CN104772905A (zh) * | 2015-03-25 | 2015-07-15 | 北京工业大学 | 一种距离引导下的自适应混合支撑结构生成方法 |
-
2018
- 2018-06-12 CN CN201810597703.5A patent/CN108804326B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101286132A (zh) * | 2008-06-02 | 2008-10-15 | 北京邮电大学 | 一种基于软件缺陷模式的测试方法及系统 |
US20110291985A1 (en) * | 2010-05-28 | 2011-12-01 | Takeshi Wakako | Information terminal, screen component display method, program, and recording medium |
CN104772905A (zh) * | 2015-03-25 | 2015-07-15 | 北京工业大学 | 一种距离引导下的自适应混合支撑结构生成方法 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111258876A (zh) * | 2018-11-30 | 2020-06-09 | 中国移动通信集团浙江有限公司 | 一种微服务架构下的精确回归测试方法及装置 |
CN111258876B (zh) * | 2018-11-30 | 2023-08-01 | 中国移动通信集团浙江有限公司 | 一种微服务架构下的精确回归测试方法及装置 |
CN110673843A (zh) * | 2019-09-16 | 2020-01-10 | 上海交通大学 | 一种基于数据的软件模块行为状态机还原方法 |
CN110765003A (zh) * | 2019-09-24 | 2020-02-07 | 贝壳技术有限公司 | 代码检测方法、装置以及设备、存储介质 |
CN111290777A (zh) * | 2020-01-23 | 2020-06-16 | 复旦大学 | 一种面向软件代码单元和代码度量的演化历史切片方法 |
CN111290777B (zh) * | 2020-01-23 | 2021-09-17 | 复旦大学 | 一种面向软件代码单元和代码度量的代码变更序列方法 |
CN112650675A (zh) * | 2020-12-23 | 2021-04-13 | 广州汉全信息科技股份有限公司 | 一种区块链的代码检测方法、装置和计算机设备 |
CN114020634A (zh) * | 2021-11-11 | 2022-02-08 | 中国电子科技集团公司第十五研究所 | 一种软件产品自主可控度的测评方法及系统 |
CN114020634B (zh) * | 2021-11-11 | 2024-05-24 | 中国电子科技集团公司第十五研究所 | 一种软件产品自主可控度的测评方法及系统 |
CN118113301A (zh) * | 2024-04-26 | 2024-05-31 | 中国气象局地球系统数值预报中心 | 一种数值天气预报模式程序的程序代码检查方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN108804326B (zh) | 2022-05-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108804326A (zh) | 一种软件代码自动检测方法 | |
CN101286132B (zh) | 一种基于软件缺陷模式的测试方法及系统 | |
Moller et al. | An empirical investigation of software fault distribution | |
Shen et al. | Efindbugs: Effective error ranking for findbugs | |
CN117951701A (zh) | 用于确定软件代码中的缺陷和漏洞的方法 | |
AU2010350247A1 (en) | Code inspection executing system for performing a code inspection of ABAP source codes | |
CN104794059A (zh) | 一种基于函数调用记录的缺陷定位方法及装置 | |
KR102269286B1 (ko) | 어노테이션 자동 진단 시스템 | |
CN109408385B (zh) | 一种基于缺陷规则和分类反馈的缺陷发现方法 | |
Yang et al. | Vuldigger: A just-in-time and cost-aware tool for digging vulnerability-contributing changes | |
de Oliveira Neto et al. | Full modification coverage through automatic similarity-based test case selection | |
CN115659335A (zh) | 基于混合模糊测试的区块链智能合约漏洞检测方法及装置 | |
CN114446417B (zh) | 多模式约束规则的配置方法、装置、设备和存储介质 | |
Munson et al. | Toward a quantifiable definition of software faults | |
Ngo et al. | Ranking warnings of static analysis tools using representation learning | |
CN106991050A (zh) | 一种静态测试空指针引用缺陷假阳性识别方法 | |
CN108763092B (zh) | 一种基于交叉验证的代码缺陷检测方法及装置 | |
Yan et al. | Revisiting the correlation between alerts and software defects: A case study on myfaces, camel, and cxf | |
CN115759049A (zh) | 文本检测方法、装置、设备、介质和程序产品 | |
CN115756394A (zh) | 借助失效数据的嵌入式软件需求安全性验证方法 | |
Yu et al. | Towards understanding fixes of sonarqube static analysis violations: A large-scale empirical study | |
Ai et al. | What ruined your cake: impacts of code modifications on bug distribution | |
CN113961475B (zh) | 基于规约导向的错误处理缺陷的检测方法及系统 | |
Muske et al. | Classification and ranking of delta static analysis alarms | |
CN111382059A (zh) | 代码质量评价方法及系统 |
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 |