文档视界 最新最全的文档下载
当前位置:文档视界 › 华为软件开发规范

华为软件开发规范

华为软件开发规范
华为软件开发规范

目录

1 排版6

2 注释11

3 标识符命名18

4 可读性20

5 变量、结构22

6 函数、过程28

7 可测性36

8 程序效率40

9 质量保证44

10 代码编辑、编译、审查50

11 代码测试、维护52

12 宏53

1 排版

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字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。

示例:

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:不允许把多个短语句写在一行中,即一行只写一条语句。

示例:如下例子不符合规范。

rect.length = 0; rect.width = 0;

应如下书写

rect.length = 0;

rect.width = 0;

11-7:if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句部分无论多少都要加括号{}。

示例:如下例子不符合规范。

if (pUserCR == NULL) return;

应如下书写:

if (pUserCR == NULL)

{

return;

}

11-8:对齐只使用空格键,不使用TAB键。

说明:以免用不同的编辑器阅读程序时,因TAB键所设置的空格数目不同而造成程序布局不整齐,不要使用BC作为编辑器合版本,因为BC会自动将8个空格变为一个TAB键,因此使用BC合入的版本大多会将缩进变乱。

11-9:函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case 语句下的情况处理语句也要遵从语句缩进要求。

11-10:程序块的分界符(如C/C++语言的大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。

示例:如下例子不符合规范。

for (...) {

... // program code

}

if (...)

{

... // program code

}

void example_fun( void )

{

... // program code

}

应如下书写。

for (...)

{

... // program code

}

if (...)

{

... // program code

}

void example_fun( void )

{

... // program code

}

11-11:在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如->),后不应加空格。

说明:采用这种松散方式编写代码的目的是使代码更加清晰。

由于留空格所产生的清晰性是相对的,所以,在已经非常清晰的语句中没有必要再留空格,如果语句已足够清晰则括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号间不必加空格,因为在C/C++语言中括号已经是最清晰的标志了。

在长语句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部不加空格。给操作符留空格时不要连续留两个以上空格。

示例:

(1) 逗号、分号只在后面加空格。

int a, b, c;

(2)比较操作符, 赋值操作符"="、 "+=",算术操作符"+"、"%",逻辑操作符"&&"、

"&",位域操作符"<<"、"^"等双目操作符的前后加空格。

if (current_time >= MAX_TIME_VALUE)

a =

b + c;

a *= 2;

a =

b ^ 2;

(3)"!"、"~"、"++"、"--"、"&"(地址运算符)等单目操作符前后不加空格。

*p = 'a'; // 内容操作"*"与内容之间

flag = !isEmpty; // 非操作"!"与内容之间

p = &mem; // 地址操作"&" 与内容之间

i++; // "++","--"与内容之间

(4)"->"、"."前后不加空格。

p->id = pid; // "->"指针前后不加空格

(5) if、for、while、switch等与后面的括号间应加空格,使if等关键字更为突出、

明显。

if (a >= b && c > d)

?1-1:一行程序以小于80字符为宜,不要写得过长。

2 注释

12-1:一般情况下,源程序有效注释量必须在20%以上。

说明:注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。

12-2:说明性文件(如头文件.h文件、.inc文件、.def文件、编译说明文件.cfg等)头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。

示例:下面这段头文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。

/*************************************************

Copyright (C), 1988-1999, Huawei Tech. Co., Ltd.

File name: // 文件名

Author: Version: Date: // 作者、版本及完成日期

Description: // 用于详细说明此程序文件完成的主要功能,与其他模块

// 或函数的接口,输出值、取值范围、含义及参数间的控

// 制、顺序、独立或依赖等关系

Others: // 其它内容的说明

Function List: // 主要函数列表,每条记录应包括函数名及功能简要说明

1. ....

History: // 修改历史记录列表,每条修改记录应包括修改日期、修改

// 者及修改内容简述

1. Date:

Author:

Modification:

2. ...

*************************************************/

12-3:源文件头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等。

示例:下面这段源文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。

/************************************************************ Copyright (C), 1988-1999, Huawei Tech. Co., Ltd.

FileName: test.cpp

Author: Version : Date:

Description: // 模块描述

Version: // 版本信息

Function List: // 主要函数及其功能

1. -------

History: // 历史修改记录

David 96/10/12 1.0 build this moudle

***********************************************************/

说明:Description一项描述本文件的内容、功能、内部各部分之间的关系及本文件与其它文件关系等。History是修改历史记录列表,每条修改记录应包括修改日期、修改者及修改内容简述。

