研发中心软件编码规范.docx

上传人:太** 文档编号:72183616 上传时间:2023-02-09 格式:DOCX 页数:43 大小:183.04KB
返回 下载 相关 举报
研发中心软件编码规范.docx_第1页
第1页 / 共43页
研发中心软件编码规范.docx_第2页
第2页 / 共43页
点击查看更多>>
资源描述

《研发中心软件编码规范.docx》由会员分享,可在线阅读,更多相关《研发中心软件编码规范.docx(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、研发中心软件编码规范(2017年修订版)BBTNL. COM有限责任公司二O一七年十一月YF-C-004YF-C-004研发中心软件编码规范附录AC编码要求A. 1标识符(A)枚举元素不能与其他变量同名。A. 2声明与定义a) (A)具有文件作用域的对象尽量声明为static;b) (A)不要定义寄存器(register)变量;c) (A)变量声明应局部化,防止声明全局变量。A. 3控制流(A)不使用goto语句。A. 4初始化a) (R)用非零初始化数组和结构时,使用大括号来指示和匹配结构;(R)枚举元素的初始化必须完整。初始化枚举类型,仅有两种形式是 安全的:一种是初始化所有项,另一种是仅

2、初始化第一项。b) (R)确保全局变量在使用前被初始化;A. 5操作符a) (R)不要使用三元操作符“?:”;b) (R)不要使用多赋值语句;反例:x = y = z;c) (R)禁止赋值操作符与“&”或连用;d) (R)防止使用逗号操作符。但在参数列表和for循环中可以使用;e) (R)赋值操作两端的变量类型应该匹配;(R)不要使用“二”以外的赋值操作符,如“+=、“*=、 “/=、“%=、“&=、|=”等;f) (R)使用“+”、“一”操作符的必须是简单语句;(A)逻辑操作符“&”或“ | | ”只能用于初等表达式中; 说明:初等表达式指单个标识符或常量或打了圆括号的表达式;g) (A)位

3、操作符不要带有布尔型的操作数,逻辑操作符(“&”、“ H ”、 “! ”)不要与位操作符(“&”、,、)混淆,布尔值上不 要进行位操作。A. 6转换a) (R)不要使用会损失精度的类型转换;8YF-C-004研发中心软件编码规范b) (R)防止隐式声明类型。A.7宏a) (R)代码中的数值应由一个有意义的标识符代替;b) (R)带参数宏的每个参数都要括起来;c) (R)不带参数的宏函数也要定义成函数形式;d) (R)用typedef代替宏定义新类型;e) (R)不要用分号结束宏定义;(R)多于一行的宏定义,与函数定义相似,其布局也应相似,根据一 行一个动作的原那么折行,并垂直对齐行尾的续行符。

4、正例:#defineTRACE IN(fnName)if(TRACKING)printf( uTrace Enter: %sn” , (fnName); ) elseif(DEBUGGING)(debugPush ( Entring Function:, (fnName);) ) g) (A)尽量以 const 和 inline 取代#define; h) (R)不要将函数调用作为宏的参数;反例:代码如下:#define ISUPPER(c) (c) =A ) & (c) CPUSpeed;(R)所有的宏定义、枚举常量和const变量,用大写字母命名,用下 划线分割单词;正例: 如D工SP_B

5、UF_S工ZE、MIN_VALUE MAX_VALUE等;a) (R)下划线不能出现在标识符头或尾(预编译开关除外);说明:下划线假设出现在标识符头或尾,容易与不带下划线的标识符混淆;b) (R)变量名长度应小于31个字符,以保持与ANSI C标准一致,不得 取单个字符(如i、j、k等)作为变量名,但是局部循环变量除外; 说明:变量,尤其是局部变量,如果用单个字符表示,很容易出错(如 1误写成1),而编译时又检查不出,那么有可能增加排错时间;过长的 变量名会增加工作量,会使程序的逻辑流程变得模糊,给修改带来困难, 所以应中选择精炼、意义明确的名字,才能简化程序语句,改善对程序 功能的理解;c)

