CN103164325A - 一种控制编码的方法和装置 - Google Patents

一种控制编码的方法和装置 Download PDF

Info

Publication number
CN103164325A
CN103164325A CN2011104098611A CN201110409861A CN103164325A CN 103164325 A CN103164325 A CN 103164325A CN 2011104098611 A CN2011104098611 A CN 2011104098611A CN 201110409861 A CN201110409861 A CN 201110409861A CN 103164325 A CN103164325 A CN 103164325A
Authority
CN
China
Prior art keywords
source code
coding rule
element information
coding
rule
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
CN2011104098611A
Other languages
English (en)
Other versions
CN103164325B (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.)
Beijing Feinno Communication Technology Co Ltd
Original Assignee
Beijing Feinno Communication Technology Co 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 Beijing Feinno Communication Technology Co Ltd filed Critical Beijing Feinno Communication Technology Co Ltd
Priority to CN201110409861.1A priority Critical patent/CN103164325B/zh
Publication of CN103164325A publication Critical patent/CN103164325A/zh
Application granted granted Critical
Publication of CN103164325B publication Critical patent/CN103164325B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明公开了一种控制编码的方法和装置,能够减少开发者之间通信工作量,提高工作效率,降低项目交接时的技术难度和工作量,提高开发的效率和开发软件的质量。本发明实施例提供的控制编码的方法,包括:对源代码进行解析得到源代码所对应的元素信息,所述每一元素信息相应于一种元素模型;根据所述元素模型生成所需的编码规则;将相应的编码规则与所述源代码的元素信息进行比对,并根据比对结果判断源代码是否符合所述编码规则,若是,允许运行所述源代码,若否,禁止运行所述源代码。

Description

