CN109446107B - 一种源代码检测方法及装置、电子设备 - Google Patents
一种源代码检测方法及装置、电子设备 Download PDFInfo
- Publication number
- CN109446107B CN109446107B CN201910061348.4A CN201910061348A CN109446107B CN 109446107 B CN109446107 B CN 109446107B CN 201910061348 A CN201910061348 A CN 201910061348A CN 109446107 B CN109446107 B CN 109446107B
- Authority
- CN
- China
- Prior art keywords
- source code
- detection
- testing result
- wrong report
- sample characteristics
- 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
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/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- 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/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种源代码检测方法及装置、电子设备,包括:采集源代码样本,分析确定源代码的多个样本特征,得到包括多个样本特征的样本特征集;根据所述样本特征集,从软件检测工具集中确定检测所述源代码的至少一种检测工具;利用所述至少一种检测工具对所述源代码进行检测,获得相应的至少一组检测结果;对所述至少一组检测结果进行标准化处理,得到标准化检测结果。利用本发明的方法及装置,能够对源代码进行更为合理有效的检测,并得到更为全面准确的检测结果。
Description
技术领域
本发明涉及软件检测技术领域,特别是指一种源代码检测方法及装置、电子设备。
背景技术
现有的源代码漏洞和缺陷检测方法分为静态测试和动态测试两大类。静态测试主要是通过对代码进行静态分析(主要包括词法分析、程序评注、类型推断和模型检测等)来推测程序运行时的表现行为,从而发现代码中可能存在的缺陷。动态检测是指在程序运行过程中注入测试数据,观察程序运行是否正常,输出是否符合程序意图,达到寻找程序漏洞的目的。其中,静态测试与动态测试均包括分别测试不同类别源代码的测试工具,各种测试工具的测试内容与测试角度不同,均存在不同程度的误报和漏报情况,无法全面准确的评估软件源代码的真实情况。
发明内容
有鉴于此,本发明的目的在于提出一种源代码检测方法及装置、电子设备,能够根据源代码的特征,调用合适有效的至少一种检测工具对源代码进行检测,并对各检测结果进行动态验证得到更为全面准确的检测结果。
基于上述目的,本发明提供了一种源代码检测方法,包括:
采集源代码样本,分析确定源代码的多个样本特征,得到包括多个样本特征的样本特征集,所述样本特征包括开发语言、开发平台、编译环境、程序类型、运行环境、应用领域;
根据所述样本特征集,从软件检测工具集中确定检测所述源代码的至少一种检测工具,所述软件检测工具集包括多种静态检测工具和多种动态检测工具;
利用所述至少一种检测工具对所述源代码进行检测,获得相应的至少一组检测结果;
对所述至少一组检测结果进行标准化处理,得到标准化检测结果;
根据标准化检测结果,对源代码进行动态验证,验证结束,得到最终的检测结果;
所述动态验证的方法是:使用WebInspect动态扫描工具对所述源代码进行扫描,得到扫描结果,将所述扫描结果与所述标准化检测结果的相应内容进行对比,若对比结果相似或一致,则所述标准化检测结果中的缺陷通过动态验证。
可选的,确定所述样本特征的方法是:若存在所述源代码的工程文件,则根据所述工程文件的扩展名,确定所述源代码的开发语言、开发平台,根据所述工程文件的内容,确定所述源代码的编译环境,若不存在所述源代码的工程文件,则根据所述源代码文件的扩展名,确定所述源代码的开发语言。
可选的,所述标准化处理的方法是:对比各检测工具的检测结果,去掉重复的测试指标项,合并不重复的测试指标项,去除误报的测试指标项。
可选的,所述去除误报的测试指标项的方法包括:建立误报分析专家库,该误报分析专家库保存了各检测工具及其相应的误报结果标记,以及将各检测工具的检测结果进行对比,若多个检测工具检测出同一个缺陷,则认为误报等级低,反之认为误报等级高,根据误报等级,综合进行筛选。
本发明实施例还提供一种源代码检测装置,包括:
特征分析模块,用于根据源代码样本,分析确定源代码的多个样本特征,得到包括多个样本特征的样本特征集,所述样本特征包括开发语言、开发平台、编译环境、程序类型、运行环境、应用领域;
检测工具确定模块,用于根据所述样本特征集,从软件检测工具集中确定检测所述源代码的至少一种检测工具,所述软件检测工具集包括多种静态检测工具和多种动态检测工具;
源代码检测模块,用于利用所述至少一种检测工具,对所述源代码进行检测,获得相应的至少一组检测结果;
检测结果处理模块,用于对所述至少一组检测结果进行标准化处理,得到标准化检测结果;
检测结果验证模块,用于根据标准化检测结果,对源代码进行动态验证,验证结束,得到最终的检测结果。
可选的,所述特征分析模块确定所述样本特征的方法是:若存在所述源代码的工程文件,则根据所述工程文件的扩展名,确定所述源代码的开发语言、开发平台,根据所述工程文件的内容,确定所述源代码的编译环境,若不存在所述源代码的工程文件,则根据所述源代码文件的扩展名,确定所述源代码的开发语言。
可选的,所述检测结果处理模块进行所述标准化处理的方法是:对比各检测工具的检测结果,去掉重复的测试指标项,合并不重复的测试指标项,去除误报的测试指标项。
可选的,所述去除误报的测试指标项的方法包括:建立误报分析专家库,该误报分析专家库保存了各检测工具及其相应的误报结果标记,以及将各检测工具的检测结果进行对比,若多个检测工具检测出同一个缺陷,则认为误报等级低,反之认为误报等级高,根据误报等级,综合进行筛选。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述源代码检测方法。
从上面所述可以看出,本发明提供的源代码检测方法及装置、电子设备,通过确定源代码的多个样本特征,根据多个样本特征,确定检测源代码的至少一种检测工具,利用各检测工具对源代码进行检测,获得相应的多组检测结果;对各组检测结果进行标准化处理,得到标准化检测结果,并根据标准化检测结果,对源代码进行动态验证,以得到最终的检测结果。利用本发明的方法及装置,能够对源代码进行更为合理有效的检测,并得到更为全面准确的检测结果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例的方法流程示意图;
图2为本发明实施例的装置组成结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。
图1为本发明实施例的方法流程示意图。如图所示,本发明公开的源代码检测方法,包括:
S1:采集源代码样本,分析确定源代码的多个样本特征,得到包括多个样本特征的样本特征集;
根据采集的源代码样本,分析确定若干样本特征,构成样本特征集。其中,样本特征包括开发语言、开发平台、编译环境、程序类型(嵌入式/非嵌入式、桌面端、B/S等)、运行环境、应用领域等。
具体方法是:
1、若存在源代码的工程文件,则根据源代码工程文件的扩展名,确定开发平台和开发语言。
根据不同开发平台的工程文件获取对应开发环境的源代码,通过工程文件名,获取开发平台和开发语言。例如:工程文件的扩展名是csproj,可以确定源代码的开发平台是Visual Studio,开发语言是C#;工程文件的扩展名是ewp,可判定开发平台是IAR,开发语言是C/C++;工程文件的扩展名是sln,可判定开发平台是Visual Studio开发语言是C/C++;工程文件的扩展名是pro,可判定开发平台是QT,开发语言是C/C++;工程文件的扩展名是wpj,可判定开发平台是Tornado,开发语言是C/C++;工程文件的扩展名是project,可判定开发平台是Eclipse,开发语言是Java;工程文件的扩展名是vcproj,可判定开发平台是VisualStudio开发语言是C/C++;工程文件是makefile,可判定开发语言是C/C++。
进一步的,可根据源代码工程文件的文件内容,获取开发平台的版本号。例如,通过csproj工程文件的文件内容确定版本号,确定出源代码是Visual Studio 2012编译环境。
2、若不存在源代码的工程文件,则根据源代码文件的扩展名,判定开发语言。
如果获取的源代码找不到对应的工程文件,通过遍历的方式查找源代码文件,通过源代码文件的扩展名,判定源代码的开发语言。例如:源代码文件的扩展名为java,可以确定开发语言为Java。
S2:根据样本特征集,从软件检测工具集中确定检测源代码的至少一种检测工具;
本发明实施例中,将多种软件检测工具集成在一起形成软件检测工具集,软件检测工具集包括多种静态检测工具和多种动态检测工具。例如,实现静态测试的源代码安全漏洞检测工具(如Checkmarx工具等),用于实现动态测试的源代码性能缺陷检测工具(如Pinpoint工具等)。
根据被测源代码的样本特征集,从软件检测工具集中调度使用最合适有效的检测工具对源代码进行测试。
根据源代码的不同的样本特征,可初步确定出相应的常见的源代码漏洞类型。例如,开发语言为C/C++语言,可能存在的缓冲区溢出的漏洞较多,开发语言为JAVA语言,可能存在的WEB问题漏洞较多,程序类型为B/S架构,可能存在的WEB问题漏洞较多,程序类型为C/S架构,可能存在的数据处理漏洞较多,运行环境为Windows+IIS,可能存在的路径遍历漏洞较多,运行环境为Linux+Apache,可能存在的信息通过错误消息泄露漏洞较多,应用领域为电子政务,可能存在的未限制危险类型的文件的上传的漏洞较多,应用领域为通信和信息服务,可能存在的违反信任边界漏洞较多。可根据识别确定出的源代码的样本特征,确定出源代码预计存在的漏洞类型,根据源代码预计存在的漏洞类型,确定源代码需要检测的检测指标组,快速、准确的从软件检测工具集中确定出用于检测检测指标组中各指标项的至少一种检测工具,利用至少一种检测工具对源代码进行检测。
例如,若源代码的开发语言为Java,则调用用于检测Java语言的静态检测工具(例如Findbugs工具)与动态检测工具(例如Pinpoint工具)任务;若源代码的开发语言为C/C++,则调用用于检测C/C++语言的静态检测工具(例如pclint工具)与动态检测工具(例如MEMWATCH工具)任务;若源代码的开发语言为C#,则调用用于检测C#语言的静态检测工具(例如Parasoft dotTEST工具)与动态检测工具(例如GlowCode工具)任务;若源代码的开发语言为PHP,则调用用于检测PHP语言的静态检测工具(例如checkmarx工具)与动态检测工具(例如fortify工具)任务;若源代码的开发语言为Python,则调用用于检测Python语言的静态检测工具(例如sonar工具)与动态检测工具(例如Purify工具)任务。
若源代码的开发语言为C语言,程序类型为嵌入式软件,则优先调度缺陷测试工具(如Klocwork工具),用于检测内存泄漏、行为问题、代码复杂度、稳定性相关的缺陷,而不调用跨站等安全性检测工具;若源代码的开发语言为Java,程序类型为B/S网站,则优先调度跨站等安全性检测工具(如CheckMarx工具)用于检测网站安全性相关的缺陷。本发明根据源代码的具体样本特征,通过有针对性的检测,可节省检测时间,提高检测效率,得到的软件测试结果更加合理有效。
根据编译环境,从所述软件检测工具集中确定与编译环境相匹配的编译环境引擎,自动将源代码检测任务下发给编译环境引擎进行扫描,做到精准的检测。例如,编译环境为MSBuild,调用Klocwork的MSBuild编译引擎,编译环境为Ant,调用Klocwork的Ant编译引擎。
根据运行环境,扫描运行参数配置是否合理,若运行参数配置不合理,记录检测结果并给出配置建议。例如,基于Tomcat运行环境Web程序的web.xml配置文件,其中设有会话过期参数session-timeout,若会话过期参数设置为-1将导致会话永不过期漏洞,通过扫描该会话过期参数,若发现该参数取值为-1,应记录漏洞检测结果,并给出问题解决建议,对于会话过期参数,建议配置为大于0的具体时间作为会话的过期时间。
根据程序类型,制定与程序类型相匹配的检测指标组,比如WEB类型的检测指标组、客户端程序类型的检测指标组。
根据应用领域,制定多个应用领域的检测指标组,针对性检测如电子政务、通信和信息服务等应用领域的问题。从软件检测工具集中确定用于检测检测指标组中各指标项的至少一种检测工具,利用至少一种检测工具对源代码进行检测。
其中,所述检测指标组是:根据源代码检测三个国家标准(《GB/T 34943-2017 C/C++语言源代码漏洞测试规范》、《GB/T 34944-2017 Java语言源代码漏洞测试规范》及《GB/T34946-2017 C#语言源代码漏洞测试规范》))和三个电子行业标准(《SJ/T 11681-2017C#语言源代码缺陷控制与测试指南》、《SJ/T 11682-2017CC++语言源代码缺陷控制与测试规范》及《SJ/T 11683-2017Java 语言源代码缺陷控制与测试指南》)的测试指标要求,根据不同程序类型、应用领域建立检测标准与检测工具指标的对应关系即检测指标组。
S3:利用确定的至少一种检测工具对源代码进行检测,获得相应的至少一组检测结果;
利用多个不同的检测工具对同一源代码进行检测,分别得到相应的多个不同的检测结果。其中,每种检测工具能够得到若干测试指标项。
S4:对获得的至少一组检测结果进行标准化处理,得到标准化检测结果。
对多个不同的检测结果进行标准化处理,得到标准化检测结果,包括问题类型、问题位置、问题原因、问题解决建议等测试结果项。标准化处理过程包括对比各检测工具的检测结果,去掉重复的测试指标项,合并不重复的测试指标项,去除误报的测试指标项,最终得到包括多个测试结果项的标准化检测结果。
其中,去除误报测试指标项的方法可以是:一方面,建立误报分析专家库,其中保存了各检测工具及其相应的误报结果标记,随着检测结果数据的增加与积累,不断丰富误报分析专家库,后续可依据得到的检测结果查询误报分析专家库,初步得出可能为误报的测试结果。第二方面,将多个检测工具的多个检测结果进行对比,如果多个检测工具检测出同一个缺陷,则认为误报等级低,反之认为误报等级高,后续根据误报等级,综合进行筛选。
S5:根据标准化检测结果,对源代码进行动态验证,验证结束,得到最终的检测结果。
本发明实施例中,得到标准化检测结果之后,进一步根据标准化检测结果对源代码进行动态验证,以验证检测结果的准确性,能够提升缺陷检测的精确性。
所述动态验证的过程是:使用动态扫描工具(如WebInspect)对源代码进行扫描,得到扫描结果,扫描结果包括存在缺陷的文件名称、错误类型等;将得到的扫描结果与标准化检测结果的相应内容(缺陷文件、错误类型)进行对比,判断是否相似或一致,若相似或一致,则标准化检测结果中的缺陷通过动态验证,确认是缺陷。
图2为本发明实施例的装置组成结构示意图。如图所示,本发明实施例公开的源代码检测装置,包括:
特征分析模块,用于根据源代码样本,分析确定源代码的多个样本特征,得到包括多个样本特征的样本特征集;
可选的,根据源代码样本,分析确定若干样本特征,构成样本特征集。其中,样本特征包括开发语言、开发平台、编译环境、程序类型(嵌入式/非嵌入式、桌面端、B/S等)、运行环境、应用领域等。
检测工具确定模块,用于根据样本特征集,确定源代码预计存在的漏洞类型,根据所述漏洞类型,确定源代码所需检测的检测指标组,从软件检测工具集中确定出用于检测所述检测指标组中各指标项的至少一种检测工具;
可选的,将多种软件检测工具集成在一起形成软件检测工具集,软件检测工具集包括多种静态检测工具和多种动态检测工具。根据源代码的多个样本特征,选取出最合适的至少一种检测工具,对源代码进行检测,得到最符合检测源代码的测试指标项。
源代码检测模块,用于利用确定的至少一种检测工具,对源代码进行检测,获得相应的至少一组检测结果;
检测结果处理模块,用于对至少一组检测结果进行标准化处理,得到标准化检测结果;
本发明实施例中,由于使用了不同的检测工具对源代码进行检测,各检测工具的检测项、接口标准、检测结果标准等不同,因此需对各检测工具的检测结果进行标准化处理。标准化处理过程包括对比各检测工具的检测结果,去掉重复的测试指标项,合并不重复的测试指标项,去除误报的测试指标项,最终得到包括多个测试结果项的标准化检测结果。
检测结果验证模块,用于根据标准化检测结果,对源代码进行动态验证,验证结束,得到最终的检测结果。
基于上述目的,本发明实施例还提出了一种执行所述源代码检测方法的装置的一个实施例。所述装置包括:
一个或多个处理器以及存储器。
所述执行所述源代码检测方法的装置还可以包括:输入装置和输出装置。
处理器、存储器、输入装置和输出装置可以通过总线或者其他方式连接。
存储器作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本发明实施例中的所述源代码检测方法对应的程序指令/模块(例如,图2所示的特征分析模块、检测结果处理模块)。处理器通过运行存储在存储器中的非易失性软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例的源代码检测方法。
存储器可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据执行所述源代码检测方法的装置的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至会员用户行为监控装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置可接收输入的数字或字符信息,以及产生与执行所述源代码检测方法的装置的用户设置以及功能控制有关的键信号输入。输出装置可包括显示屏等显示设备。
所述一个或者多个模块存储在所述存储器中,当被所述一个或者多个处理器执行时,执行上述任意方法实施例中的源代码检测方法。所述执行所述源代码检测方法的装置的实施例,其技术效果与前述任意方法实施例相同或者类似。
本发明实施例还提供了一种非暂态计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令可执行上述任意方法实施例中的列表项操作的处理方法。所述非暂态计算机存储介质的实施例,其技术效果与前述任意方法实施例相同或者类似。
最后需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory, RAM)等。所述计算机程序的实施例,其技术效果与前述任意方法实施例相同或者类似。
此外,典型地,本公开所述的装置、设备等可为各种电子终端设备,例如手机、个人数字助理(PDA) 、平板电脑(PAD)、智能电视等,也可以是大型终端设备,如服务器等,因此本公开的保护范围不应限定为某种特定类型的装置、设备。本公开所述的客户端可以是以电子硬件、计算机软件或两者的组合形式应用于上述任意一种电子终端设备中。
此外,根据本公开的方法还可以被实现为由CPU 执行的计算机程序,该计算机程序可以存储在计算机可读存储介质中。在该计算机程序被CPU 执行时,执行本公开的方法中限定的上述功能。
此外,上述方法步骤以及系统单元也可以利用控制器以及用于存储使得控制器实现上述步骤或单元功能的计算机程序的计算机可读存储介质实现。
此外,应该明白的是,本文所述的计算机可读存储介质( 例如,存储器) 可以是易失性存储器或非易失性存储器,或者可以包括易失性存储器和非易失性存储器两者。作为例子而非限制性的,非易失性存储器可以包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦写可编程ROM(EEPROM) 或快闪存储器。易失性存储器可以包括随机存取存储器(RAM),该RAM 可以充当外部高速缓存存储器。作为例子而非限制性的,RAM 可以以多种形式获得,比如同步RAM(DRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据速率SDRAM(DDR SDRAM)、增强SDRAM(ESDRAM)、同步链路DRAM(SLDRAM) 以及直接RambusRAM(DRRAM)。所公开的方面的存储设备意在包括但不限于这些和其它合适类型的存储器。
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。为了清楚地说明硬件和软件的这种可互换性,已经就各种示意性组件、方块、模块、电路和步骤的功能对其进行了一般性的描述。这种功能是被实现为软件还是被实现为硬件取决于具体应用以及施加给整个系统的设计约束。本领域技术人员可以针对每种具体应用以各种方式来实现所述的功能,但是这种实现决定不应被解释为导致脱离本公开的范围。
结合这里的公开所描述的各种示例性逻辑块、模块和电路可以利用被设计成用于执行这里所述功能的下列部件来实现或执行:通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA) 或其它可编程逻辑器件、分立门或晶体管逻辑、分立的硬件组件或者这些部件的任何组合。通用处理器可以是微处理器,但是可替换地,处理器可以是任何传统处理器、控制器、微控制器或状态机。处理器也可以被实现为计算设备的组合,例如,DSP 和微处理器的组合、多个微处理器、一个或多个微处理器结合DSP 核、或任何其它这种配置。
结合这里的公开所描述的方法或算法的步骤可以直接包含在硬件中、由处理器执行的软件模块中或这两者的组合中。软件模块可以驻留在RAM 存储器、快闪存储器、ROM 存储器、EPROM 存储器、EEPROM 存储器、寄存器、硬盘、可移动盘、CD-ROM、或本领域已知的任何其它形式的存储介质中。示例性的存储介质被耦合到处理器,使得处理器能够从该存储介质中读取信息或向该存储介质写入信息。在一个替换方案中,所述存储介质可以与处理器集成在一起。处理器和存储介质可以驻留在ASIC 中。ASIC 可以驻留在用户终端中。在一个替换方案中,处理器和存储介质可以作为分立组件驻留在用户终端中。
在一个或多个示例性设计中,所述功能可以在硬件、软件、固件或其任意组合中实现。如果在软件中实现,则可以将所述功能作为一个或多个指令或代码存储在计算机可读介质上或通过计算机可读介质来传送。计算机可读介质包括计算机存储介质和通信介质,该通信介质包括有助于将计算机程序从一个位置传送到另一个位置的任何介质。存储介质可以是能够被通用或专用计算机访问的任何可用介质。作为例子而非限制性的,该计算机可读介质可以包括RAM、ROM、EEPROM、CD-ROM 或其它光盘存储设备、磁盘存储设备或其它磁性存储设备,或者是可以用于携带或存储形式为指令或数据结构的所需程序代码并且能够被通用或专用计算机或者通用或专用处理器访问的任何其它介质。此外,任何连接都可以适当地称为计算机可读介质。例如,如果使用同轴线缆、光纤线缆、双绞线、数字用户线路(DSL) 或诸如红外线、无线电和微波的无线技术来从网站、服务器或其它远程源发送软件,则上述同轴线缆、光纤线缆、双绞线、DSL 或诸如红外先、无线电和微波的无线技术均包括在介质的定义。如这里所使用的,磁盘和光盘包括压缩盘(CD)、激光盘、光盘、数字多功能盘(DVD)、软盘、蓝光盘,其中磁盘通常磁性地再现数据,而光盘利用激光光学地再现数据。上述内容的组合也应当包括在计算机可读介质的范围内。
公开的示例性实施例,但是应当注公开的示例性实施例,但是应当注意,在不背离权利要求限定的本公开的范围的前提下,可以进行多种改变和修改。根据这里描述的公开实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本公开的元素可以以个体形式描述或要求,但是也可以设想多个,除非明确限制为单数。
应当理解的是,在本文中使用的,除非上下文清楚地支持例外情况,单数形式“一个”(“a”、“an”、“the”)旨在也包括复数形式。还应当理解的是,在本文中使用的“和/或”是指包括一个或者一个以上相关联地列出的项目的任意和所有可能组合。
上述本公开实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本发明实施例的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,并存在如上所述的本发明实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。因此,凡在本发明实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明实施例的保护范围之内。
Claims (10)
1.一种源代码检测方法,其特征在于,包括:
采集源代码样本,分析确定源代码的多个样本特征,得到包括多个样本特征的样本特征集,所述样本特征包括开发语言、开发平台、编译环境、程序类型、运行环境和应用领域;
根据所述样本特征集,确定源代码所需检测的检测指标组,从软件检测工具集中确定出用于检测所述检测指标组中各指标项的至少一种检测工具,所述软件检测工具集包括多种静态检测工具和多种动态检测工具;
利用所述至少一种检测工具对所述源代码进行检测,获得相应的至少一组检测结果;
对所述至少一组检测结果进行标准化处理,得到标准化检测结果;
根据所述标准化检测结果,对所述源代码进行动态验证,得到最终的检测结果;
所述动态验证的方法是:使用WebInspect动态扫描工具对所述源代码进行扫描,得到扫描结果,将所述扫描结果与所述标准化检测结果的相应内容进行对比,若对比结果相似或一致,则所述标准化检测结果中的缺陷通过动态验证。
2.根据权利要求1所述的源代码检测方法,其特征在于,确定所述样本特征的方法是:若存在所述源代码的工程文件,则根据所述工程文件的扩展名,确定所述源代码的开发语言、开发平台,根据所述工程文件的内容,确定所述源代码的编译环境,若不存在所述源代码的工程文件,则根据所述源代码文件的扩展名,确定所述源代码的开发语言。
3.根据权利要求1所述的源代码检测方法,其特征在于,所述标准化处理的方法是:对比各检测工具的检测结果,去掉重复的测试指标项,合并不重复的测试指标项,去除误报的测试指标项。
4.根据权利要求3所述的源代码检测方法,其特征在于,所述去除误报的测试指标项的方法包括:建立误报分析专家库,该误报分析专家库保存了各检测工具及其相应的误报结果标记,以及将各检测工具的检测结果进行对比,若多个检测工具检测出同一个缺陷,则认为误报等级低,反之认为误报等级高,根据误报等级,综合进行筛选。
5.根据权利要求1所述的源代码检测方法,其特征在于,
根据所述编译环境,从所述软件检测工具集中确定与所述编译环境相匹配的编译环境引擎,利用所述编译环境引擎对所述源代码进行检测;
根据运行环境,检测运行参数配置是否合理,若所述运行参数的配置不合理,记录检测结果并提供参数配置建议;
根据程序类型、应用领域,分别确定与所述程序类型、应用领域相匹配的检测指标组,从所述软件检测工具集中确定用于检测所述检测指标组中各指标项的至少一种检测工具,利用所述至少一种检测工具对所述源代码进行检测。
6.一种源代码检测装置,其特征在于,包括:
特征分析模块,用于根据源代码样本,分析确定源代码的多个样本特征,得到包括多个样本特征的样本特征集,所述样本特征包括开发语言、开发平台、编译环境、程序类型、运行环境和应用领域;
检测工具确定模块,用于根据所述样本特征集,确定源代码所需检测的检测指标组,从软件检测工具集中确定出用于检测所述检测指标组中各指标项的至少一种检测工具,所述软件检测工具集包括多种静态检测工具和多种动态检测工具;
源代码检测模块,用于利用所述至少一种检测工具,对所述源代码进行检测,获得相应的至少一组检测结果;
检测结果处理模块,用于对所述至少一组检测结果进行标准化处理,得到标准化检测结果;
检测结果验证模块,用于根据所述标准化检测结果,对所述源代码进行动态验证,得到最终的检测结果。
7.根据权利要求6所述的源代码检测装置,其特征在于,所述特征分析模块确定所述样本特征的方法是:若存在所述源代码的工程文件,则根据所述工程文件的扩展名,确定所述源代码的开发语言、开发平台,根据所述工程文件的内容,确定所述源代码的编译环境,若不存在所述源代码的工程文件,则根据所述源代码文件的扩展名,确定所述源代码的开发语言。
8.根据权利要求6所述的源代码检测装置,其特征在于,所述检测结果处理模块进行所述标准化处理的方法是:对比各检测工具的检测结果,去掉重复的测试指标项,合并不重复的测试指标项,去除误报的测试指标项。
9.根据权利要求8所述的源代码检测装置,其特征在于,所述去除误报的测试指标项的方法包括:建立误报分析专家库,该误报分析专家库保存了各检测工具及其相应的误报结果标记,以及将各检测工具的检测结果进行对比,若多个检测工具检测出同一个缺陷,则认为误报等级低,反之认为误报等级高,根据误报等级,综合进行筛选。
10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至5任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910061348.4A CN109446107B (zh) | 2019-01-23 | 2019-01-23 | 一种源代码检测方法及装置、电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910061348.4A CN109446107B (zh) | 2019-01-23 | 2019-01-23 | 一种源代码检测方法及装置、电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109446107A CN109446107A (zh) | 2019-03-08 |
CN109446107B true CN109446107B (zh) | 2019-07-09 |
Family
ID=65544312
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910061348.4A Active CN109446107B (zh) | 2019-01-23 | 2019-01-23 | 一种源代码检测方法及装置、电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109446107B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110297656B (zh) * | 2019-05-23 | 2024-01-26 | 天航长鹰(江苏)科技有限公司 | 基于配置模型评审代码的方法、装置及计算机设备 |
CN111459817B (zh) * | 2020-03-31 | 2024-02-02 | 中国银行股份有限公司 | 一种程序执行码的检验方法及装置 |
CN112131570B (zh) | 2020-09-03 | 2022-06-24 | 苏州浪潮智能科技有限公司 | 一种基于pca的密码硬编码检测方法、装置及介质 |
CN112346967B (zh) * | 2020-10-20 | 2022-03-01 | 四川长虹电器股份有限公司 | 基于云平台的pc-lint云服务系统、计算机设备及存储介质 |
CN112559330A (zh) * | 2020-12-07 | 2021-03-26 | 深圳开源互联网安全技术有限公司 | 一种开源软件组分检测结果正确性的分析方法 |
CN113127003A (zh) * | 2021-04-26 | 2021-07-16 | 平安普惠企业管理有限公司 | 代码异常告警方法、装置、设备及存储介质 |
CN114116507B (zh) * | 2021-12-02 | 2022-09-23 | 安徽继远检验检测技术有限公司 | 一种基于Devops内生安全的源代码检测系统及方法 |
CN116755991B (zh) * | 2023-08-14 | 2023-11-17 | 北京精琢科技有限公司 | 通用跨平台cpu算力评估方法、电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103425572A (zh) * | 2012-05-24 | 2013-12-04 | 腾讯科技(深圳)有限公司 | 代码分析方法及代码分析系统 |
CN103714002A (zh) * | 2013-12-26 | 2014-04-09 | 北京奇虎科技有限公司 | 基于配置系统的项目测试方法及装置 |
US9043759B1 (en) * | 2011-01-27 | 2015-05-26 | Trimble Navigation Limited | System and method for generating software unit tests simultaneously with API documentation |
CN104778124A (zh) * | 2015-04-13 | 2015-07-15 | 上海新炬网络信息技术有限公司 | 一种软件应用自动化测试方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104679646B (zh) * | 2013-11-29 | 2018-02-06 | 阿里巴巴集团控股有限公司 | 一种用于检测sql代码缺陷的方法和装置 |
-
2019
- 2019-01-23 CN CN201910061348.4A patent/CN109446107B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9043759B1 (en) * | 2011-01-27 | 2015-05-26 | Trimble Navigation Limited | System and method for generating software unit tests simultaneously with API documentation |
CN103425572A (zh) * | 2012-05-24 | 2013-12-04 | 腾讯科技(深圳)有限公司 | 代码分析方法及代码分析系统 |
CN103714002A (zh) * | 2013-12-26 | 2014-04-09 | 北京奇虎科技有限公司 | 基于配置系统的项目测试方法及装置 |
CN104778124A (zh) * | 2015-04-13 | 2015-07-15 | 上海新炬网络信息技术有限公司 | 一种软件应用自动化测试方法 |
Non-Patent Citations (1)
Title |
---|
静态分析与动态监测相结合的Java源代码缺陷检测技术研究与实现;侯婷婷;《中国优秀硕士学位论文全文数据库信息科技辑》;20180415;全文 |
Also Published As
Publication number | Publication date |
---|---|
CN109446107A (zh) | 2019-03-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109446107B (zh) | 一种源代码检测方法及装置、电子设备 | |
US8423960B2 (en) | Evaluation of software based on review history | |
US9703694B2 (en) | Techniques for testing software | |
US20170060734A1 (en) | Method and system for creating functional model of test cases | |
US8954936B2 (en) | Enhancing functional tests coverage using traceability and static analysis | |
US10210076B2 (en) | White box testing | |
US11307975B2 (en) | Machine code analysis for identifying software defects | |
US8312440B2 (en) | Method, computer program product, and hardware product for providing program individuality analysis for source code programs | |
US10761964B2 (en) | Object monitoring in code debugging | |
US9870309B2 (en) | Variable tracking in program debugging | |
CN109144882A (zh) | 一种基于程序不变量的软件故障定位方法及装置 | |
CN102567200A (zh) | 基于函数调用图的并行化安全漏洞检测方法 | |
Chen et al. | Extracting and studying the Logging-Code-Issue-Introducing changes in Java-based large-scale open source software systems | |
US20130290933A1 (en) | Translation verification testing | |
US10681076B1 (en) | Automated security analysis of software libraries | |
CN104536883A (zh) | 一种静态缺陷检测方法及其系统 | |
CN110363004A (zh) | 一种代码漏洞检测方法、装置、介质及设备 | |
CN108710571A (zh) | 一种生成自动化测试代码的方法和装置 | |
Suneja et al. | Towards reliable AI for source code understanding | |
US8510714B2 (en) | Implementing integrated documentation and application testing | |
Wu et al. | They know your weaknesses–do you?: Reintroducing common weakness enumeration | |
US9176846B1 (en) | Validating correctness of expression evaluation within a debugger | |
US20210224478A1 (en) | Capture and search of virtual machine application properties using log analysis techniques | |
CN105653445A (zh) | 一种满足do-178c测试结果的实现方法 | |
CN109582582A (zh) | 一种Web界面的自动化测试方法及系统 |
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 |