软件开发编码规范.docx

上传人:b****3 文档编号:1010660 上传时间:2022-10-15 格式:DOCX 页数:18 大小:24.82KB
下载 相关 举报
软件开发编码规范.docx_第1页
第1页 / 共18页
软件开发编码规范.docx_第2页
第2页 / 共18页
软件开发编码规范.docx_第3页
第3页 / 共18页
软件开发编码规范.docx_第4页
第4页 / 共18页
软件开发编码规范.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

软件开发编码规范.docx

《软件开发编码规范.docx》由会员分享,可在线阅读,更多相关《软件开发编码规范.docx(18页珍藏版)》请在冰豆网上搜索。

软件开发编码规范.docx

软件开发编码规范

 

软件开发编码规范(C#)

1引言4

1.1编写目的4

1.2背景4

1.3定义4

1.4参考资料4

2基本要求4

2.1程序结构要求4

2.2可读性要求4

2.3结构化要求5

2.4正确性与容错性要求5

2.5可重用性要求6

3用户界面设计原则6

4源程序书写规范6

4.1通用源代码格式规则6

4.1.1缩进6

4.1.2边距7

4.1.3“{}”的使用7

4.1.4注释7

4.2语句格式与语句书写规范7

4.2.1括号8

4.2.2保留字和关键字8

4.2.3函数8

4.2.4变量8

4.2.5语句8

5命名规范10

5.1函数命名10

5.2形参10

5.3常量和变量10

5.3.1常量和宏定义10

5.3.2变量10

5.4函数使用说明、接口命名、NameSpace命名11

5.5控件的命名12

5.6类型12

5.6.1一般类型12

5.6.2构造类型13

5.6.3类类型13

5.7文件和文件夹13

5.7.1文件夹的命名规则13

5.7.2文件命名14

6源程序文档注释规范14

6.1注释文档的一般规范14

1引言

1.1编写目的

本规范旨在用规范文件的形式,对全公司使用C#进行的编程过程,进行有效的规范管理,使得最终的软件产品具有良好的风格和统一的结构,且使代码可读性强、易维护。

本规范预期读者是全公司所有参与编程的软件开发人员以及其他相关人员。

本标准适用于VisualC#,其余语言作参考。

1.2背景

公司在上一个项目中由于代码编写风格不统一,可读性较差、较难维护,使得工作效率有所降低。

1.3定义

1.4参考资料

PascalStandardsFAQ(E)

JavaDoc(E)

Doc-O-maticDocument(E)

ArtemisAllianceDelphiCodingStandards(E)

《C#基本书写规范》

《C#编码规范纲要》

 

2基本要求

2.1程序结构要求

程序结构清晰,简单易懂,单个函数的程序行数一般不得超过100行,个别特殊函数除外。

代码中打算干什么,要简单,直接了当,代码精简,避免垃圾程序。

应尽量使用.NET库函数和公共函数(无特殊情况不要使用外部方法调用windows的核心动态链接库)。

一般情况下,不得使用全局变量,尽量使用局部变量。

2.2可读性要求

可读性第一,效率第二。

(这仅对代码本身而言)。

保持注释与代码完全一致。

每个源程序文件,都必须有文件头说明,说明规格见“源程序文档注释规范”一节。

每个函数,都必须有函数头说明,说明规格见“源程序文档注释规范”一节。

主要变量(结构、联合、类或对象)定义或引用时,注释必须能反映其物理含义。

处理过程的每个阶段都必须有相关注释说明。

在典型算法前都必须有注释,同时算法在满足要求的情况下应尽可能简单。

利用缩进来显示程序的逻辑结构,缩进量一致以Tab键为单位,定义Tab为4个

字节。

循环、分支层次不要超过五层。

注释可以与语句在同一行,也可以在上行。

空行和空白字符也是一种特殊注释。

一目了然的语句不加注释。

注释的作用范围可以为:

定义、引用、条件分支以及一段代码。

注释行数(不包括文件头和函数头说明部份)应占总行数的1/5到1/3。

常量定义(const)有相应说明。

2.3结构化要求

禁止出现两条等价的支路。

禁止GOTO语句。

用IF语句来强调只执行两组语句中的一组。

禁止ELSEGOTO和ELSERETURN。

用CASE实现多路分支。

避免从循环引出多个出口。

函数只有一个出口。

不使用复杂的条件赋值语句。

避免不必要的分支。

不要轻易用条件分支去替换逻辑表达式。

2.4正确性与容错性要求

程序首先是正确,其次是优美。

无法证明你的程序没有错误,因此在编写完一段程序后,应先回头检查。

改一个错误时可能产生新的错误,因此在修改前首先考虑对其它程序的影响。

所有变量在调用前必须被初始化。

对所有的用户输入,必须进行合法性检查。

不要比较浮点数的相等,如:

10.0*0.1==1.0,不可靠。

程序与环境或状态发生关系时,必须主动去处理发生的意外事件,如文件能否逻辑锁定、打印机是否联机等,对于明确的错误,要有明确的容错代码提示用户。

单元测试也是编程的一部份,提交联调测试的程序必须通过单元测试。

尽量使用规范的容错语句。

例如:

try

{

}

catch

{

}

finally

{

}

2.5可重用性要求

重复使用的完成相对独立功能的算法或代码应抽象为服务或类。

服务或类应考虑面向对象(OO)思想,减少外界联系,考虑独立性或封装性。

3用户界面设计原则

除标题部分外,所有显示给用户的字体(如BUTTON和LABEL等)使用标准字体:

体、九号、黑色;标题部分可用醒目的字体,如:

宋体、小二号、红色。

采用Windows缺省的风格。

窗体尽量从已有的父窗体继承。

方便用户对信息的输入、修改和阅读。

验证用户输入的有效性和合理性。

具有清晰明确的用户提示信息。

使用Tab键在输入项之间移动输入焦点(可选)。

标准按钮大小必须相同,使用的图像和标题必须与《界面风格规范》一致,如果出现该规范中没有的地方,须与项目负责人和美工协商。

4源程序书写规范

4.1通用源代码格式规则

4.1.1缩进

缩进就是每级间有一个Tab单位。

不要在源代码中放置制表符。

这是因为,制表符的宽度随着不同的设置和代码管理实用程序(打印、文档及版本控制等)而不同。

沿逻辑结构行缩进代码。

没有缩进,代码将变得难以理解,如:

if(expression)

{

//

//此处填写你的代码块;

//

}

if(expression)

{

//

//此处填写你的代码块;

//

}

else

{

//

//此处填写你的代码块;

//

}

缩进代码会产生出更容易阅读的代码,如:

if(expression)

{

if(expression)

{

//

//此处填写你的代码块;

//

}

else

{

//

//此处填写你的代码块;

//

}

}

4.1.2边距

 边距设置为80个字符。

源代码一般不会因写一个单词而超过边距,但本规则比较灵活。

只要可能,长度超过一行的语句应当用分行符换行。

换行后,应缩进两个字符。

4.1.3“{}”的使用

“{”或“}”必须单独占一行。

例如:

错误形式:

for(i:

=0;i<10;i++){//错,“{”与for在同一行

}

正确形式:

for(i:

=0;i<10;i++)//对,“{”在另外一行中

{

}

4.1.4注释

通常使用“/*...*/”类型的块注释和“//”类型的行注释。

4.2语句格式与语句书写规范

4.2.1括号

 在左括号与下一字符之间没有空格。

同样,右括号与前一字符也没有空格。

下面的例子演示了正确与不正确的空格。

CallProc(aParameter);//错!

CallProc(aParameter);//正确!

4.2.2保留字和关键字

在用户的各种命名中不能单独使用保留字或关键字来进行命名。

4.2.3函数

4.2.3.1格式

函数名要能体现出该函数要实现的功能,应当以大写字母开始,且大小写交错以增加可读性(每个单词的首字母大写)。

下面是一个不正确的写法:

pubilcvoidthisisapoorlyformattedroutinename()

下面是正确的写法:

pubilcvoidThisIsMuchMoreReadableRoutineName()

4.2.3.2形参

1)参数顺序

 形参的顺序主要要考虑寄存器调用规则。