6、 (R)结构名、联合名、枚举名由前缀t开头。A. 9内存分配与释放a) (R)谁申请谁释放;b) (R)当所指的内存被释放后,指针应有一个合理的值;c) (R)记住给字符串结束符申请空间。A. 10变量10YF-C-004研发中心软件编码规范a) (A)尽量构造仅有一个模块或函数可以修改、创立的全局变量,而其 余有关模块或函数只能访问;(R)定义全局变量时必须仔细分析,明确其含义、作用、取值范围及 与其它全局变量间的关系;说明:全局变量关系到程序的结构框架,对于全局变量的理解关系到对 整个程序能否正确理解,所以在对全局变量声明的同时,应对其含义、 作用及取值范围进行详细地注释说明,假设有必要还

7、应说明与其它变量的 关系;(R)明确全局变量与操作此全局变量的函数或过程的关系; 说明:全局变量与函数的关系包括:创立、修改及访问。明确过程操作 变量的关系后,将有利于程序的进一步优化、单元测试、系统联调以及 代码维护等。这种关系的说明可在注释或文档中描述;A.11常量a) (R)用enum取代(一组相关的)常量;(R)对于long常量,使用“L”后缀而不是“1”,后者(小写字母) 很容易和数字“1”混淆;b) (R) 16进制常量使用小写的“Ox”作为前缀,后续数字字母(A、B、 C、D、E、F)均大写;(R)需要对外公开的常量放在头文件中,不需要对外公开的常量放在 定义文件的头部,为便于管

8、理,可以把不同模块的常量集中存放在一个 公共的头文件中;c) (R)如果某一常量与其它常量密切相关,应在定义中包含这种关系, 而不应给出一些孤立的值。正例:const float RADIUS = 100;const float DIAMETER = RADIUS * 2;d) (R)必须通过加后缀的方式显式指明字面值常量的类型;e) (A)尽量使用const或enum定义常量,防止使用宏定义常量。A. 12类型(R)用typeddef简化程序中的复杂语法;a) (R)禁止定义匿名结构体和联合体; 正例: typedef struct char acNameNAME_SIZE;WORD wSc

9、ore;11YF-C-004研发中心软件编码规范 T_Student;T_Student *ptStudent;反例:struct student char acNameNAME_SIZE; WORD wScore; *ptStudent;b) (R)禁止在结构体里含有空域;反例: struct atag |struct anothertag); /夫该结构体变量没有名字*/ );(A)使用严格形式定义的、可移植的数据类型,尽量不要使用与具体 硬件或软件环境关系密切的变量;c) (A)结构是针对一种事务的抽象,功能要单一,不要设计面面俱到的 数据结构;说明:设计结构时应力争使结构代表一种现实事

10、务的抽象,而不是同时 代表多种。结构中的各元素应代表同一事务的不同侧面,而不应把描述 没有关系或关系很弱的不同事务的元素放到同一结构中。d) (A)结构中元素的个数应适中,假设结构中元素个数过多可考虑依据某 种原那么把元素组成不同的子结构,以减少原结构中元素的个数; 说明:增加结构的可理解性、可操作性和可维护性。e) (A)仔细设计结构中元素的布局与排列顺序,使结构容易理解、节省 占用空间,并减少引起误用现象,对于结构中未用的位明确地给予保存;(A)结构的设计要尽量考虑向前兼容和以后的版本升级,并为某些未 来可能的应用保存余地(如预留一些空间等);f) (A)注意具体语言及编译器处理不同数据类

11、型的原那么及有关细节。 说明:如在C语言中,static局部变量将在内存“数据区”中生成, 而非static局部变量将在“堆栈”中生成。注意这些细节对程序质量 的保证非常重要。12YF-C-004研发中心软件编码规范j)j)(A)合理地设计数据并使用自定义数据类型,尽量减少没有必要的数 据类型默认转换与强制转换。A. 13头文件a) (R)对于自编写的头文件,只引用需要的头文件;b) (R)引用头文件时必须使用相对路径,禁止使用绝对路径;c)(R)禁止在头文件中定义变量;d) (A)任何声明假设被多个源文件引用那么应在一个头文件中。A. 14表达式和语句a) (R)逻辑表达式的连接必须使用括号

