CN104050085A - 一种代码规范强制检查方法及系统 - Google Patents
一种代码规范强制检查方法及系统 Download PDFInfo
- Publication number
- CN104050085A CN104050085A CN201410292978.XA CN201410292978A CN104050085A CN 104050085 A CN104050085 A CN 104050085A CN 201410292978 A CN201410292978 A CN 201410292978A CN 104050085 A CN104050085 A CN 104050085A
- Authority
- CN
- China
- Prior art keywords
- standard
- code
- meet
- conducting
- standards
- 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.)
- Pending
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明涉及一种代码规范强制检查方法,包括:步骤1,在执行源代码编译命令前,判断当前用户是否具有检查权限,若有则执行步骤2,否则结束流程;步骤2,基于基本规范、程序CORE规范、内存泄露规范和SQL规范四个类别检查源代码是否符合规范,若符合则执行源代码编译命令,否则输出不符合规范的代码段。本发明将检查功能植入到编译命令中,存在不符合代码规范的代码段,不予编译,从根本上规避不规范的代码,且排查问题较为主动,灵活性高,易于执行。
Description
技术领域
本发明涉及电信行业的代码检测技术领域,与Linux/Unix shell编程技术和Linux/Unix C/C++编程技术相关,特别是涉及一种代码规范强制检查方法及系统。
背景技术
目前的软件行业,编程语言种类繁多,如java、c、c++、c#、jsp、perl、php、delphi等等,涉及各个领域,代码规范也格式各样,开发人员除了具备过硬的编程技术外,更需要一个良好的编码规范和编码习惯。然而,除了共性编码规范之外,每一种语言的要求也不尽相同,甚至尽管是同一种编程语言,每个研发人员的能力和编码风格也各不相同,如何能有效地规范代码编写呢?是规范文档,组织培训,代码审核,还是导师指导?列举的这样方法,已有很多软件公司都尝试过,但事实证明达不到期望的效果,归根结底的原因只有一个:规范检查无法强制执行。
因此,为了规范研发人员的代码排版、规避代码存在的内存泄露、规避SQL语句存在的性能问题,基于代码在实际研发和运行阶段存在并总结的具体问题,基于研发规范执行难、效果差等等,造成的后期代码在维护过程中的可读性差、耦合度高、灵活性差等等问题,基于在生产过程中代码问题排查过于被动(尤其是内存占用和程序COREDUMP)等,本发明提出了一种代码规范强制检查方法及系统。
发明内容
本发明所要解决的技术问题是提供一种代码规范强制检查方法及系统,用于解决有效规范代码编写的问题。
本发明解决上述技术问题的技术方案如下:一种代码规范强制检查方法,包括:
步骤1,在执行源代码编译命令前,判断当前用户是否具有检查权限,若有则执行步骤2,否则结束流程;
步骤2,基于基本规范、程序CORE规范、内存泄露规范和SQL规范四个类别检查源代码是否符合规范,若符合则执行源代码编译命令,否则输出不符合规范的代码段。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,所述步骤1中设有用于判断用户权限的程序配置文件。
进一步,所述步骤2还包括:增加代码规范,并检查源代码是否符合新增的代码规范。
进一步,所述基本规范包括标点符号规范和段落设置规范;
所述程序CORE规范包括输出格式规范、字符初始化规范和类型变量设置规范;
所述内存泄露规范包括utClone使用规范和utype类型返回函数规范;
所述SQL规范包括绑定变量规范和警示级提示规范。
进一步,还包括:若符合规范的源代码增加有代码段,则对新增的代码段重复步骤1和步骤2,只检查新增的代码段是否符合规范。
本发明的技术方案还包括一种代码规范强制检查系统,包括:
权限判断模块,用于在执行源代码编译命令前,判断当前用户是否具有检查权限;
规范检查模块,用于对具有检查权限的用于,基于基本规范、程序CORE规范、内存泄露规范和SQL规范四个类别检查源代码是否符合规范;
代码执行模块,用于执行符合规范的源代码的编译命令;
代码输出模块,用于输出不符合规范的代码段。
进一步,权限判断模块中设有用于判断用户权限的程序配置文件。
进一步,所述规范检查模块还用于:增加代码规范,并检查源代码是否符合新增的代码规范。
进一步,所述基本规范包括标点符号规范和段落设置规范;
所述程序CORE规范包括输出格式规范、字符初始化规范和类型变量设置规范;
所述内存泄露规范包括utClone使用规范和utype类型返回函数规范;
所述SQL规范包括绑定变量规范和警示级提示规范。
进一步,若符合规范的源代码增加有代码段,则规范检查模块只检查新增的代码段是否符合规范。
本发明的有益效果是:本发明进行的代码规范的强制检查,能规范程序员的编码,督促程序员养成良好的编码习惯,同时规范研发人员的代码排版、规避代码存在的内存泄露、规避SQL语句存在的性能问题等等,提高代码的可读性、易维护性。本发明将检查功能植入到编译命令中,存在不符合代码规范的代码段,不予编译,从根本上规避不规范的代码,且排查问题较为主动,灵活性高,易于执行。
附图说明
图1为本发明所述代码规范强制检查方法的流程示意图;
图2为本发明实施例中规范检查的整体流程图。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
如图1所示,本实施例给出了一种代码规范强制检查方法,包括:
步骤1,在执行源代码编译命令前,判断当前用户是否具有检查权限,若有则执行步骤2,否则结束流程;
步骤2,基于基本规范、程序CORE规范、内存泄露规范和SQL规范四个类别检查源代码是否符合规范,若符合则执行源代码编译命令,否则输出不符合规范的代码段。
源代码经上述检查符合规范后,再执行编译和链接动作,生成可执行文件或静态库或动态库等,若不符合规范,还需要提示文件哪些代码段不符合规范并给出具体原因,并不予编译,直到代码修改后全部符合规范,才允许编译。
对应地,本实施例还给出了一种代码规范强制检查系统,包括:
权限判断模块,用于在执行源代码编译命令前,判断当前用户是否具有检查权限;
规范检查模块,用于对具有检查权限的用于,基于基本规范、程序CORE规范、内存泄露规范和SQL规范四个类别检查源代码是否符合规范;
代码执行模块,用于执行符合规范的源代码的编译命令;
代码输出模块,用于输出不符合规范的代码段。
该系统的具体实施过程与原理同所述的代码规范强制检查方法一致。
本实施例通过Linux与Unix C/C++编程语言,结合Linux与Unix shell编程技术,运行环境依赖于UNIX或LINUX系统,主要是后台C或C++文件的代码规范检查。
上述两个步骤说明需要在执行编译命令前进行代码规范强制检查,本实施例的检查功能植入编译命令技术方案为:新增shell脚本cpschk.sh供编译命令cpmk调用;根据内容可知在真正执行编译命令cpsmake.sh之前,先调用代码规范检查cpschk.sh,若代码不符合规范则exit不予编译,实现代码强制检查功能。
cpmk内容如下
cpschk.sh内容如下,根据当前登录用户检查是否具备规范检查权限,若具备,则调用代码规范检查进程:
通过基本规范、程序CORE规范、内存泄露规范和SQL规范四大类别检查代码是否符合规范,以达到提前规避问题、代码合理排版、提高程序的可读性和易维护性、降低耦合度、提高灵活性。以下就没中类别举例说明规范检查项内容。
一、基本规范:包括标点符号规范和段落设置规范。例如:
1)花括号“{”、分号“;”需要独占一行;
2)每一行不允许使用空格缩进,必须使用TAB缩进。
二、程序CORE规范:包括输出格式规范、字符初始化规范和类型变量设置规范。例如:
1)printf格式化输出;
2)字符char类型变量初始化;
3)指针char*string*int*等类型变量是否需要释放。
三、内存泄露规范:包括utClone使用规范和utype类型返回函数规范。例如:
1)utClone使用不当导致内存泄露;
2)utype类型返回的函数未使用智能指针变量接收。
四、SQL规范:包括绑定变量规范和警示级提示规范。例如:
1)SQL语句中未使用绑定变量
2)SQL语句中使用了order by或group by,作为警示级提示。
另外,本实施例中所述步骤2还包括:增加代码规范,并检查源代码是否符合新增的代码规范,使得本方案的支撑功能更强,根据实际遇到的问题,修改规范检查代码不断新增检查项。
同时,若符合规范的源代码增加有代码段,则对新增的代码段重复步骤1和步骤2,只检查新增的代码段是否符合规范。这样使得检查范围缩小,已存在的不规范代码修改成本和风险都比较大的话,只针对本次修改的代码段进行规范检查,包括是否加了注释、注释是否符合规范要求等等。
本实施例中当前用户是否存在检查权限,是根据文件userlist.cfg配置的,其可在上述的cpschk.sh中实现,具体判断过程包括:获取当前登录用户的用户名LOGIN_NAME,校验LOGIN_NAME是否则配置文件userlist.cfg中,若存在则进行规范检查,否则不具备检查权限。
本实施例中的规范检查整体流程图如图2所示,下面给出各流程中涉及的函数说明。
1)代码合法性检查主体函数
void codeChkByFile(multimap<string,string>&map_sysCode,const string&sFileName,set<string>&set_illcnt)
2)基本语法检查
int common(multimap<string,string>&map_chkParam)
3)代码coredump语法检查
int coredump(multimap<string,string>&map_chkParam)
4)内存泄露语法检查
int memLeak(multimap<string,string>&map_chkParam)
5)保存程序语言中的关键字,set_sysdatatype为全局变量
void setSysDatatype(set<string>&set_sysdatatype)
6)保存程序语言中的系统函数,此集合中的函数将不作为业务函数校验
void setSysFunList(set<string>&set_sysfunlist)
7)获取strLine中定义的变量名称
set<string>getDefVarName(const string&strLine,const string sLineNum)
8)获取规范文件中保存的指定系统规范
void setSysCodeByFile(string&sFileName,multimap<string,string>&map_sysCode)
9)获取path目录下所有以confirmfile后缀名的文件
int getAllFileName(const char*path,string confirmfile,set<string>&set_file)
10)获取所有头文件信息
void getAllFileHead(set<string>&set_func,set<string>&set_file)
11)将字符串sLine中调用的函数拆分出来并记入set对象
set<string>getCallFuncName(const string sLine)
12)将字符串srcstr中的srcpapastr字符,用parastr字符替换
void replacestr(string&srcstr,string srcpapastr,string parastr)
13)字符串srcstr是否是有效变量或函数名
bool isVarName(const string srcstr)
14)剔除字符串S的空格
char*Trim(char*S)
15)将字符串str按sign分割,返回vector类型的变量
vector<string>split(const string str,string sign)
16)int类型的num变量转换为string类型
string int2str(int num)
下面以修改pPubInnet.cpp文件为例,其存在内存泄露或代码排版格式问题,在执行编译命令时,验证源文件是否存在不规范的代码段。运行环境为:TUXEDO主机、HP-UX类型,IP地址172.21.0.116,目标源代码路径已选定。
采用本实施例所述方案的具体执行过程为:
第一步:修改pPubInnet.cpp。
第二步:修改完成之后,执行编译命令cpmk pPubInnet.cpp,若具有代码规范检查权限,且输出存在不符合规范内容,不予编译;
若不具有代码规范检查权限,则指明不具备检查权限。
第三步:修改代码后,若代码全部符合规范,再次执行cpmkpPubInnet.cpp命令编译和链接。
第四步:编译成功,生成动态库libpPubInnet.so。
第五步:完成。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种代码规范强制检查方法,其特征在于,包括:
步骤1,在执行源代码编译命令前,判断当前用户是否具有检查权限,若有则执行步骤2,否则结束流程;
步骤2,基于基本规范、程序CORE规范、内存泄露规范和SQL规范四个类别检查源代码是否符合规范,若符合则执行源代码编译命令,否则输出不符合规范的代码段。
2.根据权利要求1所述的代码规范强制检查方法,其特征在于,所述步骤1中设有用于判断用户权限的程序配置文件。
3.根据权利要求1所述的代码规范强制检查方法,其特征在于,所述步骤2还包括:增加代码规范,并检查源代码是否符合新增的代码规范。
4.根据权利要求1所述的代码规范强制检查方法,其特征在于,所述基本规范包括标点符号规范和段落设置规范;
所述程序CORE规范包括输出格式规范、字符初始化规范和类型变量设置规范;
所述内存泄露规范包括utClone使用规范和utype类型返回函数规范;
所述SQL规范包括绑定变量规范和警示级提示规范。
5.根据权利要求1至4中任一所述的代码规范强制检查方法,其特征在于,还包括:若符合规范的源代码增加有代码段,则对新增的代码段重复步骤1和步骤2,只检查新增的代码段是否符合规范。
6.一种代码规范强制检查系统,其特征在于,包括:
权限判断模块,用于在执行源代码编译命令前,判断当前用户是否具有检查权限;
规范检查模块,用于对具有检查权限的用于,基于基本规范、程序CORE规范、内存泄露规范和SQL规范四个类别检查源代码是否符合规范;
代码执行模块,用于执行符合规范的源代码的编译命令;
代码输出模块,用于输出不符合规范的代码段。
7.根据权利要求6所述的代码规范强制检查系统,其特征在于,权限判断模块中设有用于判断用户权限的程序配置文件。
8.根据权利要求6所述的代码规范强制检查系统,其特征在于,所述规范检查模块还用于:增加代码规范,并检查源代码是否符合新增的代码规范。
9.根据权利要求6所述的代码规范强制检查系统,其特征在于,所述基本规范包括标点符号规范和段落设置规范;
所述程序CORE规范包括输出格式规范、字符初始化规范和类型变量设置规范;
所述内存泄露规范包括utClone使用规范和utype类型返回函数规范;
所述SQL规范包括绑定变量规范和警示级提示规范。
10.根据权利要求6至9中任一所述的代码规范强制检查系统,其特征在于,若符合规范的源代码增加有代码段,则规范检查模块只检查新增的代码段是否符合规范。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410292978.XA CN104050085A (zh) | 2014-06-25 | 2014-06-25 | 一种代码规范强制检查方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410292978.XA CN104050085A (zh) | 2014-06-25 | 2014-06-25 | 一种代码规范强制检查方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104050085A true CN104050085A (zh) | 2014-09-17 |
Family
ID=51502971
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410292978.XA Pending CN104050085A (zh) | 2014-06-25 | 2014-06-25 | 一种代码规范强制检查方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104050085A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104268353A (zh) * | 2014-10-10 | 2015-01-07 | 中国农业银行股份有限公司 | 一种规范检测方法及装置 |
CN107122391A (zh) * | 2017-03-06 | 2017-09-01 | 广东顺德中山大学卡内基梅隆大学国际联合研究院 | 一种基于历史记录的代码审核人推荐方法 |
CN109358564A (zh) * | 2018-09-19 | 2019-02-19 | 珠海格力电器股份有限公司 | 一种检测组态软件的方法及装置、计算机可读存储介质 |
CN109471634A (zh) * | 2018-08-28 | 2019-03-15 | 上海思立微电子科技有限公司 | 源代码格式的检查方法及设备 |
CN109491924A (zh) * | 2018-12-21 | 2019-03-19 | 北京达佳互联信息技术有限公司 | 代码检测方法、装置、终端及存储介质 |
CN109683881A (zh) * | 2018-12-27 | 2019-04-26 | 潍柴动力股份有限公司 | 一种代码格式调整方法及装置 |
CN109710518A (zh) * | 2018-12-13 | 2019-05-03 | 中国联合网络通信集团有限公司 | 脚本审核方法及装置 |
CN109710304A (zh) * | 2018-12-27 | 2019-05-03 | 潍柴动力股份有限公司 | 一种格式调整方法及装置 |
CN110795080A (zh) * | 2019-10-21 | 2020-02-14 | 山东舜知信息科技有限公司 | 一种基于数据库注释的代码自动生成系统及构建方法 |
CN111984243A (zh) * | 2020-08-31 | 2020-11-24 | 上海玳鸽信息技术有限公司 | 一种基于注解的通用安全检查及功能扩展方法及装置 |
-
2014
- 2014-06-25 CN CN201410292978.XA patent/CN104050085A/zh active Pending
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104268353B (zh) * | 2014-10-10 | 2017-05-31 | 中国农业银行股份有限公司 | 一种规范检测方法及装置 |
CN104268353A (zh) * | 2014-10-10 | 2015-01-07 | 中国农业银行股份有限公司 | 一种规范检测方法及装置 |
CN107122391B (zh) * | 2017-03-06 | 2021-02-23 | 广东顺德中山大学卡内基梅隆大学国际联合研究院 | 一种基于历史记录的代码审核人推荐方法 |
CN107122391A (zh) * | 2017-03-06 | 2017-09-01 | 广东顺德中山大学卡内基梅隆大学国际联合研究院 | 一种基于历史记录的代码审核人推荐方法 |
CN109471634B (zh) * | 2018-08-28 | 2021-11-16 | 上海思立微电子科技有限公司 | 源代码格式的检查方法及设备 |
CN109471634A (zh) * | 2018-08-28 | 2019-03-15 | 上海思立微电子科技有限公司 | 源代码格式的检查方法及设备 |
CN109358564A (zh) * | 2018-09-19 | 2019-02-19 | 珠海格力电器股份有限公司 | 一种检测组态软件的方法及装置、计算机可读存储介质 |
CN109358564B (zh) * | 2018-09-19 | 2022-05-20 | 珠海格力电器股份有限公司 | 一种检测组态软件的方法及装置、计算机可读存储介质 |
CN109710518A (zh) * | 2018-12-13 | 2019-05-03 | 中国联合网络通信集团有限公司 | 脚本审核方法及装置 |
CN109491924A (zh) * | 2018-12-21 | 2019-03-19 | 北京达佳互联信息技术有限公司 | 代码检测方法、装置、终端及存储介质 |
CN109683881A (zh) * | 2018-12-27 | 2019-04-26 | 潍柴动力股份有限公司 | 一种代码格式调整方法及装置 |
CN109710304A (zh) * | 2018-12-27 | 2019-05-03 | 潍柴动力股份有限公司 | 一种格式调整方法及装置 |
CN109683881B (zh) * | 2018-12-27 | 2022-04-05 | 潍柴动力股份有限公司 | 一种代码格式调整方法及装置 |
CN109710304B (zh) * | 2018-12-27 | 2022-06-24 | 潍柴动力股份有限公司 | 一种格式调整方法及装置 |
CN110795080A (zh) * | 2019-10-21 | 2020-02-14 | 山东舜知信息科技有限公司 | 一种基于数据库注释的代码自动生成系统及构建方法 |
CN111984243A (zh) * | 2020-08-31 | 2020-11-24 | 上海玳鸽信息技术有限公司 | 一种基于注解的通用安全检查及功能扩展方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104050085A (zh) | 一种代码规范强制检查方法及系统 | |
AU2012203071B2 (en) | Computer-implemented method, system and computer program product for displaying a user interface component | |
CN109670053B (zh) | 数据对象映射方法、装置、设备和计算机可读存储介质 | |
CN110262783B (zh) | 一种接口生成方法、装置及终端设备 | |
CN102591777A (zh) | 一种单元测试代码生成方法及装置 | |
US20020147972A1 (en) | System and method for configuring an application environment on a computer platform | |
US11042467B2 (en) | Automated searching and identification of software patches | |
CN109145235B (zh) | 用于解析网页的方法、装置及电子设备 | |
CN108037913B (zh) | xUML4MC模型到MSVL语言程序的转换方法、计算机可读存储介质 | |
US11650901B2 (en) | Automated generation of software patches | |
US12032941B2 (en) | Method and system for updating legacy software | |
Behrens | MDSD for the iPhone: developing a domain-specific language and IDE tooling to produce real world applications for mobile devices | |
CN102262684A (zh) | 移动终端网页页面生成方法及装置 | |
Benouda et al. | MDA approach to automate code generation for mobile applications | |
CN110688823A (zh) | Xml文件验证方法及装置 | |
CN112328241B (zh) | 一种应用程序开发中创建Android库模块依赖关系的方法及装置 | |
Naumowicz et al. | Accessing the Mizar library with a weakly strict Mizar parser | |
EP2535813B1 (en) | Method and device for generating an alert during an analysis of performance of a computer application | |
US9916315B2 (en) | Computer implemented system and method for comparing at least two visual programming language files | |
CN113448874A (zh) | 一种单元测试脚本的生成方法及装置 | |
CN114817124A (zh) | 多核微控制器间映射方法、设备及计算机可读存储介质 | |
Hewson et al. | Modelling system administration problems with CSPs | |
US20120054713A1 (en) | Method for Generating Specifications of Static Test | |
CN116860324B (zh) | 开发数据处理方法、开发数据处理设备以及可读存储介质 | |
Shahjamali | An Empirical Analysis of Java Language Use in Open Source Applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140917 |
|
RJ01 | Rejection of invention patent application after publication |