一种控制编码的方法和装置
技术领域
本发明涉及领域计算机软件技术领域,特别涉及一种控制编码的方法和装置。
背景技术
软件开发大部分工作都是编写代码,而代码的质量也就决定了软件的质量,提高代码质量方法之一就是开发团队遵守编码规范。编码规范是一种约定,减少了开发者个人编码的自由度,从某种意义上来说可以帮助开发者不用操心一些编码细节上的选择问题。统一的编码规范可以减少人员之间通信工作量,提高工作效率。
现有的软件开发操作中,至少存在如下问题:
开发团队中开发者新老不一,水平参差不齐,且各自有着不同的编码习惯。虽然现阶段一些公司会制定规范文档来约束开发者,保证开发团队之间代码的一致性,然而,就算存在规范文档,主动去看并且遵守的开发者是少之又少,规范文档形同虚设,无法达到降低不同开发者通信时的工作量和提高工作效率的效果;在进行项目交接时,编码规范不一致所带来的问题会极为突出,代码修改的工作量会非常大,甚至需要重写代码,从而造成了资源的极大浪费,降低了开发的效率和所开发软件的质量。
发明内容
本发明提供的控制编码的方法和装置,能够达到减少开发者之间通信工作量,提高工作效率的效果,降低项目交接时的技术难度和工作量,提高开发的效率和开发软件的质量。
为达到上述目的,本发明实施例采用了如下技术方案:
一种控制编码的方法,包括:
对源代码进行解析得到源代码所对应的元素信息,所述每一元素信息相应于一种元素模型;
根据所述元素模型生成所需的编码规则;
将相应的编码规则与所述源代码的元素信息进行比对,并根据比对结果判断源代码是否符合所述编码规则,若是,允许运行所述源代码,若否,禁止运行所述源代码。
一种控制编码的装置,该装置包括:
源代码解析单元,用于对源代码进行解析得到源代码所对应的元素信息,所述每一元素信息相应于一种元素模型;
编码规则设置单元,用于根据所述元素模型生成所需的编码规则;
编码控制单元,用于将相应的编码规则与所述源代码的元素信息进行比对,并根据比对结果判断源代码是否符合所述编码规则,若是,允许运行所述源代码,若否,禁止运行所述源代码。
本发明实施例的有益效果是:
本发明实施例通过对代码结构的具体分析,将源代码解析成元素模型所对应的元素信息,并按照相同的模型生成编码规则代码,通过进行元素信息和编码规则的比对,只有当源代码符合编码规则时,才允许源代码的运行,从而实现了对编码的控制。
本发明实施例的方案能够在源代码运行前进行强制检查,保证所运行的源代码符合统一的编码规则,达到减少开发者之间通信工作量,提高工作效率的效果,降低项目交接时的技术难度和工作量,提高了开发的效率和开发软件的质量。
附图说明
图1为本发明实施例一提供的一种控制编码的方法流程示意图;
图2为本发明实施例二提供的一种反射机制的层次模型示意图;
图3为本发明实施例二提供的比对结果在界面上显示时的截屏示意图;
图4为本发明实施例二提供的控制编码方法的流程图;
图5为本发明实施例三提供的一种控制编码的装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
参见图1,为本发明实施例一提供的一种控制编码的方法,包括如下处理:
11:对源代码进行解析得到源代码所对应的元素信息,所述每一元素信息相应于一种元素模型;
12:根据与源代码的上述元素模型相同的元素模型生成所需的编码规则。
13:将相应的编码规则与所述源代码的元素信息进行比对,并根据比对结果判断源代码是否符合所述编码规则。
14:当元素信息和编码规则一致,即源代码符合编码规则时,允许运行所述源代码。
15:当元素信息和编码规则不一致,即源代码不符合编码规则时,禁止运行所述源代码。
本发明实施例中上述步骤对应的功能可以插件的方式实现,将插件设置于代码开发工具(如代码开发工具FxCop)中。在代码开发工具上,若要运行编写的源代码,首先得编译成中间语言,然后中间语言才能转换为计算机语言执行。本方案在源代码生成中间语言前启动插件强制检查源代码,如有不符合编码规范的现象,则不让源代码生成中间语言,也就是使源代码无法运行,从而保证了所运行的代码都遵从统一的编码规范。
下面对本发明实施例二提供的一种控制编码的方法进行说明。本实施例中主要以在代码开发工具FxCop上控制编码的场景为例进行说明,包括如下处理:
11:对源代码进行解析得到源代码所对应的元素信息,所述每一元素信息相应于一种元素模型。
利用反射机制对源代码进行解析得到源代码所对应的元素信息,所述元素模型包括类和相应的类成员。
反射(Reflect)机制具有审查元数据并收集关于它的类型信息的能力,能够实现对程序状态或行为的访问、检测和修改。
参见图2,显示了本实施例提供的一种反射机制的层次模型示意图,这种层次可以表示为:程序集->类->类成员。
利用反射机制对程序集中一个程序的源代码进行解析时,可以得到该源代码中的各个类以及相应的类成员,例如,利用Gettypes命令得到一种类型的类,以及该类下的类成员,如事件、字段、方法、属性,构造函数、时间等。
例如,对于一个程序集reflecting.exe,利用如下命令先调用反射机制,该反射机制定义了获取反射信息的方法,从而得到对程序集中各程序源代码的解析结果,即各源代码对应的元素信息。
Figure BDA0000118257680000041
上面的例子中,仅以各个类的类成员中包括事件、字段、方法、属性,构造函数的场景为例进行了说明,可以理解,当类成员中还包括其他元素时,采用类似的方式添加相应的指令即可。
12:根据与源代码的上述元素模型相同的源代码的生成所需的编码规则。
本实施例中按照与源代码的元素模型相同的模型生成编码规则代码,从而保证了能够根据编码规则对源代码进行比对和检查。
具体的,上述步骤11中的元素模型与FxCop中的元素模型是一致的,所以可以根据该元素模型通过继承代码开发工具FxCop中的基础内置规则类BaseIntrospectionRule,并重新编写基础内置规则类中的方法Check。在方法check()中编写代码,该代码能够实现编码规则的逻辑,从而生成所需的编码规则,可以理解,当编码规则不同时,需要重新编写的代码也不同。
例如,若当前处理的编码规则为“方法首字母必须大写且不能以下划线_开头以及结尾”,则一个命令的示例可以表示如下:
Figure BDA0000118257680000061
由上述可知,通过重写编码代码将“方法首字母必须大写且不能以下划线_开头以及结尾”的具体逻辑写入方法check()中,生成了对应于该内容的编码规则。
进一步的,本方案还包括:为所生成的编码规则添加配置文件,该配置文件标识所述编码规则并设置该编码规则的作用方式,该作用方式可以指示代码的运行方式,不同编码规则的作用方式可以不同,例如,一种作用方式可以为当检测到异常时不停止代码运行、继续检测,又一种作用方法可以为当检测到异常时将该异常填充到异常列表中,等等。例如,该配置文件可以包含编码规则的名字,用以标识该编码规则。下述为“属性首字母必须大写”的编码规则的配置文件的一个示例:
Figure BDA0000118257680000062
在上述示例中,指示了编码规则“属性首字母必须大写”的名字(Name)、描述(Description)、解决方案(Resolution)、消息等级确认度(MessageLevelCertainty)和作用方式包括NonBreaking和DependsOnFix,其中,NonBreaking指示检测到异常时不停止、继续检测,DependsOnFix指示将该异常追加填充到异常列表中。
利用配置文件建立配置文件之间的关联关系,例如,当需要在一个已经包括多个编码规则的规则集中增加一个新的编码规则时,利用新增编码规则的配置文件与该规则集建立关联,将新增的编码规则加入到该规则集中;或者,根据配置文件从包括多个编码规则的规则集中,选择并提取相应的编码规则。
利用配置文件还可以建立相应编码规则与代码开发工具的关联关系,例如,FxCop利用配置文件查找到编码规则并加载至该开发工具中。
13:将相应的编码规则与所述源代码的元素信息进行比对,并根据比对结果判断源代码是否符合所述编码规则。
上述相应的编码规则主要指当前所采用的编码规则,该编码规则可以包括一个规则集中的所有编码规则,也可以是从一个规则集中选取的部分编码规则。示例性的,编码规则可以为“类名首字母必须大写”“接口命名以大写I开头”“类名长度不超过25个字符”“字段不要以开头以及结尾”“不是public的字段首字母必须小写”等,在此不进行限定,可以根据需要自行定义。
进一步的,为了便于开发者的操作,本实施例还可以将比对结果存入一个列表,输出在显示界面上,参见图3,为比对结果在界面上显示时的截屏示意图,在列表中对代码不符合编码规则的具体内容以及具体代码行数都进行了记录,从而能够对代码进行快速的查找和修改。
14:当元素信息和编码规则一致,即源代码符合编码规则时,允许运行所述源代码。
例如,若源代码成功通过了比对操作,则允许该源代码进行下一步的程序编译,生成中间语言并执行。
15:当元素信息和编码规则不一致,即源代码不符合编码规则时,禁止运行所述源代码。
这时,在比对结果中会包含错误信息,将该错误上报至开发工具,开发工具会阻止源代码的运行。
本实施例中允许对不符合编码规则的源代码进行多次更新,直至其符合编码规则,这时,本方法还包括:接收根据比对结果更新后的源代码,并对更新后的源代码进行解析得到对应的元素信息;将相应的编码规则与更新后的源代码的元素信息进行比对,根据比对结果判断更新后的源代码是否符合所述编码规则,若是,允许运行更新后的源代码,若否,禁止运行所述源代码和更新后的源代码。
参见图4,显示了本实施例中控制编码方法的流程图。在代码开发工具中编写完成源代码之后,在对该源代码进行编译之前,在代码开发工具中加载编码规则,并将该编码规则与源代码进行比对,当源代码未通过比对,即不符合编码规则时,更新该源代码,重复执行比对操作。当源代码(包括更新后的源代码)通过比对,即符合编码规则时,对该源代码进行编译生成中间语言,然后转换为计算机语言,由代码开发工具执行该计算机语言。
本发明实施例三还提供了一种控制编码的装置,参见图5,所述装置包括:
源代码解析单元51,用于对源代码进行解析得到源代码所对应的元素信息,所述每一元素信息相应于一种元素模型;
编码规则设置单元52,用于根据所述元素模型生成所需的编码规则;
编码控制单元53,用于将相应的编码规则与所述源代码的元素信息进行比对,并根据比对结果判断源代码是否符合所述编码规则,若是,允许运行所述源代码,若否,禁止运行所述源代码。
进一步的,所述源代码解析单元51,具体用于利用反射机制对源代码进行解析得到源代码所对应的元素信息,所述元素模型包括类和相应的类成员。
进一步的,所述编码规则设置单元52,具体用于根据所述元素模型通过继承代码开发工具FxCop中的基础内置规则类BaseIntrospectionRule,并重写基础内置规则类中的方法Check,生成所需的编码规则。
上述编码规则设置单元52,还可以为所生成的编码规则添加配置文件,该配置文件标识所述编码规则并设置该编码规则的作用方式。这时,本装置在包括多个编码规则的规则集中增加一个新的编码规则时,利用新增编码规则的配置文件与该规则集建立关联,将新增的编码规则加入到该规则集中,或者,在将相应的编码规则与所述源代码的元素信息进行比对之前,根据配置文件从包括多个编码规则的规则集中,选择并提取相应的编码规则。
进一步的,本装置还包括源代码更新单元,用于在禁止运行所述源代码之前,接收根据比对结果更新后的源代码,并对更新后的源代码进行解析得到对应的元素信息;将相应的编码规则与更新后的源代码的元素信息进行比对,根据比对结果判断更新后的源代码是否符合所述编码规则,若是,允许运行更新后的源代码,若否,禁止运行所述源代码和更新后的源代码。
本发明装置实施例中各单元的具体工作方式可以参见本发明实施例的方法实施例。
由上所述,本发明实施例通过对代码结构的具体分析,将源代码解析成元素模型所对应的元素信息,并按照相同的模型生成编码规则代码,通过进行元素信息和编码规则的比对,只有当源代码符合编码规则时,才允许源代码的运行,从而实现了对编码的控制。
本发明实施例的方案能够在源代码运行前进行强制检查,保证所运行的源代码符合统一的编码规则,达到减少开发者之间通信工作量,提高工作效率的效果,降低项目交接时的技术难度和工作量,提高了开发的效率和开发软件的质量。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

