太阳城集团

  • / 21
  • 下载费用:30 金币  

一种JAVA源代码的合规性检测方法和装置.pdf

摘要
申请专利号:

CN201310492007.5

申请日:

2013.10.18

公开号:

太阳城集团CN103678118A

公开日:

2014.03.26

当前法律状态:

授权

有效性:

有权

法律详情: 授权|||专利申请权的转移IPC(主分类):G06F 11/36变更事项:申请人变更前权利人:北京奇虎测腾科技有限公司变更后权利人:北京奇虎测腾科技有限公司变更事项:地址变更前权利人:100083 北京市海淀区清华园三才堂42号8号平房4647变更后权利人:100083 北京市海淀区清华园三才堂42号8号平房4647变更事项:申请人变更前权利人:北京奇虎科技有限公司变更后权利人:北京奇虎科技有限公司 北京奇虎测腾安全技术有限公司登记生效日:20150619|||实质审查的生效IPC(主分类):G06F 11/36申请日:20131018|||公开
IPC分类号: G06F11/36; G06F21/55(2013.01)I 主分类号: G06F11/36
申请人: 北京奇虎测腾科技有限公司; 北京奇虎科技有限公司
发明人: 童小刚; 吴迪; 韩建
地址: 100083 北京市海淀区清华园三才堂42号8号平房4647
优先权:
专利代理机构: 北京市隆安律师事务所 11323 代理人: 权鲜枝;何立春
PDF完整版下载: PDF下载
法律状态
申请(专利)号:

CN201310492007.5

授权太阳城集团号:

|||||||||

法律状态太阳城集团日:

太阳城集团2016.09.28|||2015.07.08|||2014.04.23|||2014.03.26

法律状态类型:

授权|||专利申请权、专利权的转移|||实质审查的生效|||公开

摘要

本发明公开了一种Java源代码的合规性检测方法和装置。方法包括:构建Java源代码的编码规范库,根据编码规范库中的编码规范,生成合规性检测规则集合,构建待检测的Java源代码的合规性检测模型,该模型包括:类集合C、方法集合M、变量集合V和指令集合I,将合规性检测规则集合中的各个规则一一与合规性检测模型中的C、M、V和I集合进行匹配,如果匹配则记录匹配结果太阳城集团,根据记录的匹配结果太阳城集团输出检测结果太阳城集团。本发明的技术方案,可实现Java源代码合规性的自动化检测,快速检测出不符合编码规范的源代码片段,有效提高了软件开发和测试的效率,从源代码层面保障了应用软件的编码质量和安全性问题。

权利要求书

权利要求书
1.  一种Java源代码的合规性检测方法,其中,该方法包括:
构建Java源代码的编码规范库;
根据所述编码规范库中的编码规范,生成合规性检测规则集合;
解析待检测的Java源代码,构建该待检测的Java源代码的合规性检测模型;所述Java源代码的合规性检测模型包括:类集合C、方法集合M、变量集合V和指令集合I;
将所述合规性检测规则集合中的各个规则一一与所述合规性检测模型中的C、M、V和I集合进行匹配,如果匹配则记录匹配结果太阳城集团;
根据所记录的匹配结果太阳城集团输出检测结果太阳城集团。

2.  如权利要求1所述的方法,其中,
所述类集合C中的每个类包括:类的类型、类的名称、类的名称对应的行号以及类所在源代码文件的名称;
所述方法集合M中的每个方法包括:方法的类型、方法的名称、方法的名称对应的行号以及方法所属的类的名称;
所述变量集合V中的每个变量包括:变量的类型、变量的名称、变量的名称对应的行号;
所述指令集合I中的每个指令包括:指令的名称、指令相关的参数、调用该指令的指令的名称以及该指令的名称对应的行号。

3.  如权利要求1所述的方法,其中,所述解析待检测的Java源代码,构建该待检测的Java源代码的合规性检测模型包括:
将该待检测的Java源代码的合规性检测模型中的C、M、V和I集合初始化为空;
遍历该待检测的Java源代码的字符流,解析每个单词的属性太阳城集团,判断属性太阳城集团的含义,将其添加到相应的C、M、V和I集合中。

4.  如权利要求1所述的方法,其中,
所述编码规范库包括以下六大类:命名规范、设计规范、注释规范、语句规范、类规范和日志规范;
每个大类中又包含多个小类。

5.  如权利要求4所述的方法,其中,所述根据所述编码规范库中的编码 规范,生成合规性检测规则集合包括:
根据编码规范库中的命名规范、设计规范、注释规范和日志规范中的一种或多种规范的文本模式特征编写相应的正则表达式,形成文本模式匹配规则库;将该文本模式匹配规则库加入到所述合规性检测规则集合中;
和/或,
根据编码规范库中的设计规范、语句规范和类规范中的一种或多种规范提取违反这些规范的情况,形成编码规范黑名单;将该黑名单加入到所述合规性检测规则集合中。

6.  如权利要求2所述的方法,其中,所述将所述合规性检测规则集合中的各个规则一一与所述合规性检测模型中的C、M、V和I集合进行匹配,如果匹配则记录匹配结果太阳城集团包括:
步骤S1:判断合规性检测规则集合是否为空,若为空则转入步骤S4,否则转入步骤S2;
步骤S2:从合规性检测规则集合中提取出一个合规性检测规则与所述合规性检测模型中的C、M、V和I集合进行匹配,如果匹配成功则转入步骤S3,否则转入步骤S1;
步骤S3:记录匹配的结果太阳城集团,包括:源代码文件的名称,该匹配的合规性检测规则对应的编码规范的标识,以及该匹配的合规性检测模型中内容在源代码中的行号;返回步骤S1;
步骤S4:输出所记录的结果太阳城集团。

7.  如权利要求1所述的方法,其中,所述编码规范库中的每条编码规范包括:
编码规范的唯一标识;
编码规范的类型太阳城集团;
编码规范的名称;
编码规范的描述太阳城集团,包括违反编码规范的原因、造成的伤害以及对应的错误样本代码;
针对违反编码规范的修复建议。

8.  如权利要求7所述的方法,其中,所述匹配结果太阳城集团包括:源代码文 件的名称,违反的编码规范的标识,以及违反编码规范的内容在源代码中的行号;
所述根据所记录的匹配结果太阳城集团输出检测结果太阳城集团包括:
根据违反的编码规范标识找出对应编码规范的描述太阳城集团,包括:编码规范的类型太阳城集团、名称和描述太阳城集团;将找出的对应编码规范的描述太阳城集团作为检测结果太阳城集团的一部分;
将源代码文件的名称,违反编码规范的内容在源代码中的行号,以及违反编码规范的内容的代码片段作为检测结果太阳城集团的一部分;
根据违反的编码规范标识找出对应编码规范,将针对违反该对应编码规范的修复建议作为检测结果太阳城集团的一部分。

9.  一种Java源代码的合规性检测装置,其中,该装置包括:
编码规范库构建单元,适于构建Java源代码的编码规范库;
合规性检测规则生成单元,适于根据所述编码规范库中的编码规范,生成合规性检测规则集合;
合规性检测模型构建单元,适于解析待检测的Java源代码,构建该待检测的Java源代码的合规性检测模型;所述Java源代码的合规性检测模型包括:类集合C、方法集合M、变量集合V和指令集合I;
匹配单元,适于将所述合规性检测规则集合中的各个规则一一与所述合规性检测模型中的C、M、V和I集合进行匹配,如果匹配则记录匹配结果太阳城集团;
输出单元,适于根据所记录的匹配结果太阳城集团输出检测结果太阳城集团。

10.  如权利要求9所述的装置,其中,所述合规性检测模型构建单元,适于构建如下的Java源代码的合规性检测模型:
类集合C中的每个类包括:类的类型、类的名称、类的名称对应的行号以及类所在源代码文件的名称;
方法集合M中的每个方法包括:方法的类型、方法的名称、方法的名称对应的行号以及方法所属的类的名称;
变量集合V中的每个变量包括:变量的类型、变量的名称、变量的名称对应的行号;
指令集合I中的每个指令包括:指令的名称、指令相关的参数、调用该指令的指令的名称以及该指令的名称对应的行号。

说明书