12-4:函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。

示例:下面这段函数的注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。

/*************************************************

Function: // 函数名称

Description: // 函数功能、性能等的描述

Calls: // 被本函数调用的函数清单

Called By: // 调用本函数的函数清单

Table Accessed: // 被访问的表(此项仅对于牵扯到数据库操作的程序)

Table Updated: // 被修改的表(此项仅对于牵扯到数据库操作的程序)

Input: // 输入参数说明,包括每个参数的作

// 用、取值说明及参数间关系。

Output: // 对输出参数的说明。

Return: // 函数返回值的说明

Others: // 其它说明

*************************************************/

12-5:边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。

12-6:注释的内容要清楚、明了,含义准确,防止注释二义性。

说明:错误的注释不但无益反而有害。

规则2-7:避免在注释中使用缩写,特别是非常用缩写。

说明:在使用缩写时或之前,应对缩写进行必要的说明。

12-8:注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。

示例:如下例子不符合规范。

例1:

/* get replicate sub system index and net indicator */

repssn_ind = ssn_data[index].repssn_index;

repssn_ni = ssn_data[index].ni;

例2:

repssn_ind = ssn_data[index].repssn_index;

repssn_ni = ssn_data[index].ni;

/* get replicate sub system index and net indicator */

应如下书写

/* get replicate sub system index and net indicator */

repssn_ind = ssn_data[index].repssn_index;

repssn_ni = ssn_data[index].ni;

12-9:对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,在声明时都必须加以注释,说明其物理含义。变量、常量、宏的注释应放在其上方相邻位置或右方。

示例:

/* active statistic task number */

#define MAX_ACT_TASK_NUMBER 1000

#define MAX_ACT_TASK_NUMBER 1000 /* active statistic task number */

12-10:数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,必须加以注释。对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释放在此域的右方。

示例:可按如下形式说明枚举/数据/联合结构。

/* sccp interface with sccp user primitive message name */

enum SCCP_USER_PRIMITIVE

{

N_UNITDATA_IND, /* sccp notify sccp user unit data come */

N_NOTICE_IND, /* sccp notify user the No.7 network can not */ /* transmission this message */

N_UNITDATA_REQ, /* sccp user's unit data transmission request*/ };

12-11:全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。

示例:

/* The ErrorCode when SCCP translate */

/* Global Title failure, as follows */ // 变量作用、含义

/* 0 - SUCCESS 1 - GT Table error */

/* 2 - GT error Others - no use */ // 变量取值范围

/* only function SCCPTranslate() in */

/* this modual can modify it, and other */

/* module can visit it through call */

/* the function GetGTTransErrorCode() */ // 使用方法

BYTE g_GTTranErrorCode;

12-12:注释与所描述内容进行同样的缩排。

说明:可使程序排版整齐,并方便注释的阅读与理解。

示例:如下例子,排版不整齐,阅读稍感不方便。

void example_fun( void )

{

/* code one comments */

CodeBlock One

/* code two comments */

CodeBlock Two

}

应改为如下布局。

void example_fun( void )

{

/* code one comments */

CodeBlock One

/* code two comments */

CodeBlock Two

}

12-13:将注释与其上面的代码用空行隔开。

示例:如下例子,显得代码过于紧凑。

/* code one comments */

program code one

/* code two comments */

program code two

应如下书写

/* code one comments */

program code one

/* code two comments */

program code two

12-14:对变量的定义和分支语句(条件分支、循环语句等)必须编写注释。

说明:这些语句往往是程序实现某一特定功能的关键,对于维护人员来说,良好的注释帮助更好的理解程序,有时甚至优于看设计文档。

12-15:对于switch语句下的case语句,如果因为特殊情况需要处理完一个case后进入下一个case处理,必须在该case语句处理完、下一个case语句前加上明确的注释。

说明:这样比较清楚程序编写者的意图,有效防止无故遗漏break语句。

示例(注意斜体加粗部分):

case CMD_UP:

ProcessUp();

break;

case CMD_DOWN:

ProcessDown();

break;

case CMD_FWD:

ProcessFwd();

if (...)

{

...

break;

}

else

