4.3代码复查
编码标准。编码标准是被广泛接受的、能够作为工作样板的编码实践集。良好的编码标准将有效地帮助您避免开发有潜在危险的代码,有助于预防缺陷。例如,可以在编码标准中列出那些应该避免使用的方法,规定号循环入口或在说明是初始化变量,避免不良的变量命名等。编码标准还能有效地统一和规范整体开发活动。当其他开发人员加入到项目中来时,他们能够很好地适应这一切。代码也将变得更规范更易维护。
表4.5 C++编码标准
目标 | 指导C++程序的开发 |
程序头 程序头格式 | 所有程序都应从一个描述性的开头开始 |
/********************************************************************/ /*Program Assignment:程序号 */ /*Name: 你的姓名 */ /*Date: 程序开发开始日期 */ /*Description: 对程序功能的一个简单描述 */ /********************************************************************/ | |
清单内容 内容距离 | 一份清单内容的概要 |
/********************************************************************/ /*Listing Contents (清单内容): */ /* Reuse Instruction (重用指导) */ /* Includes (包括) */ /* Class Declararions (类说明) */ /* CData */ /* Aset */ /* Source Code in C (用C编写的源代码): /classes/Cdata.cpp: */ /* Cdata */ /* Cdata() */ /* Empty() */ /********************************************************************/ | |
重用指导
示例 | 描述如何使用该程序。提供说明格式、参数值和类型以及参数范围; 提供对非法值、溢出条件或其他潜在的有可能引起非正常操作的条件等方面的警告。 |
/********************************************************************/ /*Reuse Instruction (重用指导) */ /* Int Printline(char *line_of_character) */ /* 目的:画线,’line_of_character’,位于同一打印行 */ /* 限制:线长最多为LINE_LENGTH */ /* Return:0 if 打印机未准备好 */ /* else 1 */ /********************************************************************/ | |
标识符
标识符示例 | 所有变量、函数名、常数以及其它标识符都是用带有描述性的名称。避免缩写形式或仅有一个字母的变量名。 |
int number_of_students /*此标识符好*/ int x4,j,ftave /*此标识符不好*/ | |
注释
好的注释 不好的注释 程序主体 示例 | 编码、文档要充分,以帮助读者理解其功能; 注释及应说明编码的目的,也应说明编码的行为; 对变量声明进行注释,指出说明该变量的目的。 |
If (record_count>limit) /*是否所有的记录都处理了*/ | |
If (record_count>limit) /*检查record_count是否超过限制*/ | |
程序主体前应有一段注释来描述由以下部分所作的处理。 | |
/********************************************************************/ /*以下程序部分将检察署驻“grades”的内容,并将计算班级成绩的平均值。 */ /********************************************************************/ | |
空白区域 | 为了增加程序的可读性,写程序时应留出一定的空间; 每个程序结构之间至少有一空行将它们隔开。 |
缩进
缩进示例 | 不同级别的括号之间应该有缩进; 每一个起始括号和终止括号应单独占一行。 |
While (miss_distance > threshold) { success_code=move_robot(target_location); if (success_code==MOVE_FAILED) { pringf(“The robot move has failed./n”) } } | |
大写
大写示例 | 所有定义应大写; 所有其它标识符及保留值均应小写; 对用户的输出信息可以大、小写相混合,以便用户清晰明了。 |
#define DEFAULT_NUMBER_OF_STUDENTS 15 int class_size=DEFAULT_NUMBER_OF_STUDENTS; |
其他种类的代码复查。在软件组织中,一种常用的方法是同行评审,就是几个工程师彼此复查程序。组织良好的同行评审一般会发现程序中50%~70%的缺陷。互查虽然需要很多时间,但是可以有效发现缺陷,因为工程师往往难于发现自己的设计错误。他们创作这个设计,直到程序应该完整什么,即使概念有瑕疵、作了错误的设计或实现假定,他们往往很难发现。检查这可以帮助他们克服这些问题。对一个大的项目,最佳检查策略是,先做个人代码复查再进行编译,然后在任何测试前进时行同行检查。
细心工作是有回报的。当工程师觉得对自己开发的程序附有质量责任时,他就不会依赖于编译器或其他工具来发现缺陷。全面的代码复查要花费时间,但是他们节省出来的时间比花费的时间多得多,并能够生产出更好的产品。