CN105320591B - 代码检测方法及装置 - Google Patents
代码检测方法及装置 Download PDFInfo
- Publication number
- CN105320591B CN105320591B CN201410360040.7A CN201410360040A CN105320591B CN 105320591 B CN105320591 B CN 105320591B CN 201410360040 A CN201410360040 A CN 201410360040A CN 105320591 B CN105320591 B CN 105320591B
- Authority
- CN
- China
- Prior art keywords
- code
- rule library
- detected
- library
- module
- 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
Landscapes
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开一种代码检测方法及装置,本发明实施例代码检测工具接收代码检测的触发指令,识别所述触发指令的指令类型;并根据具体的所述指令类型,调用通用规则库和/或扩展规则库对待检测代码进行静态扫描;获取与所述通用规则库和/或扩展规则库匹配的代码,生成包含警告信息的检测报告;推送生成的所述检测报告;提高了代码检测的范围及针对性,避免了代码中可能存在的典型错误,同时也提高了代码运行的稳定性、可维护性及对应代码映射的产品功能的一致性。
Description
技术领域
本发明涉及计算机技术,尤其涉及一种代码检测方法及装置。
背景技术
由于通常需要对编译好的代码进行检查,特别是对于代码变更比较频繁的项目,因此,除了人工检查提交的代码之外,还需要有自动化工具来监控代码的变更,从而扫描并检查代码中所存在的缺陷以及不符合规范的代码。
目前由于代码种类繁多且代码运行的系统平台也多种多样,比如安卓Android系统平台、苹果公司ios系统平台等,且不同的平台对应了不同的机型;比如,Android平台碎片化严重,机型品牌繁多且系统版本各异,在开发Android操作系统对应的应用软件时,同一应用软件的部分功能需要针对不同机型或者操作系统版本等不同方面的适配来保证该应用软件具备较好的兼容性;因此,在开发出上述应用软件对应的代码时,需要对于上述代码进行检测。但目前代码扫描工具所使用的规则库中,仅收集了同一编程语言对应的代码通用问题,无法检测到需要进行机型版本适配的代码以及某一操作系统中的典型代码缺陷和不符合相应代码规范等代码所存在的非通用问题。
发明内容
鉴于以上内容,有必要提供一种代码检测方法及装置,旨在提高代码检测的范围及针对性。
本发明实施例提供一种代码检测方法,包括以下步骤:
接收代码检测的触发指令,识别所述触发指令的指令类型;
在所述指令类型指向通用规则库时,调用所述通用规则库对所待检测代码进行静态扫描;在所述指令类型指向扩展规则库时,调用所述扩展规则库对待检测代码进行静态扫描;在所述指令类型指向通过规则库和扩展规则库时,调用通用规则库和扩展规则库对待检测代码进行静态扫描;
获取与所述通用规则库和/或扩展规则库匹配的代码,生成包含警告信息的检测报告;
推送生成的所述检测报告。
本发明实施例还提供一种代码检测装置,包括:
代码扫描模块,用于接收代码检测的触发指令,识别所述触发指令的指令类型;在所述指令类型指向通用规则库时,调用所述通用规则库对所待检测代码进行静态扫描;在所述指令类型指向扩展规则库时,调用所述扩展规则库对待检测代码进行静态扫描;在所述指令类型指向通过规则库和扩展规则库时,调用通用规则库和扩展规则库对待检测代码进行静态扫描;
报告生成模块,用于获取与所述通用规则库和/或扩展规则库匹配的代码,生成包含警告信息的检测报告;
信息推送模块,用于推送生成的所述检测报告。
本发明实施例代码检测工具接收代码检测的触发指令,识别所述触发指令的指令类型;并根据具体的所述指令类型,调用通用规则库和/或扩展规则库对待检测代码进行静态扫描;获取与所述通用规则库和/或扩展规则库匹配的代码,生成包含警告信息的检测报告;推送生成的所述检测报告;提高了代码检测的范围及针对性,避免了代码中可能存在的典型错误,提高了代码运行的稳定性、可维护性及对应代码映射的产品功能的一致性。
附图说明
图1是本发明代码检测方法第一实施例流程示意图;
图2是根据图1所描述的代码检测方法生成的检测报告一实施例界面示意图;
图3是中图2所示的检测报告对应的警告内容一实施例界面示意图;
图4是本发明代码检测方法中扫描得出的待检测代码对应的项目模块依赖关系一实施例功能模块示意图;
图5是本发明代码检测方法第二实施例流程示意图;
图6是本发明代码检测装置第一实施例功能模块示意图;
图7是本发明代码检测装置第二实施例功能模块示意图;
图8是本发明代码检测装置一实施例硬件架构示意图。
本发明实施例目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
以下结合说明书附图及具体实施例进一步说明本发明的技术方案。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例代码检测方法及装置适用于任意类型的代码检测环境中,所述代码包括但不限于使用Java语言编写的代码,本实施例对编写待检测代码所使用的编程语言不进行限定;另外,所述代码运行的操作系统可以是主流的Android操作系统、ios操作系统以及windows操作系统,也可以是塞班系统、微软操作系统等,本发明实施例对待检测代码运行的操作系统也不进行限定。
请参照图1,图1是本发明代码检测方法第一实施例流程示意图;如图1所示,本发明代码检测方法包括以下步骤:
步骤S11、接收代码检测的触发指令,识别所述触发指令的指令类型;
步骤S12、在所述指令类型指向通用规则库时,调用所述通用规则库对所待检测代码进行静态扫描;在所述指令类型指向扩展规则库时,调用所述扩展规则库对待检测代码进行静态扫描;在所述指令类型指向通过规则库和扩展规则库时,调用通用规则库和扩展规则库对待检测代码进行静态扫描;
接收到代码检测的触发指令时,代码检测工具响应所述触发指令,并识别所述触发指令的指令类型;本发明实施例中,由于在代码检测工具进行代码检测时,在不同的应用场景所使用的检测方式不同,即在不同的应用场景中,选择使用不同的规则库进行代码扫描。
根据识别出的所述触发指令的指令类型,代码检测工具选择不同的规则库对待检测代码进行静态扫描。在所述指令类型指向通用规则库时,调用所述通用规则库对所待检测代码进行静态扫描;在所述指令类型指向扩展规则库时,调用所述扩展规则库对待检测代码进行静态扫描;在所述指令类型指向通过规则库和扩展规则库时,调用预先存储的通用规则库和扩展规则库,对待检测代码进行静态扫描;比如,代码检测工具扫描待检测代码中是否存在与所述通用规则库和/或扩展规则库相匹配的代码。
对代码进行静态扫描可以理解为:在不运行上述代码的方式下,通过词法分析、语法分析、控制流分析等技术对上述代码进行扫描,从而验证扫描的所述代码是否满足针对所述代码所要求的规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。其中,所述词法分析可以理解为:计算机科学中将字符序列转换为单词序列的过程;所述语法分析可以理解为:在所述词法分析的基础上,将单词序列组合成各类语法短语、语句、表达式等。
本发明实施例中,所述通用规则库和扩展规则库可以理解为:根据待检测代码的类型、待检测代码的运行环境以及对该待检测代码的具体要求所设置的或者说所定义的不符合相应要求或规范的规则库;该自定规则库中存储了不符合要求代码,比如典型错误代码、典型代码缺陷、不符合项目设计规范的代码、不符合产品设计规范的代码等。
在本发明一优选实施例中,所述通用规则库可以理解为:静态代码扫描工具映射的通用规则库,比如代码扫描工具FindBugs以及PWD对应的已有规则库等;所述扩展规则库可以理解为:所述待检测代码映射的扩展规则库,比如,针对待检测代码的特点或者用途或者使用环境等,设置所述待检测代码所需的代码规范、设计规范、异常退出问题以及所述待检测代码运行系统典型问题所对应的规则,比如产品设计规范、团队代码规范、项目代码规范以及Android系统典型问题和项目可能出现的crash问题等对应的规则。
步骤S13、获取与所述通用规则库和/或扩展规则库匹配的代码,生成包含警告信息的检测报告;
在代码检测工具对代码进行静态扫描的过程中,如果代码检测工具所扫描到的代码命中所述通用规则库和/或扩展规则库中的规则,则表示该代码与所述通用规则库和/或扩展规则库中的规则相匹配。此时,代码检测工具获取与所述通用规则库和/或扩展规则库相匹配的代码,即与所述通用规则库和/或扩展规则库相匹配的代码均为不符合要求的代码,比如该匹配代码不符合项目设计规范或者不符合产品设计规范或者项目出现的crash问题或者Android系统典型问题等。其中,所述crash问题可以理解为:该程序遇到未知问题时,运行出错并自动退出的情况,或者程序运行崩溃的情况。
当扫描出与所述通用规则库和/或扩展规则库匹配的不符合要求的代码时,代码检测工具生成包含上述匹配代码对应的警告信息的检测报告。若代码检测工具从待检测代码中,没有扫描出与所述通用规则库和扩展规则库相匹配的代码,则表示上述代码不存在与通用规则库和扩展规则库匹配的代码,则代码检测工具根据预先设置的操作,发送检测通过的提示信息或者不执行任何操作,由用户确定是否再次触发对应的操作操作,或者人工进行代码检测。
步骤S14、推送生成的所述检测报告。
代码检测工具生成上述检测报告后,将生成的所述检测报告推送至用户;进而由用户根据所述检测报告进行代码优化。比如,用户根据代码检测工具推送的检测报告,修改代码中的错误、克服代码中存在的缺陷并对代码进行优化重构等,提高代码的性能。
其中,代码检测工具可以通过邮件的形式将所述检测报告发送至用户关联的邮箱地址中,也可以通过其他方式比如提醒消息、警告通知等形式推送所述检测报告,本发明实施例对代码检测工具推送所述检测报告的具体推送时间和推送方式不进行限定。
在本发明一优选实施例中,代码检测工具根据扫描出的与所述通用规则库和/或扩展规则库匹配的代码,生成包含警告信息的检测报告中,生成的所述检测报告包括:按照警告类型进行归类后的警告内容,以及所述警告类型分别对应的警告数量;其中,所述警告内容包括:代码所在位置、代码所在的模块名称、代码行数、代码负责人、警告类型、警告描述以及对应的修复建议。
请参照图2,图2是根据图1所描述的代码检测方法生成的检测报告一实施例界面示意图;如图2所示,代码检测工具检测到与所述通用规则库和/或扩展规则库匹配的代码时,可以生成如图2所示形式的其中一种类型的检测报告。该检测报告总体上先列出代码扫描工具扫描出的警告信息的警告类型以及各警告类型对应的数量。对应于每一种警告类型,该检测报告中对应包含了该警告类型下详细的警告内容,该警告内容包括:代码所在位置、代码所在项目模块的模块名称、该代码的相关负责人等。用户可以通过点击相应的警告类型,查看该警告类型对应的警告内容详情。当代码检测工具接收到查看详情的触发指令时,显示该触发指令指向的警告类型所对应的警告内容,比如针对该代码不符合规则的详细描述及相关修复建议;如图3所示,图3是中图2所示的检测报告对应的警告内容一实施例界面示意图;比如,代码检测工具接收到查看“(P1)TMSecure FB++Warnings”这一警告类型对应地警告内容详情的触发指令时,代码检测工具显示如图3所示的“(P1)TMSecure FB++Warnings”这一警告类型对应的警告内容。
进一步地,在本发明一优选实施例中,代码检测工具调用扩展规则库对待检测代码进行静态扫描,以及调用通用规则库和扩展规则库对待检测代码进行静态扫描的同时,按照所述扩展规则库,扫描待检测代码对应的项目模块之间的依赖关系;比如,代码检测工具基于扩展规则库,根据该代码对应的项目配置的模块名称以及模块调用规范等,扫描待检测代码对应的项目模块之间的依赖关系。扫描出待检测代码对应的项目模块之间的依赖关系后,代码检测工具分析所述项目模块之间的依赖关系,生成上述各项目模块对应的可视化依赖关系图,且在生成包括警告信息的所述检测报告时,将生成的所述可视化依赖关系图输出至所述检测报告中,供用户查看,为用户进行代码优化提供依据,从而避免用户进行不合理的依赖关系的修改,提高软件性能。用户基于代码检测工具输出的所述检测报告,查看代码对应的所述可视化依赖关系图;如图4所示,图4是本发明代码检测方法中扫描得出的待检测代码对应的项目模块依赖关系一实施例功能模块示意图;图4中,上述代码所对应的所述可视化依赖关系图一实施例中,模块一和模块三均将数据存储在模块二中;且模块一从模块二中读取数据,并通过超文本传输协议Http网络发送数据至模块三。所述可视化依赖关系图为用户进行代码重构优化、产品规范制定提供依据,方便用户掌握项目代码架构情况,及时发现代码中可能潜在的问题。
本发明实施例代码检测工具接收代码检测的触发指令,识别所述触发指令的指令类型;并根据具体的所述指令类型,根据通用规则库和/或扩展规则库对待检测代码进行静态扫描;获取与所述通用规则库和/或扩展规则库匹配的代码,生成包含警告信息的检测报告;推送生成的所述检测报告;提高了代码检测的范围及针对性,避免了代码中可能存在的典型错误,提高了代码运行的稳定性、可维护性及对应代码映射的产品功能的一致性;进一步地,由于本发明实施例能够生成代码对应的可视化依赖关系图,为代码优化和代码重构提供了重要依据,避免进行不合理依赖关系的代码优化,提高了代码检测的性能。
本发明还提供了一种如图5所述的代码检测方法第二实施例;本发明实施例与图1所述实施例的区别是,在进行代码检测之前,配置上述实施例所描述的所述扩展规则库。本发明实施例仅对与上述实施例之间的区别进行描述,有关本发明代码检测方法所涉及的其他描述,请参照上述相关实施例的描述,在此不再赘述。
如图5所示,本发明代码检测方法在图1实施例所述“步骤S11、接收代码检测的触发指令,识别所述触发指令的指令类型”之前还包括:
步骤S10、配置所述扩展规则库。
本发明实施例中,代码检测工具响应扩展规则库配置指令,配置所述扩展规则库。代码检测工具配置的所述扩展规则库包括适用于大部分待检测代码的普适性扩展规则库,以及针对某次代码检测或者针对某个项目对应的代码所对应的针对性扩展规则库。比如,针对待检测代码的特点及用户对待检测代码的具体要求,配置针对上述待检测代码的设计规范、代码规范,以及针对上述待检测代码的运行环境比如上述代码运行在Android操作系统上时,配置对应的Android系统典型问题、该待检测代码对应的项目可能出现的crash问题等。
所述扩展规则库还包括:在静态代码扫描工具比如FindBugs、PWD等映射的通用规则库的基础上,直接添加针对本次待检测代码对应的扩展规则库,比如,针对待检测代码的特点或者用途或者使用环境等,设置所述待检测代码所需的代码规范、设计规范、异常退出问题以及所述待检测代码运行系统典型问题所对应的规则,比如产品设计规范、团队代码规范、项目代码规范以及Android系统典型问题和项目可能出现的crash问题等对应的规则。
在本发明一优选实施例中,代码检测工具按照预设周期更新所述扩展规则库,以丰富所述扩展规则库的规则类型;比如,在一次通过静态代码扫描来提高软件的稳定性的代码检测过程中,对于用户检测出的典型错误或者不符合规范的代码,代码检测工具可以将其加入到所述扩展规则库中,从而在后续检测中,能够自动检出上述不符合规则的代码。当然代码检测工具也可以基于用户触发的配置指令,随时更新所述扩展规则库。
本发明实施例通过配置扩展规则库,为代码检测的准确性、广泛性和智能性提供了重要依据;进一步地,由于按照预设周期定时更新或者基于触发的更新指令实时更新所述扩展规则库,丰富了扩展规则库的内容,进而也提高了代码检测效率。
本发明实施例还提供一种如图6所示的代码检测装置;如图6所示,本发明代码检测装置包括:代码扫描模块11、报告生成模块12和信息推送模块13。
代码扫描模块11,用于接收代码检测的触发指令,识别所述触发指令的指令类型;在所述指令类型指向通用规则库时,调用所述通用规则库对所待检测代码进行静态扫描;在所述指令类型指向扩展规则库时,调用所述扩展规则库对待检测代码进行静态扫描;在所述指令类型指向通过规则库和扩展规则库时,调用通用规则库和扩展规则库对待检测代码进行静态扫描;
接收到代码检测的触发指令时,代码扫描模块11响应所述触发指令,并识别所述触发指令的指令类型;本发明实施例中,由于在代码检测装置进行代码检测时,在不同的应用场景所使用的检测方式不同,即在不同的应用场景中,代码扫描模块11选择使用不同的规则库进行代码扫描。
根据代码扫描模块11识别出的所述触发指令的指令类型,代码扫描模块11选择不同的规则库对待检测代码进行静态扫描。在所述指令类型指向通用规则库时,代码扫描模块11调用所述通用规则库对所待检测代码进行静态扫描;在所述指令类型指向扩展规则库时,代码扫描模块11调用所述扩展规则库对待检测代码进行静态扫描;在所述指令类型指向通过规则库和扩展规则库时,代码扫描模块11根据预先存储的通用规则库和扩展规则库,对待检测代码进行静态扫描;比如,代码扫描模块11扫描待检测代码中是否存在与所述通用规则库和/或扩展规则库相匹配的代码。
代码扫描模块11对代码进行静态扫描可以理解为:在不运行上述代码的方式下,通过词法分析、语法分析、控制流分析等技术对上述代码进行扫描,从而验证扫描的所述代码是否满足针对所述代码所要求的规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。其中,所述词法分析可以理解为:计算机科学中将字符序列转换为单词序列的过程;所述语法分析可以理解为:在所述词法分析的基础上,将单词序列组合成各类语法短语、语句、表达式等。
本发明实施例中,所述通用规则库和扩展规则库可以理解为:根据待检测代码的类型、待检测代码的运行环境以及对该待检测代码的具体要求所设置的或者说所定义的不符合相应要求或规范的规则库;该自定规则库中存储了不符合要求代码,比如典型错误代码、典型代码缺陷、不符合项目设计规范的代码、不符合产品设计规范的代码等。
在本发明一优选实施例中,所述通用规则库可以理解为:静态代码扫描工具映射的通用规则库,比如代码扫描工具FindBugs以及PWD对应的已有规则库等;所述扩展规则库可以理解为:所述待检测代码映射的扩展规则库,比如,针对待检测代码的特点或者用途或者使用环境等,设置所述待检测代码所需的代码规范、设计规范、异常退出问题以及所述待检测代码运行系统典型问题所对应的规则,比如产品设计规范、团队代码规范、项目代码规范以及Android系统典型问题和项目可能出现的crash问题等对应的规则。
报告生成模块12,用于获取与所述通用规则库和/或扩展规则库匹配的代码,生成包含警告信息的检测报告;
在代码扫描模块11对代码进行静态扫描的过程中,如果代码扫描模块11所扫描到的代码命中所述通用规则库和/或扩展规则库中的规则,则表示该代码与所述通用规则库和/或扩展规则库中的规则相匹配。此时,报告生成模块12获取与所述通用规则库和/或扩展规则库相匹配的代码,即与所述通用规则库和/或扩展规则库相匹配的代码均为不符合要求的代码,比如该匹配代码不符合项目设计规范或者不符合产品设计规范或者项目出现的crash问题或者Android系统典型问题等。其中,所述crash问题可以理解为:该程序遇到未知问题时,运行出错并自动退出的情况,或者程序运行崩溃的情况。
当代码扫描模块11扫描出与所述通用规则库和/或扩展规则库匹配的不符合要求的代码时,报告生成模块12生成包含上述匹配代码对应的警告信息的检测报告。若代码扫描模块11从待检测代码中,没有扫描出与所述通用规则库和扩展规则库相匹配的代码,则表示上述代码不存在与通用规则库和扩展规则库匹配的代码,则报告生成模块12根据预先设置的操作,发送检测通过的提示信息或者不执行任何操作,由用户确定是否再次触发对应的操作操作,或者人工进行代码检测。
信息推送模块13,用于推送生成的所述检测报告。
报告生成模块12生成上述检测报告后,信息推送模块13将生成的所述检测报告推送至用户;进而由用户根据所述检测报告进行代码优化。比如,用户根据代码检测工具推送的检测报告,修改代码中的错误、克服代码中存在的缺陷并对代码进行优化重构等,提高代码的性能。
其中,信息推送模块13可以通过邮件的形式将所述检测报告发送至用户关联的邮箱地址中,也可以通过其他方式比如提醒消息、警告通知等形式推送所述检测报告,本发明实施例对信息推送模块13推送所述检测报告的具体推送时间和推送方式不进行限定。
在本发明一优选实施例中,报告生成模块12根据代码扫描模块11扫描出的与所述通用规则库和/或扩展规则库匹配的代码,生成包含警告信息的检测报告中,生成的所述检测报告包括:报告生成模块12按照警告类型进行归类后的警告内容,以及所述警告类型分别对应的警告数量;其中,所述警告内容包括:代码所在位置、代码所在的模块名称、代码行数、代码负责人、警告类型、警告描述以及对应的修复建议。
如图2所示,代码扫描模块11检测到与所述通用规则库和/或扩展规则库匹配的代码时,报告生成模块12可以生成如图2所示形式的其中一种类型的检测报告。该检测报告总体上先列出代码扫描工具扫描出的警告信息的警告类型以及各警告类型对应的数量。对应于每一种警告类型,该检测报告中对应包含了该警告类型下详细的警告内容,该警告内容包括:代码所在位置、代码所在项目模块的模块名称、该代码的相关负责人等。用户可以通过点击相应的警告类型,查看该警告类型对应的警告内容详情。当报告生成模块12接收到查看详情的触发指令时,显示该触发指令指向的警告类型所对应的警告内容,比如针对该代码不符合规则的详细描述及相关修复建议;如图3所示,比如,报告生成模块12接收到查看“(P1)TMSecure FB++Warnings”这一警告类型对应地警告内容详情的触发指令时,报告生成模块12显示如图3所示的“(P1)TMSecure FB++Warnings”这一警告类型对应的警告内容。
进一步地,在本发明一优选实施例中,代码扫描模块11调用扩展规则库对待检测代码进行静态扫描,以及调用通用规则库和扩展规则库对待检测代码进行静态扫描的同时,按照所述扩展规则库,扫描待检测代码对应的项目模块之间的依赖关系;比如,代码扫描模块11基于扩展规则库,根据该代码对应的项目配置的模块名称以及模块调用规范等,扫描待检测代码对应的项目模块之间的依赖关系。代码扫描模块11扫描出待检测代码对应的项目模块之间的依赖关系后,报告生成模块12分析所述项目模块之间的依赖关系,生成上述各项目模块对应的可视化依赖关系图,且在生成包括警告信息的所述检测报告时,将生成的所述可视化依赖关系图输出至所述检测报告中,供用户查看,为用户进行代码优化提供依据,从而避免用户进行不合理的依赖关系的修改,提高软件性能。用户基于信息推送模块13输出的所述检测报告,查看代码对应的所述可视化依赖关系图,如图4所示,上述代码所对应的所述可视化依赖关系图一实施例中,模块一和模块三均将数据存储在模块二中;且模块一从模块二中读取数据,并通过Http网络发送数据至模块三。所述可视化依赖关系图为用户进行代码重构优化、产品规范制定提供依据,方便用户掌握项目代码架构情况,及时发现代码中可能潜在的问题。
本发明实施例代码检测工具接收代码检测的触发指令,识别所述触发指令的指令类型;并根据具体的所述指令类型,根据通用规则库和/或扩展规则库对待检测代码进行静态扫描;获取与所述通用规则库和/或扩展规则库匹配的代码,生成包含警告信息的检测报告;推送生成的所述检测报告;提高了代码检测的范围及针对性,避免了代码中可能存在的典型错误,提高了代码运行的稳定性、可维护性及对应代码映射的产品功能的一致性;进一步地,由于本发明实施例能够生成代码对应的可视化依赖关系图,为代码优化和代码重构提供了重要依据,避免进行不合理依赖关系的代码优化,提高了代码检测的性能。
本发明还提供了一种如图7所述的代码检测装置第二实施例;本发明实施例与图6所述实施例的区别是,在进行代码检测之前,配置上述实施例所描述的所述扩展规则库。本发明实施例仅对与上述实施例之间的区别进行描述,有关本发明代码检测装置所涉及的其他描述,请参照上述相关实施例的描述,在此不再赘述。
如图7所示,本发明代码检测装置还包括:
规则配置模块14,用于配置所述扩展规则库。
本发明实施例中,规则配置模块14响应扩展规则库配置指令,配置所述扩展规则库。规则配置模块14配置的所述扩展规则库包括适用于大部分待检测代码的普适性扩展规则库,以及针对某次代码检测或者针对某个项目对应的代码所对应的针对性扩展规则库。比如,针对待检测代码的特点及用户对待检测代码的具体要求,规则配置模块14配置针对上述待检测代码的设计规范、代码规范,以及针对上述待检测代码的运行环境比如上述代码运行在Android操作系统上时,规则配置模块14配置对应的Android系统典型问题、该待检测代码对应的项目可能出现的crash问题等。
所述扩展规则库还包括:在静态代码扫描工具比如FindBugs、PWD等映射的通用规则库的基础上,规则配置模块14直接添加针对本次待检测代码对应的扩展规则库,比如,针对待检测代码的特点或者用途或者使用环境等,规则配置模块14设置所述待检测代码所需的代码规范、设计规范、异常退出问题以及所述待检测代码运行系统典型问题所对应的规则,比如产品设计规范、团队代码规范、项目代码规范以及Android系统典型问题和项目可能出现的crash问题等对应的规则。
在本发明一优选实施例中,规则配置模块14按照预设周期更新所述扩展规则库,以丰富所述扩展规则库的规则类型;比如,在一次通过静态代码扫描来提高软件的稳定性的代码检测过程中,对于用户检测出的典型错误或者不符合规范的代码,规则配置模块14可以将其加入到所述扩展规则库中,从而在后续检测中,能够自动检出上述不符合规则的代码。当然规则配置模块14也可以基于用户触发的配置指令,随时更新所述扩展规则库。
本发明实施例通过配置扩展规则库,为代码检测的准确性、广泛性和智能性提供了重要依据;进一步地,由于按照预设周期定时更新或者基于触发的更新指令实时更新所述扩展规则库,丰富了扩展规则库的内容,进而也提高了代码检测效率。
本发明实施例还提供一种代码检测装置的硬件结构,如图8所示,所述代码检测装置包括:处理器101、存储器102、用户接口103、网络接口104以及通信总线105。通信总线105用于所述代码检测装置中各组成部件之间的通信,用户接口103用于接收用户输入的信息,该用户接口103可以为有线接口及无线接口,例如键盘、鼠标等。网络接口104用于所述代码检测装置与外部进行互相通信,该网络接口104也可以包括有线接口及无线接口。存储器102可以包括一个或一个以上计算机可读存储介质,而且其不但包括内部存储器,还包括外部存储器。该存储器102中存储有操作系统及代码检测应用程序等等。
处理器101用于调用存储器102中的代码检测应用程序,以执行以下操作:
通过用户接口103或者网络接口104接收代码检测的触发指令,识别所述触发指令的指令类型;
在所述指令类型指向通用规则库时,调用所述通用规则库对所待检测代码进行静态扫描;在所述指令类型指向扩展规则库时,调用所述扩展规则库对待检测代码进行静态扫描;在所述指令类型指向通过规则库和扩展规则库时,调用通用规则库和扩展规则库对待检测代码进行静态扫描;
通过通信总线105获取与所述通用规则库和/或扩展规则库匹配的代码,生成包含警告信息的检测报告;
通过用户接口103推送生成的所述检测报告。
本发明实施例通过通用规则库和扩展规则库进行代码检测的执行方式,提高了代码检测的范围及针对性,避免了代码中可能存在的典型错误,提高了代码运行的稳定性、可维护性及对应代码映射的产品功能的一致性。
进一步地,处理器101还用于调用存储器102中的代码检测应用程序,以执行以下操作:
通过通信总线105生成包括警告内容以及分别对应的警告数量的检测报告;
其中,所述警告内容按照警告类型进行归类,且所述警告内容包括:代码所在位置、代码所在的模块名称、代码行数、代码负责人、警告类型、警告描述以及对应的修复建议。
进一步地,处理器101还用于调用存储器102中的代码检测应用程序,以执行以下操作:
按照所述扩展规则库,通过用户接口103或者网络接口104扫描待检测代码对应的项目模块之间的依赖关系。
进一步地,处理器101还用于调用存储器102中的代码检测应用程序,以执行以下操作:
通过通信总线105分析所述项目模块之间的依赖关系,生成所述项目模块对应的可视化依赖关系图,并将所述可视化依赖关系图输出至所述检测报告中。
进一步地,处理器101还用于调用存储器102中的代码检测应用程序,以执行以下操作:
通过用户接口103将生成的所述检测报告通过邮件的方式发送至关联的邮件地址中。
进一步地,处理器101还用于调用存储器102中的代码检测应用程序,以执行以下操作:
通过用户接口103或者网络接口104配置所述扩展规则库。
进一步地,处理器101还用于调用存储器102中的代码检测应用程序,以执行以下操作:
通过用户接口103或者网络接口104按照预设周期更新所述扩展规则库。
由于本发明实施例能够生成代码对应的可视化依赖关系图,为代码优化和代码重构提供了重要依据,避免进行不合理依赖关系的代码优化,提高了代码检测的性能;另外,本发明实施例通过配置扩展规则库,为代码检测的准确性、广泛性和智能性提供了重要依据;进一步地,由于按照预设周期定时更新或者基于触发的更新指令实时更新所述扩展规则库,丰富了扩展规则库的内容,进而也提高了代码检测效率。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述仅为本发明的优选实施例,并非因此限制其专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (14)
1.一种代码检测方法,其特征在于,包括以下步骤:
接收代码检测的触发指令,识别所述触发指令的指令类型;
在所述指令类型指向通用规则库时,调用所述通用规则库对所待检测代码进行静态扫描;在所述指令类型指向扩展规则库时,调用所述扩展规则库对待检测代码进行静态扫描;在所述指令类型指向通过规则库和扩展规则库时,调用通用规则库和扩展规则库对待检测代码进行静态扫描;以使得在不同的应用场景中,选择使用不同的规则库进行代码扫描;
获取与所述通用规则库和/或扩展规则库匹配的代码,生成包含警告信息的检测报告;
推送生成的所述检测报告;
其中,所述扩展规则库包括所述待检测代码所需的代码规范、设计规范、异常退出问题以及所述待检测代码运行系统典型问题所对应的规则。
2.如权利要求1所述的代码检测方法,其特征在于,所述生成包含警告信息的检测报告包括:
生成包括警告内容以及对应的警告数量的检测报告;
其中,所述警告内容按照警告类型进行归类,且所述警告内容包括:代码所在位置、代码所在的模块名称、代码行数、代码负责人、警告类型、警告描述以及对应的修复建议。
3.如权利要求1或2所述的代码检测方法,其特征在于,在所述指令类型指向通用规则库时,所述调用扩展规则库对待检测代码进行静态扫描包括:
扫描待检测代码中是否存在与所述扩展规则库相匹配的代码;
按照所述扩展规则库,扫描待检测代码对应的项目模块之间的依赖关系;所述依赖关系用于指示生成所述项目模块对应的可视化依赖关系图;
在所述指令类型指向通过规则库和扩展规则库时,所述调用通用规则库和扩展规则库对待检测代码进行静态扫描包括:
扫描待检测代码中是否存在与所述通用规则库和所述扩展规则库相匹配的代码;
按照所述扩展规则库,扫描待检测代码对应的项目模块之间的依赖关系;所述依赖关系用于指示生成所述项目模块对应的可视化依赖关系图。
4.如权利要求3所述的代码检测方法,其特征在于,所述生成包含警告信息的检测报告包括:
分析所述项目模块之间的依赖关系,生成所述项目模块对应的可视化依赖关系图,并将所述可视化依赖关系图输出至所述检测报告中。
5.如权利要求1或2所述代码检测方法,其特征在于,所述推送生成的所述检测报告包括:
将生成的所述检测报告通过邮件的方式发送至关联的邮件地址中。
6.如权利要求1或2所述代码检测方法,其特征在于,所述接收代码检测的触发指令,识别所述触发指令的指令类型的步骤之前,还包括:
配置所述扩展规则库。
7.如权利要求6所述的代码检测方法,其特征在于,所述代码检测方法还包括:
按照预设周期更新所述扩展规则库。
8.一种代码检测装置,其特征在于,包括:
代码扫描模块,用于接收代码检测的触发指令,识别所述触发指令的指令类型;在所述指令类型指向通用规则库时,调用所述通用规则库对所待检测代码进行静态扫描;在所述指令类型指向扩展规则库时,调用所述扩展规则库对待检测代码进行静态扫描;在所述指令类型指向通过规则库和扩展规则库时,调用通用规则库和扩展规则库对待检测代码进行静态扫描;以使得在不同的应用场景中,选择使用不同的规则库进行代码扫描;
报告生成模块,用于获取与所述通用规则库和/或扩展规则库匹配的代码,生成包含警告信息的检测报告;
信息推送模块,用于推送生成的所述检测报告;
其中,所述扩展规则库包括所述待检测代码所需的代码规范、设计规范、异常退出问题以及所述待检测代码运行系统典型问题所对应的规则。
9.如权利要求8所述的代码检测装置,其特征在于,所述报告生成模块还用于:
生成包括警告类型以及对应的警告数量的检测报告;
其中,所述警告内容按照警告类型进行归类,且所述警告内容包括:代码所在位置、代码所在的模块名称、代码行数、代码负责人、警告类型、警告描述以及对应的修复建议。
10.如权利要求8或9所述的代码检测装置,其特征在于,在所述指令类型指向通用规则库时,所述代码扫描模块还用于:
扫描待检测代码中是否存在与所述扩展规则库相匹配的代码;
按照所述扩展规则库,扫描待检测代码对应的项目模块之间的依赖关系;所述依赖关系用于指示生成所述项目模块对应的可视化依赖关系图;
在所述指令类型指向通过规则库和扩展规则库时,所述代码扫描模块还用于:
扫描待检测代码中是否存在与所述通用规则库和所述扩展规则库相匹配的代码;
按照所述扩展规则库,扫描待检测代码对应的项目模块之间的依赖关系;所述依赖关系用于指示生成所述项目模块对应的可视化依赖关系图。
11.如权利要求10所述的代码检测装置,其特征在于,所述报告生成模块还用于:
分析所述项目模块之间的依赖关系,生成所述项目模块对应的可视化依赖关系图,并将所述可视化依赖关系图输出至所述检测报告中。
12.如权利要求8或9所述的代码检测装置,其特征在于,所述信息推送模块还用于:
将生成的所述检测报告通过邮件的方式发送至关联的邮件地址中。
13.如权利要求8或9所述的代码检测装置,其特征在于,所述代码检测装置还包括:
规则配置模块,用于配置所述扩展规则库。
14.如权利要求13所述的代码检测装置,其特征在于,所述规则配置模块还用于:
按照预设周期更新所述扩展规则库。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410360040.7A CN105320591B (zh) | 2014-07-25 | 2014-07-25 | 代码检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410360040.7A CN105320591B (zh) | 2014-07-25 | 2014-07-25 | 代码检测方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105320591A CN105320591A (zh) | 2016-02-10 |
CN105320591B true CN105320591B (zh) | 2019-08-27 |
Family
ID=55248011
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410360040.7A Active CN105320591B (zh) | 2014-07-25 | 2014-07-25 | 代码检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105320591B (zh) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106250319B (zh) * | 2016-08-15 | 2018-02-27 | 腾讯科技(深圳)有限公司 | 静态代码扫描结果处理方法和装置 |
CN107783892A (zh) * | 2016-08-25 | 2018-03-09 | 平安科技(深圳)有限公司 | 一种代码分析方法及终端 |
CN106776270A (zh) * | 2016-11-11 | 2017-05-31 | 努比亚技术有限公司 | 一种代码检测方法、装置及终端 |
CN108205493B (zh) * | 2016-12-20 | 2021-07-06 | 腾讯科技(深圳)有限公司 | 一种代码检测方法、终端、服务器及系统 |
CN107784052A (zh) * | 2016-12-28 | 2018-03-09 | 平安科技(深圳)有限公司 | 一种提示语句生成方法和装置 |
CN108459954B (zh) * | 2017-02-22 | 2022-08-26 | 腾讯科技(深圳)有限公司 | 应用程序漏洞检测方法和装置 |
CN107168876A (zh) * | 2017-05-15 | 2017-09-15 | 杭州时趣信息技术有限公司 | 一种静态代码检测的方法及装置 |
CN109857628A (zh) * | 2017-11-30 | 2019-06-07 | 北京高德云图科技有限公司 | 动态ui业务端代码性能检测方法及装置 |
CN108563445B (zh) * | 2018-03-30 | 2021-09-10 | 平安科技(深圳)有限公司 | 应用程序代码检测方法及服务器 |
CN108763057A (zh) * | 2018-04-20 | 2018-11-06 | 北京五八信息技术有限公司 | 一种线程检测方法、装置、设备及计算机可读存储介质 |
CN109194611B (zh) * | 2018-07-24 | 2020-07-24 | 北京邮电大学 | 一种网间互联安全控制策略规则映射方法 |
CN109144852A (zh) * | 2018-07-25 | 2019-01-04 | 百度在线网络技术(北京)有限公司 | 静态代码的扫描方法、装置、计算机设备及存储介质 |
CN110716866B (zh) * | 2019-09-06 | 2024-06-28 | 中国平安财产保险股份有限公司 | 代码质量扫描方法、装置、计算机设备及存储介质 |
CN110851139B (zh) * | 2019-11-07 | 2023-04-18 | 北京字节跳动网络技术有限公司 | 用于检查代码的方法、装置和电子设备 |
CN112256575A (zh) * | 2020-10-22 | 2021-01-22 | 深圳我家云网络科技有限公司 | 一种代码质量管理方法、系统及相关设备 |
CN112947985A (zh) * | 2021-01-29 | 2021-06-11 | 北京航空航天大学 | 一种智能检测及修复代码的方法与系统 |
CN112965695A (zh) * | 2021-03-12 | 2021-06-15 | 中国平安财产保险股份有限公司 | 前端代码接入检测方法、装置、设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101442412A (zh) * | 2008-12-18 | 2009-05-27 | 西安交通大学 | 一种基于软件缺陷及网络攻击关系挖掘的攻击预警方法 |
CN102938040A (zh) * | 2012-09-29 | 2013-02-20 | 中兴通讯股份有限公司 | Android恶意应用程序检测方法、系统及设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4914609B2 (ja) * | 2005-12-28 | 2012-04-11 | 富士通株式会社 | ソースコード問題予測プログラム |
-
2014
- 2014-07-25 CN CN201410360040.7A patent/CN105320591B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101442412A (zh) * | 2008-12-18 | 2009-05-27 | 西安交通大学 | 一种基于软件缺陷及网络攻击关系挖掘的攻击预警方法 |
CN102938040A (zh) * | 2012-09-29 | 2013-02-20 | 中兴通讯股份有限公司 | Android恶意应用程序检测方法、系统及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN105320591A (zh) | 2016-02-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105320591B (zh) | 代码检测方法及装置 | |
CN106951364B (zh) | 测试方法及装置 | |
CN107678935B (zh) | 数据生成方法、终端及计算机可读存储介质 | |
US6898764B2 (en) | Method, system and program product for determining differences between an existing graphical user interface (GUI) mapping file and a current GUI | |
US8291408B1 (en) | Visual programming environment for mobile device applications | |
CN105787364B (zh) | 任务的自动化测试方法、装置及系统 | |
US20150347281A1 (en) | Automation testing using descriptive maps | |
CN108205493A (zh) | 一种代码检测方法、终端、服务器及系统 | |
CN104050417B (zh) | 一种在移动终端对软件状态进行检测的方法及装置 | |
CN107908551A (zh) | 终端软件测试方法、装置、终端和计算机存储介质 | |
CN106294094A (zh) | 游戏服务器的测试方法、客户端、服务器及系统 | |
CN107545181A (zh) | 程序运行方法、终端及计算机可读存储介质 | |
CN108920359B (zh) | 应用程序的测试方法、装置、存储介质和电子装置 | |
CN108062303A (zh) | 垃圾短信的识别方法及装置 | |
CN109117368A (zh) | 一种接口测试方法、电子设备及存储介质 | |
CN111181805B (zh) | 一种基于测试用例的微服务测试挡板生成方法及系统 | |
CN109978565B (zh) | 产品包装数据管理方法、装置、终端设备及可读存储介质 | |
WO2020151301A1 (zh) | 一种基于强化学习的测试脚本生成方法和装置 | |
CN108920370A (zh) | 兼容性问题检测方法、装置及设备 | |
WO2020096665A2 (en) | System error detection | |
CN105100132B (zh) | 终端设备、识别终端设备的方法及系统 | |
CN105117340B (zh) | 用于iOS浏览器应用质量评估的URL检测方法和装置 | |
CN106919431B (zh) | 持续集成中的代码比对方法、设备以及系统 | |
CN109948212A (zh) | 建模规范检查方法及装置 | |
CN109271316A (zh) | 安卓设备及其自动化测试方法、存储器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | 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 |