{

ProcessCFW_B(); // now jump into case CMD_A }

case CMD_A:

ProcessA();

break;

case CMD_B:

ProcessB();

break;

case CMD_C:

ProcessC();

break;

case CMD_D:

ProcessD();

break;

...

?2-1:避免在一行代码或表达式的中间插入注释。

说明:除非必要,不应在代码或表达中间插入注释,否则容易使代码可理解性变差。

?2-2:通过对函数或过程、变量、结构等正确的命名以及合理地组织代码的结构,使代码成为自注释的。

说明:清晰准确的函数、变量等的命名,可增加代码可读性,并减少不必要的注释。

?2-3:在代码的功能、意图层次上进行注释,提供有用、额外的信息。

说明:注释的目的是解释代码的目的、功能和采用的方法,提供代码以外的信息,帮助读者理解代码,防止没必要的重复注释信息。

示例:如下注释意义不大。

/* if receive_flag is TRUE */

if (receive_flag)

而如下的注释则给出了额外有用的信息。

/* if mtp receive a message from links */

if (receive_flag)

?2-4:在程序块的结束行右方加注释标记,以表明某程序块的结束。

说明:当代码段较长,特别是多重嵌套时,这样做可以使代码更清晰,更便于阅读。

示例:参见如下例子。

if (...)

{

// program code

while (index < MAX_INDEX)

{

// program code

} /* end of while (index < MAX_INDEX) */ // 指明该条while语句结束

} /* end of if (...)*/ // 指明是哪条if语句结束

?2-5:注释格式尽量统一,建议使用“/* …… */”。

?2-6:注释应考虑程序易读及外观排版的因素,使用的语言若是中、英兼有的,建议多使用中文,除非能用非常流利准确的英文表达。

说明:注释语言不统一,影响程序易读性和外观排版,出于对维护人员的考虑,建议使用中文。

3 标识符命名

13-1:标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解。

说明:较短的单词可通过去掉“元音”形成缩写;较长的单词可取单词的头几个字母形成缩写;一些单词有大家公认的缩写。

示例:如下单词的缩写能够被大家基本认可。

temp 可缩写为 tmp ;

flag 可缩写为 flg ;

statistic 可缩写为 stat ;

increment 可缩写为 inc ;

message 可缩写为 msg ;

13-2:命名中若使用特殊约定或缩写,则要有注释说明。

说明:应该在源文件的开始之处,对文件中所使用的缩写或约定,特别是特殊的缩写,进行必要的注释说明。

13-3:自己特有的命名风格,要自始至终保持一致,不可来回变化。

说明:个人的命名风格,在符合所在项目组或产品组的命名规则的前提下,才可使用。(即命名规则中没有规定到的地方才可有个人命名风格)。

13-4:对于变量命名,禁止取单个字符(如i、j、k...),建议除了要有具体含义外,还能表明其变量类型、数据类型等,但i、j、k作局部循环变量是允许的。

说明:变量,尤其是局部变量,如果用单个字符表示,很容易敲错(如i写成j),而编译时又检查不出来,有可能为了这个小小的错误而花费大量的查错时间。

示例:下面所示的局部变量名的定义方法可以借鉴。

int liv_Width

其变量名解释如下:

l 局部变量(Local)(其它:g 全局变量(Global)...)

i 数据类型(Interger)

v 变量(Variable)(其它:c 常量(Const)...)

Width 变量含义

这样可以防止局部变量与全局变量重名。

13-5:命名规范必须与所使用的系统风格保持一致,并在同一项目中统一,比如采用UNIX的全小写加下划线的风格或大小写混排的方式,不要使用大小写与下划线混排的方式,用作特殊标识如标识成员变量或全局变量的m_和g_,其后加上大小写混排的方式是允许的。

示例: Add_User不允许,add_user、AddUser、m_AddUser允许。

?3-1:除非必要,不要用数字或较奇怪的字符来定义标识符。

示例:如下命名,使人产生疑惑。

#define _EXAMPLE_0_TEST_

#define _EXAMPLE_1_TEST_

void set_sls00( BYTE sls );

应改为有意义的单词命名

#define _EXAMPLE_UNIT_TEST_

#define _EXAMPLE_ASSERT_TEST_

void set_udt_msg_sls( BYTE sls );

?3-2:在同一软件产品内,应规划好接口部分标识符(变量、结构、函数及常量)的命名,防止编译、链接时产生冲突。

说明:对接口部分的标识符应该有更严格限制,防止冲突。如可规定接口部分的变量与常量之前加上“模块”标识等。

?3-3:用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。

说明:下面是一些在软件中常用的反义词组。

add / remove begin / end create / destroy

insert / delete first / last get / release

increment / decrement put / get

add / delete lock / unlock open / close

min / max old / new start / stop

next / previous source / target show / hide

send / receive source / destination

cut / paste up / down

示例:

int min_sum;

int max_sum;

int add_user( BYTE *user_name );

int delete_user( BYTE *user_name );

?3-4:除了编译开关/头文件等特殊应用,应避免使用_EXAMPLE_TEST_之类以下划线开始和结尾的定义。

4 可读性

14-1:注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。

说明:防止阅读程序时产生误解,防止因默认的优先级与设计思想不符而导致程序出错。

示例:下列语句中的表达式

word = (high << 8) | low (1)

if ((a | b) && (a & c)) (2)

if ((a | b) < (c & d)) (3)

如果书写为

high << 8 | low

a |

b && a & c

a |

b <

c & d

由于

high << 8 | low = ( high << 8) | low,

a |

b && a &

c = (a | b) && (a & c),

(1)(2)不会出错,但语句不易理解;

a |

b <

c &

d = a | (b < c) & d,(3)造成了判断条件出错。

14-2:避免使用不易理解的数字,用有意义的标识来替代。涉及物理状态或者含有物理意义的常量,不应直接使用数字,必须用有意义的枚举或宏来代替。

示例:如下的程序可读性差。

if (Trunk[index].trunk_state == 0)

{

Trunk[index].trunk_state = 1;

... // program code

}

应改为如下形式。

#define TRUNK_IDLE 0

#define TRUNK_BUSY 1

if (Trunk[index].trunk_state == TRUNK_IDLE)

{

Trunk[index].trunk_state = TRUNK_BUSY;

... // program code

}

?4-1:源程序中关系较为紧密的代码应尽可能相邻。

说明:便于程序阅读和查找。

示例:以下代码布局不太合理。

rect.length = 10;

char_poi = str;

rect.width = 5;

若按如下形式书写,可能更清晰一些。

rect.length = 10;

rect.width = 5; // 矩形的长与宽关系较密切,放在一起。

char_poi = str;

?4-2:不要使用难懂的技巧性很高的语句,除非很有必要时。

说明:高技巧语句不等于高效率的程序,实际上程序的效率关键在于算法。

示例:如下表达式,考虑不周就可能出问题,也较难理解。

* stat_poi ++ += 1;

* ++ stat_poi += 1;

应分别改为如下。

*stat_poi += 1;

stat_poi++; // 此二语句功能相当于“ * stat_poi ++ += 1; ”

++ stat_poi;

*stat_poi += 1; // 此二语句功能相当于“ * ++ stat_poi += 1; ”

华为软件编程规范

华为软件编程规范Revised on November 25, 2020

目录 1 排版 6 2 注释11 3 标识符命名18 4 可读性20 5 变量、结构22 6 函数、过程28 7 可测性36 8 程序效率40 9 质量保证44 10 代码编辑、编译、审查50 11 代码测试、维护52 12 宏53

1 排版 11-1:程序块要采用缩进风格编写,缩进的空格数为4个。 说明:对于由开发工具自动生成的代码可以有不一致。 11-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; 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));

