软件编程规范大全.docx
《软件编程规范大全.docx》由会员分享,可在线阅读,更多相关《软件编程规范大全.docx(89页珍藏版)》请在冰豆网上搜索。
![软件编程规范大全.docx](https://file1.bdocx.com/fileroot1/2022-12/12/6eba1975-4403-415e-8f4a-973ddeea4245/6eba1975-4403-415e-8f4a-973ddeea42451.gif)
软件编程规范大全
软件编程规范大全
产品编码规范书
一、书写格式
代码书写格式整齐统一、、层次清晰便于阅读。
●缩进TAB键统一为4个空格
●赋值语句(=)及逻辑判断符(>
=&&||...etc)左右各空一格
●算术运算符左右各空一格
●if/while/switch之类的语句右边空一格
●每个成员函数内部各个子功能之间用一个空行
●公用成员放在程序的最前面,私用成员在后。
二、恰当地使用注释
注释应简洁、清楚。
●不提倡使用/*和*/来注释,最好使用//来注释。
如果是对某一段程序(算法/结构)的注释,在程序头直接用//再空一格来进行说明,一行不要超过80字符
●注释就占程序的30%,如10行代码中就有不小于3行的注释。
三、关于命名
1、变量的命名
除了循环变量i,j,k...之外,文件、类、(成员)变量、(成员)函数的命名要有意义,大小写相间,一目了然;
成员变量、函数(Method)的首字母小写
全局变量名称以“g_”开头。
2、.类的命名和定义
自定义的类(包括Servlet、Bean)的首字母为大写。
在程序中引用时,其对变量名的首字母小写
Servlet、Bean定义名称时,其末尾应加上ServletBean后缀。
以便于区分。
如:
(GetNewGuest.class)
……
GetNewGuestgetNewGuest=newGetNewGuest();
……
ArticleBeanarticleBean=null;
包(package)名均为小写。
格式为:
com.founder.<项目名>.<模块名>
3、匈牙利命名法
命名时可以遵循匈牙利命名法
它通过在数据和函数名中加入额外的信息以增进程序员对程序的理解。
如字符串,前面加上str;.
StringstrTemp=newString(“Thisis……”);
如果定义两个实例,可以这样合起来写:
MyClassmyClassTemp1,myClassTemp2;
四、局部变量一定要初始化
如果你声明一个变量,不要以为编译器会自动将之赋零值!
你随手给它赋个初值并不麻烦,却会使程序更可靠,
floatfTemp=0.0;
五、.成员函数:
成员函数的功能一定要单一;
实现其功能时不要过分追求技巧,
函数体不能过长
六、.数组和缓冲区的使用
对数组和缓冲区进行检查,防止越界,尤其是变长的情况下
七、.尽量不要用goto语句
特别谨慎使用goto语句,最好别用它
尽管goto语句在某些特殊的情况下(比如编译器中)还很管用,但它破坏了整个程序的结构,尤其使用goto嵌套时,更让人一头雾水(很久以前就有人提出取消它)。
所以不到万不得已时刻不要用它,
可以用break,continue之类的语句替代之。
八、数应该是单人口、单出口的
所有成员函数尽量是单入口,单出口
也许多出口的程序写起来更简洁,意义也更明了。
但出了问题调试时会很难定位,所以宁可多用一些BOOL变量,多加些判断,保证单出口:
例如:
publicStringgetValue(intvalue)
{
if(value>0)
{
return“xxxx……T”;;
……
return;“aaa……”;
}
可以写成:
……
publicStringgetValue(intvalue)
{
Stringreault=null;
if(ivalue>0)
{…
result=“xxxx……”;
}
else
{
result=“aaaa……”;
…
}
returnbRet;
}
九、调用函数应合法
调用函数时要严格按照接口规范
严格按照函数的输入要求给它合适的参数
十、.单元测试
自己做代码内部(单元)测试时,必须做到语句覆盖,并且特别要注意边界值的覆盖
要让每个语句都被执行过,并且边界值(最大和最小)也被测试过。
你在程序中写的各种情况都可能在用户那里出现
十一、静态检查
代码写完后要尽可能多的做一些静态检查(Debug调试可是很费神费时的)。
尤其是对算法和数据管理(比如对文件存取)部分
十二、文件存放
代码文件的存储位置固定,图片文件存放在统一的目录Picture下,如果各个模块有自己的图片文件,可以创建子目录来完成。
公用函数脚本文件放在统一的目录Scripts下。
每个功能模块创建一个JSP文件存放目录。
结束语:
希望大家在遵守规范的前提下,通过自己的努力,开发出功能齐备、风格统一、性能稳定的一流软件产品。
VB、VC编码规范
1VB部分
1.1控件前缀
控件类型
前缀
例子
3DPanel
pnl
PnlGroup
Animatedbutton
ani
AniMailBox
Checkbox
chk
ChkReadOnly
Combobox,drop-downlistbox
cbo
CboEnglish
Commandbutton
cmd
CmdExit
Commondialog
dlg
DlgFileOpen
Communications
com
ComFax
Control
ctr
CtrCurrent
Datacontrol
dat
DatBiblio
Data-boundcombobox
dbcbo
DbcboLanguage
Data-boundgrid
dbgrd
DbgrdQueryResult
Data-boundlistbox
dblst
DblstJobType
Directorylistbox
dir
DirSource
Drivelistbox
drv
DrvTarget
Filelistbox
fil
FilSource
Form
frm
FrmEntry
FormObjectVariable
frmO
FrmOEntry
Frame
fra
FraLanguage
Gauge
gau
GauStatus
Graph
gra
GraRevenue
Grid
grd
GrdPrices
Horizontalscrollbar
hsb
HsbVolume
Image
img
ImgIcon
Keystatus
key
KeyCaps
Label
lbl
LblHelpMessage
Line
lin
LinVertical
Listbox
lst
LstPolicyCodes
MAPImessage
mpm
mpmSentMessage
MAPIsession
mps
mpsSession
MCI
mci
mciVideo
MDIchildform
mdi
mdiNote
Menu
mnu
mnuFileOpen
MSFlexgrid
msg
msgClients
MSTab
mst
mstFirst
OLE
ole
oleWorksheet
Outline
out
outOrgChart
PenBedit
bed
bedFirstName
PenHEdit
hed
hedSignature
Penink
ink
inkMap
Picture
pic
picVGA
Pictureclip
clp
clpToolbar
Report
rpt
rptQtr1Earnings
Shape
shp
shpCircle
Spin
spn
spnPages
Textbox
txt
txtLastName
Timer
tmr
tmrAlarm
UpDown
upd
updDirection
Verticalscrollbar
vsb
vsbRate
Slider
sld
sldScale
ImageList
ils
ilsAllIcons
TreeView
tre
treOrganization
Toolbar
tlb
tlbActions
TabStrip
tab
tabOptions
StatusBar
sta
staDateTime
ListView
lvw
lvwHeadings
ProgressBar
prg
prgLoadFile
RichTextBox
rtf
rtfReport
1.2数据访问对象(DAO)前缀
数据库对象
前缀
例子
Container
con
conReports
Database
db
dbAccounts
DBEngine
dbe
dbeJet
Document
doc
docSalesReport
Field
fld
fldAddress
Group
grp
grpFinance
Index
idx
idxAge
Parameter
prm
prmJobCode
QueryDef
qry
qrySalesByRegion
Recordset
rec
recForecast
Relation
rel
relEmployeeDept
TableDef
tbd
tbdCustomers
User
usr
usrNew
Workspace
wsp
wspMine
1.3菜单前缀
菜单控件除了最前面"mnu"标记以外,菜单控件的前缀应该被扩展:
对每一级嵌套增加一个附加前缀,将最终的菜单的标题放在名称字符串的最后。
下表列出了一些例子。
菜单标题序列
菜单处理器名称
File
mnuFile
FileOpen
mnuFileOpen
FileSend
mnuFileSend
FileSendEmail
mnuFileSendEmail
FileSendFax
mnuFileSendFax
当使用这种命名约定时,一个特定的菜单组的所有成员一个接一个地列在VisualBasic的“属性”窗口中。
而且,菜单控件的名字清楚地表示出它们所属的菜单项。
1.4其它控件前缀
对于上面没有列出的控件,应该用唯一的由两个或三个字符组成的前缀使它们标准化,以保持一致性。
只有当需要澄清时,才使用多于三个字符的前缀。
例如,对于派生的或修改的控件象上述那样扩展其前缀,使得在真正使用了哪一个控件的问题上避免混淆。
对于第三方控件,应该把制造商的小写缩写名附加到前缀中。
例如,从VisualBasicProfessional3D框架中创建的一个控件实例可以用fra3d这样的前缀,以避免混淆所使用的控件。
1.5变量、常量范围前缀
范围
前缀
例子
全局
g
gstrUserName
模块级
m
mblnCalcInProgress
本地到过程
dblVelocity
1.6变量、常量类型前缀
数据类型
前缀
例子
Boolean
bln
blnFound
Byte
byt
bytRasterData
Collection
col
colWidgets
Currency
cur
curRevenue
DateTime
dtm
dtmStart
Double
dbl
dblTolerance
Error
err
errOrderNum
Integer
int
intQuantity
Long
lng
lngDistance
Object
obj
objCurrent
Single
sng
sngAverage
String
str
strFName
Userdefinetype
udt
udtEmployee
Variant
Vnt
vntCheckSum
1.7描述变量和过程名
变量或过程名的主体应该使用大小写混合形式,并且应该足够长以描述它的作用。
而且,函数名应该以一个动词起首,如InitNameArray或CloseDialog。
对于频繁使用的或长的项,推荐使用标准缩略语以使名称的长度合理化。
一般来说,超过32个字符的变量名在VGA显示器上读起来就困难了。
当使用缩略语时,要确保它们在整个应用程序中的一致性。
在一个工程中,如果一会儿使用Cnt,一会儿使用Count,将导致不必要的混淆。
1.8用户定义的类型
在一项有许多用户定义类型的大工程中,常常有必要给每种类型一个它自己的三个字符的前缀。
如果这些前缀是以"u"开始的,那么当用一个用户定义类型来工作时,快速识别这些类型是很容易的。
例如,ucli可以被用来作为一个用户定义的客户类型变量的前缀。
1.9代码注释约定
1.9.1代码注释规范
模块节标题注释如下:
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'@ModuleName:
(模块名称)
'@MainFunc:
(模块说明)
'@Author:
(作者)
'@LastModify:
(最后修改时间)
'@Include:
(引用外部接口)
'@Interface:
(模块提供接口)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
举例:
frmAccountCard.frm的程序头注释如下
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'@ModuleName:
frmAccountCard
'@MainFunc:
科目卡片窗体
'@Author:
张山
'@LastModify:
2000-06-24
'@Include:
'@Interface:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
程序接口注释:
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'@FunctionName:
(函数名)
'@MainFunc:
(函数说明)
'@Author:
(作者)
'@LastModify:
(最后修改日期)
'@Param:
(用参数)
'@Returns:
(返回值类型)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
举例:
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'@FunctionName:
AddAccount
'@MainFunc:
直接增加会计科目
'@Author:
张山
'@LastModify:
2000-06-23
'@Param:
strAccount科目字符串
'@Param:
strPath科目币种数据所在路径
'@Param:
blnIsCopy由科目复制来标志
'@Returns:
Integer
''
1.10窗体隐含全局变量
避免使用窗体隐含全局变量,声明自己的窗体变量(例如,DimdlgAboutAsNewfrmAboutBox)。
1.11命名属性、方法和事件
尽量用完整的词,不用缩写。
缩写可能有许多形式,并因此可能含混。
如果完整的单词太长的话,可以用完整的第一个音节。
对于标识符,可以用大小写混合的写法,每个单词或者音节的首字符大写,例如ShortcutMenus或者AsyncReadComplete。
对于集合类名,可以用复数写法。
如果集合中有以"s"结尾的对象,可将单词"Collection"附加在其后面。
对于方法名,可以比较一致地用动词/对象或者对象/动词的顺序。
也就是说,使用InsertWidget、InsertSprocket,等等,或者总是将对象放在前面,就象例子WidgetInsert和SprocketInsert那样。
1.12常数使用
在VB中已经定义了常数的情况下,必须采用常数,避免采用数值的使用对程序可读性产生不良影响。
可以明显看出以下代码的优劣:
frmWizard.ShowVBModalfrm1.Show1
MsgBox"Infomation","Title",VBInformationMsgBox"","",1
1.13MsgBox书写要求
消息框要求显示的信息分为四类:
信息,问题,警告,错误。
所有显示的消息框都必须包含上述四类之一的图标;消息框显示的标题代表所运行的程序模块标题,必须用汉字标题,内容为详细的具体信息;
如果是对数据范围非法的警告,必须提示出合法的边界值。
例如用户输入登录时间时提示“登录时间非法”,用户尝试两三次其他时间后仍然无法正确登录,必然对使用软件失去信心,如果直接提示出允许的登录时间范围,用户马上就可以录入正确的数据。
对于数值的确认,需要提示出需要的数据值。
推荐的例子:
MsgBox“请确认是否删除本分录(109)?
”,“凭证处理”,VBQUESTION+VBYESNOCANCEL
MsgBox“张出纳,您没有帐册查询权限!
”,“帐册查询”,VBEXCLAMATION
MsgBox"登录时间不能超过帐套结束时间1999-12-31!
",App.Title,VBEXCLAMATION
1.14SQL语句书写要求
SQL语句要求将SQL保留字全部采用大写,其余部分如字段名、表名等采用其自然定义的大小写格式,推荐采用大写开头字符的方式;语句中的分隔只需要一个空格。
对于条件嵌套复杂的语句,需要在逻辑表达式中加入适当的括号对体现层次,增强语句可读性。
例如:
SELECT*FROMEmployeeWHERE(lngBirthYear>1980ANDstrNameLIKE“A*”)ORDERBYDepartment
为了提高程序可读性,要求必须注释说明每个SQL语句的功能。
1.15源程序编排
源程序编排必须按照结构化程序进行缩格。
缩格要求用一个TAB体现一个结构层次,每个TAB设置为占用4个空格。
每条语句的右边界尽量保持在80个字符范围内,以在编辑器中浏览时不需要横向滚动为宜。
较长的语句要求进行分割。
1.16源文件命名
原则上源文件与对象命名相同,由于文件具有后缀标识文件类别,因此取消对象类别前缀,仅取对象名作为文件名。
例如:
frmMainMain.frm
clsAccountSetupAccountSetup.cls
modPublicPublic.bas
1.17资源ID
CaptionResourceID、ToolTipTextResourceID、HelpContextID、WhatsThisHelpID、WizardStringID、WizardPictureID、WizardSoundID、WizardAVIID等一致,只是偏移量不同,其存储位置优先顺序:
HelpContextID、WhatsThisHelpID、Tag。
2VC部分
2.1C++类的定义形式约定表
类名称:
数据成员:
构造/析构函数:
成员函数:
ClassmyClass
{
public|private|protected:
myDataMembers;
public|private|protected:
myClass();
~myClass();
public|private|protected:
myMemberFunction();
};
2.2头文件的书写顺序约定表
程序注释及变动说明
文件头:
包含的头文件:
符号常数和全局常数:
宏定义:
类型定义:
结构,联合和类定义:
外部变量的声明:
内联函数的定义:
//
#include
const
macro
typedef
struct|union|class
2.3源文件的书写顺序约定表
文件头:
包含的头文件:
私有符号常数和全局常数:
私有宏定义:
私有类型定义:
私有结构,联合和类定义:
外部/全局变量初始化:
函数/成员函数定义:
“程序头书写标准”
#include
const
macro
typedef
struct|union|class
2.4标识符命名约定表
标识符种类
书写规范
示例
函数/过程名
一般标识符
CheckButtonStates
宏标识符
大写标识符
SALES_TAX
类标识符
‘C’+一般标识符
CEditBox
结构标识符
‘S’+一般标识符
SMyStructure
联合标识符
‘U’+一般标识符
UMyUnion
整数标识符
‘i/n/int’+一般标识符
INumber,intCurrent
字符串标识符
‘s/str/lpstr’+一般标识符
sComputerName
逻辑标识符
‘b’+一般标识符
bisDetailed
对象标识符
特征小写字母+一般标识符
FrmStatus,tvwTree
一般标识符:
字母开头,各单词连写,词首字母大写
大写标识符:
字母开头,所有字母大写,单词间用下划线相连
2.5函数头说明规范
函数名称:
函数功能:
调用格式:
参数说明:
对环境引用:
对环境影响:
内部变量说明:
调用函数列表:
被调函数列表:
函数的中文名称
简述函数的功能
必要时可举例说明
列出主要的、不易理解的参数含义和取值范围
(可选的)
(可选的)
(可选的)
(可选的)
(可选的)
2.6修改申明
本编码规范目前是针对开发根据VB和VC来编制的,随着需要的开发工具的变化,本规范的内容也需要做相应更新。
若发现本编码规范有遗漏或不足或者错误之处,允许以各种形式反映到品质管理部,并由其修改模板。
3窗体和控件的取名:
详见命名标准
严禁和受到限制的关键字同名
4显式声明变量
在类模块、窗体模块或标准模块的声明段中加入这个语句:
OptionExplicit
5为便于阅读程序,禁止使用VB的“字符串和数字的自动转化功能”
VB中规定:
如果字符串表示数值,则可将字符串赋予数值