Advertisement

华为编程规范及实例分析

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:ZIP


简介:
《华为编程规范及实例分析》一书详细阐述了华为公司的软件开发标准和实践案例,旨在提升代码质量和团队协作效率。 【案例1.12.2】 问题描述: 在进行主BCCH载频互助新功能开发的并行联调测试的过程中,发现以下的问题:当数管台设置“TRX倒换是否允许”为“是”,执行整表设定后,关闭基站中一个配有4个TRX的小区的主BCCH所在的TRX电源。此时对应小区能够重新初始化并成功运行,即载频互助功能生效。然而,在对这个站点进行四级复位的同时重启之前被关掉的那个含有原配主BCCH所在TRX的电源时,发现该小区无法正常初始化。 问题定位: 在开始分析这个问题的时候,我们首先检查了载频互助相关代码在基站初始化流程中的处理方式。BTSM程序中,在执行初始化前会判断是否发生过载频互助,并且如果发生了,则进一步确认原配主BCCH所在TRX(数据库配置的)是否已经恢复正常运行状态。若确定该TRX已恢复,就会将之前用于临时替代它的其他TRX的数据与实际主BCCH TRX数据交换回来并重新初始化。从表面上看,这样的处理逻辑没有明显错误,但为什么会出现无法正常初始化的情况呢? 我们通过在关键变量上添加调试信息,并重现问题场景后,在打印出来的日志中发现了一个重要的线索:即载频互助发生后的TRX号与实际数据库配置的主BCCH所在TRX号相同。这显然是不符合逻辑的,因为载频互助的意义在于当原配主BCCH TRX不能正常工作时启用其他备用TRX作为临时替代。 在进一步检查所有BTSM相关程序未找到问题后,我们转向了最近合并进来的版本中可能涉及的相关模块代码,并最终找到了导致该异常行为的原因所在。原来,在载频互助功能的处理过程中使用了一个全局变量ptrBTS_CONFIG_MAP[BtsNo].TRX_no_BCCH_in来表示当前实际运行中的主BCCH TRX号,这个值会随着系统状态的变化而变化;同时还有一个固定的指针CoTRXGroupForBts[BtsNo].MainTRX用于保存数据库中配置的原配主BCCH所在的固定TRX号。这两者在初始化过程中被赋予相同的初始值:函数FetchOneSiteConfig()中的第409行有相应的赋值语句,即 CoTRXGroupForBts[BTS_no_temp].MainTRX = ptrBTS_CONFIG_MAP[BTS_no_temp].TRX_no_BCCH_in。 然而,在DBMI模块的同步开发中进行了一些改动:在每次数据动态设定之后,会检查该站点是否发生过载频互助。如果确实发生了,则尝试将当前被借用作为主BCCH使用的TRX的数据与实际配置为主BCCH TRX的数据交换,并随后执行站点初始化过程。问题就出在这里,在DBMI模块中认为数据库中的原配主BCCH的TRX是ptrBTS_CONFIG_MAP[BTS_no_temp].TRX_no_BCCH_in,而每次进行站点初始化时都会调用FetchOneSiteConfig()函数,这导致了CoTRXGroupForBts[BTS_no_temp].MainTRX在系统运行过程中被频繁修改。正是这种不恰当的数据更新机制造成了上述异常现象的发生。 通过以上分析和定位工作,我们找到了问题的根本原因,并针对此进行了相应的代码修正以确保载频互助功能的正确实现与稳定运行。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • 优质
    《华为编程规范及实例分析》一书详细阐述了华为公司的软件开发标准和实践案例,旨在提升代码质量和团队协作效率。 【案例1.12.2】 问题描述: 在进行主BCCH载频互助新功能开发的并行联调测试的过程中,发现以下的问题:当数管台设置“TRX倒换是否允许”为“是”,执行整表设定后,关闭基站中一个配有4个TRX的小区的主BCCH所在的TRX电源。此时对应小区能够重新初始化并成功运行,即载频互助功能生效。然而,在对这个站点进行四级复位的同时重启之前被关掉的那个含有原配主BCCH所在TRX的电源时,发现该小区无法正常初始化。 问题定位: 在开始分析这个问题的时候,我们首先检查了载频互助相关代码在基站初始化流程中的处理方式。BTSM程序中,在执行初始化前会判断是否发生过载频互助,并且如果发生了,则进一步确认原配主BCCH所在TRX(数据库配置的)是否已经恢复正常运行状态。若确定该TRX已恢复,就会将之前用于临时替代它的其他TRX的数据与实际主BCCH TRX数据交换回来并重新初始化。从表面上看,这样的处理逻辑没有明显错误,但为什么会出现无法正常初始化的情况呢? 我们通过在关键变量上添加调试信息,并重现问题场景后,在打印出来的日志中发现了一个重要的线索:即载频互助发生后的TRX号与实际数据库配置的主BCCH所在TRX号相同。这显然是不符合逻辑的,因为载频互助的意义在于当原配主BCCH TRX不能正常工作时启用其他备用TRX作为临时替代。 在进一步检查所有BTSM相关程序未找到问题后,我们转向了最近合并进来的版本中可能涉及的相关模块代码,并最终找到了导致该异常行为的原因所在。原来,在载频互助功能的处理过程中使用了一个全局变量ptrBTS_CONFIG_MAP[BtsNo].TRX_no_BCCH_in来表示当前实际运行中的主BCCH TRX号,这个值会随着系统状态的变化而变化;同时还有一个固定的指针CoTRXGroupForBts[BtsNo].MainTRX用于保存数据库中配置的原配主BCCH所在的固定TRX号。这两者在初始化过程中被赋予相同的初始值:函数FetchOneSiteConfig()中的第409行有相应的赋值语句,即 CoTRXGroupForBts[BTS_no_temp].MainTRX = ptrBTS_CONFIG_MAP[BTS_no_temp].TRX_no_BCCH_in。 然而,在DBMI模块的同步开发中进行了一些改动:在每次数据动态设定之后,会检查该站点是否发生过载频互助。如果确实发生了,则尝试将当前被借用作为主BCCH使用的TRX的数据与实际配置为主BCCH TRX的数据交换,并随后执行站点初始化过程。问题就出在这里,在DBMI模块中认为数据库中的原配主BCCH的TRX是ptrBTS_CONFIG_MAP[BTS_no_temp].TRX_no_BCCH_in,而每次进行站点初始化时都会调用FetchOneSiteConfig()函数,这导致了CoTRXGroupForBts[BTS_no_temp].MainTRX在系统运行过程中被频繁修改。正是这种不恰当的数据更新机制造成了上述异常现象的发生。 通过以上分析和定位工作,我们找到了问题的根本原因,并针对此进行了相应的代码修正以确保载频互助功能的正确实现与稳定运行。
  • 优质
    《华为编程规范与实例示例》是一本由华为技术有限公司编写的权威指南,详细阐述了软件开发的最佳实践和编码标准,并通过具体案例加以说明。 本段落将详细介绍华为编程规范中关于排版的具体规则,并结合实例深入解析每一项规定的目的及其在实际编程中的应用。 ### 1. 排版 #### 1.1 缩进风格 程序块应当采用缩进风格编写,每个缩进层级使用4个空格来表示。对于由开发工具自动生成的代码,如果存在不一致的情况是可以接受的。 统一的缩进风格能够使代码层次清晰,易于阅读和理解。 示例: ```c if (!valid_ni(ni)) { program code } ``` #### 1.2 程序块之间的空行 相对独立的程序块之间、变量声明之后必须添加空行。 通过增加空行,可以更清晰地区分不同的代码段,便于理解代码逻辑。 示例: ```c if (!valid_ni(ni)) { program code } repssn_ind = ssn_data[index].repssn_index; repssn_ni = ssn_data[index].ni; ``` #### 1.3 长表达式的拆分 较长的语句(超过80字符)应该分成多行书写,在低优先级操作符处划分新行,操作符放在新行之首,并进行适当的缩进以保持代码整齐。 通过拆分长表达式,可以提高代码的可读性和可维护性。 示例: ```c 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 循环与判断语句的拆分 如果循环或判断语句中的表达式过长,应该在低优先级操作符处划分新行,操作符放在新行之首。 这种做法有助于提高代码的可读性,避免因单行过长而导致的混乱。 示例: ```c 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 函数参数的拆分 如果函数或过程中的参数列表过长,则应适当进行拆分。 通过拆分长参数列表,可以提高代码的清晰度,使其更加易于理解和维护。 示例: ```c 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 一行只写一条语句 禁止在同一行内写入多条语句。 确保每条语句都能清晰可见,便于调试和维护。 示例: ```c rect.length = 0; rect.width = 0; ``` #### 1.7 控制语句的格式 `if`、`for`、`do`、`while`、`case`、`switch`、 `default`等语句应自占一行,并且无论执行语句多少都应加上括号 `{}`。 使用括号可以使代码结构更加清晰,同时也有助于减少潜在的语法错误。 示例: ```c if (pUserCR == NULL) { return; } ``` #### 1.8 使用空格而非Tab键 只允许使用空格键来进行对齐,不得使用 Tab 键。 由于不同的编辑器可能对 Tab 键的宽度有不同的设置,使用空格键可以确保代码在任何环境下都能保持一致的对齐方式。 说明:如果使用某些编辑器(如 BC),它们可能会自动将 8 个空格转换为一个 Tab 键,从而导致版本合并时出现缩进问题。 #### 1.9 结构体定义和循环语句的格式 与控制语句类似,为了保持代码的整洁和一致性。 示例: ```c struct Example { int x; int y; }; for (int i = 0; i < 10;
  • C++.pdf
    优质
    本书《华为C++编程规范与实例》详细阐述了华为公司在软件开发过程中所采用的C++编程标准和最佳实践,通过大量实际案例指导读者如何编写高质量、可维护性强且符合行业标准的C++代码。适用于希望提升自身编码水平或加入华为团队的软件开发者。 1. 排版 2. 注释 3. 标识符命名 4. 可读性 5. 变量、结构 6. 函数、过程 7. 可测性 8. 程序效率 9. 质量保证 10. 代码编辑、编译、审查 11. 代码测试、维护 12. 宏
  • Java
    优质
    《华为Java编程规范》是一本由华为技术有限公司编写的指南书籍,旨在为开发者提供编写高质量、一致性的Java代码标准和建议。 华为的Java编程规范涵盖了编程格式、框架以及架构方面的内容。
  • Java.pdf
    优质
    《华为Java编程规范》是一份详细指导文档,旨在为开发者提供编写高质量、一致性的Java代码标准和最佳实践。它涵盖了编码风格、性能优化等方面的具体要求,帮助团队提升开发效率与软件质量。 华为JAVA编程规范.pdf包含了华为公司制定的Java编程标准和最佳实践,旨在帮助开发者编写高质量、可维护且符合企业级要求的代码。该文档详细介绍了编码风格、设计模式以及常见的陷阱与注意事项等内容,对于希望在项目中采用统一技术栈并提升团队协作效率的开发人员具有很高的参考价值。
  • 软件
    优质
    《华为编程软件规范》是华为技术有限公司内部使用的编程标准和最佳实践手册,旨在提升代码质量和开发效率。该规范详细规定了编码风格、设计模式及测试策略等关键内容,帮助开发者构建高效稳定的软件系统。 《华为软件编程规范详解》 作为全球领先的电信设备与技术解决方案提供商,华为的软件开发团队在长期实践中建立了一套严格的编程标准。这套规范旨在提升代码质量、确保软件稳定性和可维护性,并促进团队间的高效合作。本段落将详细介绍华为软件编程规范的关键点及其对软件开发的重要性。 一、命名规则 1. 变量名:建议使用描述性强且无歧义的变量名称,通常采用驼峰式命名法(例如`userName`),并尽量避免缩写,除非是被广泛接受的标准缩略语(如URL)。 2. 类名:类的名字应该用大写字母开头,并且每个单词的第一个字母也是大写的格式(例如`UserManager`)。这有助于明确地表示其功能或职责。 3. 常量命名:常量名称应全部使用大写,各词之间以下划线分隔(如`MAX_SIZE`)。 4. 方法名:方法的命名遵循小驼峰式规则,并且应该清晰准确地描述出它的作用(例如`calculateAverage`)。 二、注释标准 1. 文件头注释:每个源文件都应在顶部包含版权信息,创建日期,作者以及该文件的作用等基本说明。 2. 类的文档:简要介绍类的功能和设计思路。 3. 函数文档:解释函数的目的,参数及返回值,并在必要时提供异常处理的相关信息。 4. 行内注释:避免过多不必要的行间注解,保持代码简洁性。除非有必要使用它来帮助理解复杂逻辑或潜在问题的解决方法。 三、编码结构和风格 1. 缩进与空格:推荐使用四个空白字符作为缩进单位,并且要避免插入制表符;同时请确保在每一行结束时不留下多余的空白。 2. 行长限制:尽量控制代码的长度不超过80个字符,对于较长表达式,则应考虑适当的换行处理方法。 3. 括号风格:华为推荐使用K&R格式(即花括号内部另起一行)来定义块结构: ``` if (condition) { code block } ``` 四、错误管理和日志记录 1. 异常管理:在捕获异常时,应明确指定具体的异常类型,并避免过于宽泛的`catch(Exception e)`语句。 2. 日志系统:建议使用统一的日志框架来集中处理和追踪应用程序中的各种事件。 五、代码审查与版本控制 1. 代码评审:鼓励团队成员之间相互检查对方提交的代码,以提高整体的质量标准。 2. 版本控制系统:遵循Git最佳实践,在每次提交时都要附带明确且详细的注释信息,以便于追踪历史记录和回溯问题。 六、文档模板 华为提供了多种软件开发相关的文档模版(例如需求说明书、设计文件以及测试计划等),以确保项目的管理流程标准化并保持一致性。 总结而言,华为的编程规范不仅涵盖了代码编写的基本要求,还强调了团队合作精神及提高代码可读性的策略。遵循这些准则可以有效降低维护成本,并提升软件产品的质量水平;同时也有助于培养良好的编码习惯和专业素养对于所有开发者来说都是不可或缺的一环。
  • Java与军
    优质
    《华为Java编程规范与军规》是一本集合了华为公司在Java软件开发领域的最佳实践和严格要求的手册,旨在指导开发者遵循统一的标准进行高效、高质量的编码工作。 包括《JAVA编程军规.doc》《JAVA十大低级错误.doc》《华为_Java编程规范.pdf》《华为JAVA编程规范.doc》这些文档。