华为软件编程规范.doc

文档编号产品版本受控状态 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 RESERVED Description: // 用于详细说明此程序文件完成的主要功能 *************************************************************/ #ifndef _IPF_IP_H #define _IPF_IP_H ...

华为公司招聘职位要求

华为公司招聘条件要求 软件研发工程师: 工作职责 : 负责通信系统软件模块的设计、编码、调试、测试等工作,参与相关质量活动,确保设计、实现、测试工作按时保质完成 职位要求: 1、计算机、通信或相关专业本科以上学历 2、熟悉C/C++、JAVA底层驱动软件编程,熟悉 TCP/IP 协议、 Internet 网的基本知识 3 、对通信知识有一定基础 4、能够熟练阅读和理解英文资料 2、硬件研发工程师 : 工作职责 : 从事单板硬件、光技术、逻辑、射频、装备、 机电、CAD器件可靠性等模块开发工作,参与相关质量活动, 确 保设计、实现、测试工作的按时保质完成。 职位要求: 1、电子、计算机、通信、自控、自动化相关专业本科以上学历 2、具备良好的数字、模拟电路基础 3、熟悉C/嵌入式系统开发/底层驱动软件编程/逻辑设计 4、能 够熟练阅读和理解英文资料芯片设计工程师: 工作职责 :

