1、软件编程规范大全软件编程规范大全产品编码规范书一、书写格式代码书写格式整齐统一、层次清晰便于阅读。 缩进TAB键统一为4个空格 赋值语句(=)及逻辑判断符( != & |.etc)左右各空一格 算术运算符左右各空一格 if/while/switch之类的语句右边空一格 每个成员函数内部各个子功能之间用一个空行 公用成员放在程序的最前面,私用成员在后。二、恰当地使用注释注释应简洁、清楚。 不提倡使用/* 和 */来注释, 最好使用/来注释。如果是对某一段程序(算法/结构)的注释, 在程序头直接用/再空一格来进行说明,一行不要超过80字符 注释就占程序的30%,如10行代码中就有不小于3行的注释。
2、三、关于命名1、变量的命名除了循环变量i,j,k.之外,文件、类、(成员)变量、(成员)函数的命名要有意义,大小写相间,一目了然;成员变量、函数(Method)的首字母小写全局变量名称以“g_”开头。2、.类的命名和定义自定义的类(包括Servlet、Bean)的首字母为大写。在程序中引用时,其对变量名的首字母小写Servlet、Bean定义名称时,其末尾应加上ServletBean后缀。以便于区分。如:(GetNewGuest.class)GetNewGuest getNewGuest = new GetNewGuest();ArticleBean articleBean = null;包(
3、package)名均为小写。格式为:com.founder.3、匈牙利命名法命名时可以遵循匈牙利命名法它通过在数据和函数名中加入额外的信息以增进程序员对程序的理解。 如字符串,前面加上str;.String strTemp = new String(“This is ”);如果定义两个实例,可以这样合起来写: MyClass myClassTemp1,myClassTemp2;四、局部变量一定要初始化如果你声明一个变量,不要以为编译器会自动将之赋零值!你随手给它赋个初值并不麻烦,却会使程序更可靠, float fTemp = 0.0;五、.成员函数:成员函数的功能一定要单一;实现其功能时不要过
4、分追求技巧,函数体不能过长六、.数组和缓冲区的使用对数组和缓冲区进行检查,防止越界,尤其是变长的情况下七、.尽量不要用goto语句特别谨慎使用goto语句,最好别用它尽管goto语句在某些特殊的情况下(比如编译器中)还很管用, 但它破坏了整个程序的结构,尤其使用goto嵌套时,更让人一头雾水(很久以前就有人提出取消它)。所以不到万不得已时刻不要用它,可以用break,continue之类的语句替代之。八、数应该是单人口、单出口的所有成员函数尽量是单入口,单出口也许多出口的程序写起来更简洁,意义也更明了。但出了问题调试时会很难定位,所以宁可多用一些BOOL变量,多加些判断,保证单出口:例如:pu
5、blic String getValue(int value) if (value 0)return “xxxxT”;return; “aaa”;可以写成: public String getValue(int value) String reault = null;if (ivalue 0) result = “xxxx”;else result = “aaaa”; return bRet;九、调用函数应合法调用函数时要严格按照接口规范严格按照函数的输入要求给它合适的参数十、.单元测试自己做代码内部(单元)测试时,必须做到语句覆盖,并且特别要注意边界值的覆盖要让每个语句都被执行过,并且边界值
6、(最大和最小)也被测试过。你在程序中写的各种情况都可能在用户那里出现十一、静态检查代码写完后要尽可能多的做一些静态检查(Debug调试可是很费神费时的)。尤其是对算法和数据管理(比如对文件存取)部分十二、文件存放 代码文件的存储位置固定,图片文件存放在统一的目录Picture下,如果各个模块有自己的图片文件,可以创建子目录来完成。 公用函数脚本文件放在统一的目录Scripts下。 每个功能模块创建一个JSP文件存放目录。结束语: 希望大家在遵守规范的前提下,通过自己的努力,开发出功能齐备、风格统一、性能稳定的一流软件产品。VB、VC编码规范1 VB部分1.1 控件前缀控件类型前缀例子3D Pa
7、nelpnlPnlGroupAnimated buttonaniAniMailBoxCheck boxchkChkReadOnlyCombo box, drop-down list boxcboCboEnglishCommand buttoncmdCmdExitCommon dialogdlgDlgFileOpenCommunicationscomComFaxControlctrCtrCurrentData controldatDatBiblioData-bound combo boxdbcboDbcboLanguageData-bound griddbgrdDbgrdQueryResultD
8、ata-bound list boxdblstDblstJobTypeDirectory list boxdirDirSourceDrive list boxdrvDrvTargetFile list boxfilFilSourceFormfrmFrmEntryForm Object VariablefrmOFrmOEntryFramefraFraLanguageGaugegauGauStatusGraphgraGraRevenueGridgrdGrdPricesHorizontal scroll barhsbHsbVolumeImageimgImgIconKey statuskeyKeyCa
9、psLabellblLblHelpMessageLinelinLinVerticalList boxlstLstPolicyCodesMAPI messagempmmpmSentMessageMAPI sessionmpsmpsSessionMCImcimciVideoMDI child formmdimdiNoteMenumnumnuFileOpenMS Flex gridmsgmsgClientsMS TabmstmstFirstOLEoleoleWorksheetOutline outoutOrgChartPen BeditbedbedFirstNamePen HEdithedhedSi
10、gnaturePen inkinkinkMapPicturepicpicVGAPicture clipclpclpToolbarReportrptrptQtr1EarningsShapeshpshpCircleSpinspnspnPagesText boxtxttxtLastNameTimertmrtmrAlarmUpDownupdupdDirectionVertical scroll barvsbvsbRateSlidersldsldScaleImageListilsilsAllIconsTreeViewtretreOrganizationToolbartlbtlbActionsTabStr
11、iptabtabOptionsStatusBarstastaDateTimeListView lvwlvwHeadingsProgressBarprgprgLoadFileRichTextBoxrtfrtfReport1.2 数据访问对象 (DAO) 前缀数据库对象前缀例子Container conconReportsDatabasedb dbAccountsDBEnginedbedbeJetDocumentdocdocSalesReportFieldfldfldAddressGroupgrpgrpFinanceIndexidxidxAgeParameter prmprmJobCodeQuer
12、yDefqryqrySalesByRegionRecordsetrecrecForecastRelationrelrelEmployeeDeptTableDef tbdtbdCustomersUserusrusrNewWorkspacewspwspMine1.3 菜单前缀菜单控件除了最前面 mnu 标记以外,菜单控件的前缀应该被扩展:对每一级嵌套增加一个附加前缀,将最终的菜单的标题放在名称字符串的最后。下表列出了一些例子。菜单标题序列菜单处理器名称FilemnuFileFile OpenmnuFileOpenFile SendmnuFileSendFile Send EmailmnuFileS
13、endEmailFile Send FaxmnuFileSendFax 当使用这种命名约定时,一个特定的菜单组的所有成员一个接一个地列在 Visual Basic 的“属性”窗口中。而且,菜单控件的名字清楚地表示出它们所属的菜单项。1.4 其它控件前缀对于上面没有列出的控件,应该用唯一的由两个或三个字符组成的前缀使它们标准化,以保持一致性。只有当需要澄清时,才使用多于三个字符的前缀。例如,对于派生的或修改的控件象上述那样扩展其前缀,使得在真正使用了哪一个控件的问题上避免混淆。对于第三方控件,应该把制造商的小写缩写名附加到前缀中。例如,从 Visual Basic Professional 3D
14、 框架中创建的一个控件实例可以用 fra3d 这样的前缀,以避免混淆所使用的控件。1.5 变量、常量范围前缀范围前缀例子全局ggstrUserName模块级mmblnCalcInProgress本地到过程dblVelocity1.6 变量、常量类型前缀数据类型前缀例子BooleanblnblnFoundBytebytbytRasterDataCollectioncolcolWidgetsCurrencycurcurRevenueDateTimedtmdtmStartDoubledbl dblToleranceErrorerrerrOrderNumIntegerintintQuantityLon
15、glnglngDistanceObjectobjobjCurrentSinglesngsngAverageStringstrstrFNameUser define typeudtudtEmployeeVariantVntvntCheckSum1.7 描述变量和过程名变量或过程名的主体应该使用大小写混合形式,并且应该足够长以描述它的作用。而且,函数名应该以一个动词起首,如 InitNameArray 或 CloseDialog。对于频繁使用的或长的项,推荐使用标准缩略语以使名称的长度合理化。一般来说,超过 32 个字符的变量名在 VGA 显示器上读起来就困难了。当使用缩略语时,要确保它们在整个应
16、用程序中的一致性。在一个工程中,如果一会儿使用 Cnt, 一会儿使用 Count,将导致不必要的混淆。1.8 用户定义的类型在一项有许多用户定义类型的大工程中,常常有必要给每种类型一个它自己的三个字符的前缀。如果这些前缀是以 u 开始的,那么当用一个用户定义类型来工作时,快速识别这些类型是很容易的。例如,ucli 可以被用来作为一个用户定义的客户类型变量的前缀。1.9 代码注释约定1.9.1代码注释规范模块节标题注释如下:Module Name: (模块名称)Main Func: (模块说明)Author: (作者)Last Modify: (最后修改时间)Include: (引用外部接口)I
17、nterface: (模块提供接口) 举例:frmAccountCard.frm 的程序头注释如下Module Name: frmAccountCardMain Func: 科目卡片窗体Author: 张山Last Modify: 2000-06-24Include:Interface:程序接口注释:Function Name: (函数名)Main Func: (函数说明)Author: (作者)Last Modify: (最后修改日期)Param: (用参数)Returns: (返回值类型)举例:Function Name: AddAccountMain Func: 直接增加会计科目Auth
18、or: 张山Last Modify: 2000-06-23Param: strAccount 科目字符串Param: strPath 科目币种数据所在路径Param: blnIsCopy 由科目复制来标志Returns: Integer1.10 窗体隐含全局变量避免使用窗体隐含全局变量,声明自己的窗体变量(例如,Dim dlgAbout As New frmAboutBox)。1.11 命名属性、方法和事件尽量用完整的词,不用缩写。缩写可能有许多形式,并因此可能含混。如果完整的单词太长的话,可以用完整的第一个音节。对于标识符,可以用大小写混合的写法,每个单词或者音节的首字符大写,例如Short
19、cutMenus 或者 AsyncReadComplete。对于集合类名,可以用复数写法。如果集合中有以 s 结尾的对象,可将单词Collection附加在其后面。 对于方法名,可以比较一致地用动词/对象或者对象/动词的顺序。也就是说,使用 InsertWidget、InsertSprocket,等等,或者总是将对象放在前面,就象例子 WidgetInsert 和 SprocketInsert 那样。1.12 常数使用在VB中已经定义了常数的情况下,必须采用常数,避免采用数值的使用对程序可读性产生不良影响。可以明显看出以下代码的优劣:frmWizard.Show VBModal frm1.Sh
20、ow 1MsgBox Infomation,Title,VBInformation MsgBox ,11.13 MsgBox书写要求 消息框要求显示的信息分为四类:信息,问题,警告,错误。所有显示的消息框都必须包含上述四类之一的图标;消息框显示的标题代表所运行的程序模块标题,必须用汉字标题,内容为详细的具体信息;如果是对数据范围非法的警告,必须提示出合法的边界值。 例如用户输入登录时间时提示“登录时间非法”,用户尝试两三次其他时间后仍然无法正确登录,必然对使用软件失去信心,如果直接提示出允许的登录时间范围,用户马上就可以录入正确的数据。 对于数值的确认,需要提示出需要的数据值。推荐的例子: M
21、sgBox “请确认是否删除本分录(109)?”, “凭证处理”, VBQUESTION + VBYESNOCANCEL MsgBox “张出纳,您没有帐册查询权限!”, “帐册查询”, VBEXCLAMATION MsgBox 登录时间不能超过帐套结束时间 1999-12-31 !, App.Title, VBEXCLAMATION1.14 SQL语句书写要求 SQL语句要求将SQL保留字全部采用大写,其余部分如字段名、表名等采用其自然定义的大小写格式,推荐采用大写开头字符的方式;语句中的分隔只需要一个空格。 对于条件嵌套复杂的语句,需要在逻辑表达式中加入适当的括号对体现层次,增强语句可读性
22、。 例如: SELECT * FROM Employee WHERE (lngBirthYear 1980 AND strName LIKE “A*”) ORDER BY Department 为了提高程序可读性,要求必须注释说明每个SQL 语句的功能。1.15 源程序编排 源程序编排必须按照结构化程序进行缩格。缩格要求用一个TAB体现一个结构层次,每个TAB设置为占用4个空格。每条语句的右边界尽量保持在80个字符范围内,以在编辑器中浏览时不需要横向滚动为宜。较长的语句要求进行分割。1.16 源文件命名 原则上源文件与对象命名相同,由于文件具有后缀标识文件类别,因此取消对象类别前缀,仅取对象名
23、作为文件名。例如: frmMain Main.frm clsAccountSetup AccountSetup.cls modPublic Public.bas1.17 资源IDCaption ResourceID、ToolTipText ResourceID、HelpContextID、WhatsThisHelpID、Wizard String ID、Wizard Picture ID、Wizard Sound ID、Wizard AVI ID等一致,只是偏移量不同,其存储位置优先顺序:HelpContextID、WhatsThisHelpID、Tag。2 VC部分2.1 C+类的定义形式约
24、定表类名称:数据成员:构造/析构函数:成员函数:Class myClass public | private | protected:myDataMembers;public | private | protected:myClass();myClass();public | private | protected:myMemberFunction();2.2 头文件的书写顺序约定表程序注释及变动说明文件头:包含的头文件: 符号常数和全局常数: 宏定义:类型定义:结构,联合和类定义: 外部变量的声明:内联函数的定义:/#includeconstmacrotypedefstruct | unio
25、n | class2.3 源文件的书写顺序约定表文件头:包含的头文件:私有符号常数和全局常数: 私有宏定义:私有类型定义:私有结构,联合和类定义: 外部/全局变量初始化:函数/成员函数定义:“程序头书写标准”#includeconstmacrotypedefstruct | union | class2.4 标识符命名约定表标识符种类书写规范示 例函数/过程名一般标识符CheckButtonStates宏标识符大写标识符SALES_TAX类标识符C+一般标识符CEditBox结构标识符S+一般标识符SMyStructure联合标识符U+一般标识符UMyUnion整数标识符i/n/int+一般标
26、识符INumber, intCurrent字符串标识符s/str/lpstr+一般标识符sComputerName逻辑标识符b+一般标识符bisDetailed对象标识符特征小写字母+一般标识符FrmStatus, tvwTree一般标识符:字母开头,各单词连写,词首字母大写大写标识符:字母开头,所有字母大写,单词间用下划线相连2.5 函数头说明规范函数名称:函数功能:调用格式:参数说明:对环境引用:对环境影响:内部变量说明:调用函数列表:被调函数列表:函数的中文名称简述函数的功能必要时可举例说明列出主要的、不易理解的参数含义和取值范围(可选的)(可选的)(可选的)(可选的)(可选的)2.6 修改申明 本编码规范目前是针对开发根据VB和VC来编制的,随着需要的开发工具的变化,本规范的内容也需要做相应更新。 若发现本编码规范有遗漏或不足或者错误之处,允许以各种形式反映到品质管理部,并由其修改模板。3 窗体和控件的取名:详见命名标准严禁和受到限制的关键字同名4 显式声明变量 在类模块、窗体模块或标准模块的声明段中加入这个语句: Option Explicit5 为便于阅读程序,禁止使用VB的“字符串和数字的自动转化功能”VB中规定:如果字符串表示数值,则可将字符串赋予数值
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1