最常用的参数应当作为第一个参数,按使用频率依次从左到右排。

输入参数位于输出参数之前。

范围大的参数应当放在范围小的参数之前。

例如:

SomeProc(aPlanet,aContinent,aCountry,aState,aCity).

 有些则例外。

例如,在事件处理过程中,Object类型的Sender参数往往是第一个要传递的参数。

2)常量参数

 任何值类型参数,只要不加REF标志,都是常量参数;

任何引用类型参数,都不是常量参数,不管加不加标志。

4.2.4变量

4.2.4.1局部变量

 局部变量用于过程内部,如果需要的话,应当在过程的入口处立即初始化变量。

4.2.4.2全局变量

 一般不鼓励使用全局变量。

不过,有时候需要用到。

即使如此,也应当把全局变量限制在需要的环境中。

例如,一个全局变量可能只在单元的实现部分是全局的。

 全局数据如果将由许多单元使用,就应移动到一个公用单元里被所有对象使用。

全局数据可在声明时直接初始化为一个值。

4.2.5语句

4.2.5.1If语句

 在if/else语句中,if子句的条件应该直接且易于理解。

为了避免出现许多if语句,可以使用switch语句代替。

如果多于5级,不要使用if语句。

请改用更清楚的方法。

 如果在if语句中有多个条件要测试,应按照计算的复杂程度从右向左排。

这样,可以使代码充分利用编译器的短路估算逻辑。

例如,如果Condition1比Condition2快,Condition2比Condition3快,则if语句一般应这样构造:

if(Condition1&&Condition2&&Condition3)

 如果Condition3为False的机会很大,利用短路估算逻辑,我们也可以将Condition3放在最前面:

if(Condition3&&Condition1&&Condition2)

有if出现,就必须有对应的else出现。

if语句的三种形式:

1)形式一(不需要else)

if(Condition)

{

Process;

}

//else

//{

//NoElseNeeded

//}

2)形式二(需要else,但是else里面不需要处理)

if(Condition)

{

Process;

}

else

{

//NoNeedProcess

}

3)形式三(if里面不需要处理)

if(Condition)

{

//NoNeedProcess

}

else

{

Process;

}

4.2.5.2switch语句

1)概述

 switch语句中每种情况的常量应当按数字或字母的顺序排列。

每种情况的动作语句应当简短且通常不超过4-5行代码。

如果动作太复杂,应将代码单独放在一个函数中。

switch语句的else子句只用于默认情况或错误检测。

2)格式

 switch语句遵循一般的缩进和命名规则。

4.2.5.3while语句

 所有对while循环进行初始化的代码应当位于while入口前,且不要被无关的语句隔开。

任何业务的辅助工作都应在循环后立即进行。

4.2.5.4for

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 职业规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1