1、负责数字 / 模拟芯片开发和设计、验证、实现工作; 2、按照模块规格和芯片总体方案的要求,严格遵循开发流程、模板、标准和规范,承担 模块的详细设计和实施工作,确保开发工作按时按质完成; 3、及时编写各种设计文档和标准化资料,实现资源、经验共享。 职位要求: 1、微电子、计算机、通信工程等相关专业 2、了解或实际应用过 VHDL/Verilog 语言编程,掌握数字电路设计,或具有FPGA设计经验,或熟悉综合(SYN”时序分析(STA /布局布线(Place and routing ) /可测性设计(DFT,有相关工具应用的经验;或具有模拟 IC 设计项目经验 射频开发工程师: 工作职责 : 负责通讯设备射频模块的开发、设计和优化工作;从事无线基站通信设备天馈及其解决方案方面的研究和开发工作。 职位要求: 1、电子、通信、电磁场与微波、微电子半导体等专业本科及以上学历; 2、能够熟练阅读和理解英文资料; 3、掌握并有RF仿真经验(如ADS优先; 4、有射频产品开发经验优先。 云计算研发工程师:

华为软件编程地要求规范

软件编程规范 (仅供内部使用) 北京世纪百合科技有限公司 Beijing Centurial Lily Technology Co.,Ltd. 版权所有不得复制

文档修改记录

目录 1.引言 (6) 1.1 目的 (6) 1.2 范围 (6) 2.规范 (6) 2.1 文件 (6) 2.2版面风格 (4) 2.3 标识符命名 (9) 2.4 函数与宏 (11) 2.5 代码的可靠性 (15) 3.附录:通用类型的公共定义 (21)

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 RESERVED Description: // 用于详细说明此程序文件完成的主要功能 *************************************************************/ #ifndef _IPF_IP_H #define _IPF_IP_H ...

华为软件开发规范

软件开发规范 1 排版 11-1:程序块要采用缩进风格编写,缩进的空格数为4个。 说明:对于由开发工具自动生成的代码可以有不一致。 11-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; 11-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));

PCB设计规范-华为

华为PCB设计规范 1..1 PCB(Print circuit Board):印刷电路板。 1..2 原理图:电路原理图,用原理图设计工具绘制的、表达硬件电路中各种器件之间的连接关系的图。 1..3 网络表:由原理图设计工具自动生成的、表达元器件电气连接关系的文本文件,一般包含元器件封装、网络列表和属性定义等组成部分。 1..4 布局:PCB设计过程中,按照设计要求,把元器件放臵到板上的过程。深圳市华为技术有限公司1999-07-30批准,1999-08-30实施。 1..5 仿真:在器件的IBIS MODEL或SPICE MODEL支持下,利用EDA设计工具对PCB的布局、布线效果进行仿真分析,从而在单板的物理实现之前发现设计中存在的EMC问题、时序问题和信号完整性问题,并找出适当的解决方案。深圳市华为技术有限公司1999-07-30批准,1999-08-30实施。 II. 目的 A. 本规范归定了我司PCB设计的流程和设计原则,主要目的是为PCB设计者提供必须遵循的规则和约定。 B. 提高PCB设计质量和设计效率。 提高PCB的可生产性、可测试、可维护性。 III. 设计任务受理 A. PCB设计申请流程 当硬件项目人员需要进行PCB设计时,须在《PCB设计投板申请表》中提出投板申请,并经其项目经理和计划处批准后,流程状态到达指定的PCB设计部门审批,此时硬件项目人员须准备好以下资料: ⒈经过评审的,完全正确的原理图,包括纸面文件和电子件; ⒉带有MRPII元件编码的正式的BOM; ⒊PCB结构图,应标明外形尺寸、安装孔大小及定位尺寸、接插件定位尺寸、禁止布线区等相关尺寸; ⒋对于新器件,即无MRPII编码的器件,需要提供封装资料; 以上资料经指定的PCB设计部门审批合格并指定PCB设计者后方可开始PCB设计。

华为钢网设计规范(网络软件)

DKBA 华为技术有限公司企业技术规范 钢网设计规范 华为技术有限公司发布

版权所有侵权必究

目次 前 言 ................................................................................. .. (3) 1 范围 6 2 规范性引用文件 6 3 术语和定义 6 4 材料、制作方法、文件格式 6 4.1 网框材料 6 4.2 钢片材料 6 4.3 张网用丝网及钢丝网 6 4.4 张网用的胶布,胶 6 4.5 制作方法7 4.6 文件格式7 5 钢网外形及标识的要求7 5.1 外形图7 5.2 PCB居中要求8 5.3 厂商标识内容及位置8 5.4 钢网标识内容及位置8 5.5 钢网标签内容及位置8 5.6 MARK点8 6 钢片厚度的选择9 6.1 焊膏印刷用钢网9 6.2 通孔回流焊接用钢网9 6.3 BGA维修用植球小钢网9 6.4 贴片胶印刷用钢网9 7 焊膏印刷钢网开孔设计9 7.1 一般原则9 7.2 CHIP类元件10 7.2.1 0603及以上10 7.2.2 0402 11 7.3 小外形晶体11

7.3.1 SOT23-1、SOT23-5 11 7.3.2 SOT89 11 7.3.3 SOT143 12 7.3.4 SOT223 12 7.3.5 SOT252,SOT263,SOT-PAK 12 7.4 VCO器件12 7.5 耦合器元件(LCCC) 13 7.6 表贴晶振13 7.7 排阻14 7.8 周边型引脚IC 14 7.8.1 Pitch≤0.65mm的IC 14 7.8.2 Pitch>0.65mm的IC 14 7.9 双边缘连接器14 7.10 面阵型引脚IC 14 7.10.1 PBGA 14 7.10.2 CBGA,CCGA 15 7.11 其它问题15 7.11.1 CHIP元件共用焊盘15 7.11.2 大焊盘15 7.12 通孔回流焊接器件16 7.12.1 焊点焊膏量的计算16 7.12.2 钢网开口的设计17 7.12.3 钢网开口尺寸的计算17 7.13 BGA 植球钢网开口设计18 7.14 特例18 8 印胶钢网开口设计18 8.1 CHIP元件18 8.2 小外形晶体管19 8.2.1 SOT23 19 8.2.2 SOT89 19 8.2.3 SOT143 19 8.2.4 SOT252 19 8.2.5 SOT223 20

华为fpga设计规范(Verilog Hdl)

FPGA设计流程指南 前言 本部门所承担的FPGA设计任务主要是两方面的作用:系统的原型实现和ASIC的原型验证。编写本流程的目的是: ●在于规范整个设计流程,实现开发的合理性、一致性、高效性。 ●形成风格良好和完整的文档。 ●实现在FPGA不同厂家之间以及从FPGA到ASIC的顺利移植。 ●便于新员工快速掌握本部门FPGA的设计流程。 由于目前所用到的FPGA器件以Altera的为主,所以下面的例子也以Altera为例,工具组合为modelsim + LeonardoSpectrum/FPGACompilerII + Quartus,但原则和方法对于其他厂家和工具也是基本适用的。

目录 1. 基于HDL的FPGA设计流程概述 (1) 1.1 设计流程图 (1) 1.2 关键步骤的实现 (2) 1.2.1 功能仿真 (2) 1.2.2 逻辑综合 (2) 1.2.3 前仿真 (3) 1.2.4 布局布线 (3) 1.2.5 后仿真(时序仿真) (4) 2. Verilog HDL设计 (4) 2.1 编程风格(Coding Style)要求 (4) 2.1.1 文件 (4) 2.1.2 大小写 (5) 2.1.3 标识符 (5) 2.1.4 参数化设计 (5) 2.1.5 空行和空格 (5) 2.1.6 对齐和缩进 (5) 2.1.7 注释 (5) 2.1.8 参考C语言的资料 (5) 2.1.9 可视化设计方法 (6) 2.2 可综合设计 (6) 2.3 设计目录 (6) 3. 逻辑仿真 (6) 3.1 测试程序(test bench) (7) 3.2 使用预编译库 (7) 4. 逻辑综合 (8) 4.1 逻辑综合的一些原则 (8) 4.1.1 关于LeonardoSpectrum (8) 4.1.1 大规模设计的综合 (8) 4.1.3 必须重视工具产生的警告信息 (8) 4.2 调用模块的黑盒子(Black box)方法 (8) 参考 (10) 修订纪录 (10)

华为软件开发行为规范

软件开发行为规范 第一版 深圳市华为技术有限公司 版权所有不得复制

软件开发行为规范 (第一版) 为了把公司已经发布的软件开发过程规范有效地运作于产品开发活动中,把各种规范“逐步形成工程师的作业规范”,特制定本软件开发行为规范,以达到过程控制的目的。 与软件开发相关的所有人员,包括各级经理和工程师都必须遵守本软件开发行为规范。对违反规范的开发行为,必须按照有关管理规定进行处罚。 本软件开发行为规范的内容包括:软件需求分析、软件项目计划、概要设计、详细设计、编码、需求管理、配置管理、软件质量保证、数据度量和分析等。 本软件开发行为规范,采用以下的术语描述: ★规则:在软件开发过程中强制必须遵守的行为规范。 ★建议:软件开发过程中必须加以考虑的行为规范。 ★说明:对此规则或建议进行必要的解释。 ★示例:对此规则或建议从正或反两个方面给出例子。 本软件开发过程行为规范由研究技术管理处负责解释和维护。 研究技术管理处

目录 1 软件需求分析 5 2 软件项目计划9 3 概要设计11 4 详细设计14 5 编码18 6 需求管理19 7 软件配置管理21 8 软件质量保证23 9 数据度量和分析25

1 软件需求分析 1-1:软件需求分析必须在产品需求规格的基础上进行,并保证完全实现产品需求规格的定义。 1-2:当产品的需求规格发生变更时,必须修订软件需求规格文档。软件需求规格的变更必须经过评审,并保存评审记录。 1-3:必须对软件需求规格文档进行正规检视。 1-4:软件需求分析过程活动结束前,必须经过评审,并保存评审记录。 1-5:在对软件需求规格文档的正规检视或评审时,必须检查软件需求规格文档中需求的清晰性、完备性、兼容性、一致性、正确性、可行性、易修改性、健壮性、易追溯性、易理解性、易测试性和可验证性、性能、功能、接口、数据、可维护性等内容。 说明:参考建议1-1到1-16。 1-1:采用以下检查表检查软件需求规格文档中需求的清晰性。 1-2:采用以下检查表检查软件需求规格文档中需求的完备性。

华为软件开发规范

华为软件开发规范

软件开发规范 1 排版 11-1:程序块要采用缩进风格编写,缩进的空格数为4个。 说明:对于由开发工具自动生成的代码可以有不一致。 11-2:相对独立的程序块之间、变量说明之后必须加空行。 示例:如下例子不符合规范。 if (!valid_ni(ni)) { ... // program code } repssn_ind = 仅供内部使用2

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字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。 示例: perm_count_msg.head.len = NO7_TO_STAT_PERM_COUNT_LEN + STAT_SIZE_PER_FRAM * sizeof( _UL ); 仅供内部使用3

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)); 仅供内部使用4

华为软件编码规范

华为软件编程规范和范例 〔一〕=====[排版] ]=======. 〔二〕======[注释]=======. 〔三〕=====[标识符命名]=======. 〔四〕=====[可读性]======. 〔五〕=====[变量、结构]=====. 〔六〕=====[函数、过程]=====. 〔七〕=====[可测性]=====. 〔八〕=====[程序效率]=====. 〔九〕=====[质量保证]=====. 〔十〕=====[代码编辑、编译、审查]=====. 〔十一〕=====[代码测试、维护]=====. 〔十二〕=====[宏]=====. 〔一〕========[ 排版]========== 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