Claims (10)

1.一种控制编码的方法,其特征在于,所述方法包括:
对源代码进行解析得到源代码所对应的元素信息,所述每一元素信息相应于一种元素模型;
根据所述元素模型生成所需的编码规则;
将相应的编码规则与所述源代码的元素信息进行比对,并根据比对结果判断源代码是否符合所述编码规则,若是,允许运行所述源代码,若否,禁止运行所述源代码。
2.根据权利要求1所述的方法,其特征在于,所述对源代码进行解析得到源代码所对应的元素信息,所述每一元素信息相应于一种元素模型包括:
利用反射机制对源代码进行解析得到源代码所对应的元素信息,所述元素模型包括类和相应的类成员。
3.根据权利要求2所述的方法,其特征在于,所述根据所述元素模型生成所需的编码规则包括:
根据所述元素模型通过继承代码开发工具FxCop中的基础内置规则类BaseIntrospectionRule,并重写基础内置规则类中的方法Check,生成所需的编码规则。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
为所生成的编码规则添加配置文件,该配置文件标识所述编码规则并设置该编码规则的作用方式。
5.根据权利要求4所述的方法,其特征在于,在将相应的编码规则与所述源代码的元素信息进行比对之前,所述方法还包括:
在包括多个编码规则的规则集中增加一个新的编码规则时,利用新增编码规则的配置文件与该规则集建立关联,将新增的编码规则加入到该规则集中。
6.根据权利要求4所述的方法,其特征在于,在将相应的编码规则与所述源代码的元素信息进行比对之前,所述方法还包括:
根据配置文件从包括多个编码规则的规则集中,选择并提取相应的编码规则。
7.根据权利要求1至6任一项所述的方法,其特征在于,在禁止运行所述源代码之前,所述方法还包括:
接收根据比对结果更新后的源代码,并对更新后的源代码进行解析得到对应的元素信息;
将相应的编码规则与更新后的源代码的元素信息进行比对,根据比对结果判断更新后的源代码是否符合所述编码规则,若是,允许运行更新后的源代码,若否,禁止运行所述源代码和更新后的源代码。
8.一种控制编码的装置,其特征在于,所述装置包括:
源代码解析单元,用于对源代码进行解析得到源代码所对应的元素信息,所述每一元素信息相应于一种元素模型;
编码规则设置单元,用于根据所述元素模型生成所需的编码规则;
编码控制单元,用于将相应的编码规则与所述源代码的元素信息进行比对,并根据比对结果判断源代码是否符合所述编码规则,若是,允许运行所述源代码,若否,禁止运行所述源代码。
9.根据权利要求8所述的装置,其特征在于,
所述源代码解析单元,具体用于利用反射机制对源代码进行解析得到源代码所对应的元素信息,所述元素模型包括类和相应的类成员。
10.根据权利要求9所述的装置,其特征在于,所述编码规则设置单元,具体用于根据所述元素模型通过继承代码开发工具FxCop中的基础内置规则类BaseIntrospectionRule,并重写基础内置规则类中的方法Check,生成所需的编码规则。
CN201110409861.1A 2011-12-09 2011-12-09 一种控制编码的方法和装置 Active CN103164325B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110409861.1A CN103164325B (zh) 2011-12-09 2011-12-09 一种控制编码的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110409861.1A CN103164325B (zh) 2011-12-09 2011-12-09 一种控制编码的方法和装置

