CN111930615B - 代码质量评估方法及装置 - Google Patents
代码质量评估方法及装置 Download PDFInfo
- Publication number
- CN111930615B CN111930615B CN202010730407.5A CN202010730407A CN111930615B CN 111930615 B CN111930615 B CN 111930615B CN 202010730407 A CN202010730407 A CN 202010730407A CN 111930615 B CN111930615 B CN 111930615B
- Authority
- CN
- China
- Prior art keywords
- database
- log
- field
- code
- query frequency
- 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/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
-
- 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/3616—Software analysis for verifying properties of programs using software metrics
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/30—Computing systems specially adapted for manufacturing
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)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种代码质量评估方法及装置。所述方法包括:提取生产日志中涉及数据库操作的日志片段,将日志片段解析为数据库访问行为的结构化行为描述信息;利用聚类算法,对数据库访问行为的结构化行为描述信息进行聚类,确定数据库中各字段的查询频度及字段组合的查询频度;采集并分析数据库的多维度数据特征,确定数据库中各字段不同取值对应的区分度;根据各字段的查询频度、字段组合的查询频度及区分度,对数据库操作代码进行质量评估。本发明通过确定各字段及各字段组合的查询频度,并确定各字段不同取值对应的区分度,基于查询频度及区分度,评估访问数据库的代码质量,实现了有效提升代码质量评估的准确性、有效性和及时性。
Description
技术领域
本发明涉及代码质量评估技术领域,尤指一种代码质量评估方法及装置。
背景技术
目前,在软件质量控制领域,针对软件研发过程中的代码质量评估,特别涉及数据库操作的代码质量评估,缺乏完善的评估方法,质量评估的维度较少,一般只使用代码行数、测试发现问题数之类来评估,而实际的编码质量,需要等投产后生产反馈,再开展质量后评估。这一现状直接制约了在研发过程中的人员能力评估、项目研发计价、以及软件质量评定和质量提升优化工作的开展。
发明内容
本发明实施例的主要目的在于提供一种代码质量评估方法及装置,为实现有效提升代码质量评估的准确性、有效性和及时性。
为了实现上述目的,本发明实施例提供一种代码质量评估方法,所述方法包括:
提取生产日志中涉及数据库操作的日志片段,将所述日志片段解析为数据库访问行为的结构化行为描述信息;
利用聚类算法,对数据库访问行为的结构化行为描述信息进行聚类,确定数据库中各字段的查询频度及字段组合的查询频度;
采集并分析所述数据库的多维度数据特征,确定所述数据库中各字段不同取值对应的区分度;
根据所述各字段的查询频度、字段组合的查询频度及所述区分度,对数据库操作代码进行质量评估。
可选的,在本发明一实施例中,所述提取生产日志中涉及数据库操作的日志片段,将所述日志片段解析为数据库访问行为的结构化行为描述信息包括:获取生产日志,所述生产日志包括业务日志及中间件日志;根据关键要素,提取所述生产日志中涉及数据库操作的日志片段,所述关键要素包括访问的表、条件筛选的字段及筛选字段的取值;将所述日志片段解析为数据库访问行为的结构化行为描述信息。
可选的,在本发明一实施例中,所述采集并分析所述数据库的多维度数据特征,确定所述数据库中各字段不同取值对应的区分度包括:根据预设采集规则,采集多维度数据特征,所述多维度数据特征包括数据库总数据量、每日增量、字段组成、索引组成及索引数据分布;利用所述多维度数据特征,统计所述数据库中各字段不同取值对应的区分度。
可选的,在本发明一实施例中,所述方法还包括:遍历待评估工程的源码文件,将所述源码文件解析为抽象语法树;遍历所述抽象语法树,提取所述待评估工程中涉及数据库操作的代码片段;将所述代码片段解析为结构化的代码片段行为描述信息。
可选的,在本发明一实施例中,所述根据所述各字段的查询频度、字段组合的查询频度及所述区分度,对数据库操作代码进行质量评估包括:利用所述代码片段行为描述信息、所述各字段的查询频度及字段组合的查询频度,确定条件热度估值;根据所述条件热度估值及其对应的预设质量阈值,对数据库操作代码进行质量评估。
可选的,在本发明一实施例中,所述根据所述各字段的查询频度、字段组合的查询频度及所述区分度,对数据库操作代码进行质量评估包括:利用所述代码片段行为描述信息及所述区分度,确定条件区分度估值;根据所述条件区分度估值及其对应的预设质量阈值,对数据库操作代码进行质量评估。
本发明实施例还提供一种代码质量评估装置,所述装置包括:
日志挖掘模块,用于提取生产日志中涉及数据库操作的日志片段,将所述日志片段解析为数据库访问行为的结构化行为描述信息;
聚类计算模块,用于利用聚类算法,对数据库访问行为的结构化行为描述信息进行聚类,确定数据库中各字段的查询频度及字段组合的查询频度;
区分度确定模块,用于采集并分析所述数据库的多维度数据特征,确定所述数据库中各字段不同取值对应的区分度;
质量评估模块,用于根据所述各字段的查询频度、字段组合的查询频度及所述区分度,对数据库操作代码进行质量评估。
可选的,在本发明一实施例中,所述日志挖掘模块包括:日志获取单元,用于获取生产日志,所述生产日志包括业务日志及中间件日志;片段选取单元,用于根据关键要素,提取所述生产日志中涉及数据库操作的日志片段,所述关键要素包括访问的表、条件筛选的字段及筛选字段的取值;日志解析单元,用于将所述日志片段解析为数据库访问行为的结构化行为描述信息。
可选的,在本发明一实施例中,所述区分度确定模块包括:数据特征采集单元,用于根据预设采集规则,采集多维度数据特征,所述多维度数据特征包括数据库总数据量、每日增量、字段组成、索引组成及索引数据分布;区分度确定单元,用于利用所述多维度数据特征,统计所述数据库中各字段不同取值对应的区分度。
可选的,在本发明一实施例中,所述装置还包括:行为描述信息模块,用于遍历待评估工程的源码文件,将所述源码文件解析为抽象语法树;遍历所述抽象语法树,提取所述待评估工程中涉及数据库操作的代码片段;将所述代码片段解析为结构化的代码片段行为描述信息。
可选的,在本发明一实施例中,所述质量评估模块包括:热度估值单元,用于利用所述代码片段行为描述信息、所述各字段的查询频度及字段组合的查询频度,确定条件热度估值;根据所述条件热度估值及其对应的预设质量阈值,对数据库操作代码进行质量评估。
可选的,在本发明一实施例中,所述质量评估模块还包括:区分度估值单元,用于利用所述代码片段行为描述信息及所述区分度,确定条件区分度估值;根据所述条件区分度估值及其对应的预设质量阈值,对数据库操作代码进行质量评估。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法。
本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述方法的计算机程序。
本发明通过从日志挖掘获取代码访问数据库的操作信息,通过对操作的结构化行为描述信息聚类得到各字段及各字段组合的查询频度,并通过分析数据库的多维度数据特征,确定各字段不同取值对应的区分度,基于查询频度及区分度,评估访问数据库的代码质量,实现了有效提升代码质量评估的准确性、有效性和及时性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一种代码质量评估方法的流程图;
图2为本发明实施例中生成结构化行为描述信息的流程图;
图3为本发明实施例中抽象语法树的结构示意图;
图4为本发明实施例中确定区分度的流程图;
图5为本发明实施例中生成代码片段行为描述信息的流程图;
图6为本发明实施例中确定条件热度估值的流程图;
图7为本发明实施例中确定区分度估值的流程图;
图8为本发明实施例一种代码质量评估装置的结构示意图;
图9为本发明一实施例所提供的电子设备的结构示意图。
具体实施方式
本发明实施例提供一种代码质量评估方法及装置。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示为本发明实施例一种代码质量评估方法的流程图,图中所示方法包括:
步骤S1,提取生产日志中涉及数据库操作的日志片段,将所述日志片段解析为数据库访问行为的结构化行为描述信息。
其中,生产日志包括业务日志(LOG)和中间件日志,通过FTP方式,从生产环境的应用服务器获取文本格式的业务日志和中间件日志,并保存生产日志。在提取日志片段前,以读取字节流的方式,逐行读取被保存的生产日志。根据关键要素,提取生产日志中涉及数据库操作的日志片段,例如日志中记录的SQL语句,其中,关键要素包括且不限于访问的表、条件筛选的字段、筛选字段的具体取值。通过调用具体的语法解析器(Parser)和词法解析器(Lexer),将涉及数据库操作的日志片段,解析成对数据库访问行为的结构化描述,得到结构化行为描述信息。
步骤S2,利用聚类算法,对数据库访问行为的结构化行为描述信息进行聚类,确定数据库中各字段的查询频度及字段组合的查询频度。
其中,使用聚类算法,对数据库访问行为的结构化行为描述信息进行聚类,具体的,聚类算法可选用常用的机器学习算法,包括但不限于EM、DBSCAN、K-Means等,计算每张数据表每个字段的查询频度以及字段组合查询的频度。
步骤S3,采集并分析所述数据库的多维度数据特征,确定所述数据库中各字段不同取值对应的区分度。
其中,采集多维度数据特征时,可通过ORACLE、MYSQL、DB2等业界常见关系型数据库进行采集,以及SSDB、REDIS等分布式缓存的数据情况,通过动态检索统计手段,使用预设的采集规则对数据库开展查询扫描。采集的多维度数据特征包括且不限于数据库总数据量、每日增量、字段组成、索引组成、索引数据分布、每个索引、每个字段不同取值的记录数等信息。采集规则是配置式定义好的,每条规则对应一个评估维度。
利用采集到的多维度数据特征,特别是和条件筛选有关的,例如索引组成、索引数据分布、每个索引、每个字段不同取值的记录数,统计索引和数据的区分度。其中,区分度是指一个特定的条件和条件取值,可以筛选出多少条符合条件的记录,可简单计算为:特定取值区分度=总数据量/(总数据量中符合条件的记录数)。即筛选出的记录数越少、条件取值的区分度越高。
步骤S4,根据所述各字段的查询频度、字段组合的查询频度及所述区分度,对数据库操作代码进行质量评估。
其中,在进行质量评估前,首先,遍历待评估工程下的每一个源码文件,以流文件的方式打开、逐行读取并最终形成抽象语法树AST。然后,遍历该抽象语法树,提取涉及数据库操作的代码片段,并根据具体的编码语法,在数据库操作代码中提取行为信息,即代码片段行为描述信息。
进一步的,针对代码片段行为描述信息,利用由步骤S2生成的查询频度,评估代码涉及的SQL语句中条件字段不同取值的热度估值。针对代码片段行为描述信息,利用由步骤S3生成的区分度,评估代码涉及的SQL语句中条件字段不同取值的区分度。
此外,针对不同的评估维度设置阈值,作为代码评估的定性评估依据。其中,所指的定性评估维度包括且不限于表数据量、条件热度、条件区分度。具体的,从多个维度评估涉及数据库操作的代码质量,此处所指的评估维度,包括且不限于表数据量、是否匹配索引查询、条件热度、条件区分度等。
作为本发明的一个实施例,如图2所示,提取生产日志中涉及数据库操作的日志片段,将所述日志片段解析为数据库访问行为的结构化行为描述信息包括:
步骤S21,获取生产日志,所述生产日志包括业务日志及中间件日志。
其中,通过FTP(File Transfer Protocol)方式,从生产环境的应用服务器获取文本格式的业务日志和中间件日志。
步骤S22,根据关键要素,提取所述生产日志中涉及数据库操作的日志片段,所述关键要素包括访问的表、条件筛选的字段及筛选字段的取值。
其中,根据关键要素,提取生产日志中涉及数据库操作的日志片段,例如日志中记录的SQL语句。
步骤S23,将所述日志片段解析为数据库访问行为的结构化行为描述信息。
在一具体实施例中,生产系统在应用服务器的/app/log/trace.log中,以INFO级别记录了每一笔交易运行的过程日志,其中对于数据库访问的操作,直接记录SQL信息。日志样例如表1所示:
表1
其中,以FTP方式连接生产环境应用服务器,从服务器的/app/log/目录下载trace.log文件,保存到装置本地。以读取字节流的方式,逐行读取装置本地的trace.log文件,以关键字判断的方式,提取涉及数据库访问的日志行,包括SQL语句、传入参数,如表2所示:
表2
判断日志行中记录的SQL语句是“字符串+预编译”方式,调用基于PrepareStatement方式的SQL语法解析和词法解析器,对?占位符做参数赋值、补全SQL语句,并解析成抽象语法树,如图3所示。
遍历SQL语句抽象语法树,提取关键要素,将数据库访问行为抽象成结构化描述。关键要素包括且不限于语句动作、访问的表、条件筛选的字段、筛选字段的具体取值,以JSON格式的字符串为载体进行保存,如表3所示。
表3
在本实施例中,将采集到的每一条数据库访问操作中解析出来的行为描述集合,以JSON的格式进行存储。由于数据库访问行为具有明显的时序特征,实际可使用多种常用的数据库模型,包括且不限于关系型数据库、KV形式的NOSQL数据库、时序数据库等。
在本发明一具体实施例中,使用聚类算法,数据库访问行为的结构化行为描述信息进行聚类,确定数据库中各字段的查询频度及字段组合的查询频度,以K-Means聚类算法为例进行说明,实际可以选用常用的机器学习算法,包括但不限于EM、DBSCAN、K-Means等。K-Means聚类算法相对高效。该算法输入为向量化后的行为特征及预期得到的类别个数,输出为类别及每类所包含的行为特征。向量化是指通过模型对文本化的行为映射到向量化的数学空间,用于聚类模型训练。常用的词向量化方法包括但不限于词袋模型、word2vec、n-gram等。
依据上述的实施例,已知已经保存了大量的结构化行为描述信息,使用K-Means聚类算法,以保存的全量行为描述,以及预期类别个数100为参数(其中“预期类别个数”可以根据行为描述的总量和聚类的精度做调整),执行聚类学习,得到100个类别集合。类别输出例子可描述如下,表示经聚类计算后,生产对USER表的BRANCHID字段进行了10021703次查询,其中”000001000”取值进行了1000000次查询、”000000200”取值进行了20000次查询、”000003601”取值进行了1000次查询、”000001207”取值进行了703次查询:
{"TABLE_NAME":"USER","COLUMN_NAME":"BRANCHID","QUERY_TIMES":10021703,"VALUE_QUERY_TIMES":[{"000001000":1000000},{"000000200":20000},{"000003601":1000},{"000001207":703}]}。
作为本发明的一个实施例,如图4所示,采集并分析所述数据库的多维度数据特征,确定所述数据库中各字段不同取值对应的区分度包括:
步骤S31,根据预设采集规则,采集多维度数据特征,所述多维度数据特征包括数据库总数据量、每日增量、字段组成、索引组成及索引数据分布。
其中,采集多维度数据特征时,可通过ORACLE、MYSQL、DB2等业界常见关系型数据库进行采集,以及SSDB、REDIS等分布式缓存的数据情况,通过动态检索统计手段,使用预设的采集规则对数据库开展查询扫描。采集的多维度数据特征包括且不限于数据库总数据量、每日增量、字段组成、索引组成、索引数据分布、每个索引、每个字段不同取值的记录数等信息。采集规则是配置式定义好的,每条规则对应一个评估维度。
步骤S32,利用所述多维度数据特征,统计所述数据库中各字段不同取值对应的区分度。
其中,利用采集到的多维度数据特征,特别是和条件筛选有关的,例如索引组成、索引数据分布、每个索引、每个字段不同取值的记录数,统计索引和数据的区分度。其中,区分度是指一个特定的条件和条件取值,可以筛选出多少条符合条件的记录,可简单计算为:特定取值区分度=总数据量/(总数据量中符合条件的记录数)。即筛选出的记录数越少、条件取值的区分度越高。
在本发明一具体实施例中,在预先配置了TABLENAME、ROWNUM、COLUMNS、INDEX、COLUMNS DISTINCT等五类采集维度后,对USER表进行分析,采集到以下特征,以JSON格式保存,如表4所示:
表4
根据采集到的上述数据,统计USER表的具体区分度信息如下:
A.表名:USER
B.总数据量:24718
C.NAME字段区分度:
”JACK”:24718/2=12359;
"ALBERT":24718/1=24718;
"LUCY":24718/7=3531.14;
"NULL":24718/24708=1.0004;
D.BRANCHID字段区分度:
"00012000":24718/14000=1.77
"000001000":24718/10718=2.31
E.STSTUS字段区分度:
"0":24718/10=2471.8
"1":24718/24708=1.0004
F.PK_USER索引区分度:
ID:24718/1=24718
作为本发明的一个实施例,如图5所示,方法还包括:
步骤S41,遍历待评估工程的源码文件,将所述源码文件解析为抽象语法树。
其中,在进行代码质量评估前,遍历待评估工程下的每一个源码文件,以流文件的方式打开、逐行读取并最终形成抽象语法树AST。
步骤S42,遍历所述抽象语法树,提取所述待评估工程中涉及数据库操作的代码片段。
步骤S43,将所述代码片段解析为结构化的代码片段行为描述信息。
其中,根据具体的编码语法,在数据库操作代码中提取行为信息,即代码片段行为描述信息。
在本实施例中,如图6所示,根据所述各字段的查询频度、字段组合的查询频度及所述区分度,对数据库操作代码进行质量评估包括:
步骤S51,利用所述代码片段行为描述信息、所述各字段的查询频度及字段组合的查询频度,确定条件热度估值。
针对代码片段行为描述信息,利用查询频度,评估代码涉及的SQL语句中条件字段不同取值的热度估值。对于不能明确条件取值的代码,基于查询频度的统计结果,输出每个可能取值的热度。特殊地,对于可以明确条件取值的代码,输出确定的热度估值。
步骤S52,根据所述条件热度估值及其对应的预设质量阈值,对数据库操作代码进行质量评估。
其中,针对不同的评估维度设置阈值,作为代码评估的定性评估依据。
在本实施例中,如图7所示,根据所述各字段的查询频度、字段组合的查询频度及所述区分度,对数据库操作代码进行质量评估包括:
步骤S61,利用所述代码片段行为描述信息及所述区分度,确定条件区分度估值。
针对代码片段行为描述信息,利用区分度,评估代码涉及的SQL语句中条件字段不同取值的区分度。对于不能明确条件取值的代码,基于区分度估算数据,输出每个可能取值的区分度。特殊地,对于可以明确条件取值的代码,输出确定的区分度估值。
步骤S62,根据所述条件区分度估值及其对应的预设质量阈值,对数据库操作代码进行质量评估。
其中,针对不同的评估维度设置阈值,作为代码评估的定性评估依据。
在本实施例中,从多个维度评估涉及数据库操作的代码质量,此处所指的评估维度,包括且不限于表数据量、是否匹配索引查询、条件热度、条件区分度等。代码质量评估包括定性和定量两部分:
1、定性评估:如果各维度满足对应质量阈值,属于低风险代码,反之如果不满足质量阈值,该维度定性评估属于高风险。代码的定性总评估是各维度定性评估得分的汇总,当超过80%的维度评估属于高风险,则代码质量总评估为高风险。特殊地,对于不能明确条件取值的代码,枚举不同条件取值下的定性评估。
2、定量评估:依据条件热度估值和条件区分度估值,对代码质量做定量打分。代码的定量评估总分是条件热度估值和条件区分度估值的乘积。特殊地,对于不能明确条件取值的代码,枚举不同条件取值下的定量评估得分
进一步的,对项目工程中每一个代码文件完成定性和定量评估完成后,生成工程质量报告,对工程中设计数据库操作的代码提示定性和定量得分,并报送质量控制人员、质量考核人员及代码对应的研发人员。
在本发明一具体实施例中,待评估的工程有一个JAVA类文件、一个XML文件。JAVA文件保存业务功能逻辑,其中引入开源的mybatis构件来管理涉及数据库操作的行为,以XML文件的方式保存具体的行为逻辑,XML中的一个节点包含一次数据库访问操作的SQL。
1、在本实施例中,配置阈值如下:
a.表数据量阈值:10000
b.条件热度:5000
c.条件区分度阈值:3
2、遍历待评估工程下的每一个源码文件,对于JAVA类文件,逐行读取并解析成抽象语法树。具体把JAVA代码解析成抽象语法树的方法可以使用多种解析方式,本实施例使用Eclipse JDT的AST解析组件,具体过程不作展开。
3、解析完成后,遍历抽象语法树,以selectOne、selectList等mybatis访问数据库的函数为关键字,提取到两处数据库操作代码:
queryDAO.selectOne("getUserByBranchId")。
4、根据访问函数中的ID号(getUserByBranchId),在XML文件中抽取具体的数据库访问操作的SQL:SELECT NAME FROM USER WHERE BRANCHID="000001000"。提取操作行为信息如下:
查询表:USER
查询字段:BRANCHID
判断逻辑:=
条件取值:000001000。
5、根据前述实施例中生成的查询频度。查询USER表BRANCHID字段信息,当取值为000001000时,热度估值为1000000。
6、根据前述实施例中数据特征及生成的区分度估值集合,BRANCHID字段当取值为000001000的时候,条件区分度估值为2.31。
7、结合质量阈值、条件热度估值及条件区分度估值,从定性和定量两部分评估代码质量:
1)定性评估:
a.USER表总数据量24718,大于数据量阈值(10000),属于高风险。
b.查询USER表BRANCHID字段信息,当取值为000001000时,热度估值为1000000,大于条件热度阈值(5000),属于高风险。
c.条件区分度估值为2.31,小于阈值(3),属于低风险。
d.由于只有66.7%的维度属于高风险,低于阈值80%,因此代码整体质量评估为低风险。
2)定量评估:查询USER表BRANCHID字段信息,当取值为000001000时,条件热度估值为1000000,条件区分度估值为2.31。因此代码的定量评估总分是1000000x 2.31=2310000。
8、完成代码评估后,生成工程质量报告,报送质量控制人员、质量考核人员及代码对应的研发人员。
本发明通过从日志挖掘获取代码访问数据库的操作信息,通过对操作的结构化行为描述信息聚类得到各字段及各字段组合的查询频度,并通过分析数据库的多维度数据特征,确定各字段不同取值对应的区分度,基于查询频度及区分度,评估访问数据库的代码质量,实现了有效提升代码质量评估的准确性、有效性和及时性。
如图8所示本发明实施例一种代码质量评估装置的结构示意图,图中所示装置包括:
日志挖掘模块10,用于提取生产日志中涉及数据库操作的日志片段,将所述日志片段解析为数据库访问行为的结构化行为描述信息。
其中,生产日志包括业务日志(LOG)和中间件日志,通过FTP方式,从生产环境的应用服务器获取文本格式的业务日志和中间件日志,并保存生产日志。在提取日志片段前,以读取字节流的方式,逐行读取被保存的生产日志。根据关键要素,提取生产日志中涉及数据库操作的日志片段,例如日志中记录的SQL语句,其中,关键要素包括且不限于访问的表、条件筛选的字段、筛选字段的具体取值。通过调用具体的语法解析器(Parser)和词法解析器(Lexer),将涉及数据库操作的日志片段,解析成对数据库访问行为的结构化描述,得到结构化行为描述信息。
聚类计算模块20,用于利用聚类算法,对数据库访问行为的结构化行为描述信息进行聚类,确定数据库中各字段的查询频度及字段组合的查询频度。
其中,使用聚类算法,对数据库访问行为的结构化行为描述信息进行聚类,具体的,聚类算法可选用常用的机器学习算法,包括但不限于EM、DBSCAN、K-Means等,计算每张数据表每个字段的查询频度以及字段组合查询的频度。
区分度确定模块30,用于采集并分析所述数据库的多维度数据特征,确定所述数据库中各字段不同取值对应的区分度。
其中,采集多维度数据特征时,可通过ORACLE、MYSQL、DB2等业界常见关系型数据库进行采集,以及SSDB、REDIS等分布式缓存的数据情况,通过动态检索统计手段,使用预设的采集规则对数据库开展查询扫描。采集的多维度数据特征包括且不限于数据库总数据量、每日增量、字段组成、索引组成、索引数据分布、每个索引、每个字段不同取值的记录数等信息。采集规则是配置式定义好的,每条规则对应一个评估维度。
利用采集到的多维度数据特征,特别是和条件筛选有关的,例如索引组成、索引数据分布、每个索引、每个字段不同取值的记录数,统计索引和数据的区分度。其中,区分度是指一个特定的条件和条件取值,可以筛选出多少条符合条件的记录,可简单计算为:特定取值区分度=总数据量/(总数据量中符合条件的记录数)。即筛选出的记录数越少、条件取值的区分度越高。
质量评估模块40,用于根据所述各字段的查询频度、字段组合的查询频度及所述区分度,对数据库操作代码进行质量评估。
其中,在进行质量评估前,首先,遍历待评估工程下的每一个源码文件,以流文件的方式打开、逐行读取并最终形成抽象语法树AST。然后,遍历该抽象语法树,提取涉及数据库操作的代码片段,并根据具体的编码语法,在数据库操作代码中提取行为信息,即代码片段行为描述信息。
进一步的,针对代码片段行为描述信息,利用由步骤S2生成的查询频度,评估代码涉及的SQL语句中条件字段不同取值的热度估值。针对代码片段行为描述信息,利用由步骤S3生成的区分度,评估代码涉及的SQL语句中条件字段不同取值的区分度。
此外,针对不同的评估维度设置阈值,作为代码评估的定性评估依据。其中,所指的定性评估维度包括且不限于表数据量、条件热度、条件区分度。具体的,从多个维度评估涉及数据库操作的代码质量,此处所指的评估维度,包括且不限于表数据量、是否匹配索引查询、条件热度、条件区分度等。
作为本发明的一个实施例,日志挖掘模块包括:
日志获取单元,用于获取生产日志,所述生产日志包括业务日志及中间件日志;
片段选取单元,用于根据关键要素,提取所述生产日志中涉及数据库操作的日志片段,所述关键要素包括访问的表、条件筛选的字段及筛选字段的取值;
日志解析单元,用于将所述日志片段解析为数据库访问行为的结构化行为描述信息。
作为本发明的一个实施例,区分度确定模块包括:
数据特征采集单元,用于根据预设采集规则,采集多维度数据特征,所述多维度数据特征包括数据库总数据量、每日增量、字段组成、索引组成及索引数据分布;
区分度确定单元,用于利用所述多维度数据特征,统计所述数据库中各字段不同取值对应的区分度。
作为本发明的一个实施例,装置还包括:行为描述信息模块,用于遍历待评估工程的源码文件,将所述源码文件解析为抽象语法树;遍历所述抽象语法树,提取所述待评估工程中涉及数据库操作的代码片段;将所述代码片段解析为结构化的代码片段行为描述信息。
在本实施例中,质量评估模块包括:热度估值单元,用于利用所述代码片段行为描述信息、所述各字段的查询频度及字段组合的查询频度,确定条件热度估值;根据所述条件热度估值及其对应的预设质量阈值,对数据库操作代码进行质量评估。
在本实施例中,质量评估模块还包括:区分度估值单元,用于利用所述代码片段行为描述信息及所述区分度,确定条件区分度估值;根据所述条件区分度估值及其对应的预设质量阈值,对数据库操作代码进行质量评估。
基于与上述一种代码质量评估方法相同的申请构思,本发明还提供了上述一种代码质量评估装置。由于该一种代码质量评估装置解决问题的原理与一种代码质量评估方法相似,因此该一种代码质量评估装置的实施可以参见一种代码质量评估方法的实施,重复之处不再赘述。
本发明通过从日志挖掘获取代码访问数据库的操作信息,通过对操作的结构化行为描述信息聚类得到各字段及各字段组合的查询频度,并通过分析数据库的多维度数据特征,确定各字段不同取值对应的区分度,基于查询频度及区分度,评估访问数据库的代码质量,实现了有效提升代码质量评估的准确性、有效性和及时性。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法。
本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述方法的计算机程序。
如图9所示,该电子设备600还可以包括:通信模块110、输入单元120、音频处理单元130、显示器160、电源170。值得注意的是,电子设备600也并不是必须要包括图9中所示的所有部件;此外,电子设备600还可以包括图9中没有示出的部件,可以参考现有技术。
如图9所示,中央处理器100有时也称为控制器或操作控件,可以包括微处理器或其他处理器装置和/或逻辑装置,该中央处理器100接收输入并控制电子设备600的各个部件的操作。
其中,存储器140,例如可以是缓存器、闪存、硬驱、可移动介质、易失性存储器、非易失性存储器或其它合适装置中的一种或更多种。可储存上述与失败有关的信息,此外还可存储执行有关信息的程序。并且中央处理器100可执行该存储器140存储的该程序,以实现信息存储或处理等。
输入单元120向中央处理器100提供输入。该输入单元120例如为按键或触摸输入装置。电源170用于向电子设备600提供电力。显示器160用于进行图像和文字等显示对象的显示。该显示器例如可为LCD显示器,但并不限于此。
该存储器140可以是固态存储器,例如,只读存储器(ROM)、随机存取存储器(RAM)、SIM卡等。还可以是这样的存储器,其即使在断电时也保存信息,可被选择性地擦除且设有更多数据,该存储器的示例有时被称为EPROM等。存储器140还可以是某种其它类型的装置。存储器140包括缓冲存储器141(有时被称为缓冲器)。存储器140可以包括应用/功能存储部142,该应用/功能存储部142用于存储应用程序和功能程序或用于通过中央处理器100执行电子设备600的操作的流程。
存储器140还可以包括数据存储部143,该数据存储部143用于存储数据,例如联系人、数字数据、图片、声音和/或任何其他由电子设备使用的数据。存储器140的驱动程序存储部144可以包括电子设备的用于通信功能和/或用于执行电子设备的其他功能(如消息传送应用、通讯录应用等)的各种驱动程序。
通信模块110即为经由天线111发送和接收信号的发送机/接收机110。通信模块(发送机/接收机)110耦合到中央处理器100,以提供输入信号和接收输出信号,这可以和常规移动通信终端的情况相同。
基于不同的通信技术,在同一电子设备中,可以设置有多个通信模块110,如蜂窝网络模块、蓝牙模块和/或无线局域网模块等。通信模块(发送机/接收机)110还经由音频处理器130耦合到扬声器131和麦克风132,以经由扬声器131提供音频输出,并接收来自麦克风132的音频输入,从而实现通常的电信功能。音频处理器130可以包括任何合适的缓冲器、解码器、放大器等。另外,音频处理器130还耦合到中央处理器100,从而使得可以通过麦克风132能够在本机上录音,且使得可以通过扬声器131来播放本机上存储的声音。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (10)
1.一种代码质量评估方法,其特征在于,所述方法包括:
提取生产日志中涉及数据库操作的日志片段,将所述日志片段解析为数据库访问行为的结构化行为描述信息;
利用聚类算法,对数据库访问行为的结构化行为描述信息进行聚类,确定数据库中各字段的查询频度及字段组合的查询频度;
采集并分析所述数据库的多维度数据特征,确定所述数据库中各字段不同取值对应的区分度;
根据所述各字段的查询频度、字段组合的查询频度及所述区分度,对数据库操作代码进行质量评估;
其中,所述提取生产日志中涉及数据库操作的日志片段,将所述日志片段解析为数据库访问行为的结构化行为描述信息包括:
获取生产日志,所述生产日志包括业务日志及中间件日志;根据关键要素,提取所述生产日志中涉及数据库操作的日志片段,所述关键要素包括访问的表、条件筛选的字段及筛选字段的取值;将所述日志片段解析为数据库访问行为的结构化行为描述信息;
或者,所述结构化行为描述信息还可以通过以下步骤获得:
遍历待评估工程的源码文件,将所述源码文件解析为抽象语法树;遍历所述抽象语法树,提取所述待评估工程中涉及数据库操作的代码片段;将所述代码片段解析为结构化的代码片段行为描述信息。
2.根据权利要求1所述的方法,其特征在于,所述采集并分析所述数据库的多维度数据特征,确定所述数据库中各字段不同取值对应的区分度包括:
根据预设采集规则,采集多维度数据特征,所述多维度数据特征包括数据库总数据量、每日增量、字段组成、索引组成及索引数据分布;
利用所述多维度数据特征,统计所述数据库中各字段不同取值对应的区分度。
3.根据权利要求1所述的方法,其特征在于,所述根据所述各字段的查询频度、字段组合的查询频度及所述区分度,对数据库操作代码进行质量评估包括:
利用所述代码片段行为描述信息、所述各字段的查询频度及字段组合的查询频度,确定条件热度估值;
根据所述条件热度估值及其对应的预设质量阈值,对数据库操作代码进行质量评估。
4.根据权利要求1所述的方法,其特征在于,所述根据所述各字段的查询频度、字段组合的查询频度及所述区分度,对数据库操作代码进行质量评估包括:
利用所述代码片段行为描述信息及所述区分度,确定条件区分度估值;
根据所述条件区分度估值及其对应的预设质量阈值,对数据库操作代码进行质量评估。
5.一种代码质量评估装置,其特征在于,所述装置包括:
日志挖掘模块,用于提取生产日志中涉及数据库操作的日志片段,将所述日志片段解析为数据库访问行为的结构化行为描述信息;
聚类计算模块,用于利用聚类算法,对数据库访问行为的结构化行为描述信息进行聚类,确定数据库中各字段的查询频度及字段组合的查询频度;
区分度确定模块,用于采集并分析所述数据库的多维度数据特征,确定所述数据库中各字段不同取值对应的区分度;
质量评估模块,用于根据所述各字段的查询频度、字段组合的查询频度及所述区分度,对数据库操作代码进行质量评估;
其中,所述日志挖掘模块包括:日志获取单元,用于获取生产日志,所述生产日志包括业务日志及中间件日志;片段选取单元,用于根据关键要素,提取所述生产日志中涉及数据库操作的日志片段,所述关键要素包括访问的表、条件筛选的字段及筛选字段的取值;日志解析单元,用于将所述日志片段解析为数据库访问行为的结构化行为描述信息;
或者,装置还包括:行为描述信息模块,用于遍历待评估工程的源码文件,将所述源码文件解析为抽象语法树;遍历所述抽象语法树,提取所述待评估工程中涉及数据库操作的代码片段;将所述代码片段解析为结构化的代码片段行为描述信息。
6.根据权利要求5所述的装置,其特征在于,所述区分度确定模块包括:
数据特征采集单元,用于根据预设采集规则,采集多维度数据特征,所述多维度数据特征包括数据库总数据量、每日增量、字段组成、索引组成及索引数据分布;
区分度确定单元,用于利用所述多维度数据特征,统计所述数据库中各字段不同取值对应的区分度。
7.根据权利要求5所述的装置,其特征在于,所述质量评估模块包括:热度估值单元,用于利用所述代码片段行为描述信息、所述各字段的查询频度及字段组合的查询频度,确定条件热度估值;根据所述条件热度估值及其对应的预设质量阈值,对数据库操作代码进行质量评估。
8.根据权利要求5所述的装置,其特征在于,所述质量评估模块还包括:区分度估值单元,用于利用所述代码片段行为描述信息及所述区分度,确定条件区分度估值;根据所述条件区分度估值及其对应的预设质量阈值,对数据库操作代码进行质量评估。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至4任一项所述方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有执行权利要求1至4任一项所述方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010730407.5A CN111930615B (zh) | 2020-07-27 | 2020-07-27 | 代码质量评估方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010730407.5A CN111930615B (zh) | 2020-07-27 | 2020-07-27 | 代码质量评估方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111930615A CN111930615A (zh) | 2020-11-13 |
CN111930615B true CN111930615B (zh) | 2023-08-04 |
Family
ID=73315281
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010730407.5A Active CN111930615B (zh) | 2020-07-27 | 2020-07-27 | 代码质量评估方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111930615B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112685388B (zh) * | 2021-03-15 | 2022-02-18 | 北京每日优鲜电子商务有限公司 | 数据模型表构建方法、装置、电子设备和计算机可读介质 |
CN113535546B (zh) * | 2021-06-17 | 2023-09-08 | 深圳开源互联网安全技术有限公司 | 一种开源组件评估方法、装置及计算机可读存储介质 |
CN114553565B (zh) * | 2022-02-25 | 2024-02-02 | 国网山东省电力公司临沂供电公司 | 一种基于请求频率的安全态势感知方法和系统 |
CN116257563B (zh) * | 2022-11-30 | 2023-11-21 | 荣耀终端有限公司 | 一种数据价值评估方法及电子设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110032868A (zh) * | 2018-01-10 | 2019-07-19 | 英特尔公司 | 基于机器学习来确定程序代码特性 |
CN111258989A (zh) * | 2020-02-14 | 2020-06-09 | 腾讯科技(深圳)有限公司 | 数据库迁移评估方法、装置、存储介质和计算机设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3306488A1 (en) * | 2016-10-04 | 2018-04-11 | Datavard AG | Method and system for determining data usage behavior in a database system |
US10706077B2 (en) * | 2017-06-08 | 2020-07-07 | Sap Se | Performance of distributed databases and database-dependent software applications |
-
2020
- 2020-07-27 CN CN202010730407.5A patent/CN111930615B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110032868A (zh) * | 2018-01-10 | 2019-07-19 | 英特尔公司 | 基于机器学习来确定程序代码特性 |
CN111258989A (zh) * | 2020-02-14 | 2020-06-09 | 腾讯科技(深圳)有限公司 | 数据库迁移评估方法、装置、存储介质和计算机设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111930615A (zh) | 2020-11-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111930615B (zh) | 代码质量评估方法及装置 | |
CN110275965B (zh) | 假新闻检测方法、电子装置及计算机可读存储介质 | |
CN110597844B (zh) | 异构数据库数据统一访问方法及相关设备 | |
CN113760891B (zh) | 一种数据表的生成方法、装置、设备和存储介质 | |
CN108170752B (zh) | 基于模板的元数据管理方法和系统 | |
KR102345410B1 (ko) | 빅데이터 지능형 수집 방법 및 장치 | |
CN112988601A (zh) | 测试脚本开发方法及装置 | |
JP2012113706A (ja) | データベース・クエリ最適化のためのコンピュータで実装される方法、コンピュータ・プログラム、およびデータ処理システム | |
CN105279281A (zh) | 一种物联网数据存取方法 | |
CN105095436A (zh) | 数据源数据自动建模方法 | |
CN110569243B (zh) | 一种数据查询方法、数据查询插件和数据查询服务器 | |
CN117076742A (zh) | 数据血缘追踪方法、装置及电子设备 | |
CN113568888A (zh) | 索引推荐方法及装置 | |
CN112634004A (zh) | 征信数据的血缘图谱分析方法与系统 | |
CN101639851A (zh) | 一种数据存储、查询的方法和装置 | |
CN102955779A (zh) | 软件搜索的方法和装置 | |
CN116186041A (zh) | 数据湖索引创建方法、装置、电子设备及计算机存储介质 | |
CN115757174A (zh) | 一种数据库的差异检测方法及装置 | |
CN111026991B (zh) | 数据展示方法及装置、计算机设备 | |
CN115357625A (zh) | 结构化数据比对方法、装置、电子设备及存储介质 | |
CN114065288A (zh) | 数据变更sql语句的审核方法及装置 | |
CN105095324A (zh) | 用户分类装置、用户分类方法以及电子设备 | |
CN106294433B (zh) | 设备信息处理方法及装置 | |
CN114490929A (zh) | 一种招投标信息采集方法、装置、存储介质及终端设备 | |
CN114077614A (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 |