华为程序开发规范

Panorama系统程序开发规范之二 1.匈牙利命名规则 变动前缀类型 a Array b Boolean by Byte c Char //有符号型字符 cb Char Byte //无符号型字符(没多大用处) cr ColorRef //颜色参考值 cx,cy Length of x,y (ShortInt) //坐标差(长度) dw Double Word fn Function h Handle i Integer m_ Member of a class n Short Integer np Near Pointer p Pointer lp Long Pointer ×(str) s String sz String with Zero End //以字符'\0'结尾的字符串 tm Text //文本内容 w Word x,y Coordinate //坐标

2.Panorama系统的命名约定 2.1 VC中变量命名时的前缀约定 Array a... //例:CStringArray saText BOOL b... UINT n... int i... short n... long l... WORD w... DWORD dw... float f... char c... char* psz... TCHAR* psz... LPCTSTR lpsz... CString str... COLORREF cr... LPLOGPALETTE lp... (包括LP开头的类型都是这样) POINT pt... CPoint pt... HANDLE h... HGLOBAL h... (包括H开头的类型都是这样) 说明: 1.如果是指向上述类型的指针,就在上面规范前加"p" ; 2.如果是指向上述类型的双重指针,就在上面规范前加"pp" ; 3.如果是类成员变量,则在上面规范前加"m_"; 4.全局变量,则在上面规范前加"g_"; 5.在类型前加了"const",命名约定不变; 2.2 VC中变量命名时的后缀约定 1.MFC类 CWnd* p...Wnd 省去的地方一般为该类的用途(如果是某一个类的成员,则还应该在前加"m_")又如:CView* p...View 2.3 局部变量应尽量易懂简洁,使用常见的变量,如Num,nCount,i,j,k,n,len,pos, offset,nReadNum,index,nRet,ret, string,filename临时变量,如ltmp,ftmp,tmpStr,tempStr 。。。 2.4 函数命名也应该见名知意。如CalcAllDataStyle(),ReadDocDataFromTime(),GetIndexInfo() 常见的函数Init_, Open_, Create_, Get_, Set_, Read_, Load_, Write_, Start_, Stop_, Check_,