Publications (2)

Publication Number Publication Date
CN103164325A true CN103164325A (zh) 2013-06-19
CN103164325B CN103164325B (zh) 2016-04-06

Family

ID=48587430

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110409861.1A Active CN103164325B (zh) 2011-12-09 2011-12-09 一种控制编码的方法和装置

Country Status (1)

Country Link
CN (1) CN103164325B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108897534A (zh) * 2018-06-05 2018-11-27 上海小蚁科技有限公司 一种代码开发的辅助方法及装置、存储介质、终端
CN110275836A (zh) * 2019-06-27 2019-09-24 深圳市腾讯信息技术有限公司 虚幻引擎应用的安全测试方法、装置及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1996010319A2 (en) * 1994-09-27 1996-04-04 Telefonaktiebolaget Lm Ericsson A method and system for updating software within a telecommunications switch without interrupting existing communication
CN101162428A (zh) * 2007-11-22 2008-04-16 上海交通大学 软件动态演化中构件运行时状态的获取和转换方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1996010319A2 (en) * 1994-09-27 1996-04-04 Telefonaktiebolaget Lm Ericsson A method and system for updating software within a telecommunications switch without interrupting existing communication
CN101162428A (zh) * 2007-11-22 2008-04-16 上海交通大学 软件动态演化中构件运行时状态的获取和转换方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
NAOUEL MOHA.ET: "DECOR:A Method for the Specification and Detection of Code and Design Smells", 《IEEE TRANSACTIONS ON SOFTWARE ENGINEERING》, vol. 36, no. 1, 28 February 2010 (2010-02-28), XP011282232, DOI: doi:10.1109/TSE.2009.50 *
朱祁林: "通过FxCop来验证.NET编码规范", 《HTTP://WWW.CNBLOGS.COM/ZHUQIL/ARCHIVE/2010/12/07/FXCOP.HTML》, 7 December 2010 (2010-12-07) *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108897534A (zh) * 2018-06-05 2018-11-27 上海小蚁科技有限公司 一种代码开发的辅助方法及装置、存储介质、终端
CN110275836A (zh) * 2019-06-27 2019-09-24 深圳市腾讯信息技术有限公司 虚幻引擎应用的安全测试方法、装置及存储介质
CN110275836B (zh) * 2019-06-27 2024-04-19 深圳市腾讯信息技术有限公司 虚幻引擎应用的安全测试方法、装置及存储介质