12、;b) (R) 一条语句只完成一个功能;正例:int iHelp;int iBase;int iResult;iHelp = iBase;iResult = iHelp + getValue(&iBase);反例:int iBase, iResult; /* 一行定义多个变量 */iResult = iBase + getValue (&iBase) ; / iBase有两种用 途*/c) (R)用括号确定表达式的操作顺序,防止使用默认的优先级;d) (R)禁止在非赋值表达式中出现赋值操作符;说明:在非赋值表达式中出现了赋值操作符可能是由于把“=”误写 成了 “ = ,这样会引起无法预料的后果

13、;e) (R)禁止对有符号数进行移位操作;f) (R)不能将枚举类型进行运算后再赋给枚举变量。g) (R)对变量移位运算必须保证不会溢出;h) (R)禁止给无符号数赋负值;i)(R)谨防长度操作符sizeof的副作用;说明:sizeof在不同平台下可能得到不同的结果。此外,sizeof不 计算操作数的值,所以对表达式作长度运算时会得出不能预料的结果, 如:a = sizeof (x = y);j) (R)防止表达式中的附加功能,不要编写太复杂的复合表达式;k) (R)不要把程序中的复合表达式与“真正的数学表达式”混淆;说明:如if (a b c) /* a b =”或“ 类名为26YF-C-0

14、04研发中心软件编码规范MessageUtilSog) (R)杜绝完全不规范的缩写,防止望文不知义。反例: Abstractclass 缩写”命名成AbsClass; condition 缩 写”命名成ccmdi,此类随意缩写严重降低了代码的可阅读性。j)(A)如果使用到了设计模式,建议在类名中表达出具体模式。说明:将设计模式表达在名字中,有利于阅读者快速理解架构设计思想。 正例:public class OrderFactory;public class LoginProxy;public class Resourceobserver;k) (A)接口类中的方法和属性不要加任何修饰符号(pu

15、blic也不要加), 保持代码的简洁性,并加上有效的Javadoc注释。尽量不要在接口里定 义变量,如果一定要定义变量,肯定是与接口方法相关,并且是整个应 用的基础常量。反例:接口方法定义:public abstract void f ();正例:接口方法签名:void f ();接口基础常量表示:String COMPANY = lincom;说明:JDK8中接口允许有默认实现,那么这个default方法,是对所 有实现类都有价值的默认实现。1)(A)如果是形容能力的接口名称,取对应的形容词做接口名(通常是- able的形式)o正例:AbstractTrans la tor 实现 Trans

16、 la table。m) (A)枚举类名建议带上Enum后缀,枚举成员名称需要全大写,单词间用 下划线隔开。说明:枚举其实就是特殊的常量类,且构造方法被默认强制是私有。正例:枚举名字:DealStatusEnum,成员名称:SUCCESS/UNKOWN_REASONon) (A)获取单个对象的方法用get做前缀,获取多个对象的方法用list做 前缀,获取统计值的方法用count做前缀,插入的方法用save (推荐) 或insert做前缀,删除的方法用remove (推荐)或delete做前缀, 修改的方法用update做前缀。C. 2常量定义a) (R)不允许出现任何魔法值(即未经定义的常量)

17、直接出现在代码中。 反例:String key=nId#taobao_n+tradeld; cache.put(key, value);27YF-C-004研发中心软件编码规范研发中心软件编码规范1目的为统一研发中心的编码风格,使编码更加规范、清晰、易懂,特根据我司实 际应用情况,规定了我司计算机软件编码规范,主要针对军用软件的编码,其他 软件可参照执行。2适用范围适用于研发中心软件工程师。3引用文件GB/T 11457-2006信息技术软件工程术语4术语和定义GB/T 11457信息技术软件工程术语确定的以及以下术语和定义适用于本 规范。1 .1圈复杂度衡量程序判定结构的复杂程度。数量上表现为独立线性路径条数,即合理的预防错误所需测试的最少路径条 数,圈度复杂度大说明程序的代码可能质量低且难于测试和维护。例如:假设程序 中不包含控制、判断、条件语句(if、switch等),那么复杂度就是1,因为整 个程序只有一条执行路径。假设程序中包含一条if语句,那么就会有两条路径来执 行完整个程序(if为ture, if为false),因此复杂度为2。2 .2 R要求性规那么。4 . 3 A建议性规那么。5 一般要求. 1基本原那么4.1.1 首先是为人编写程序,其次才是计算机这是软件开发的基本要点,软件的生命周期贯

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