华为软件编程规范总则

目录 1 排版 6 2 注释11 3 标识符命名18 4 可读性20 5 变量、结构22 6 函数、过程28 7 可测性36 8 程序效率40 9 质量保证44 10 代码编辑、编译、审查50 11 代码测试、维护52 12 宏53

1 排版 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字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。 示例: 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)

342 华为软件测试类技术任职资格标准

华为技术有限公司 软件测试类技术任职资格标准 版本号:2.0 拟制单位:测试业务部/技术干部部 二○○一年十一月

目录 概述 .............................. 3页 第一部分级别定义................. 5页第二部分资格标准................ 8页

概述 任职资格管理的目的 ?规范人才的培养和选拔,推动做实的人不断提高水平,引导有水平的人做实,按做实给予评价。 ?激励员工不断提高其职位胜任能力,以职业化的员工队伍参与国际竞争。?树立有效培训和自我学习的标杆,以资格标准牵引员工不断学习、不断改进,保持公司的持续性发展。 任职资格认证原则 ?以关键行为和核心技能为中心 ?以工作实绩为导向 ?标准公开、程序公正 ?测试、评议相结合 任职资格标准体系 ?软件测试类任职资格标准由工作经验、必备知识、技能标准、工作绩效、行为标准等五个部分组成。 软件测试类任职资格认证对象