Also Published As

Publication number Publication date
CN103164325B (zh) 2016-04-06

Similar Documents

Publication Publication Date Title
Memon Automatically repairing event sequence-based GUI test suites for regression testing
EP2368189B1 (en) Debugging pipeline
CN102934114B (zh) 用于文件系统的检查点
US20120284631A1 (en) Methods to adapt user interfaces and input controls
US8645938B2 (en) System and method for replacing code
CN107357593A (zh) 源代码文件组建方法、装置、电子终端及可读存储介质
CN108491199A (zh) 一种自动生成接口的方法及终端
WO2014100552A1 (en) Test strategy for profile-guided code execution optimizers
US9311077B2 (en) Identification of code changes using language syntax and changeset data
WO2008043005A1 (en) Model checking parameterized threads for safety
Cordy et al. Counterexample guided abstraction refinement of product-line behavioural models
Ren et al. Making smart contract development more secure and easier
KR20190015285A (ko) Cpu 이용 및 코드 리팩토링을 위한 쿼리 최적화기
US20060085761A1 (en) Text masking provider
CN112148278A (zh) 可视化的区块链智能合约框架及智能合约开发部署方法
CN112395843A (zh) 一种基于php代码的业务处理方法、装置及设备和介质
CN115952758A (zh) 芯片验证方法、装置、电子设备及存储介质
CN1996375A (zh) 一种在主机环境中进行交易测试的方法及装置
US9715372B2 (en) Executable guidance experiences based on implicitly generated guidance models
US20140068552A1 (en) Infrastructure for automatically generating boilerplate code using annotations and code-generators
WO2013186642A1 (en) Instantiating a coding competition to develop a program module in a networked computing environment
CN111158777B (zh) 组件调用方法、装置及计算机可读存储介质
CN103164325A (zh) 一种控制编码的方法和装置
Ben-David et al. CSSL: a logic for specifying conditional scenarios
CN112579475A (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
C14 Grant of patent or utility model
GR01 Patent grant
CP02 Change in the address of a patent holder

Address after: Room 810, 8 / F, 34 Haidian Street, Haidian District, Beijing 100080

Patentee after: BEIJING D-MEDIA COMMUNICATION TECHNOLOGY Co.,Ltd.

Address before: 100089 Beijing city Haidian District wanquanzhuang Road No. 28 Wanliu new building 6 storey block A room 602

Patentee before: BEIJING D-MEDIA COMMUNICATION TECHNOLOGY Co.,Ltd.

CP02 Change in the address of a patent holder