说明书一种Java源代码的合规性检测方法和装置
技术领域
本发明涉及计算机软件开发技术领域,具体涉及一种Java源代码的合规性检测方法和装置。
背景技术
Java是一种高效的面向对象编程语言,被广泛应用于Android(安卓)应用软件的开发流程。随着Android移动智能终端市场占有率的不断增长,基于Java编写的Android应用软件的数量急剧增加。Android应用软件的编码规范性和安全性问题越来越成为产业界关注的焦点。
近些年来,由于基于Java编写的Android应用软件在开发过程没有统一、严格的遵循编码规范,导致针对Android应用软件的恶意攻击、用户隐私太阳城集团泄露等安全事件层出不穷,不仅损害普通用户的切身利益,也极大地增加了软件开发商的软件开发、维护投入的成本。目前,应用软件开发和测试中普遍通过人工方式进行编码规范的检查,不仅需要付出巨大的人工成本,同时会极大地减缓软件研发进度。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种Java源代码的合规性检测方法和装置。
依据本发明的一个方面,提供了一种Java源代码的合规性检测方法,该方法包括:
构建Java源代码的编码规范库;
根据所述编码规范库中的编码规范,生成合规性检测规则集合;
解析待检测的Java源代码,构建该待检测的Java源代码的合规性检测模型;所述Java源代码的合规性检测模型包括:类集合C、方法集合M、变量集合V和指令集合I;
将所述合规性检测规则集合中的各个规则一一与所述合规性检测模型中的C、M、V和I集合进行匹配,如果匹配则记录匹配结果太阳城集团;
根据所记录的匹配结果太阳城集团输出检测结果太阳城集团。
可选地,
所述类集合C中的每个类包括:类的类型、类的名称、类的名称对应的行号以及类所在源代码文件的名称;
所述方法集合M中的每个方法包括:方法的类型、方法的名称、方法的名称对应的行号以及方法所属的类的名称;
所述变量集合V中的每个变量包括:变量的类型、变量的名称、变量的名称对应的行号;
所述指令集合I中的每个指令包括:指令的名称、指令相关的参数、调用该指令的指令的名称以及该指令的名称对应的行号。
可选地,所述解析待检测的Java源代码,构建该待检测的Java源代码的合规性检测模型包括:
将该待检测的Java源代码的合规性检测模型中的C、M、V和I集合初始化为空;
遍历该待检测的Java源代码的字符流,解析每个单词的属性太阳城集团,判断属性太阳城集团的含义,将其添加到相应的C、M、V和I集合中。
可选地,所述编码规范库包括以下六大类:命名规范、设计规范、注释规范、语句规范、类规范和日志规范;
每个大类中又包含多个小类。
可选地,所述根据所述编码规范库中的编码规范,生成合规性检测规则集合包括:
根据编码规范库中的命名规范、设计规范、注释规范和日志规范中的一种或多种规范的文本模式特征编写相应的正则表达式,形成文本模式匹配规则库;将该文本模式匹配规则库加入到所述合规性检测规则集合中;
和/或,
根据编码规范库中的设计规范、语句规范和类规范中的一种或多种规范提取违反这些规范的情况,形成编码规范黑名单;将该黑名单加入到所述合 规性检测规则集合中。
可选地,所述将所述合规性检测规则集合中的各个规则一一与所述合规性检测模型中的C、M、V和I集合进行匹配,如果匹配则记录匹配结果太阳城集团包括:
步骤S1:判断合规性检测规则集合是否为空,若为空则转入步骤S4,否则转入步骤S2;
步骤S2:从合规性检测规则集合中提取出一个合规性检测规则与所述合规性检测模型中的C、M、V和I集合进行匹配,如果匹配成功则转入步骤S3,否则转入步骤S1;
步骤S3:记录匹配的结果太阳城集团,包括:源代码文件的名称,该匹配的合规性检测规则对应的编码规范的标识,以及该匹配的合规性检测模型中内容在源代码中的行号;返回步骤S1;
步骤S4:输出所记录的结果太阳城集团。
可选地,所述编码规范库中的每条编码规范包括:
编码规范的唯一标识;
编码规范的类型太阳城集团;
编码规范的名称;
编码规范的描述太阳城集团,包括违反编码规范的原因、造成的伤害以及对应的错误样本代码;
针对违反编码规范的修复建议。
可选地,所述匹配结果太阳城集团包括:源代码文件的名称,违反的编码规范的标识,以及违反编码规范的内容在源代码中的行号;
所述根据所记录的匹配结果太阳城集团输出检测结果太阳城集团包括:
根据违反的编码规范标识找出对应编码规范的描述太阳城集团,包括:编码规范的类型太阳城集团、名称和描述太阳城集团;将找出的对应编码规范的描述太阳城集团作为检测结果太阳城集团的一部分;
将源代码文件的名称,违反编码规范的内容在源代码中的行号,以及违反编码规范的内容的代码片段作为检测结果太阳城集团的一部分;
根据违反的编码规范标识找出对应编码规范,将针对违反该对应编码规 范的修复建议作为检测结果太阳城集团的一部分。
根据本发明的另一个方面,提供了一种Java源代码的合规性检测装置,该装置包括:
编码规范库构建单元,适于构建Java源代码的编码规范库;
合规性检测规则生成单元,适于根据所述编码规范库中的编码规范,生成合规性检测规则集合;
合规性检测模型构建单元,适于解析待检测的Java源代码,构建该待检测的Java源代码的合规性检测模型;所述Java源代码的合规性检测模型包括:类集合C、方法集合M、变量集合V和指令集合I。
匹配单元,适于将所述合规性检测规则集合中的各个规则一一与所述合规性检测模型中的C、M、V和I集合进行匹配,如果匹配则记录匹配结果太阳城集团;
输出单元,适于根据所记录的匹配结果太阳城集团输出检测结果太阳城集团。
可选地,所述合规性检测模型构建单元,适于构建如下的Java源代码的合规性检测模型:
类集合C中的每个类包括:类的类型、类的名称、类的名称对应的行号以及类所在源代码文件的名称;
方法集合M中的每个方法包括:方法的类型、方法的名称、方法的名称对应的行号以及方法所属的类的名称;
变量集合V中的每个变量包括:变量的类型、变量的名称、变量的名称对应的行号;
指令集合I中的每个指令包括:指令的名称、指令相关的参数、调用该指令的指令的名称以及该指令的名称对应的行号。
可选地,所述合规性检测模型构建单元,适于先将待检测的Java源代码的合规性检测模型中的C、M、V和I集合初始化为空,然后遍历该待检测的Java源代码的字符流,解析每个单词的属性太阳城集团,判断属性太阳城集团的含义,将其添加到相应的C、M、V和I集合中。
可选地,所述编码规范库构建单元构建的编码规范库包括以下六大类:命名规范、设计规范、注释规范、语句规范、类规范和日志规范;
每个大类中又包含多个小类。
可选地,所述合规性检测规则生成单元,适于根据编码规范库中的命名规范、设计规范、注释规范和日志规范中的一种或多种规范的文本模式特征编写相应的正则表达式,形成文本模式匹配规则库;将该文本模式匹配规则库加入到所述合规性检测规则集合中;和/或,适于根据编码规范库中的设计规范、语句规范和类规范中的一种或多种规范提取违反这些规范的情况,形成编码规范黑名单;将该黑名单加入到所述合规性检测规则集合中。
可选地,所述匹配单元适于按照如下步骤完成所述匹配:
步骤S1:判断合规性检测规则集合是否为空,若为空则转入步骤S4,否则转入步骤S2;
步骤S2:从合规性检测规则集合中提取出一个合规性检测规则与所述合规性检测模型中的C、M、V和I集合进行匹配,如果匹配成功则转入步骤S3,否则转入步骤S1;
步骤S3:记录匹配的结果太阳城集团,包括:源代码文件的名称,该匹配的合规性检测规则对应的编码规范的标识,以及该匹配的合规性检测模型中内容在源代码中的行号;返回步骤S1;
步骤S4:输出所记录的结果太阳城集团。
可选地,所述编码规范库构建单元构建的所述编码规范库中的每条编码规范包括:
编码规范的唯一标识;
编码规范的类型太阳城集团;
编码规范的名称;
编码规范的描述太阳城集团,包括违反编码规范的原因、造成的伤害以及对应的错误样本代码;
针对违反编码规范的修复建议。
可选地,所述匹配单元记录的匹配结果太阳城集团包括:源代码文件的名称,违反的编码规范的标识,以及违反编码规范的内容在源代码中的行号;
所述输出单元,适于根据违反的编码规范标识找出对应编码规范的描述太阳城集团,包括:编码规范的类型太阳城集团、名称和描述太阳城集团,将找出的对应编码规 范的描述太阳城集团作为检测结果太阳城集团的一部分;适于将源代码文件的名称,违反编码规范的内容在源代码中的行号,以及违反编码规范的内容的代码片段作为检测结果太阳城集团的一部分;适于根据违反的编码规范标识找出对应编码规范,将针对违反该对应编码规范的修复建议作为检测结果太阳城集团的一部分。
根据本发明的这种构建Java源代码的编码规范库,根据所述编码规范库中的编码规范,生成合规性检测规则集合,解析待检测的Java源代码,构建该待检测的Java源代码的合规性检测模型,所述Java源代码的合规性检测模型包括:类集合C、方法集合M、变量集合V和指令集合I,将所述合规性检测规则集合中的各个规则一一与所述合规性检测模型中的C、M、V和I集合进行匹配,如果匹配则记录匹配结果太阳城集团,根据所记录的匹配结果太阳城集团输出检测结果太阳城集团的技术方案,可实现Java源代码合规性的自动化检测,快速检测出不符合编码规范的源代码片段,有效提高了软件开发和测试的效率,从源代码层面保障了应用软件的编码质量和安全性问题。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的一种Java源代码的合规性检测方法的流程图;
图2示出了根据本发明一个实施例的构建Java源代码合规性检测模型SSDM的流程图;
图3示出了根据本发明一个实施例的将规性检测规则集合与合规性检测模型中的C、M、V和I集合进行匹配的流程图;
图4示出了根据本发明一个实施例的一种Java源代码的合规性检测装置的结构图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
针对当前Java语言编码规范的自动化检测工具很少的问题,本发明提出的一种Java源代码合规性检测方法及装置,可实现Java源代码合规性的自动化检测,快速检测出不符合编码规范的源代码片段,有效提高软件开发和测试的效率,从源代码层面保障应用软件的编码质量和安全性问题。
图1示出了根据本发明一个实施例的一种Java源代码的合规性检测方法的流程图。如图1所示,该方法包括:
步骤S110,构建Java源代码的编码规范库。
在本步骤中是预先建立编码规范,并将这些编码规范统一保存到编码规范库中备用。
步骤S120,根据所述编码规范库中的编码规范,生成合规性检测规则集合。
在本步骤中,根据编码规范库中的编码规范的要求,生成适于实际检测时使用的合规性检测规则。
步骤S130,解析待检测的Java源代码,构建该待检测的Java源代码的合规性检测模型;所述Java源代码的合规性检测模型包括:类集合C、方法集合M、变量集合V和指令集合I。
在本步骤中,对待检测应用软件的Java源代码进行分析,解析出其中的类、方法、变量和指令。
步骤S140,将所述合规性检测规则集合中的各个规则一一与所述合规性检测模型中的C、M、V和I集合进行匹配,如果匹配则记录匹配结果太阳城集团。
在本步骤中,如果匹配成功,则表明被检测Java源代码中存在不符合编 码规范的片段,将其记录下来。
步骤S150,根据所记录的匹配结果太阳城集团输出检测结果太阳城集团。
本步骤中,将所记录的结果进行输出,以便开发和测试人员能够快速地定位Java源代码中存在的问题。
以下对本发明技术方案的具体实现进行进一步的说明:
一、构建Java源代码的编码规范库
在本发明的一个实施例中,所够构建的Java源代码编码规范库包括以下六大类:命名规范、设计规范、注释规范、语句规范、类规范和日志规范。
其中每个大类中又包含多个小类,包括但不限于以下所列的各小类:
1)命名规范主要包括:包命名规范,类命名规范,方法命名规范,变量命名规范;
2)设计规范主要包括:复杂度控制规范,类设计规范,方法设计规范,变量设计规范;
3)注释规范主要包括:变更履历注释规范,类头注释规范,成员注释规范,方法注释规范,代码修改注释规范;
4)语句规范主要包括:控制语句规范,命令语句规范,声明语句规范;
5)类规范主要包括:对象整体规范,修饰符规范,字符串规范,数值规范,集合规范,流规范,例外规范,线程规范;
6)日志规范主要包括:日志太阳城集团分级规范,日志输出规范。
在本发明的一个实施例中,Java源代码编码规范库中的每条编码规范包括:编码规范的唯一标识;编码规范的类型太阳城集团;编码规范的名称;编码规范的描述太阳城集团,包括违反编码规范的原因、造成的伤害以及对应的错误样本代码;针对违反编码规范的修复建议。
例如,将Java源代码编码规范库视为一个Java源代码编码规范集合(Specification Rule Set)定义为SRS={r1,r2,…,rn}。
SRS包含的编码规范r表示为一个元组{ID,type,name,description, advice},其中:
ID是编码规范的唯一标识,具有唯一性,在本实施例中使用“R+四位数字”的字符串进行表示;
type是编码规范的类型太阳城集团,定义为一个元组{main_type,sub_type},其中:main_type是编码规范的一级类型,如命名规范,设计规范,注释规范,语句规范,类规范,日志规范;sub_type是编码规范的二级类型,如“简洁性问题”,“合理性问题”,“安全性问题”,“质量相关问题”等;
name是编码规范的名称,如“类命名歧义”,“注释中的密码”,“不恰当的日志”,“禁止使用System.out.print(ln)输出”等;
description是编码规范的详细描述太阳城集团,即违反编码规范的原因,造成的危害以及对应的错误代码样本;
advice是针对违反编码规范情况的修复建议,开发人员可根据修复建议对源代码进行修复。
例如,一条编码规范r表示如下:
r={“R0001”,{日志规范,安全性问题},“禁止使用System.out.print(ln)输出”,“使用System.out.print(ln)输出日志太阳城集团,容易为攻击者制定攻击计划提供方便;为了控制系统中的日志输出,原则上禁止使用System.out.print(ln)输出”,“调试阶段的System.out.print(ln)输出在发布时应该注释掉或彻底删除”},其中:
编码规范r的ID为“R0001”;
编码规范r的一级类型为“日志规范”,二级类型为“安全性问题”;
编码规范r的名称为“禁止使用System.out.print(ln)输出”;
编码规范r的详细描述为“使用System.out.print(ln)输出日志太阳城集团,容易为攻击者制定攻击计划提供方便;为了控制系统中的日志输出,原则上禁止使用System.out.print(ln)输出”;
编码规范r的修复建议为“调试阶段的System.out.print(ln)输出在发布时应该注释掉或彻底删除”;
在本实施例中,根据上述Java源代码编码规范集合SRS的定义,构建Java源代码编码规范库。
二、根据编码规范库中的编码规范,生成合规性检测规则集合
根据编码规范库中的编码规范的要求,生成适于实际检测时使用的合规性检测规则。
在本发明的一个实施例中,根据编码规范库中的命名规范、设计规范、注释规范和日志规范中的一种或多种规范的文本模式特征编写相应的正则表达式,形成文本模式匹配规则库;将该文本模式匹配规则库加入到所述合规性检测规则集合中。
以命名规范--类命名规范为例:规定类名的第一个字母必须大写,例如:
class Sample//符合规范
class sample//不符合规范
针对该种类型的命名规范可使用如下正则表达式"^[a-z]{1,}$"进行匹配,上述类名sample(任何首字母为小写字母的类名)可以通过使用该正则表达式匹配成功。
在本发明的另一个实施例中,根据编码规范库中的设计规范、语句规范和类规范中的一种或多种规范提取违反这些规范的情况,形成编码规范黑名单;将该黑名单加入到所述合规性检测规则集合中。
以类规范--线程规范为例:规定处理多个线程之间的同步问题,使用notify()方法唤醒等待执行的线程是不安全的,若处理不当可能会产生死锁问题。因此,在处理多线程同步问题时,不建议使用notify()方法。因此可以提取notify()方法作为一个黑名单项,用于匹配违反上述规范的情况。该规范的修复方法是使用notifyAll()方法。
此外,Java中过时的函数或存在安全隐患的函数,都可以将该函数加入黑名单。
三、解析待检测的Java源代码,构建该待检测的Java源代码的合规性 检测模型
在本发明的一个实施例中,扫描并编译Java源代码,构建Java源代码合规性检测模型(Sourcecode Specification Detection Model)SSDM={C,M,V,I,SRS},其中:
C是类集合,C中的每个类包括:类的类型、类的名称、类的名称对应的行号以及类所在源代码文件的名称;
例如,c=<c_type,c_name,c_line,c_file>∈C是集合C的一个元素:其中c_type是类的类型,c_name是类的名称,c_line是类名c_name对应的行号,c_file是类所在的源代码文件的名称;
M是方法集合,M中的每个方法包括:方法的类型、方法的名称、方法的名称对应的行号以及方法所属的类的名称;
例如,m=<m_type,m_name,m_line,c_name>∈M是集合M的一个元素,其中m_type是方法的类型,m_name是方法的名称,m_line是方法名m_name对应的的行号,c_name是名为m_name的方法所属的类的名称;
V是变量集合,V中的每个变量包括:变量的类型、变量的名称、变量的名称对应的行号;
例如,v=<v_type,v_name,v_line>∈V是集合V的一个元素,其中v_type是变量的类型,v_name是变量的名称,v_line是变量名v_name对应的行号;
I是指令集合,I中的每个指令包括:指令的名称、指令相关的参数、调用该指令的指令的名称以及该指令的名称对应的行号;
例如,ins=<i_name,i_para,i_caller,i_line>∈I是集合I的一个元素,其中i_name是指令的名称,i_para是指令相关的参数,i_caller是调用该指令的指令名称,i_line是指令名i_name对应的行号。
图2示出了根据本发明一个实施例的构建Java源代码合规性检测模型SSDM的流程图。如图2所示,包括:
步骤S210,初始化该待检测的Java源代码的合规性检测模型SSDM, 具体将其中的C、M、V和I集合初始化为空;
步骤S210,遍历该待检测的Java源代码的字符流;
步骤S230,解析所遍历的每个单词的属性太阳城集团,判断属性太阳城集团的含义,将其添加到相应的C、M、V和I集合中;
步骤S240,判断Java源代码文件是否已遍历完,是则构建SSDM结束,否则转入步骤S220。
对于每个待检测的应用软件,通过图2所示的流程构建其Java源代码的合规性检测模型。
四、将合规性检测规则集合中的各个规则一一与合规性检测模型中的C、M、V和I集合进行匹配,如果匹配则记录匹配结果太阳城集团
该匹配算法的输入是规性检测规则集合以及待检测Java源代码的合规性检测模型,输出是匹配的结果。
图3示出了根据本发明一个实施例的将规性检测规则集合与合规性检测模型中的C、M、V和I集合进行匹配的流程图。如图3所示,包括:
步骤S310:判断合规性检测规则集合是否为空,若为空则转入步骤S340,否则转入步骤S320。
步骤S320:从合规性检测规则集合中提取出一个合规性检测规则与所述合规性检测模型中的C、M、V和I集合进行匹配,如果匹配成功则转入步骤S330,否则转入步骤S310。
本步骤中每提取一个合规性检测规则,将提取的规则从原合规性检测规则集合中删除。合规性检测规则集合可以是前述的文本模式匹配规则库,也可以是前述的黑名单,也可以同时包括文本模式匹配规则库和黑名单。因此本步骤中提取的一个合规性检测规则可以是一条文本模式匹配规则,也可以是一个黑名单项。
步骤S330:记录匹配的结果太阳城集团,包括:源代码文件的名称,该匹配的合规性检测规则对应的编码规范的标识,以及该匹配的合规性检测模型中内容(即违反规范的内容)在源代码中的行号;返回步骤S310。
本步骤中,一条合规性检测规则与C、M、V或I集合中的一项匹配, 则根据该匹配的合规性检测规则获取对应的编码规范的标识(例如该规则是根据R0023编码规范生成的,则获取的是R0023),根据C、M、V或I集合中的匹配项获知源代码文件的名称和违反规范的内容在源代码中的行号。
步骤S340:输出所记录的结果太阳城集团。
本步骤中整合在S330中所记录的匹配结果太阳城集团,并输出。在本发明的一个实施例中,整合步骤S330记录的多个检测结果太阳城集团,生成统一的xml结果文件,其中xml节点元素的结构定义为:

