CN105786710A - 一种程序代码复查方法及引擎 - Google Patents

一种程序代码复查方法及引擎 Download PDF

Info

Publication number
CN105786710A
CN105786710A CN201610166031.3A CN201610166031A CN105786710A CN 105786710 A CN105786710 A CN 105786710A CN 201610166031 A CN201610166031 A CN 201610166031A CN 105786710 A CN105786710 A CN 105786710A
Authority
CN
China
Prior art keywords
program code
check
checking program
engine
syntax tree
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
Application number
CN201610166031.3A
Other languages
English (en)
Other versions
CN105786710B (zh
Inventor
陈豪
杨晓辉
王安定
郭铸
杨煜光
周小平
吴绍杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Bank of China Ltd
Original Assignee
Bank of China Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Bank of China Ltd filed Critical Bank of China Ltd
Priority to CN201610166031.3A priority Critical patent/CN105786710B/zh
Publication of CN105786710A publication Critical patent/CN105786710A/zh
Application granted granted Critical
Publication of CN105786710B publication Critical patent/CN105786710B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3616Software analysis for verifying properties of programs using software metrics

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

本发明公开一种程序代码复查方法及引擎,所述方法包括:读取任一待复查程序代码;根据所述待复查程序代码的语法规则,识别所述待复查程序代码中的词组后,为所述待复查程序代码构建语法树;遍历所述语法树,根据预设的复查规则,对所述待复查程序代码进行复查。与现有技术相比,本发明通过为待复查程序构建语法树,对语法树进行复查规则的匹配,实现程序代码的自动化复查,在保证复查准确性的同时,节约了企业成本。

Description

一种程序代码复查方法及引擎
技术领域
本发明涉及数据处理领域,具体涉及一种程序代码复查方法及引擎。
背景技术
程序代码复查是指对程序开发人员开发出的程序代码的正确性的检查,旨在发现程序代码中可能存在的程序缺陷。
目前,业内对程序代码复查的技术还不成熟,通常为复查人员根据代码复查文档进行人工复查。由于对复查人员有专业要求,导致企业成本较大。另外,人工复查的方式使得复查结果的准确性得不到保证。所以,当前亟需一种准确高效的程序代码复查方式,能够有效代替传统的人工复查。
发明内容
为解决上述问题,本发明提供了一种程序代码复查方法及引擎。
本发明提供了一种程序代码复查方法,所述方法包括:
读取任一待复查程序代码;
根据所述待复查程序代码的语法规则,识别所述待复查程序代码中的词组后,为所述待复查程序代码构建语法树;
遍历所述语法树,根据预设的复查规则,对所述待复查程序代码进行复查。
优选地,所述遍历所述语法树,根据预设的复查规则,对所述待复查程序代码进行复查,包括:
遍历所述语法树,查询并定位复查规则中包括的目标语句;
判断所述目标语句是否符合所述复查规则。
优选地,所述判断所述目标语句是否符合所述复查规则,包括:
利用所述复查规则对应的复查子程序,对所述目标语句进行复查。
优选地,所述方法还包括:
输出所述待复查程序代码在复查过程中的执行状态。
优选地,所述待复查程序代码包括PL\SQL程序代码。
本发明还提供了一种程序代码复查引擎,所述引擎包括:
读取模块,用于读取任一待复查程序代码;
识别模块,用于根据所述待复查程序代码的语法规则,识别所述待复查程序代码中的词组;
构建模块,用于为所述待复查程序代码构建语法树;
复查模块,用于遍历所述语法树,根据预设的复查规则,对所述待复查程序代码进行复查。
优选地,所述复查模块包括:
查询定位子模块,用于遍历所述语法树,查询并定位复查规则中包括的目标语句;
判断子模块,用于判断所述目标语句是否符合所述复查规则。
优选地,所述判断子模块具体用于:
利用所述复查规则对应的复查子程序,对所述目标语句进行复查。
优选地,所述引擎还包括:
输出模块,用于输出所述待复查程序代码在复查过程中的执行状态。
优选地,所述引擎用于对PL\SQL程序代码复查。
本发明还提供了一种PL\SQL程序代码复查引擎,所述引擎采用以上描述的任一种引擎,其中,所述引擎中的待复查程序代码为PL\SQL程序代码。
本发明提供的程序代码复查方法中,系统首先读取一待复查程序代码,其次,根据所述待复查程序代码的语法规则,识别所述待复查程序代码中的词组,为该待复查程序代码构建语法树。最后,遍历所述语法树,根据预设的复查规则,对所述待复查程序进行复查。与现有技术相比,本发明通过为待复查程序构建语法树,对语法树进行复查规则的匹配,实现程序代码的自动化复查,在保证复查准确性的同时,节约了企业成本。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供了一种程序代码复查方法流程图;
图2为本发明实施例提供了另一种程序代码复查方法流程图;
图3为本发明实施例提供了一种PL\SQL程序代码的语法树示意图;
图4为本发明实施例提供了一种程序代码复查引擎的示意图示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
以下进行实施例具体内容的介绍。
本发明实施例提供了一种程序代码复查方法,参考图1,为本发明实施例提供的一种程序代码复查方法流程图,所述方法包括:
S101:读取任一待复查程序代码。
S102:根据所述待复查程序代码的语法规则,识别所述待复查程序代码中的词组后,为所述待复查程序代码构建语法树。
S103:遍历所述语法树,根据预设的复查规则,对所述待复查程序代码进行复查。
本发明实施例中,待复查程序代码可以为java程序代码、C++程序代码、PL\SQL程序代码。由于不同程序语言的程序代码的语法规则不同,所以,本发明实施例在读取到一个待复查程序代码后,获取该待复查程序代码对应的语法规则。实际应用中,本发明实施例预先为不同程序语言设置对应的语法解析器,当读取任意一个待复查程序代码后,根据其使用的程序语言,查找对应的语法解析器。
本发明实施例根据该待复查程序代码的语法规则,将待复查程序代码拆分,识别该待复查程序代码中经过拆分得到的词组。根据所述该待复查程序代码的语法规则,将拆分得到的词组构建成语法树。通过对该待复查程序代码的语法树进行复查,能够达到对该待复查程序代码进行复查的目的。
实际应用中,用于复查待复查程序代码的复查规则存储于系统的规则库中。在所述待复查程序代码的语法树构建完成后,遍历所述语法树,判断该语法树是否符合预设的复查规则。具体的,复查规则中包括复查的目标语句,以及用于复查该目标语句的复查子程序。在遍历所述语法树的过程,查询并定位复查规则中包括的目标语句,并利用该目标语句对应的复查子程序,判断所述目标语句是否符合所述复查规则。当为该待复查程序代码预设的复查规则均完成匹配时,系统对该待复查程序代码复查结束。
本发明实施例中,在待复查程序代码进行复查的过程中,系统会实时输出该待复查程序代码在复查过程中的各个执行状态,如排队中、复查中、复查结束等。
本发明实施例提供的程序代码复查方法中,系统首先读取一待复查程序代码,其次,根据所述待复查程序代码的语法规则,识别所述待复查程序代码中的词组,为该待复查程序代码构建语法树。最后,遍历所述语法树,根据预设的复查规则,对所述待复查程序进行复查。与现有技术相比,本发明实施例通过为待复查程序构建语法树,对语法树进行复查规则的匹配,实现程序代码的自动化复查,在保证复查准确性的同时,节约了企业成本。
本发明还提供了一种交易并发量控制方法,参考图2,为本发明实施例提供的一种交易并发量控制方法流程图,所述方法包括:
S201:从待复查队列中,读取一待复查程序代码,所述待复查队列包括处于排队状态的待复查程序代码。
S202:根据所述待复查程序代码所使用的程序语言,确定所述待复查程序代码对应的语法解析器,所述语法解析器由所述待复查程序代码的语法规则构成。
S203:利用所述语法解析器,识别所述待复查程序代码中的词组,并为所述待复查程序代码构建语法树。
S204:获取为所述待复查程序代码预先设置的复查规则,所述复查规则包括目标语句与复查子程序的对应关系。
S205:遍历所述待复查程序代码的语法树,查询并定位所述复查规则中包括的目标语句。
S206:利用各个目标语句对应的复查子程序,对目标语句进行复查。
S207:当为所述待复查程序代码预先设置的复查规则均被满足时,输出所述待复查程序代码的复查结果,继续执行S201。
本发明实施例以PL\SQL程序代码为例,如下,为一段PL\SQL程序代码:
将上述PL\SQL程序代码作为待复查程序代码,首先,根据PL\SQL程序语言的语法规则,识别上述程序代码中的词组,并为其构建语法树,如图3所示,图3为上述PL\SQL程序代码的语法树示意图。其中,该语法树中包括6个关联表,已在图3的语法树中标出。通常对PL\SQL程序代码的复查中将“检查关联超过四张表的语句”作为一个复查规则,即在遍历语法树的过程中,一旦检查到存在关联超过四张表的语句,则将该语句作为问题语句,加入到最终的复查结果中,显示给用户。
另外,本发明实施例提供的程序代码复查方法还可以对处于排队状态的待复查程序代码进行异步复查,因此,在处于排队状态的待复查程序代码较多时,本发明实施例的异步复查方法能够提高程序代码的复查效率。
本发明实施例提供的程序代码复查方法根据待复查程序代码所使用的程序语言的语法规则,为该待复查程序代码构建语法树,并通过对语法树的遍历,查询并定位为该待复查程序代码预设的复查规则中的目标语句,实现对目标语句的复查。利用上述程序代码复查方式能够在实现程序代码的自动化复查的同时,保证复查准确性,以及对企业成本的节约。
本发明实施例还提供了一种程序代码复查引擎,参考图4,图4为本发明实施例提供的一种程序代码复查引擎的示意图,所述程序代码引擎包括:
读取模块401,用于读取任一待复查程序代码;
识别模块402,用于根据所述待复查程序代码的语法规则,识别所述待复查程序代码中的词组;
构建模块403,用于为所述待复查程序代码构建语法树;
复查模块404,用于遍历所述语法树,根据预设的复查规则,对所述待复查程序代码进行复查。
其中,所述复查模块404包括:
查询定位子模块,用于遍历所述语法树,查询并定位复查规则中包括的目标语句;
判断子模块,用于判断所述目标语句是否符合所述复查规则。
实际应用中,所述判断子模块具体用于:
利用所述复查规则对应的复查子程序,对所述目标语句进行复查。
为了便于用户了解程序代码复查的进度,所述引擎还包括:
输出模块,用于输出所述待复查程序代码在复查过程中的执行状态。
本发明实施例中的待复查程序代码可以为各种程序语言编写的程序代码,也就是说,上述引擎可以安装于各种计算机系统中,用于各种程序代码的复查。优选地,所述引擎用于对PL\SQL程序代码复查。
本发明实施例提供的程序代码复查引擎包括:读取模块,用于读取任一待复查程序代码;识别模块,用于根据所述待复查程序代码的语法规则,识别所述待复查程序代码中的词组;构建模块,用于为所述待复查程序代码构建语法树;复查模块,用于遍历所述语法树,根据预设的复查规则,对所述待复查程序代码进行复查。本发明实施例通过为待复查程序构建语法树,对语法树进行复查规则的匹配,实现程序代码的自动化复查,在保证复查准确性的同时,节约了企业成本。
本发明实施例还提供了一种PL\SQL程序代码复查引擎,所述PL\SQL程序代码复查引擎采用图4以及对其限定中描述的引擎,所述PL\SQL程序代码复查引擎用于对PL\SQL程序代码进行复查。具体的,所述PL\SQL程序代码复查引擎在读取PL\SQL程序代码后,根据PL\SQL程序代码的语法规则,识别PL\SQL程序代码中的词组,为所述PL\SQL程序代码构建语法树。最终,遍历该语法树,根据预设的复查规则完成所述PL\SQL程序代码的复查。
对于设备实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的设备实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本发明实施例所提供的一种程序代码复查方法及引擎进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (10)

1.一种程序代码复查方法,其特征在于,所述方法包括:
读取任一待复查程序代码;
根据所述待复查程序代码的语法规则,识别所述待复查程序代码中的词组后,为所述待复查程序代码构建语法树;
遍历所述语法树,根据预设的复查规则,对所述待复查程序代码进行复查。
2.根据权利要求1所述的方法,其特征在于,所述遍历所述语法树,根据预设的复查规则,对所述待复查程序代码进行复查,包括:
遍历所述语法树,查询并定位复查规则中包括的目标语句;
判断所述目标语句是否符合所述复查规则。
3.根据权利要求2所述的方法,其特征在于,所述判断所述目标语句是否符合所述复查规则,包括:
利用所述复查规则对应的复查子程序,对所述目标语句进行复查。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
输出所述待复查程序代码在复查过程中的执行状态。
5.根据权利要求1所述的方法,其特征在于,所述待复查程序代码包括PL\SQL程序代码。
6.一种程序代码复查引擎,其特征在于,所述引擎包括:
读取模块,用于读取任一待复查程序代码;
识别模块,用于根据所述待复查程序代码的语法规则,识别所述待复查程序代码中的词组;
构建模块,用于为所述待复查程序代码构建语法树;
复查模块,用于遍历所述语法树,根据预设的复查规则,对所述待复查程序代码进行复查。
7.根据权利要求6所述的引擎,其特征在于,所述复查模块包括:
查询定位子模块,用于遍历所述语法树,查询并定位复查规则中包括的目标语句;
判断子模块,用于判断所述目标语句是否符合所述复查规则。
8.根据权利要求7所述的引擎,其特征在于,所述判断子模块具体用于:
利用所述复查规则对应的复查子程序,对所述目标语句进行复查。
9.根据权利要求6所述的引擎,其特征在于,所述引擎还包括:
输出模块,用于输出所述待复查程序代码在复查过程中的执行状态。
10.一种PL\SQL程序代码复查引擎,其特征在于,所述引擎采用上述权利要求6-9任一项所述的引擎,其中,所述引擎中的待复查程序代码为PL\SQL程序代码。
CN201610166031.3A 2016-03-22 2016-03-22 一种程序代码复查方法及引擎 Active CN105786710B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610166031.3A CN105786710B (zh) 2016-03-22 2016-03-22 一种程序代码复查方法及引擎

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610166031.3A CN105786710B (zh) 2016-03-22 2016-03-22 一种程序代码复查方法及引擎

Publications (2)

Publication Number Publication Date
CN105786710A true CN105786710A (zh) 2016-07-20
CN105786710B CN105786710B (zh) 2018-10-16

Family

ID=56390606

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610166031.3A Active CN105786710B (zh) 2016-03-22 2016-03-22 一种程序代码复查方法及引擎

Country Status (1)

Country Link
CN (1) CN105786710B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106294164A (zh) * 2016-08-15 2017-01-04 中国银行股份有限公司 一种代码检查方法及装置
CN107391384A (zh) * 2017-08-14 2017-11-24 中国银行股份有限公司 一种sql语句检测方法及系统
CN109002283A (zh) * 2018-06-14 2018-12-14 南京航空航天大学 一种基于文件路径分析的代码审查者推荐方法
CN115982059A (zh) * 2023-03-21 2023-04-18 麒麟软件有限公司 Shell脚本检查工具的实现方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050166193A1 (en) * 2003-12-05 2005-07-28 The University Of North Carolina Methods, systems, and computer program products for identifying computer program source code constructs
CN101017458A (zh) * 2007-03-02 2007-08-15 北京邮电大学 基于源代码静态分析的软件安全代码分析器及其检测方法
CN101833500A (zh) * 2010-04-07 2010-09-15 南京航空航天大学 一种基于Agent的嵌入式软件智能测试方法
CN102054100A (zh) * 2010-12-17 2011-05-11 中国科学院计算技术研究所 一种基于静态分析的rtl设计错误检测方法和系统
CN104133768A (zh) * 2014-07-28 2014-11-05 中国银行股份有限公司 一种程序代码复查方法和装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050166193A1 (en) * 2003-12-05 2005-07-28 The University Of North Carolina Methods, systems, and computer program products for identifying computer program source code constructs
CN101017458A (zh) * 2007-03-02 2007-08-15 北京邮电大学 基于源代码静态分析的软件安全代码分析器及其检测方法
CN101833500A (zh) * 2010-04-07 2010-09-15 南京航空航天大学 一种基于Agent的嵌入式软件智能测试方法
CN102054100A (zh) * 2010-12-17 2011-05-11 中国科学院计算技术研究所 一种基于静态分析的rtl设计错误检测方法和系统
CN104133768A (zh) * 2014-07-28 2014-11-05 中国银行股份有限公司 一种程序代码复查方法和装置

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106294164A (zh) * 2016-08-15 2017-01-04 中国银行股份有限公司 一种代码检查方法及装置
CN106294164B (zh) * 2016-08-15 2019-02-19 中国银行股份有限公司 一种代码检查方法及装置
CN107391384A (zh) * 2017-08-14 2017-11-24 中国银行股份有限公司 一种sql语句检测方法及系统
CN109002283A (zh) * 2018-06-14 2018-12-14 南京航空航天大学 一种基于文件路径分析的代码审查者推荐方法
CN109002283B (zh) * 2018-06-14 2021-07-27 南京航空航天大学 一种基于文件路径分析的代码审查者推荐方法
CN115982059A (zh) * 2023-03-21 2023-04-18 麒麟软件有限公司 Shell脚本检查工具的实现方法

Also Published As

Publication number Publication date
CN105786710B (zh) 2018-10-16

Similar Documents

Publication Publication Date Title
CN104965735B (zh) 用于生成升级sql脚本的装置
US7711685B1 (en) Method and system for an extensible macro language
US8806452B2 (en) Transformation of computer programs and eliminating errors
US8307335B2 (en) Determination of a set of candidate code insertions for insertion in program code
CN111597243B (zh) 基于数据仓库抽象数据加载的方法及系统
CN105786710A (zh) 一种程序代码复查方法及引擎
CN105808438B (zh) 一种基于函数调用路径的测试用例复用方法
CN107016019B (zh) 数据库索引创建方法及装置
CN105302796A (zh) 一种基于依存树的语义分析方法
Srinivasan et al. Synthesis of machine code from semantics
Nigam et al. Tool for automatic discovery of ambiguity in requirements
CN110688544A (zh) 一种查询数据库的方法、设备及存储介质
CN107103007B (zh) 一种sql代码转换方法及装置
CN102981946B (zh) Etl冒烟测试方法
CN102915344B (zh) 一种sql语句处理方法及装置
CN108766507A (zh) 一种基于CQL与标准信息模型openEHR的临床质量指标计算方法
WO2018121041A1 (zh) 界面字符串筛选方法及系统
CN111177181A (zh) Sql文本审核方法、系统、存储介质及装置
CN104572876A (zh) 一种软件对应配置文件的读取方法和装置
US9098215B2 (en) Migration between model elements of different types in a modeling environment
US11366742B2 (en) Automated identification of lines of code related to errors field
CN107818100B (zh) 一种sql语句执行方法及装置
US7953714B2 (en) Method for maintaining parallelism in database processing using record identifier substitution assignment
CN111160018A (zh) 电气图纸非元器件文本识别方法、系统及存储介质
CN111090671B (zh) 消除数据库中空字符串和无效字符串差异的方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant