华为软件编程规范总则CHECKLIST
华为软件编码规范
华为软件编程规范和范例〔一〕=====[排版] ]=======.〔二〕======[注释]=======.〔三〕=====[标识符命名]=======.〔四〕=====[可读性]======.〔五〕=====[变量、结构]=====.〔六〕=====[函数、过程]=====.〔七〕=====[可测性]=====.〔八〕=====[程序效率]=====.〔九〕=====[质量保证]=====.〔十〕=====[代码编辑、编译、审查]=====.〔十一〕=====[代码测试、维护]=====.〔十二〕=====[宏]=====.〔一〕========[ 排版]========== ¹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:不允许把多个短语句写在一行中,即一行只写一条语句示例:如下例子不符合规范。
华为编程规范
华为编程规范华为是一家世界知名的信息通信技术(ICT)解决方案供应商,为全球超过170个国家和地区的企业和消费者提供产品和服务。
在华为的软件开发过程中,编程规范起着至关重要的作用。
良好的编程规范有助于提高代码的质量和可维护性,减少错误和调试时间,提高开发效率。
以下是华为编程规范的一些核心要点:1. 命名规范:变量、函数、类等命名应具有清晰的含义,并遵循驼峰命名法。
变量和函数名应尽量简短明了,避免使用无意义的名字。
同时,要避免使用拼音或缩写,提高代码的可读性。
2. 注释规范:良好的注释是代码可读性的重要组成部分。
应在需要解释的地方进行注释,对于复杂的算法和逻辑,要详细解释思路和实现方法。
此外,对于代码片段的用途,也可以加上简短的注释。
注释应使用英文,避免使用拼音或其他不常见的语言。
3. 缩进和空格:合理的缩进和空格可以提高代码的可读性。
在华为的编程规范中,使用四个空格作为一个缩进层级。
在运算符和逗号等地方留有适当的空格,使代码更易于阅读。
4. 函数规范:函数应尽量简短,一个函数应有一个明确的目的。
函数命名要具有清晰的语义,能够准确描述函数的功能。
参数应尽量避免过多,遵循最小化设计原则。
5. 异常处理:在代码中应该考虑到可能出现的异常情况,并进行相应的处理。
捕获异常后,应该写明异常类型,并书写明确的处理逻辑。
6. 安全性考虑:在编写代码时,应始终考虑安全性。
避免使用已知存在安全漏洞的函数和方法,对于输入的数据进行合理的校验和过滤,防止代码被恶意攻击者利用。
7. 代码格式化:代码格式化可以提高代码的可读性,使代码更易于维护。
在华为的编程规范中,要求使用一致的缩进和空格,合理分行和对齐,并采用一致的命名风格。
8. 可移植性:考虑到不同平台和操作系统的差异,编写代码时应注重可移植性。
避免使用与操作系统和平台相关的特性和函数,尽量使用标准库和接口。
9. 性能优化:在编写代码时,应注重性能优化。
避免不必要的计算和内存开销,合理选择数据结构和算法。
华为软件编程规范方案及范例
华为软件编程规范和范例1.排版11.1程序块要采用缩进风格编写, 缩进的空格数为4个。
说明: 对于由开发工具自动生成的代码可以有不一致。
1.2相对独立的程序块之间、变量说明之后必须加空行。
示例: 如下例子不符合规范。
if (!valid_ni(ni)){... // program code}repssn_ind = ssn_data[index].repssn_index;repssn_ni = ssn_data[index].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循环、判断等语句中若有较长的表达式或语句, 则要进行适应的划分, 长表达式要在低优先级操作符处划分新行, 操作符放在新行之首。
(important)编程规范CHECKLIST
○建议 头文件是否完整?
头文件是否使用了ifndef/define/endif 结构产生预处理 防止头文件被重复引用。 块? 是否用#include<filename.h> 格式来引用标准库的头文 ●规则 编译器将从标准库目录开始搜索。 件? 是否用#include“filename.h”格式来引用非标准库的头 ●规则 编译器将从用户的工作目录开始搜索。 文件? 在C++语法中,类的成员函数可以在声明的同时被定义,并自动成为内联函数。但会破坏了风格,所 ○建议 头文件中是否只存放“声明”而不存放“定义”? 以建议函数的定义和声明分开,无论该函数体有多小。 ○建议 是否在头文件中出现类似extern int value 的声明? 不提倡使用全局变量,尽量不要在头文件中出现类似的声明。 主要内容: 1.定义文件开头处的版权和版本声明; ○建议 定义文件是否完整? 2.对一些头文件的引用; 3.程序的实现体(包括数据和代码)。 程序版式 ●规则 声明、函数之间的空行是否合理? 在每个类声明之后、每个函数定义结束之后都要加空行。 ●规则 函数体内的空行是否合理? 在一个函数体内,逻辑上密切相关的语句之间不加空行,其他地方应加空行分隔。 ●规则 一行代码做了多少事情? 一行代码只做一件事情,如定义一个变量,或只写一条语句——容易阅读,便于注释。 ●规则
const的优点: 在C++中,是否用const常量取代宏常量(#define定义的常 1.const常量有数据类型,而宏常量没有数据类型。 量)? 2.有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。 需要对外公开的常量放在头文件中,不需要对外公开的常量放在定义文件中。为了便于管理,可以 ●规则 将常量定义放在头文件还是定义文件中? 将不同模块的常量存放在一个公共的头文件中。 如果一个常量和其他常量密切相关,是否应当在定义中包 ●规则 如果某一常量与其他常量密切相关,应在定义中包含这种关系,而不应给出一些孤立的值。 含着这种关系? 1.const数据成员只在某个对象生存期内是常量,对于整个类而言是可变的。 2.不能在类声明中初始化const数据成员。其初始化只能在类构造函数的初始化表中进行。 ○建议 是否误解了类中的const数据成员? 3.若要建立在整个类中都恒定的常量,可以用类中的枚举常量来实现。 枚举类优缺点:1.不会占用对象的存储空间,在编译时被全部求值。 2.他的隐含数据类型是整型,其最大值有限,且不能表示浮点数。 函数设计 ○建议 检查函数的功能和规模。 ●规则 参数的书写是否完整?若没有参数时,是否置空? 函数的功能要单一,不要设计多用途的函数。函数的规模要小,尽量控制在50行代码之内。 参数的书写要完整,不能贪图省事而只写参数的类型而省略参数名字。如果函数没有参数,则用 void填充。
华为软件编程规范
总体原则•清晰,易于维护、易于重构•简洁,易于理解,并且易于实现• 风格统一,代码整体风格保持统一• 通用性,遵循业界通用的编程规范目录结构建议将工程按照功能模块划份子目录(可参考头文件和源文件目录。
命名LiteOS 的功能模块划分),子目录再定义• 使用驼峰风格进行命名,此风格大小写字母混用,不同单词间通过单词首字母大写来分开,具体规则如下:大驼峰,或者带有模块函数,自定义的类型前缀的大驼峰局部变量,函数参数,宏参数,结构体成员,联合体成员全局变量宏,枚举值小驼峰带'g_'前缀的小驼峰全大写并下划线分割带'_LOS'前缀和'H'内核头文件中防止重复包含的宏变量以下划线分割AaaBbb,XXX_AaaBbb aaaBbbg_aaaBbbAAA_BBB_LOS_MODULE_H• 全局函数、全局变量、宏、类型名、枚举名的命名,应当准确描述并全局惟一后缀,中间为大写模块名,• 在能够准确表达含义的前提下,局部变量,或者结构体、联合体的成员变量,其命名应尽可能简短• LiteOS 的对外API 使用LOS_Module_Func 的方式,如果有宾语采用前置的方式,比如:1. LOS_TaskCreate2. LOS_SwtmrStart3. LOS_SemPendkernel 目录下内部模块间接口使用OsModuleFunc 的方式,比如:1. OsTaskScan2. OsSwtmrStartarch 目录需要给上层模块提供LowLevel 接口,这部份接口采用ArchModuleFunc 的方式。
其他情况可采用ModuleFunc 的方式。
排版与格式•程序块采用缩进风格编写,使用空格而不是制表符( '\t' )进行缩进,每级缩进为 4 个空格• 采用K&R 风格作为大括号换行风格,即函数左大括号另起一行放行首,并独占一行,其他左大括号尾随语句放行末,右大括号独占一行,除非后面跟着同一语句的剩余部份,如if 语句的else/elseif 或者分号,比如:1. struct MyType {//左大括号尾随语句放行末,前置 1 个空格2. ...3. };//右大括号后面紧跟分号1. int Foo (int a)2. {//函数左大括号独占一行,放行首3. if(a>0){//左大括号尾随语句放行末,前置 1 个空格4. ...5. }else {//右大括号、 "else" 、以及后续的左大括号均在同一行6. ...7. }//右大括号独占一行8. ...9. }•条件、循环语句使用大括号,比如:1. if(objectIsNotExist){ //单行条件语句也加大括号2. return CreateNewObject ();3. }1. while (condition){} //即使循环体是空,也应使用大括号1. while (condition){2. continue ;//continue 表示空逻辑,使用大括号3. }•case/default 语句相对switch 缩进一层,缩进风格如下:1. switch (var){2. case 0://缩进一层3. DoSomething1 ();//缩进一层4. break ;5. case 1 :6. DoSomething2 ();7. break ;8. default :9. break ;10. }•一行只写一条语句• 一条语句不能过长,建议不超过120 个字符,如不能缩短语句则需要分行写• 换行时将操作符留在行末,新行进行同类对齐或者缩进一层,比如:1. //假设下面第一行不满足行宽要求2. if(currentValue>MIN&& //换行后,布尔操作符放在行末3. currentValue<MAX){ //与 (&&)操作符的两个操作数同类对齐4. DoSomething ();5. ...6. }1. //假设下面的函数调用不满足行宽要求,需要换行2. ReturnType result= FunctionName (paramName1,3. paramName2,4. paramName3); //保持与上方参数对齐1. ReturnType result= VeryVeryVeryLongFunctionName (// 写入第 1 个参数后导致过长,直接换行2. paramName1,paramName2,paramName3); //换行后, 4 空格缩进一层1. //每行的参数代表一组相关性较强的数据结构,放在一行便于理解,此时可理解性优先于格式排版要求2. int result= DealWithStructLikeParams (left.x,left.y, //表示一组相关参数3. right.x,right.y); //表示此外一组相关参数• 声明定义函数时,函数的返回类型以及其他修饰符,与函数名同行• 指针类型"*" 应该靠右尾随变量或者函数名,比如:1. int*p1;//Good :右尾随变量,和左边的类型隔了 1 个空格2. int*p2;//Bad :左尾随类型3. int*p3;//Bad :两边都没空格4. int*p4;//Bad :两边都有空格当"*"与变量或者函数名之间有其他修饰符,无法尾随时,此时也不要尾随修饰符,比如:1. char *const VERSION= "V100" ;//Good :当有 const 修饰符时, "*"两边都有空格2. int Foo (constchar *restrictp); //Good :当有 restrict 修饰符时, "*"两边都有空格•根据上下内容的相关程度,合理安排空行,但不要使用连续 3 个或者更多空行• 编译预处理的"#"统一放在行首,无需缩进。
华为工程CheckList 模板 2016
check version startup all
查看启动文件(升级操作涉及)
disp startup
查看版本升级是否成功(升级操作涉及)
disp ver
查看主备倒换状态(升级操作涉及)
display switchover state
查看补丁加载是否成功、激活(补丁加载操作涉及)
遗留问题说明
备注:[检查结果]说明:不涉及:本次操作类型无需测试OK:测试正常NG:(No Good)测试不正常,需要在遗留问题中说明情况和处理计划[大客户业务恢复监控表]说明:如果涉及大客户业务,必须具备《大客户业务恢复监控表》
数通工程(路由器升级/割接)业务健康检查CheckList(V1.0)
工程号割Biblioteka 时间(凌晨)00:00-04:30
检查责任人
项目名称
割接内容(简述)
链路核对
是否涉及专线用户
□是/□否
专线用户恢复监控表
□具备/□未具备
次日值守人员
项目
检查内容
检查标准
检查结果(不涉及/OK/NG)
设备状态
查看CPU/内存占用率
dis patch-information
dis packet-compatible
接口信息
采用操作前后设备接口信息进行对比,要求接口状态完全一致、接口无CRC错包等异常、接口流量存在差异需分析是否正常
协议状态
查看IPv4路由表统计计数
割接前后路由信息应大体一致
查看主控板fib表统计计数
割接前后数量应大体一致
查看BGP邻居状态(如果有)
display bgp peer
查看LDP邻居会话状态(如果有)
华为编程规范
华为编程规范华为编程规范是指在华为公司内部进行软件开发时所遵守的一套规范和标准,旨在提高代码的质量和可维护性。
下面是华为编程规范的主要内容。
一、命名规范: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. 添加性能测试用例,确保代码在大数据量和高并发情况下的性能表现。
华为-原理图绘制评审规范-checklist
华为-原理图绘制评审规范-checklist原理图绘制评审规范前⾔本技术规范根据国家标准和原邮电部标准以及国际标准系列标准编制⽽成。
本规范于。
本规范起草单位:本规范主要起草⼈:本规范批准⼈:本规范修改记录:⽬次1、⽬的 12、范围 13、定义 14、引⽤标准和参考资料 15、原理图绘制评审内容 15.1图纸幅⾯及格式 15.2标题栏 25.3项⽬代号 25.4标称值 25.5原理图布局 35.6 层次化电路的设计 45.7项⽬代号 45.8注释和解释 65.9电源及地⽹络 65.10去耦电容的放置7原理图绘制评审规范1、⽬的本规范规定产品原理图绘制中符合原理图绘制评审的要素,旨在统⼀绘制的评审要素。
2、范围本规范适⽤于公司产品中所有具有符合原理图绘制规范的原理图绘制评审,⽤于指导原理图绘制、中试审查。
3、定义⽆4、引⽤标准和参考资料下列标准包含的条⽂,通过在本标准中引⽤⽽构成本标准的条⽂。
在标准出版时,所⽰版本均为有效。
所有标准都会被修订,使⽤本标准的各⽅应探讨,使⽤下列标准最新版本的可能1、原理图绘制评审内容本审查内容表审查的某些项⽬如果与设计的单板⽆关则填“不评审”,如果符合或不符则必须填“是”或“否”。
对于填“否”的项必须说明原因,否则不能通过评审。
对于必须审查⽽没有进⾏审查的项⽬,设计审查⼈要承担设计的全部责任。
1.1图纸幅⾯及格式(1)选择图纸幅⾯尺⼨未超出A0幅⾯。
□是□否□不评审(2)图纸的任何内容没有超出外框线之外,也没有叠加在外框线上。
□是□否□不评审(3)除带有图幅分区的VIEWDRAW图框使⽤模板a3.1,a4.1外,其余采⽤软件⾃带的图框。
□是□否□不评审(4)图幅分区数⽬取偶数。
每⼀分区的长度在25~75mm之间选择。
□是□否□不评审(5)分区的编号,沿⽔平⽅向⽤阿拉伯数字从左向右顺序编写,由1开始⾃左向右排列,最多到6;沿垂直⽅向⽤⼤写拉丁字母从上到下从A开始填写,最多到H。
华为软件编程规范和范例
华为软件编程规范和范例[ 华为软件编程规范和范例]一、排版二、注释三、标识符命名四、可读性五、变量、结构六、函数、过程七、可测性八、程序效率九、质量保证十、代码编辑、编译、审查十一、代码测试、维护十二、宏〔一〕=====[排版]¹1-1:程序块要采用缩进风格编写,缩进的空格数为4个说明:对于由开发工具自动生成的代码可以有不一致。
¹1-2:相对独立的程序块之间、变量说明之后必须加空行示例:如下例子不符合规范。
if (!valid_ni(ni)){... // program code}repssn_ind = ssn_data[index].repssn_index; repssn_ni = ssn_data[index].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:不允许把多个短语句写在一行中,即一行只写一条语句示例:如下例子不符合规范。
华为软件编程规范和范例
[ 华为软件编程规范和范例]一、排版二、注释三、标识符命名四、可读性五、变量、结构六、函数、过程七、可测性八、程序效率九、质量保证十、代码编辑、编译、审查十一、代码测试、维护十二、宏〔一〕=====[排版]11-1:程序块要采用缩进风格编写,缩进的空格数为4个说明:对于由开发工具自动生成的代码可以有不一致。
11-2:相对独立的程序块之间、变量说明之后必须加空行示例:如下例子不符合规范。
if (!valid_ni(ni)){... // program code}repssn_ind = ssn_data[index].repssn_index;repssn_ni = ssn_data[index].ni;应如下书写if (!valid_ni(ni)){... // program code}repssn_ind = ssn_data[index].repssn_index;repssn_ni = ssn_data[index].ni;11-3:较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读示例:+ 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));11-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}11-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 );11-6:不允许把多个短语句写在一行中,即一行只写一条语句示例:如下例子不符合规范。
华为软件编程规范和范例
华为软件编程规范和范例NetReptile推荐 [2006-5-23]出处:/oosky/作者:任我行〔一〕=====[排版] ]=======.〔二〕======[注释]=======.〔三〕=====[标识符命名]=======.〔四〕=====[可读性]======.〔五〕=====[变量、结构]=====.〔六〕=====[函数、过程]=====.〔七〕=====[可测性]=====.〔八〕=====[程序效率]=====.〔九〕=====[质量保证]=====.〔十〕=====[代码编辑、编译、审查]=====.〔十一〕=====[代码测试、维护]=====.〔十二〕=====[宏]=====.〔一〕=====[ 排版]¹1-1:程序块要采用缩进风格编写,缩进的空格数为4个说明:对于由开发工具自动生成的代码可以有不一致。
¹1-2:相对独立的程序块之间、变量说明之后必须加空行示例:如下例子不符合规范。
if (!valid_ni(ni)){... // program code}repssn_ind = ssn_data[index].repssn_index;repssn_ni = ssn_data[index].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:不允许把多个短语句写在一行中,即一行只写一条语句示例:如下例子不符合规范。
华为项目工程师现场服务规范检查Checklist(全国)数据反馈模板
华为项目工程师现场服务规范检查Checklist(全国)数
地区
项目
内容(3-5条款细则)
关键点
不无故失约(如不能准时到达:应在与用户约定时间的前5 -10分钟同用户取得联系;提前表示歉意,重新确定到达 时间;驻场工作时间同客户单位考勤时间,应确保比客户单 位上班时间早5-10分钟到达。);不置用户需求不理。 不在用户数据未确认备份,未在维修单签署免责条款前提 下对硬盘进行任何操作;不泄密。 不在用户未许可情况下改变用户机器设置;不在维修单上 代用户签字。 不与用户争执;不在未经许可情况下调用和查看用户信息 、使用用户通讯设备;碰到客户业务相关数据或者客户输 入密码时要有意识地回避。 接到派单要联系(30分钟内主动预约:了解故障现象,约 定时间地点)。 检查维修工具是否齐全(含NDOS/SME项目特有和通用光盘 、笔)。 检查所需备件是否齐全 检查名片及单据是否齐全 自我准备:整理着装(含卡证是否佩戴正确)、仪容、思 路、话术。 主动向客户问好并说明身份和来意,并约见客户。见到客 户时应面带微笑,自信、清晰地进行自我。介绍时出示胸 卡,“您好,我是阳光雨露服务工程师xxx”(如是很熟悉 的客户自我介绍环节可根据情境简化处理) 。进入客户方 安排的驻场工位,不得大声喧哗,保持桌面整洁,遵循客 户办公场所的环境要求。 故障复现(仔细确认故障情况),征得客户允许情况下开 始服务操作,确保故障没有进一步扩大。 数据安全方面,动手之前应了解用户数据的存储及备份情 况、并做好相关免责声明,并在维修单确认签字等。 填写维修单,准确记录服务过程。 维修过程使用的部件摆放有序。 服务完成后配合用户复验机器(服务完成必须验机,有条 件当直接用户、间接用户面的,主动配合客户验机,确认 问题已解决) 整理现场(清洁机器由工程师视情况而定)维修完成后, 机器复原。如:因维修需要,剪开的扎带重新扎好、机器 恢复到原来的位置、清理维修现场。) 请用户签字确认服务完成。 双手递上名片,礼貌道别(留下联系方式)。 维修黄联留给用户。 微笑服务,介绍小常识,询问需求,把握项目外商机。
软件编程规范检查表-模板
2
3-2:命名中若使用特殊约定或缩写,则要有注释说明。
是[ ]否[ ]免[ ]
3
3-3:对于变量命名,禁止取单个字符(如i、j、k...),建议除了要有具体含义外,还能表明其变量类型、数据类型等,但i、j、k作局部循环变量是允许的。
是[ ]否[ ]免[ ]
4
3-4:命名规范必须与所使用的系统风格保持一致,并在同一项目中统一,比如采用UNIX的全小写加下划线的风格或大小写混排的方式,不要使用大小写与下划线混排的方式。
是[ ]否[ ]免[ ]
6
2-6:注释的内容要清楚、明了,含义准确,防止注释二义性。
是[ ]否[ ]免[ ]
7
2-7:避免在注释中使用缩写,特别是非常用缩写。
是[ ]否[ ]免[ ]
8
2-8:注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。
1
2-1:一般情况下,源程序有效注释量必须在20%以上。
是[ ]否[ ]免[ ]
2
2-2:说明性文件(如头文件.h文件、.inc文件、.def文件、编译说明文件.cfg等)头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。
是[ ]否[ ]免[ ]
3
2-3:源文件头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等。
是[ ]否[ ]免[ ]
4
2-4:函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。
(完整版)华为软件编程规范
文档编号产品版本受控状态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头文件的定义要有层次,禁止交叉引用。
华为软件编码规范
华为软件编码规范华为软件编程规范和范例〔一〕=====[排版] ]=======. 〔二〕======[注释]=======. 〔三〕=====[标识符命名]=======. 〔四〕=====[可读性]======. 〔五〕=====[变量、结构]=====.〔六〕=====[函数、过程]=====. 〔七〕=====[可测性]=====. 〔八〕=====[程序效率]=====. 〔九〕=====[质量保证]=====.〔十〕=====[代码编辑、编译、审查]=====. 〔十一〕=====[代码测试、维护]=====. 〔十二〕=====[宏]=====.〔一〕 ========[ 排版 ]==========11-1:程序块要采用缩进风格编写,缩进的空格数为4个说明:对于由开发工具自动生成的代码可以有不一致。
11-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;11-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));11-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 }11-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 ); 11-6:不允许把多个短语句写在一行中,即一行只写一条语句示例:如下例子不符合规范。
华为软件开发规范
n7stat_flash_act_duration( stat_item, frame_id *STAT_TASK_CHECK_NUMBER + index, stat_object );
¹1-2:相对独立的程序块之间、变量说明之后必须加空行。 示例:如下例子不符合规范。 if (!valid_ni(ni)) { ... // program code } repssn_ind = ssn_data[index].repssn_index; repssn_ni = ssn_data[index].ni;
软件编程规范总则
&& (n7stat_stat_item_valid (stat_item)) && (act_task_table[taskno].result_data != 0));
1 排版
仅供内部使用 3
软件编程规范总则
1 排版
¹1-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低 优先级操作符处划分新行,操作符放在新行之首。
act_task_table[taskno].duration_true_or_false = SYS_get_sccp_statistic_state( stat_item );
report_or_not_flag = ((taskno < MAX_ACT_TASK_NUMBER)
仅供内部使用 2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华为软件编程规范总则CHECKLISTAuthor: 华为Date:1 排版1-1:程序块要采用缩进风格编写,缩进的TAB键一个。
1-2:相对独立的程序块之间、变量说明之后必须加空行。
1-3:较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。
1-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。
1-5:若函数或过程中的参数较长,则要进行适当的划分。
1-6:不允许把多个短语句写在一行中,即一行只写一条语句。
1-7:if、while、for、default、do等语句自占一行。
1-8:对齐只使用TAB键,不使用空格键。
1-9:函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。
1-10:程序块的分界符(如C/C++语言的大括号'{'和'}')应各独占一行并且位于同一列,同时与引用它们的语句左对齐。
在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while0、switch、case 语句中的程序都要采用如上的缩进方式。
1-11:在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如->),后不应加空格。
2 注释2-1:一般情况下,源程序有效注释量必须在20%以上。
2-2:说明性文件(如头文件.h文件、.inc文件、.def文件、编译说明文件.cfg等)头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。
2-3:源文件头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等。
2-4:函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。
2-5:边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。
不再有用的注释要删除。
2-6:注释的内容要清楚、明了,含义准确,防止注释二义性。
2-7:避免在注释中使用缩写,特别是非常用缩写。
2-8:注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。
2-9:对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,在声明时都必须加以注释,说明其物理含义。
变量、常量、宏的注释应放在其上方相邻位置或右方。
2-10:数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,必须加以注释。
对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释放在此域的右方。
2-11:全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。
2-12:注释与所描述内容进行同样的缩排。
2-13:将注释与其上面的代码用空行隔开。
2-14:对变量的定义和分支语句(条件分支、循环语句等)必须编写注释。
2-15:对于switch语句下的case语句,如果因为特殊情况需要处理完一个case后进入下一个case处理,必须在该case语句处理完、下一个case语句前加上明确的注释。
3 标识符命名3-1:标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解。
3-2:命名中若使用特殊约定或缩写,则要有注释说明。
3-3:自己特有的命名风格,要自始至终保持一致,不可来回变化。
3-4:对于变量命名,禁止取单个字符(如i、j、k...),建议除了要有具体含义外,还能表明其变量类型、数据类型等,但i、j、k作局部循环变量是允许的。
3-5:命名规范必须与所使用的系统风格保持一致,并在同一项目中统一,比如采用UNIX的全小写加下划线的风格或大小写混排的方式,不要使用大小写与下划线混排的方式。
4 可读性4-1:注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。
4-2:避免使用不易理解的数字,用有意义的标识来替代。
涉及物理状态或者含有物理意义的常量,不应直接使用数字,必须用有意义的枚举或宏来代替。
5 变量5-1:去掉没必要的公共变量。
5-2:仔细定义并明确公共变量的含义、作用、取值范围及公共变量间的关系。
5-3:明确公共变量与操作此公共变量的函数或过程的关系,如访问、修改及创建等。
5-4:当向公共变量传递数据时,要十分小心,防止赋与不合理的值或越界等现象发生。
5-5:防止局部变量与公共变量同名。
5-6:严禁使用未经初始化的变量作为右值。
6 函数、过程6-1:对所调用函数的错误返回码要仔细、全面地处理。
6-2:明确函数功能,精确(而不是近似)地实现函数设计。
6-3:编写可重入函数时,应注意局部变量的使用(如编写C/C++语言的可重入函数时,应使用auto即缺省态局部变量或寄存器变量)。
6-4:编写可重入函数时,若使用全局变量,则应通过关中断、信号量(即P、V操作)等手段对其加以保护。
7 可测性7-1:在同一项目组或产品组内,要有一套统一的为集成测试与系统联调准备的调测开关及相应打印函数,并且要有详细的说明。
7-2:在同一项目组或产品组内,调测打印出的信息串的格式要有统一的形式。
信息串中至少要有所在模块名(或源文件名)及行号。
7-3:编程的同时要为单元测试选择恰当的测试点,并仔细构造测试代码、测试用例,同时给出明确的注释说明。
测试代码部分应作为(模块中的)一个子模块,以方便测试代码在模块中的安装与拆卸(通过调测开关)。
7-4:在进行集成测试/系统联调之前,要构造好测试环境、测试项目及测试用例,同时仔细分析并优化测试用例,以提高测试效率。
7-5:使用断言来发现软件问题,提高代码可测性。
7-6:用断言来检查程序正常运行时不应发生但在调测时有可能发生的非法情况。
7-7:不能用断言来检查最终产品肯定会出现且必须处理的错误情况。
7-8:对较复杂的断言加上明确的注释。
7-9:用断言确认函数的参数。
7-10:用断言保证没有定义的特性或功能不被使用。
7-11:用断言对程序开发环境(OS/Compiler/Hardware)的假设进行检查。
7-12:正式软件产品中应把断言及其它调测代码去掉(即把有关的调测开关关掉)。
7-13:在软件系统中设置与取消有关测试手段,不能对软件实现的功能等产生影响。
7-14:用调测开关来切换软件的DEBUG版和正式版,而不要同时存在正式版本和DEBUG版本的不同源文件,以减少维护的难度。
7-15:软件的DEBUG版本和发行版本应该统一维护,不允许分家,并且要时刻注意保证两个版本在实现功能上的一致性。
8 程序效率8-1:编程时要经常注意代码的效率。
8-2:在保证软件系统的正确性、稳定性、可读性及可测性的前提下,提高代码效率。
8-3:局部效率应为全局效率服务,不能因为提高局部效率而对全局效率造成影响。
8-4:通过对系统数据结构的划分与组织的改进,以及对程序算法的优化来提高空间效率。
8-5:循环体内工作量最小化。
9 质量保证9-1:在软件设计过程中构筑软件质量。
9-2:代码质量保证优先原则9-3:只引用属于自己的存贮空间。
9-4:防止引用已经释放的内存空间。
9-5:过程/函数中分配的内存,在过程/函数退出之前要释放。
9-6:过程/函数中申请的(为打开文件而使用的)文件句柄,在过程/函数退出之前要关闭。
9-7:防止内存操作越界。
9-8:认真处理程序所能遇到的各种出错情况。
9-9:系统运行之初,要初始化有关变量及运行环境,防止未经初始化的变量被引用。
9-10:系统运行之初,要对加载到系统中的数据进行一致性检查。
9-11:严禁随意更改其它模块或系统的有关设置和配置。
9-12:不能随意改变与其它模块的接口。
9-13:充分了解系统的接口之后,再使用系统提供的功能。
9-14:编程时,要防止差1错误。
9-15:要时刻注意易混淆的操作符。
当编完程序后,应从头至尾检查一遍这些操作符,以防止拼写错误。
9-16:有可能的话,if语句尽量加上else分支,对没有else分支的语句要小心对待;switch语句必须有default 分支。
10 代码编辑、编译、审查10-1:打开编译器的所有告警开关对程序进行编译。
10-2:在产品软件(项目组)中,要统一编译开关选项。
10-3:通过代码走读及审查方式对代码进行检查。
10-4:测试部测试产品之前,应对代码进行抽查及评审。
11 代码测试、维护11-1:单元测试要求至少达到语句覆盖。
11-2:单元测试开始要跟踪每一条语句,并观察数据流及变量的变化。
11-3:清理、整理或优化后的代码要经过审查及测试。
11-4:代码版本升级要经过严格测试。
11-5:使用工具软件对代码版本进行维护。
11-6:正式版本上软件的任何修改都应有详细的文档记录。
12 宏12-1:用宏定义表达式时,要使用完备的括号。
12-2:将宏所定义的多条表达式放在大括号中。
12-3:使用宏时,不允许参数发生变化。