华为C语言编程规范(11)—代码测试、维护

10-1:单元测试要求至少达到语句覆盖。

10-2:单元测试开始要跟踪每一条语句,并观察数据流及变量的变化。

10-3:清理、整理或优化后的代码要经过审查及测试。

10-4:代码版本升级要经过严格测试。

10-5:使用工具软件对代码版本进行维护。

10-6:正式版本上软件的任何修改都应有详细的文档记录。

10-7:发现错误立即修改,并且要记录下来。

10-8:关键的代码在汇编级跟踪。

10-9:仔细设计并分析测试用例,使测试用例覆盖尽可能多的情况,以提高测试用例的效率。

10-11:尽可能模拟出程序的各种出错情况,对出错处理代码进行充分的测试。

10-12:仔细测试代码处理数据、变量的边界情况。

10-13:保留测试信息,以便分析、总结经验及进行更充分的测试。

10-14:不应通过“试”来解决问题,应寻找问题的根本原因。

10-15:对自动消失的错误进行分析,搞清楚错误是如何消失的。

10-16:修改错误不仅要治表,更要治本。

10-17:测试时应设法使很少发生的事件经常发生。

10-18:明确模块或函数处理哪些事件,并使它们经常发生。

10-19: 坚持在编码阶段就对代码进行彻底的单元测试,不要等以后的测试工作来发现问题。

10-20:去除代码运行的随机性(如去掉无用的数据、代码及尽可能防止并注意函数中的“内部寄存器”等),让函数运行的结果可预测,并使出现的错误可再现。

11-1:用宏定义表达式时,要使用完备的括号。

示例:如下定义的宏都存在一定的风险。
#define RECTANGLE_AREA( a, b ) a * b
#define RECTANGLE_AREA( a, b ) (a * b)
#define RECTANGLE_AREA( a, b ) (a) * (b)

正确的定义应为:
#define RECTANGLE_AREA( a, b ) ((a) * (b))

11-2:将宏所定义的多条表达式放在大括号中。

示例:下面的语句只有宏的第一条表达式被执行。为了说明问题,for 语句的书写稍不符规范。
#define INTI_RECT_VALUE( a, b )\
a = 0;\
b = 0;
for (index = 0; index < RECT_TOTAL_NUM; index++)
INTI_RECT_VALUE( rect.a, rect.b );

正确的用法应为:
#define INTI_RECT_VALUE( a, b )\
{\
a = 0;\
b = 0;\
}
for (index = 0; index < RECT_TOTAL_NUM; index++)
{
INTI_RECT_VALUE( rect[index].a, rect[index].b );
}

11-3:使用宏时,不允许参数发生变化。

示例:如下用法可能导致错误。
#define SQUARE( a ) ((a) * (a))
int a = 5;
int b;
b = SQUARE( a++ ); // 结果:a = 7,即执行了两次增1。
正确的用法是:
b = SQUARE( a );
a++; // 结果:a = 6,即只执行了一次增1。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章