华为软件编程规范
- 格式:doc
- 大小:214.50 KB
- 文档页数:24
华为编程规范华为是一家世界知名的信息通信技术(ICT)解决方案供应商,为全球超过170个国家和地区的企业和消费者提供产品和服务。
在华为的软件开发过程中,编程规范起着至关重要的作用。
良好的编程规范有助于提高代码的质量和可维护性,减少错误和调试时间,提高开发效率。
以下是华为编程规范的一些核心要点:1. 命名规范:变量、函数、类等命名应具有清晰的含义,并遵循驼峰命名法。
变量和函数名应尽量简短明了,避免使用无意义的名字。
同时,要避免使用拼音或缩写,提高代码的可读性。
2. 注释规范:良好的注释是代码可读性的重要组成部分。
应在需要解释的地方进行注释,对于复杂的算法和逻辑,要详细解释思路和实现方法。
此外,对于代码片段的用途,也可以加上简短的注释。
注释应使用英文,避免使用拼音或其他不常见的语言。
3. 缩进和空格:合理的缩进和空格可以提高代码的可读性。
在华为的编程规范中,使用四个空格作为一个缩进层级。
在运算符和逗号等地方留有适当的空格,使代码更易于阅读。
4. 函数规范:函数应尽量简短,一个函数应有一个明确的目的。
函数命名要具有清晰的语义,能够准确描述函数的功能。
参数应尽量避免过多,遵循最小化设计原则。
5. 异常处理:在代码中应该考虑到可能出现的异常情况,并进行相应的处理。
捕获异常后,应该写明异常类型,并书写明确的处理逻辑。
6. 安全性考虑:在编写代码时,应始终考虑安全性。
避免使用已知存在安全漏洞的函数和方法,对于输入的数据进行合理的校验和过滤,防止代码被恶意攻击者利用。
7. 代码格式化:代码格式化可以提高代码的可读性,使代码更易于维护。
在华为的编程规范中,要求使用一致的缩进和空格,合理分行和对齐,并采用一致的命名风格。
8. 可移植性:考虑到不同平台和操作系统的差异,编写代码时应注重可移植性。
避免使用与操作系统和平台相关的特性和函数,尽量使用标准库和接口。
9. 性能优化:在编写代码时,应注重性能优化。
避免不必要的计算和内存开销,合理选择数据结构和算法。
华为软件编程规范和范例〔一〕=====[排版] ]=======.〔二〕======[注释]=======.〔三〕=====[标识符命名]=======.〔四〕=====[可读性]======.〔五〕=====[变量、结构]=====.〔六〕=====[函数、过程]=====.〔七〕=====[可测性]=====.〔八〕=====[程序效率]=====.〔九〕=====[质量保证]=====.〔十〕=====[代码编辑、编译、审查]=====.〔十一〕=====[代码测试、维护]=====.〔十二〕=====[宏]=====.〔一〕========[ 排版]========== ¹1-1:程序块要采用缩进风格编写,缩进的空格数为4个说明:对于由开发工具自动生成的代码可以有不一致。
¹1-2:相对独立的程序块之间、变量说明之后必须加空行示例:如下例子不符合规范。
Int ni;if (!valid_ni(ni)){... // program code}repssn_ind = ssn_data[index].repssn_index;repssn_ni = ssn_data[index].ni;应如下书写Int ni;if (!valid_ni(ni)){... // program code}repssn_ind = ssn_data[index].repssn_index;repssn_ni = ssn_data[index].ni;¹1-3:较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读示例:perm_count_msg.head.len = NO7_TO_STAT_PERM_COUNT_LEN+ STAT_SIZE_PER_FRAM * sizeof( _UL );act_task_table[frame_id * STAT_TASK_CHECK_NUMBER + index].occupied= stat_poi[index].occupied;act_task_table[taskno].duration_true_or_false= SYS_get_sccp_statistic_state( stat_item );report_or_not_flag = ((taskno < MAX_ACT_TASK_NUMBER)&& (n7stat_stat_item_valid (stat_item))&& (act_task_table[taskno].result_data != 0));¹1-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首示例:if ((taskno < max_act_task_number)&& (n7stat_stat_item_valid (stat_item))){... // program code}for (i = 0, j = 0; (i < BufferKeyword[word_index].word_length)&& (j < NewKeyword.word_length); i++, j++){... // program code}for (i = 0, j = 0;(i < first_word_length) && (j < second_word_length);i++, j++){... // program code}¹1-5:若函数或过程中的参数较长,则要进行适当的划分示例:n7stat_str_compare((BYTE *) & stat_object,(BYTE *) & (act_task_table[taskno].stat_object),sizeof (_STAT_OBJECT));n7stat_flash_act_duration( stat_item, frame_id *STAT_TASK_CHECK_NUMBER+ index, stat_object );¹1-6:不允许把多个短语句写在一行中,即一行只写一条语句示例:如下例子不符合规范。
百度文库- 让每个人平等地提升自我目录1 排版 (2)4 可读性 (11)6 函数、过程 (13)7 可测性 (14)1 排版¹1-1:程序块要采用缩进风格编写,缩进的空格数为4个。
说明:对于由开发工具自动生成的代码可以有不一致。
¹1-2:相对独立的程序块之间、变量说明之后必须加空行。
示例:如下例子不符合规范。
if (!valid_ni(ni)){... epssn_index;repssn_ni = ssn_data[index].ni;应如下书写if (!valid_ni(ni)){... epssn_index;repssn_ni = ssn_data[index].ni;¹1-3:较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。
示例:= NO7_TO_STAT_PERM_COUNT_LEN+ STAT_SIZE_PER_FRAM * sizeof( _UL );act_task_table[frame_id * STAT_TASK_CHECK_NUMBER +index].occupied= stat_poi[index].occupied;act_task_table[taskno].duration_true_or_false= SYS_get_sccp_statistic_state( stat_item );report_or_not_flag = ((taskno < MAX_ACT_TASK_NUMBER)&& (n7stat_stat_item_valid (stat_item)) &&(act_task_table[taskno].result_data != 0));¹1-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。
DKBA 华为技术有限公司内部技术规范DKBA 1606-XXXX.X Web应用安全开发规范V1.52013年XX月XX日发布2013年XX月XX日实施华为技术有限公司Huawei Technologies Co., Ltd.版权所有侵权必究All rights reserved修订声明Revision declaration本规范拟制与解释部门:网络安全能力中心&电信软件与核心网网络安全工程部本规范的相关系列规范或文件:《C&C++语言安全编程规范》《Java语言安全编程规范》相关国际规范或文件一致性:无替代或作废的其它规范或文件:无相关规范或文件的相互关系:《产品网络安全红线》和《电信软件与核心网业务部安全能力基线》中的Web安全要求引用了本规范的内容,如果存在冲突,以本规范为准。
目录Table of Contents1概述 (7)1.1背景简介 (7)1.2技术框架 (7)1.3使用对象 (8)1.4适用范围 (8)1.5用词约定 (9)2常见WEB安全漏洞 (9)3WEB设计安全规范 (11)3.1W EB部署要求 (11)3.2身份验证 (11)3.2.1口令 (11)3.2.2认证 (12)3.2.3验证码 (14)3.3会话管理 (15)3.4权限管理 (16)3.5敏感数据保护 (17)3.5.1敏感数据定义 (17)3.5.2敏感数据存储 (17)3.5.3敏感数据传输 (19)3.6安全审计 (20)3.7W EB S ERVICE (21)3.8REST FUL W EB S ERVICE (22)3.9DWR (23)4WEB编程安全规范 (24)4.1输入校验 (24)4.2输出编码 (28)4.3上传下载 (29)4.4异常处理 (29)4.5代码注释 (30)4.6归档要求 (30)4.7其他 (31)4.8PHP (33)5WEB安全配置规范 (35)6配套CBB介绍 (35)6.1WAF CBB (35)6.2验证码CBB (36)7附件 (36)7.1附件1T OMCAT配置SSL指导 (36)7.2附件2W EB S ERVICE 安全接入开发指导 (36)7.3附件3客户端IP鉴权实施指导 (36)7.4附件4口令安全要求 (37)7.5附件5W EB权限管理设计规格说明书 (37)Web应用安全开发规范V1.51 概述1.1 背景简介在Internet大众化及Web技术飞速演变的今天,Web安全所面临的挑战日益严峻。
华为代码规范目录1 概述 (5)1.1 编写目的 (5)1.2 文档约定 (5)1.3 预期的读者和阅读建议 (5)1.4 参考文献 (5)2 排版要求 (5)2.1 程序块缩进 (5)2.2 程序块之间空行 (5)2.3 长语句和长表达式 (6)2.4 循环、判断等长表达式或语句 (7)2.5 长参数 (7)2.6 短语句 (8)2.7 条件、循环语句 (8)2.8 语句对齐 (8)2.9 函数、过程和结构等语句块 (9)2.10 程序块分界符 (9)2.11 操作符前后空格 (10)2.12 其他 (11)3 注释 (11)3.1 有效注释量 (11)3.2 公司标识 (11)3.3 说明性文件 (12)3.4 源文件头 (13)3.5 函数头部说明 (13)3.6 注释与代码一致 (14)3.7 注释内容 (14)3.8 注释缩写 (14)3.9 注释位置 (14)3.10 变量、常量注释 (15)3.11 数据结构的注释 (15)3.12 全局变量 (16)3.13 注释缩排 (16)3.14 注释与代码之间空行 (17)3.15 变量定义、分支语句 (17)3.16 其他 (19)4 标识符命名 (20)4.1 命名清晰 (20)4.2 特殊命名需注释 (21)4.3 命名风格保持一致 (21)4.4 变量命名 (21)4.5 命名规范与系统风格一致 (21)4.6 其他 (22)5 可读性 (23)5.1 运算符优先级 (23)5.2 避免直接使用数字作为标识符 (23)5.3 其他 (24)6 变量、结构 (25)6.1 公共变量 (25)6.2 公共变量说明 (25)6.3 公共变量访问说明 (25)6.4 公共变量赋值 (26)6.5 防止局部变量与公共变量同名。
(26)6.6 严禁使用未经初始化的变量作为右值。
(26)6.7 其他 (26)7 函数、过程 (34)7.1 对所调用函数的错误返回码要仔细、全面地处理。
华为编程规范华为编程规范是指在华为公司内部进行软件开发时所遵守的一套规范和标准,旨在提高代码的质量和可维护性。
下面是华为编程规范的主要内容。
一、命名规范:1. 变量和函数名应采用有意义的名称,尽量避免使用缩写或简写。
2. 变量名和函数名应使用小驼峰命名法,即首字母小写,后续单词首字母大写。
3. 常量名应使用大写字母和下划线,以增加可读性。
4. 类名应使用大驼峰命名法,即每个单词首字母大写。
5. 文件名应与其中的公共类名一致。
二、注释规范:1. 在每个函数的开头添加函数的功能说明,参数说明和返回值说明。
2. 在关键性代码部分添加注释,说明代码的逻辑。
3. 在需要修正或改进的代码部分添加TODO注释,以便后续修复。
三、代码风格:1. 缩进使用4个空格而不是Tab键。
2. 每行代码的长度不能超过80个字符。
3. 在二元操作符两边添加空格,例如 a + b。
4. 大括号应另起一行,不应与关键字在同一行。
5. 每个语句结束后都应该添加分号。
四、异常处理:1. 捕获异常时应尽量具体,不应捕获顶层异常。
2. 异常处理代码应与正常逻辑代码分离,以提高代码的可读性。
3. 异常处理代码块应添加注释,说明捕获的异常类型和处理的方法。
五、函数规范:1. 函数的长度应控制在100行以内,避免函数过长和复杂。
2. 函数的参数应尽量少,可以通过封装成结构体或类的方式来减少参数数量。
3. 函数应只完成一个功能,不应既完成数据处理又完成界面显示等功能。
六、代码复用:1. 尽量使用现有的类和框架来实现功能,避免重复造轮子。
2. 重复的代码应抽取成函数或方法来复用,提高代码的可维护性。
3. 提高代码的可移植性,使其可以在不同的平台和环境下复用。
七、测试规范:1. 添加单元测试用例,覆盖所有的代码分支,确保代码的正确性。
2. 针对不同的输入情况,测试代码的边界问题和异常情况。
3. 添加性能测试用例,确保代码在大数据量和高并发情况下的性能表现。
文档编号产品版本受控状态DC-SB-2003-1005V 1.0 内部产品名称:软件编程规范共页软件编程规范(仅供内部使用)北京世纪百合科技有限公司Beijing Centurial Lily Technology Co.,Ltd.版权所有不得复制文档修改记录目录1.引言 (4)1.1 目的 (4)1.2 范围 (4)2.规范 (4)2.1 文件 (4)2.2版面风格 (8)2.3 标识符命名 (12)2.4 函数与宏 (14)2.5 代码的可靠性 (18)3.附录:通用类型的公共定义 (23)1.引言1.1目的本规范的目的在于增加源代码的可读性,减少程序员对代码理解上的偏差,使程序员能够编写出可靠的代码,降低代码维护成本。
1.2范围本规范内容涉及范围包括:文件、版面、注释、标识符、变量和结构、函数、宏以及可理解性等。
本规范适用于公司开发的所有软件产品。
在新软件的编码过程中本规范必须执行。
2.规范2.1文件2.1.1头文件的名称一律为小写,格式为“子系统名_文件名.h”。
例如:ipf_protocol.h等。
2.1.2头文件的格式如下:➢注释头,格式参见软件编程规范;➢头文件预编译开关开始,格式为:#ifndef 预编译开关#define 预编译开关其中预编译开关格式为:“ _文件名_H”,其中文件名一律大写➢头文件内容;➢头文件预编译开关结束,格式为:#endif用来和头文件预编译开关的开始对应。
例如:以下为ipf_ip.h头文件的内容:/************************************************************ Copyright (c) Lily Of The Century Technology Co., LTD.ALL RIGHTS RESERVEDDescription: // 用于详细说明此程序文件完成的主要功能*************************************************************/#ifndef _IPF_IP_H#define _IPF_IP_H...<头文件正文>...#endif2.1.3头文件的定义要有层次,禁止交叉引用。
说明:头文件的层次设置为公共模块、私有模块。
头文件的引用次序为下层头文件引用上层头文件、私有头文件引用公共头文件,声明结构时尤其要注意,不允许出现交叉引用的情况。
示例:如下定义不符合规范头文件isdn_a.h/************************************************************ Copyright (c) Lily Of The Century Technology Co., LTD.ALL RIGHTS RESERVEDDescription: 定义配置数据结构************************************************************/#ifndef _ISDN_A_H#define _ISDN_A_H#include “isdn_b.h”typedef struct{...;ISDN_CONTROL stIsdnControl;...;}ISDN_ CONFIG;#endif头文件isdn_b.h/************************************************************ALL RIGHTS RESERVEDDescription: 定义控制数据结构*************************************************************/#ifndef _ISDN_B_H#define _ISDN_B_H#include “isdn_a.h”typedef struct{...;ISDN_CONFIG stIsdnConfig;...;}ISDN_CONTROL;#endif为了解决上述矛盾,可以将两个结构合并到一个文件中声明。
2.1.4文件中如果引用系统头文件,必须使用“<“和“>“;如果引用自定义的头文件,必须使用“”“和“”“。
说明:系统头文件是指由编译系统提供的头文件。
示例:如下书写不符合规范。
#include “stdlib.h”#include <isdn_config.h>应该改作:#include <stdlib.h>#include “isdn_config.h”2.1.5头文件中只能声明变量类型,禁止定义变量。
说明:如果在头文件中定义变量,当有多个源文件引用该头文件时,会出现重复定义的错误。
示例:如下头文件是不规范的。
头文件isdn_a.h/************************************************************ALL RIGHTS RESERVEDDescription: 定义配置数据结构*************************************************************/#ifndef _ISDN_A_H#define _ISDN_A_Htypedef struct{...;}ISDN_ CONFIG;ISDN_CONFIG g_stIsdnConfig;#endif结构变量g_stIsdnConfig不能在头文件中定义,只能在源文件中定义。
可以在相应的源文件定义后,头文件作如下改动:ISDN_CONFIG g_stIsdnConfig;改为extern ISDN_CONFIG g_stIsdnConfig;2.1.6头文件的声明顺序,应该有层次感。
说明:头文件的声明顺序一般是宏、结构、函数、变量。
函数在头文件中声明时开头可以不加“extern”2.1.7源文件名称一律小写,格式为:子系统名_文件名.c,示例:ipf_ pkt.c表示在IPF子系统的包处理文件。
2.1.8源文件必须加注释头。
源文件注释头格式为:/************************************************************ Copyright (c) Lily Of The Century Technology Co.,LTD.ALL RIGHTS RESERVEDDescription: // 用于详细说明此程序文件完成的主要功能*************************************************************/2.2版面风格2.2.1程序块采用缩进风格编写,缩进使用TAB符号,TAB符号规定为4个空格。
变量说明之后必须加空行。
说明:由开发工具自动生成的代码例外。
示例:如下例子不符合规范。
void isdn_InitConfig(void){WORD wConfigNumner;...; //program code}应如下书写void isdn_InitConfig(void){WORD wConfigNumner;...; //program code}2.2.2不允许把多个短语句写在一行中,一行只写一条语句。
示例:如下例子不符合规范。
wLength = wWidth = 0;或wLength = 0, wWidth = 0;应如下书写wLength = 0;wWidth = 0;禁止如下写法:int i = j = 0;或int i = 0,j = 0;应该写作:int i = 0;int j = 0;或int i,j;i = 0;j = 0;2.2.3do、while、switch、case、default、if、else、for等语句自占一行,且if、else语句在同一列。
示例1:如下例子不符合规范。
do {...; //program code} while (pstUser != NULL);应如下书写:do{...; //program code} while (pstUser != NULL);示例2:如下例子不符合规范。
while (pstUser != NULL) {...; //program code}应如下书写:while (pstUser != NULL){...; //program code}示例3:如下例子不符合规范。
switch (dwCounter) {case 1: dwCounter++;...; //program code break;default:break;}应如下书写:switch (dwCounter){case 1:dwCounter++;...; //program code break;default:break;}示例4:如下例子不符合规范。
if (pstUser == NULL) return; else {...; //program code}应如下书写:if (pstUser == NULL){return;}else{...; //program code}示例5:如下例子不符合规范。
for (i = 0;i < 10;i++) {...; //program code}应如下书写:for (i = 0;i < 10;i++)北京世纪百合技术有限公司软件编程规范第 10 页共 24页{...; //program code}2.2.4函数的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格。
示例:如下例子不符合规范。
int isdn_Config(void){...; // program codereturn 0;}应该改为int isdn_Config(void){...; // program codereturn 0;}示例:如下例子不符合规范。
typedef struct{WORD wSlot;WORD wPort;}ISDN_CONFIG;应该改为typedef struct{WORD wSlot;WORD wPort;}ISDN_CONFIG;2.2.5在switch的处理程序块中,case和default语句下的处理语句也要遵从语句缩进要求。
示例:以下写法是不规范的switch (wEvent){case 1:...; //program codebreak;}应该改为:switch (wEvent){case 1:...; //program codebreak;default:break;}2.2.6程序块的分界符(大括号'{'和'}')应各独占一行并且位于同一列,同时与引用它们的语句左对齐。