《软件开发编码规范》由会员分享,可在线阅读,更多相关《软件开发编码规范(14页珍藏版)》请在金锄头文库上搜索。
1、软件开发编码规范(C#)目 录1引言41.1编写目的41.2背景41.3定义41.4参考资料42基本要求42.1程序结构要求42.2可读性要求42.3结构化要求52.4正确性与容错性要求52.5可重用性要求63用户界面设计原则64源程序书写规范64.1通用源代码格式规则64.1.1缩进64.1.2边距74.1.3“”的使用74.1.4注释74.2语句格式与语句书写规范74.2.1括号84.2.2保留字和关键字84.2.3函数84.2.4变量84.2.5语句85命名规范105.1函数命名105.2形参105.3常量和变量105.3.1常量和宏定义105.3.2变量105.4函数使用说明、接口命名
2、、NameSpace命名115.5控件的命名125.6类型125.6.1一般类型125.6.2构造类型135.6.3类类型135.7文件和文件夹135.7.1文件夹的命名规则135.7.2文件命名146源程序文档注释规范146.1注释文档的一般规范141 引言1.1 编写目的本规范旨在用规范文件的形式,对全公司使用C#进行的编程过程,进行有效的规范管理,使得最终的软件产品具有良好的风格和统一的结构,且使代码可读性强、易维护。 本规范预期读者是全公司所有参与编程的软件开发人员以及其他相关人员。本标准适用于Visual C# ,其余语言作参考。1.2 背景公司在上一个项目中由于代码编写风格不统一,
3、可读性较差、较难维护,使得工作效率有所降低。1.3 定义 无1.4 参考资料Pascal Standards FAQ (E)JavaDoc (E)Doc-O-matic Document (E)Artemis Alliance Delphi Coding Standards (E)C#基本书写规范C#编码规范纲要2 基本要求2.1 程序结构要求程序结构清晰,简单易懂,单个函数的程序行数一般不得超过100行,个别特殊函数除外。代码中打算干什么,要简单,直接了当,代码精简,避免垃圾程序。应尽量使用.NET库函数和公共函数(无特殊情况不要使用外部方法调用windows的核心动态链接库)。一般情况下,
4、不得使用全局变量,尽量使用局部变量。2.2 可读性要求可读性第一,效率第二。(这仅对代码本身而言)。保持注释与代码完全一致。每个源程序文件,都必须有文件头说明,说明规格见“源程序文档注释规范”一节。每个函数,都必须有函数头说明,说明规格见“源程序文档注释规范”一节。主要变量(结构、联合、类或对象)定义或引用时,注释必须能反映其物理含义。处理过程的每个阶段都必须有相关注释说明。在典型算法前都必须有注释, 同时算法在满足要求的情况下应尽可能简单。利用缩进来显示程序的逻辑结构,缩进量一致以Tab键为单位,定义Tab为 4个字节。循环、分支层次不要超过五层。注释可以与语句在同一行,也可以在上行。空行和
5、空白字符也是一种特殊注释。一目了然的语句不加注释。注释的作用范围可以为:定义、引用、条件分支以及一段代码。注释行数(不包括文件头和函数头说明部份)应占总行数的 1/5 到 1/3。常量定义(const)有相应说明。2.3 结构化要求禁止出现两条等价的支路。禁止GOTO语句。用 IF 语句来强调只执行两组语句中的一组。禁止 ELSE GOTO 和 ELSE RETURN。用 CASE 实现多路分支。避免从循环引出多个出口。函数只有一个出口。不使用复杂的条件赋值语句。避免不必要的分支。不要轻易用条件分支去替换逻辑表达式。2.4 正确性与容错性要求程序首先是正确,其次是优美。无法证明你的程序没有错误
6、,因此在编写完一段程序后,应先回头检查。改一个错误时可能产生新的错误,因此在修改前首先考虑对其它程序的影响。所有变量在调用前必须被初始化。对所有的用户输入,必须进行合法性检查。不要比较浮点数的相等,如: 10.0 * 0.1 = 1.0 , 不可靠。程序与环境或状态发生关系时,必须主动去处理发生的意外事件,如文件能否逻辑锁定、打印机是否联机等,对于明确的错误,要有明确的容错代码提示用户。单元测试也是编程的一部份,提交联调测试的程序必须通过单元测试。尽量使用规范的容错语句。 例如:trycatchfinally2.5 可重用性要求重复使用的完成相对独立功能的算法或代码应抽象为服务或类。服务或类应
7、考虑面向对象(OO)思想,减少外界联系,考虑独立性或封装性。3 用户界面设计原则除标题部分外,所有显示给用户的字体(如BUTTON和LABEL等)使用标准字体:宋体、九号、黑色;标题部分可用醒目的字体,如:宋体、小二号、红色。采用Windows缺省的风格。窗体尽量从已有的父窗体继承。方便用户对信息的输入、修改和阅读。验证用户输入的有效性和合理性。具有清晰明确的用户提示信息。使用Tab键在输入项之间移动输入焦点(可选)。标准按钮大小必须相同,使用的图像和标题必须与界面风格规范一致,如果出现该规范中没有的地方,须与项目负责人和美工协商。4 源程序书写规范4.1 通用源代码格式规则4.1.1 缩进缩
8、进就是每级间有一个Tab单位。不要在源代码中放置制表符。这是因为,制表符的宽度随着不同的设置和代码管理实用程序(打印、文档及版本控制等)而不同。沿逻辑结构行缩进代码。没有缩进,代码将变得难以理解,如: if(expression ) /此处填写你的代码块;/ if(expression ) /此处填写你的代码块;/ else /此处填写你的代码块;/缩进代码会产生出更容易阅读的代码,如: if(expression ) if(expression )/此处填写你的代码块;/else/此处填写你的代码块;/4.1.2 边距边距设置为80个字符。源代码一般不会因写一个单词而超过边距,但本规则比较灵
9、活。只要可能,长度超过一行的语句应当用分行符换行。换行后,应缩进两个字符。 4.1.3 “”的使用“”或“”必须单独占一行。例如: 错误形式:for(i:=0;i10;i+) / 错, “” 与f o r 在同一行 正确形式:for(i:=0;i10;i+) / 对, “”在另外一行中4.1.4 注释通常使用“/*.*/”类型的块注释和“/”类型的行注释。4.2 语句格式与语句书写规范4.2.1 括号在左括号与下一字符之间没有空格。同样,右括号与前一字符也没有空格。下面的例子演示了正确与不正确的空格。CallProc( aParameter ); / 错!CallProc(aParameter
10、); / 正确!4.2.2 保留字和关键字在用户的各种命名中不能单独使用保留字或关键字来进行命名。4.2.3 函数4.2.3.1 格式函数名要能体现出该函数要实现的功能,应当以大写字母开始,且大小写交错以增加可读性(每个单词的首字母大写)。下面是一个不正确的写法:pubilc void thisisapoorlyformattedroutinename()下面是正确的写法:pubilc void ThisIsMuchMoreReadableRoutineName()4.2.3.2 形参1)参数顺序 形参的顺序主要要考虑寄存器调用规则。最常用的参数应当作为第一个参数,按使用频率依次从左到右排。输
11、入参数位于输出参数之前。范围大的参数应当放在范围小的参数之前。例如:SomeProc(aPlanet, aContinent, aCountry, aState, aCity). 有些则例外。例如,在事件处理过程中,Object 类型的Sender 参数往往是第一个要传递的参数。2)常量参数 任何值类型参数,只要不加REF标志,都是常量参数;任何引用类型参数,都不是常量参数,不管加不加标志。4.2.4 变量4.2.4.1 局部变量 局部变量用于过程内部,如果需要的话,应当在过程的入口处立即初始化变量。4.2.4.2 全局变量 一般不鼓励使用全局变量。不过,有时候需要用到。即使如此,也应当把全局
12、变量限制在需要的环境中。例如,一个全局变量可能只在单元的实现部分是全局的。 全局数据如果将由许多单元使用,就应移动到一个公用单元里被所有对象使用。全局数据可在声明时直接初始化为一个值。4.2.5 语句4.2.5.1 If 语句 在if/else语句中, if子句的条件应该直接且易于理解。为了避免出现许多if语句,可以使用switch语句代替。如果多于5级,不要使用if语句。请改用更清楚的方法。 如果在if语句中有多个条件要测试,应按照计算的复杂程度从右向左排。这样,可以使代码充分利用编译器的短路估算逻辑。例如,如果Condition1比Condition2快,Condition2比Condit
13、ion3快,则if语句一般应这样构造:if (Condition1 & Condition2 & Condition3) 如果Condition3为False的机会很大,利用短路估算逻辑,我们也可以将Condition3放在最前面:if (Condition3 & Condition1 & Condition2) 有if出现,就必须有对应的else出现。if语句的三种形式:1) 形式一(不需要else) if (Condition) Process;/else/ No Else Needed/2) 形式二(需要else,但是else里面不需要处理) if (Condition) Process;else/No Need Process3) 形式三(if里面不需要处理) if (Condition)/ No Need ProcesselseProcess;4.2.5.2 switch 语句1)概述 switch语句中每种情况的常量应当按数字或字母的顺序排列。每种情况的动作语句应当简短且通常不超过