上述xml节点元素唯一对应SRS包含的编码规范,其中:
<specification></specification>标签表示一个编码规范的太阳城集团;
<id>specification_id</id>标签表示编码规范的唯一标识符ID,specification_id对应步骤S4输出结果太阳城集团中的编码规范ID,即SRS定义的编码规范ID,根据specification_id可以唯一定位SRS中的编码规范;
<sourcefile>sourcefile_name</sourcefile>标签表示违反编号为specification_id的编码规范所在的源代码文件名称;
<sourceline>line_no</sourceline>标签表示表示违反编号为specification_id的编码规范所在的源代码行号。
五、根据所记录的匹配结果太阳城集团输出检测结果太阳城集团
上述记录的匹配结果太阳城集团包括:源代码文件的名称,违反的编码规范的标识,以及违反编码规范的内容在源代码中的行号。
则在本发明的一个实施例中,根据所记录的匹配结果太阳城集团输出检测结果太阳城集团包括:
1)根据违反的编码规范标识找出对应编码规范的描述太阳城集团,包括:编码规范的类型太阳城集团、名称和描述太阳城集团;将找出的对应编码规范的描述太阳城集团作为检测结果太阳城集团的一部分;
2)将源代码文件的名称,违反编码规范的内容在源代码中的行号,以及违反编码规范的内容的代码片段作为检测结果太阳城集团的一部分;
3)根据违反的编码规范标识找出对应编码规范,将针对违反该对应编码规范的修复建议作为检测结果太阳城集团的一部分。
具体地判断xml结果文件是否为空,若xml结果文件中的<specification></specification>为空,则未检测到违反编码规范的情况,报告检测结果为空;否则,根据<id></id>标签的specification_id查找SRS中对应的编码规范的详细太阳城集团,输出检测结果中包含的违反编码规范的详细太阳城集团,包括以下内容:
(1)编码规范基本太阳城集团,包括specification_id对应的编码规范的名称、类型太阳城集团、编码规范的详细描述太阳城集团;
(2)源代码详细太阳城集团,包括违反编码规范的源代码文件名称、源代码行号及违反编码规范的源代码片段;
(3)修复建议太阳城集团,包括针对编码规范的修复建议及修复样本太阳城集团。
根据上述实施例给出的检测方法能够快速地定位Java源代码中所存在的问题,节省了太阳城集团,提高了效率。
图4示出了根据本发明一个实施例的一种Java源代码的合规性检测装置的结构图。如图4所示,该装置包括:
编码规范库构建单元401,适于构建Java源代码的编码规范库;
合规性检测规则生成单元402,适于根据所述编码规范库中的编码规范,生成合规性检测规则集合;
合规性检测模型构建单元403,适于解析待检测的Java源代码,构建该待检测的Java源代码的合规性检测模型;所述Java源代码的合规性检测模型包括:类集合C、方法集合M、变量集合V和指令集合I。
匹配单元404,适于将所述合规性检测规则集合中的各个规则一一与所述合规性检测模型中的C、M、V和I集合进行匹配,如果匹配则记录匹配结果太阳城集团;
输出单元405,适于根据所记录的匹配结果太阳城集团输出检测结果太阳城集团。
在本发明的一个实施例中,合规性检测模型构建单元403,适于构建如下的Java源代码的合规性检测模型:
类集合C中的每个类包括:类的类型、类的名称、类的名称对应的行号以及类所在源代码文件的名称;
方法集合M中的每个方法包括:方法的类型、方法的名称、方法的名称对应的行号以及方法所属的类的名称;
变量集合V中的每个变量包括:变量的类型、变量的名称、变量的名称对应的行号;
指令集合I中的每个指令包括:指令的名称、指令相关的参数、调用该指令的指令的名称以及该指令的名称对应的行号。
在本发明的一个实施例中,合规性检测模型构建单元403,适于先将待检测的Java源代码的合规性检测模型中的C、M、V和I集合初始化为空,然后遍历该待检测的Java源代码的字符流,解析每个单词的属性太阳城集团,判断属性太阳城集团的含义,将其添加到相应的C、M、V和I集合中。
在本发明的一个实施例中,编码规范库构建单元401构建的编码规范库包括以下六大类:命名规范、设计规范、注释规范、语句规范、类规范和日志规范;
每个大类中又包含多个小类。
在本发明的一个实施例中,合规性检测规则生成单元402,适于根据编码规范库中的命名规范、设计规范、注释规范和日志规范中的一种或多种规范的文本模式特征编写相应的正则表达式,形成文本模式匹配规则库;将该文本模式匹配规则库加入到所述合规性检测规则集合中;和/或,适于根据编码规范库中的设计规范、语句规范和类规范中的一种或多种规范提取违反这些规范的情况,形成编码规范黑名单;将该黑名单加入到所述合规性检测规则集合中。
在本发明的一个实施例中,所述匹配单元404适于按照如下步骤完成所述匹配:
步骤S1:判断合规性检测规则集合是否为空,若为空则转入步骤S4,否则转入步骤S2;
步骤S2:从合规性检测规则集合中提取出一个合规性检测规则与所述合规性检测模型中的C、M、V和I集合进行匹配,如果匹配成功则转入步骤S3,否则转入步骤S1;
步骤S3:记录匹配的结果太阳城集团,包括:源代码文件的名称,该匹配的合规性检测规则对应的编码规范的标识,以及该匹配的合规性检测模型中内容在源代码中的行号;返回步骤S1;
步骤S4:输出所记录的结果太阳城集团。
在本发明的一个实施例中,所述编码规范库构建单元401构建的所述编码规范库中的每条编码规范包括:
编码规范的唯一标识;
编码规范的类型太阳城集团;
编码规范的名称;
编码规范的描述太阳城集团,包括违反编码规范的原因、造成的伤害以及对应的错误样本代码;
针对违反编码规范的修复建议。
在本发明的一个实施例中,所述匹配单元404记录的匹配结果太阳城集团包括:源代码文件的名称,违反的编码规范的标识,以及违反编码规范的内容在源代码中的行号;
所述输出单元405,适于根据违反的编码规范标识找出对应编码规范的描述太阳城集团,包括:编码规范的类型太阳城集团、名称和描述太阳城集团,将找出的对应编码规范的描述太阳城集团作为检测结果太阳城集团的一部分;适于将源代码文件的名称,违反编码规范的内容在源代码中的行号,以及违反编码规范的内容的代码片段作为检测结果太阳城集团的一部分;适于根据违反的编码规范标识找出对应编码规范,将针对违反该对应编码规范的修复建议作为检测结果太阳城集团的一部分。
综上所述,本发明的这种构建Java源代码的编码规范库,根据所述编码规范库中的编码规范,生成合规性检测规则集合,解析待检测的Java源代码,构建该待检测的Java源代码的合规性检测模型,所述Java源代码的合规性检测模型包括:类集合C、方法集合M、变量集合V和指令集合I,将所述合规性检测规则集合中的各个规则一一与所述合规性检测模型中的C、M、V和I集合进行匹配,如果匹配则记录匹配结果太阳城集团,根据所记录的匹配结果太阳城集团输出检测结果太阳城集团的技术方案,可实现Java源代码合规性的自动化检测,快速检测出不符合编码规范的源代码片段,有效提高了软件开发和测试的效率,从源代码层面保障了应用软件的编码质量和安全性问题。
需要说明的是:
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以 把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的Java源代码的合规性检测装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。 可将这些单词解释为名称。
本发明公开了A1、一种Java源代码的合规性检测方法,包括:构建Java源代码的编码规范库;根据所述编码规范库中的编码规范,生成合规性检测规则集合;解析待检测的Java源代码,构建该待检测的Java源代码的合规性检测模型;所述Java源代码的合规性检测模型包括:类集合C、方法集合M、变量集合V和指令集合I;将所述合规性检测规则集合中的各个规则一一与所述合规性检测模型中的C、M、V和I集合进行匹配,如果匹配则记录匹配结果太阳城集团;根据所记录的匹配结果太阳城集团输出检测结果太阳城集团。A2、如A1所述的方法,其中:所述类集合C中的每个类包括:类的类型、类的名称、类的名称对应的行号以及类所在源代码文件的名称;所述方法集合M中的每个方法包括:方法的类型、方法的名称、方法的名称对应的行号以及方法所属的类的名称;所述变量集合V中的每个变量包括:变量的类型、变量的名称、变量的名称对应的行号;所述指令集合I中的每个指令包括:指令的名称、指令相关的参数、调用该指令的指令的名称以及该指令的名称对应的行号。A3、如A1所述的方法,其中,所述解析待检测的Java源代码,构建该待检测的Java源代码的合规性检测模型包括:将该待检测的Java源代码的合规性检测模型中的C、M、V和I集合初始化为空;遍历该待检测的Java源代码的字符流,解析每个单词的属性太阳城集团,判断属性太阳城集团的含义,将其添加到相应的C、M、V和I集合中。A4、如A1所述的方法,其中,所述编码规范库包括以下六大类:命名规范、设计规范、注释规范、语句规范、类规范和日志规范;每个大类中又包含多个小类。A5、如A4所述的方法,其中,所述根据所述编码规范库中的编码规范,生成合规性检测规则集合包括:根据编码规范库中的命名规范、设计规范、注释规范和日志规范中的一种或多种规范的文本模式特征编写相应的正则表达式,形成文本模式匹配规则库;将该文本模式匹配规则库加入到所述合规性检测规则集合中;和/或,根据编码规范库中的设计规范、语句规范和类规范中的一种或多种规范提取违反这些规范的情况,形成编码规范黑名单;将该黑名单加入到所述合规性检测规则集合中。A6、如A2所述的方法,其中,所述将所述合规性检测规则集合中的各个规则一一与所述合规性检测模型中的C、M、V和I集合进 行匹配,如果匹配则记录匹配结果太阳城集团包括:步骤S1:判断合规性检测规则集合是否为空,若为空则转入步骤S4,否则转入步骤S2;步骤S2:从合规性检测规则集合中提取出一个合规性检测规则与所述合规性检测模型中的C、M、V和I集合进行匹配,如果匹配成功则转入步骤S3,否则转入步骤S1;步骤S3:记录匹配的结果太阳城集团,包括:源代码文件的名称,该匹配的合规性检测规则对应的编码规范的标识,以及该匹配的合规性检测模型中内容在源代码中的行号;返回步骤S1;步骤S4:输出所记录的结果太阳城集团。A7、如A1所述的方法,其中,所述编码规范库中的每条编码规范包括:编码规范的唯一标识;编码规范的类型太阳城集团;编码规范的名称;编码规范的描述太阳城集团,包括违反编码规范的原因、造成的伤害以及对应的错误样本代码;针对违反编码规范的修复建议。A8、如A7所述的方法,其中,所述匹配结果太阳城集团包括:源代码文件的名称,违反的编码规范的标识,以及违反编码规范的内容在源代码中的行号;所述根据所记录的匹配结果太阳城集团输出检测结果太阳城集团包括:根据违反的编码规范标识找出对应编码规范的描述太阳城集团,包括:编码规范的类型太阳城集团、名称和描述太阳城集团;将找出的对应编码规范的描述太阳城集团作为检测结果太阳城集团的一部分;将源代码文件的名称,违反编码规范的内容在源代码中的行号,以及违反编码规范的内容的代码片段作为检测结果太阳城集团的一部分;根据违反的编码规范标识找出对应编码规范,将针对违反该对应编码规范的修复建议作为检测结果太阳城集团的一部分。
太阳城集团本发明还公开了B9、一种Java源代码的合规性检测装置,包括:编码规范库构建单元,适于构建Java源代码的编码规范库;合规性检测规则生成单元,适于根据所述编码规范库中的编码规范,生成合规性检测规则集合;合规性检测模型构建单元,适于解析待检测的Java源代码,构建该待检测的Java源代码的合规性检测模型;所述Java源代码的合规性检测模型包括:类集合C、方法集合M、变量集合V和指令集合I;匹配单元,适于将所述合规性检测规则集合中的各个规则一一与所述合规性检测模型中的C、M、V和I集合进行匹配,如果匹配则记录匹配结果太阳城集团;输出单元,适于根据所记录的匹配结果太阳城集团输出检测结果太阳城集团。B10、如B9所述的装置,所述合规性检测模型构建单元,适于构建如下的Java源代码的合规性检测模型:类集 合C中的每个类包括:类的类型、类的名称、类的名称对应的行号以及类所在源代码文件的名称;方法集合M中的每个方法包括:方法的类型、方法的名称、方法的名称对应的行号以及方法所属的类的名称;变量集合V中的每个变量包括:变量的类型、变量的名称、变量的名称对应的行号;指令集合I中的每个指令包括:指令的名称、指令相关的参数、调用该指令的指令的名称以及该指令的名称对应的行号。B11、如B9所述的装置,所述合规性检测模型构建单元,适于先将待检测的Java源代码的合规性检测模型中的C、M、V和I集合初始化为空,然后遍历该待检测的Java源代码的字符流,解析每个单词的属性太阳城集团,判断属性太阳城集团的含义,将其添加到相应的C、M、V和I集合中。B12、如B9所述的装置,其中,所述编码规范库构建单元构建的编码规范库包括以下六大类:命名规范、设计规范、注释规范、语句规范、类规范和日志规范;每个大类中又包含多个小类。B13、如B12所述的装置,所述合规性检测规则生成单元,适于根据编码规范库中的命名规范、设计规范、注释规范和日志规范中的一种或多种规范的文本模式特征编写相应的正则表达式,形成文本模式匹配规则库;将该文本模式匹配规则库加入到所述合规性检测规则集合中;和/或,适于根据编码规范库中的设计规范、语句规范和类规范中的一种或多种规范提取违反这些规范的情况,形成编码规范黑名单;将该黑名单加入到所述合规性检测规则集合中。B14、如B10所述的装置,其中,所述匹配单元适于按照如下步骤完成所述匹配:步骤S1,判断合规性检测规则集合是否为空,若为空则转入步骤S4,否则转入步骤S2;步骤S2,合规性检测规则集合中提取出一个合规性检测规则与所述合规性检测模型中的C、M、V和I集合进行匹配,如果匹配成功则转入步骤S3,否则转入步骤S1;步骤S3,记录匹配的结果太阳城集团,包括:源代码文件的名称,该匹配的合规性检测规则对应的编码规范的标识,以及该匹配的合规性检测模型中内容在源代码中的行号,返回步骤S1;步骤S4:输出所记录的结果太阳城集团。B15、如B9所述的装置,其中,所述编码规范库构建单元构建的所述编码规范库中的每条编码规范包括:编码规范的唯一标识;编码规范的类型太阳城集团;编码规范的名称;编码规范的描述太阳城集团,包括违反编码规范的原因、造成的伤害以及对应的错误样本代码;针对违反编码规范的修复建议。 B16、如B15所述的装置,所述匹配单元记录的匹配结果太阳城集团包括:源代码文件的名称,违反的编码规范的标识,以及违反编码规范的内容在源代码中的行号;所述输出单元,适于根据违反的编码规范标识找出对应编码规范的描述太阳城集团,包括:编码规范的类型太阳城集团、名称和描述太阳城集团,将找出的对应编码规范的描述太阳城集团作为检测结果太阳城集团的一部分;适于将源代码文件的名称,违反编码规范的内容在源代码中的行号,以及违反编码规范的内容的代码片段作为检测结果太阳城集团的一部分;适于根据违反的编码规范标识找出对应编码规范,将针对违反该对应编码规范的修复建议作为检测结果太阳城集团的一部分。

关 键 词:
一种 JAVA 源代码 合规 检测 方法 装置
  专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
太阳城集团本文
本文标题:一种JAVA源代码的合规性检测方法和装置.pdf
链接地址:http://zh228.com/p-6180514.html
太阳城集团我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服客服 - 联系我们

copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备17046363号-1 
 


收起
展开
葡京赌场|welcome document.write ('');