作者:黄鑫(glacier②unnoo.com)
对于多人开发团队来说,程序设计和代码编写人员的编程基础、经验往往参差不齐。所以在一个软件项目进入设计和编码阶段之前,除了制订明确的编码规范,还有必要对代码质量的其他部分提出明确要求,同时这些要求应作为程序设计和代码编写的审核内容列入检查表。
尽量避免可预见的错误或缺陷是提出这些要求的目的之一,另一个目的则是尽快提高开发新手的基本素质。
一、变量/常量/函数命名、注释格式、缩进格式要求:
凡从事软件开发的公司大都制订了自己的编码规范,即使没有,也很容易通过google轻松找到较完整的通用要求。略。
二、代码组织结构要求:
1、对于标准C程序,要求将功能相近的函数集中保存,如文件处理函数组保存在file_operate.c文件中,注册表处理函数组保存在reg_operate.c文件中,且在设计阶段注意保持各文件的相对独立性,避免发生这样的结果:测试单个模块时交叉引用其他文件,最终几乎包含了整个project。简言之,就是要求设计者对于标准C代码也尽量采用面向对象的思想进行设计。
示例:略。
2、对于面向对象程序,只要按照OO的思想进行设计,本身就是将相关的数据结构及方法进行封装,即只要符合OOD要求即可。
示例:略。
三、公用函数设计要求:
多处使用的功能代码必须以函数形式设计和编写,除特殊情况外,不允许两个以上不同的程序段完成相同功能。该项要求的目的是:
1)便于白盒测试中针对公用代码进行完全测试;
2)避免函数内部代码改动时进行多处重复的检查和修改。
示例:略。
四、对于参与白盒测试的函数设计要求:
对于参与白盒测试的所有函数,参数和返回值必须是测试环境下容易构造的数据结构。在
WINDOWS驱动程序或ISAPI等特殊程序中,存在许多应用层难以构造的数据结构,如"DEVICE_OBJECT"、
"UNICODE_STRING"、"HTTP_FILTER_CONTEXT"等,如果需要在应用层对包含这些数据结构的函数进行测试,将大大增加测试代码开发的工作量,且测试效果并不一定理想。对于这类函数,要求将参数转换为普通数据结构并通过独立的函数进行处理,再将结果按需要进行转换并返回。对于代码量过大的单个函数,除特殊情况(如算法复杂且连贯的压缩、加密函数等)外,均应进一步拆分为功能相对单一且独立的多个函数,便于白盒测试中进行条件、路径覆盖以及检测各分支的中间结果。
示例:略。
五、对于面向对象程序的设计要求:
1、预留测试及调试接口:设计对象及编码时应注意为后续的测试或调试工作做好铺垫,预留一些私有变量及成员函数记录该对象的各种中间状态和尽可能详细的错误信息。
示例:略。
2、保证对象的封装性:不允许为了满足白盒测试中对中间结果检测的要求,而将本应为private或protect类型的变量、函数定义为public
类型。对于测试中需要访问的私有成员,可以专门编写public类型的测试函数,将私有变量结果返回,并通过预定义对这类测试函数进行限制,使其只在测试代码中参与编译。
示例:略。