从事软件测试类工作的人员

第一部分级别定义 根据软件测试类的实际情况,将技术任职资格等级分为一至六级,如下图所示。 级别定义描述了各级人员的工作定义、工作内容、工作性质、主要职责及影响范围。 级别代码:T0401(01) 级别名称:软件测试类一级工程师 要点:有一定系统特性的测试实践经验,参与测试方案和测试用例的设计,能够独立完成测试代码实现、测试环境搭建、测试执行等工作。承担华为某一产品领域或特定产品技术领域中一般系统特性的测试、质量保证活动等工作。在二级及以上工程师的指导下按计划要求完成任务并保证其质量。

华为软件开发规范标准

软件开发规 1 排版 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字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。

示例: 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));

华为系统程序开发规范

My_Panorama系统程序开发规范之二 命名法则 1.匈牙利命名规则 变动前缀类型 a Array b Boolean by Byte c Char //有符号型字符 cb Char Byte //无符号型字符(没多大用处) cr ColorRef //颜色参考值 cx,cy Length of x,y (ShortInt) //坐标差(长度) dw Double Word fn Function h Handle i Integer m_ Member of a class n Short Integer np Near Pointer p Pointer lp Long Pointer ×(str) s String sz String with Zero End //以字符'\0'结尾的字符串 tm Text //文本内容 w Word x,y Coordinate //坐标

2.Panorama系统的命名约定 2.1 VC中变量命名时的前缀约定 Array a... //例:CStringArray saText BOOL b... UINT n... int i... short n... long l... WORD w... DWORD dw... float f... char c... char* psz... TCHAR* psz... LPCTSTR lpsz... CString str... COLORREF cr... LPLOGPALETTE lp... (包括LP开头的类型都是这样) POINT pt... CPoint pt... HANDLE h... HGLOBAL h... (包括H开头的类型都是这样) 说明: 1.如果是指向上述类型的指针,就在上面规范前加"p" ; 2.如果是指向上述类型的双重指针,就在上面规范前加"pp" ; 3.如果是类成员变量,则在上面规范前加"m_"; 4.全局变量,则在上面规范前加"g_"; 5.在类型前加了"const",命名约定不变;

华为软件开发规范

目录 1 排版6 2 注释11 3 标识符命名18 4 可读性20 5 变量、结构22 6 函数、过程28 7 可测性36 8 程序效率40 9 质量保证44 10 代码编辑、编译、审查50 11 代码测试、维护52 12 宏53

1 排版 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字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。 示例: 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)

相关文档