aihot  2017-05-09 23:37:30  OpenCV |   查看评论   

 常见C/C++编码规范(7)

2.6.可测性 
<规则1> 模块编写应该有完善的测试方面的考虑。 

<规则2> 源代码中应该设计了代码测试的内容,如打印宏开关、变量值、函数名称、函数值等。 
在编写代码之前,应预先设计好调试与测试的方法和手段,并设计好各种调测开关及相应测试代码如打印函数等。 
程序的调试与测试是软件生存周期中很重要的一个阶段,如何对软件进行较全面、高率的测试并尽可能地找出软件中的错误就成为很关键的问题。因此在编写源代码之前,除了要有一套比较完善的测试计划外,还应设计出一系列代码测试手段,为单元测试、集成测试及系统联调提供方便。 

<规则3> 在同一项目组或产品组内,要有一套统一的为集成测试与系统联调准备的调测开关及相应打印函数,并且要有详细的说明。 
本规则是针对项目组或产品组的。 
示例:.ext文件示例,文件名为:EXAMPLE.EXT。 
/* 头文件开始 */ 
#ifndef __EXAMPLE_EXT 
#define __EXAMPLE_EXT 

#define _EXAMPLE_DEBUG_ // 模块测试总开关。打开开关的含义是模块可以 
// 进行单元测试或其它功能、目的等的测试。 
#ifdef _EXAMPLE_DEBUG_ 
#define _EXAMPLE_UNIT_TEST_ // 单元测试宏开关 
#define _EXAMPLE_ASSERT_TEST_ // 断言测试开关 
... // 其它测试开关 
#endif 

#ifndef _EXAMPLE_UNIT_TEST_ // 若没有定义单元测试 
#i nclude // 各模块共用的头文件 
#i nclude // 系统接口头文件 

#ifndef _SYSTEM_DEBUG_VERSION_ // 如果是发行版本(即非DEBUG版) 
#undef _EXAMPLE_UNIT_TEST_ 
#undef _EXAMPLE_ASSERT_TEST_ 
... // 将所有与测试有关的开关都关掉,即编译时不含任何测试代码 
#endif 

#i nclude // 与另一模块的接口头文件 
... // 其它接口头文件 
#else // 若定义了单元测试,则应构造单元测试所需的环境、结构等。 
typdef unsigned char _UC ; 
typdef unsigned long _UL ; 
#define TRUE 1 
... // 所有为单元测试准备的环境,如宏、枚举、结构、联合等。 
#endif 

#endif /* EXAMPLE.EXT结束 */ 
/* 头文件结束 */ 

<规则4> 在同一项目组或产品组内,调测打印出的信息串的格式要有统一的形式。信息串中至少要有所在模块名(或源文件名)及行号。 
统一的调测信息格式便于集成测试。 

<规则5> 使用断言来发现软件问题,提高代码可测性。 
断言是对某种假设条件进行检查(可理解为若条件成立则无动作,否则应报告),它可以快速发现并定位软件问题,同时对系统错误进行自动报警。断言可以对在系统中隐藏很深,用其它手段极难发现的问题进行定位,从而缩短软件问题定位时间,提高系统的可测性。实际应用时,可根据具体情况灵活地设计断言。 

 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自常见C/C++编码规范(7)

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]