广东电信综合业务支撑系统IBSS总体设计说明书开发规范分册V20.docx
- 文档编号:14440821
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:41
- 大小:39.70KB
广东电信综合业务支撑系统IBSS总体设计说明书开发规范分册V20.docx
《广东电信综合业务支撑系统IBSS总体设计说明书开发规范分册V20.docx》由会员分享,可在线阅读,更多相关《广东电信综合业务支撑系统IBSS总体设计说明书开发规范分册V20.docx(41页珍藏版)》请在冰点文库上搜索。
广东电信综合业务支撑系统IBSS总体设计说明书开发规范分册V20
广东省电信
综合业务支撑系统
(IBSS)
开发规范说明书
编制:
部门/职位:
日期:
__________
审核:
部门/职位:
日期:
__________
批准:
部门/职位:
日期:
__________
广州南方电信系统软件有限公司
版权所有不得复制
第一章引言
一.1编写目的
为了规范设计和代码风格,提高代码质量,增强程序的可读性和可维护性,特编写本文档。
预期读者:
项目提出方以及用户方相关技术人员、项目开发组成员、质量控制人员。
一.2背景
系统名称:
综合业务支撑系统
项目提出人:
广东省电信公司
项目开发者:
广州南方电信系统软件有限公司
用户:
广东省电信公司、广东省电信公司地市级分公司
一.3文档地图
本文档定义了开发的规范,包括以下几个方面:
通用编码规范
DELPHI前端开发设计规范
CICS中间件开发规范
数据库设计规范
一.4术语定义
无。
一.5参考资料
●《广东省电信综合业务支撑系统业务需求分析书V2.0》广东省电信公司
●《广东省电信综合业务支撑系统技术规范》广东省电信公司
●计算机软件产品开发文件编制指南[GB8567-88]
●计算机软件质量保证计划规范[GB/T12504-90]
●计算机软件配置管理计划规范[GB/T12505-90]
第二章通用编码规范
二.1排版
关键词和操作符之间加适当的空格。
相对独立的程序块与块之间加空行。
较长的语句、表达式等要分成多行书写。
划分出的新行要进行适应的缩进,使排版整齐,语句可读。
长表达式要在低优先级操作符处划分新行,操作符放在新行之首。
循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分。
若函数或过程中的参数较长,则要进行适当的划分。
不允许把多个短语句写在一行中,即一行只写一条语句。
函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格。
C/C++语言是用大括号‘{’和‘}’界定一段程序块的,编写程序块时‘{’和‘}’应各独占一行并且位于同一列,同时与引用它们的语句左对齐。
在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。
二.2注释
注释要简单明了。
边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。
在必要的地方注释,注释量要适中。
注释的内容要清楚、明了,含义准确,防止注释二义性。
保持注释与其描述的代码相邻,即注释的就近原则。
对代码的注释应放在其上方相邻位置,不可放在下面。
对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释应放在此域的右方;同一结构中不同域的注释要对齐。
变量、常量的注释应放在其上方相邻位置或右方。
全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。
在每个源文件的头部要有必要的注释信息,包括:
文件名;版本号;作者;生成日期;模块功能描述(如功能、主要算法、内部各部分之间的关系、该文件与其它文件关系等);主要函数或过程清单及本文件历史修改记录等。
在每个函数或过程的前面要有必要的注释信息,包括:
函数或过程名称;功能描述;输入、输出及返回值说明;调用关系及被调用关系说明等。
二.3命名
较短的单词可通过去掉“元音”形成缩写;
较长的单词可按单词的头几个发音符的优先级。
使用匈牙利表示法。
二.4可读性
避免使用不易理解的数字,用有意义的标识来替代。
不要使用难懂的技巧性很高的语句。
源程序中关系较为紧密的代码应尽可能相邻。
二.5变量
去掉没必要的公共变量。
构造仅有一个模块或函数可以修改、创建,而其余有关模块或函数只访问的公共变量,防止多个不同模块或函数都可以修改、创建同一公共变量的现象。
仔细定义并明确公共变量的含义、作用、取值范围及公共变量间的关系。
明确公共变量与操作此公共变量的函数或过程的关系,如访问、修改及创建等。
当向公共变量传递数据时,要十分小心,防止赋与不合理的值或越界等现象发生。
防止局部变量与公共变量同名。
仔细设计结构中元素的布局与排列顺序,使结构容易理解、节省占用空间,并减少引起误用现象。
结构的设计要尽量考虑向前兼容和以后的版本升级,并为某些未来可能的应用保留余地(如预留一些空间等)。
留心具体语言及编译器处理不同数据类型的原则及有关细节。
严禁使用未经初始化的变量。
声明变量的同时对变量进行初始化。
编程时,要注意数据类型的强制转换。
二.6函数、过程
函数的规模尽量限制在200行以内。
一个函数最好仅完成一件功能。
为简单功能编写函数。
函数的功能应该是可以预测的,也就是只要输入数据相同就应产生同样的输出。
尽量不要编写依赖于其他函数内部实现的函数。
避免设计多参数函数,不使用的参数从接口中去掉。
用注释详细说明每个参数的作用、取值范围及参数间的关系。
检查函数所有参数输入的有效性。
检查函数所有非参数输入的有效性,如数据文件、公共变量等。
函数名应准确描述函数的功能。
避免使用无意义或含义不清的动词为函数命名。
函数的返回值要清楚、明了,让使用者不容易忽视错误情况。
明确函数功能,精确(而不是近似)地实现函数设计。
减少函数本身或函数间的递归调用。
编写可重入函数时,若使用全局变量,则应通过关中断、信号量(即P、V操作)等手段对其加以保护。
二.7可测性
在编写代码之前,应预先设计好程序调试与测试的方法和手段,并设计好各种调测开关及相应测试代码如打印函数等。
在进行集成测试/系统联调之前,要构造好测试环境、测试项目及测试用例,同时仔细分析并优化测试用例,以提高测试效率。
二.8程序效率
编程时要经常注意代码的效率。
在保证软件系统的正确性、稳定性、可读性及可测性的前提下,提高代码效率。
不能一味地追求代码效率,而对软件的正确性、稳定性、可读性及可测性造成影响。
编程时,要随时留心代码效率;优化代码时,要考虑周全。
要仔细地构造或直接用汇编编写调用频繁或性能要求极高的函数。
通过对系统数据结构划分与组织的改进,以及对程序算法的优化来提高空间效率。
在多重循环中,应将最忙的循环放在最内层。
尽量减少循环嵌套层次。
避免循环体内含判断语句,应将循环语句置于判断语句的代码块之中。
尽量用乘法或其它方法代替除法,特别是浮点运算中的除法。
二.9质量保证
在软件设计过程中构筑软件质量。
代码质量保证优先原则
正确性,指程序要实现设计要求的功能。
稳定性、安全性,指程序稳定、可靠、安全。
可测试性,指程序要具有良好的可测试性。
规范/可读性,指程序书写风格、命名规则等要符合规范。
全局效率,指软件系统的整体效率。
局部效率,指某个模块/子模块/函数的本身效率。
个人表达方式/个人方便性,指个人编程习惯。
只引用属于自己的存贮空间。
防止引用已经释放的内存空间。
过程/函数中分配的内存,在过程/函数退出之前要释放。
过程/函数中申请的(为打开文件而使用的)文件句柄,在过程/函数退出前要关闭。
防止内存操作越界。
时刻注意表达式是否会上溢、下溢。
认真处理程序所能遇到的各种出错情况。
系统运行之初,要初始化有关变量及运行环境,防止未经初始化的变量被引用。
系统运行之初,要对加载到系统中的数据进行一致性检查。
严禁随意更改其它模块或系统的有关设置和配置。
不能随意改变与其它模块的接口。
充分了解系统的接口之后,再使用系统提供的功能。
要时刻注意易混淆的操作符。
当编完程序后,应从头至尾检查一遍这些操作符。
不使用与硬件或操作系统关系很大的语句,而使用建议的标准语句。
建议:
使用第三方提供的软件开发工具包或控件时,要注意以下几点:
充分了解应用接口、使用环境及使用时注意事项,不能过分相信其正确性。
除非必要,不要使用不熟悉的第三方工具包与控件。
二.10代码编译
编写代码时要注意随时保存,并定期备份,防止由于断电、硬盘损坏等原因造成代码丢失。
同一项目组内,最好使用相同的编辑器,并使用相同的设置选项。
合理地设计软件系统目录,方便开发人员使用。
打开编译器的所有告警开关对程序进行编译。
在同一项目组或产品组中,要统一编译开关选项。
使用工具软件(如VisualSourceSafe)对代码版本进行维护。
第三章DELPHI前端开发设计规范
三.1软件模块设计
三.1.1开发工具
统一采用Delphi6开发,每个模块有自己的编号,在程序设计中应严格按编号设计编码。
三.1.2文档的建立和管理
●每个模块的所有文档的建立由设计者完成,所有设计说明,更改文档要向(\\172.16.3.83\d:
\TOSS\doc)提交,当模块发生更改后文档的更新必须即时完成,生成的运行文件向\\172.16.3.83\d:
\TOSS\Bin)提交。
●对设计文档的修改应加上修改人的名字及时间,如:
procedureShowConfig(oDB:
TDatabase);//张三1999.08.26
procedureShowConfig(oDB:
TDatabase);stdcall;
●各子系统的模块组相对独立,每个子系统的模块的调用由主控程序完成;
●各子系统的模块组都是一个包方式的DLL文件,确实有困难的采用EXE文件,通过选中Project->Options->Packages下Buildwithruntimepackages进行设置。
三.1.3版本控制
版本的构成,如:
V01。
2001。
11。
23后面几位一般来说是提交日期,版本号的修改由程序员自己完成,版本修改后必须进行版本发布,使程序的版本号与库表发布时的版本号一致。
每个DLL的工程文件必须包括版本信息的全局变量,包含取版本信息函数,以便主控程序做版本检测;
每个DLL必须包含版本控制函数GetVersionInfo,并且在exports中申明。
{取版本信息}
varVersionInfo:
TVersion=(Product:
'XXX模块';
Version:
'V1.0.1999.08.11';
Author:
'ABC';
UpdateDate:
'19990815');
functionGetVersionInfo:
TVersion;stdcall;
begin
Result:
=VersionInfo;
end;
三.1.4注释和功能描述
每个模块前要有模块的功能描述,输入输出参数,时间,创建人员等;
注释在函数或命令行语句的上方;
三.1.5菜单打开窗体的引出函数声明
菜单动态调用DLL文件打开窗体的必须要有一个引出函数或过程
在接口部分声明引出函数或过程;DLL项目文件中在Exports子句引出了DLL中应用程序要调用的函数或过程;
三.1.6修改
对模块的修改必须注意对文档的更新,特别是对初始化程序的修改。
注明修改原因,修改人,修改时间,以便以后维护人员的代码了解;
三.1.7发布的公用资源,多使用类
建议建立一个公用资源库(NDPublic.dll),这个资源库包含一些常用的功能函数,功用控件等,开发时使用方法是将NDPublic.PAS文件加入你的工程中去。
使用静态调用的方式使用;
建立几个基本窗口(如,父窗口,编辑,查找等),大家的其他窗口可以从这几个窗口中继承下来用。
鼓励大家将自己设计的其他窗口提炼出来让大家一起使用。
请多使用类的方法解决问题,如果可能可以将相对独立的对象建成VCL控件或OCX控件,便于资源重复利用。
公用资源库,公共父窗体的修改更新最好由专人管理,发布更新;
三.2编码设计
三.2.1命名规则
指在软件设计中涉及到的各种对象(应用、窗口、菜单等)以及变量的命名的一套方法。
命名的基本规则是简单明了,尽量使用长命名方式,功能命名可以是汉语简拼和英文。
A、文件命名:
项目文件:
项目文件的名称应当具有描述意义,如综合管理的项目工程文件:
zhgl.dpr
窗体文件:
窗体文件的名称应当表达出窗体的用途,且具有Frm前缀
如主窗口;FrmMain,对应的模块编号:
0500000001
数据模块文件:
数据模块文件的名称应当表达出数据模块的作用,且具有DM前缀,如部门的数据模块文件:
DMDepartment.dfm
单元文件:
1.普通单元的结构
(1)单元名
单元的名称应当有描述性。
例如,应用程序的主窗体单元叫Main.pas。
(2)Uses句子
Interface部分的Uses子句应当只包含该部分需要的单元。
不要包含可能由Delphi自动添加的单元
Implementation部分的Uses子句应当只包含该部分需要的单元,不要有多余的单元。
(3)Interface部分
Interface部分应当只包含需要被外部单元访问的类型、变量、过程与函数的声明。
而且,这些声明应当在Implementation部分之前。
(4)Implementation部分
Implementation部分包括本单元私有的类型、变量、过程与函数的实现。
(5)Initialization部分
不要在Initialization部分放置花费时间很多的代码。
否则,将导致应用程序启动时显得很慢。
(6)Finalization部分
确保释放所有在Initialization部分中分配的资源。
2.窗体单元
窗体单元文件的名称与相应的窗体名称相同。
例如,About窗体的名称叫
FrmAbout。
单元文件名称叫About.pas。
3.数据模块单元
数据模块单元文件的名称与相应的数据模块名称相同。
例如,数据模块单元的名称叫DMDepartment.pas。
4.通用的单元
通用单元的名称应当表达出它的用途。
例如,一个实用工具单元的名称
叫ugUtilities.pas,包含全局变量的单元名称叫CustomerGlobals.pas。
注意,一个项目中单元名称必须是唯一的。
通用单元名不能重名。
5.组件单元
组件单元应放在单独的路径中,以表明它们是定义组件的单元。
它们一般与项目不放在同一路径下。
单元文件名称应表达出其内容。
文件头:
所有源文件和项目文件都应具有文件头。
一个正确的文件头应包含以下信息:
{
Copyright@YEARbyAUTHORS
}
B、变量的命名
范围前缀举例
参数(Argument)aaName
全局(Global)ggName
实例(Instance)iiName
局部(Local)llName
共享(Shared)ssName
系统全局变量(一般只有如下几个)
待定
C、过程和函数(子程序)
子程序名应该以大写字母开头,而且应该易于阅读.下面是一个正确格式的子程序名:
procedure thisisapoorlyformattedroutinename;
下面是一个首字母适当大写的子程序名:
procedure ThisIsMuchMoreReadableRoutineName;
子程序名应该具有与其用途相关的含义.导致发生某动作的子程序应该以动词为前缀命名,例如:
procedure FormatHardDrive;
为输入参数赋值的子程序应该以 Set 为前缀命名,例如:
procedure SetUserName;
取回数值的子程序应该以 Get 为前缀命名, 例如:
function GetUserName:
string;
形参(Formal Parameters)
格式
在可能的情况下, 同类型的形参应该在一条语句中说明:
procedure Foo(Param1, Param2, Param3:
Integer; Param4:
string);
命名
所有的形参名称应该具有与其用途相关的含义, 而且不应该基于传递到子程序的标识符名称.适当情况下, 参数名应该以字符 A 为前缀, 例如,
procedure SomeProc(AUserName:
string; AUserAge:
integer);
使用前缀"A"是一种约定,以便参数名与类的属性名、域名重复时消除歧义.
参数顺序
下面的形参顺序主要是为在寄存器模式下得到更高的性能,寄存器模式是惯用的调用模式.
调用者最常使用的参数应该在参数的最前位置,使用越少的参数,其位置应该越在右面.
D、组件实例的命名规则:
组件的名称应当具有描述性。
Delphi没有为组件指定默认的名称。
单元命名要使用一个变更了的匈牙利命名规范。
在这个标准中,组件名包括两个部分:
前缀和性质标识名例如:
TLabel前缀为lbl,TEdit为edt等,具体的见附表2-2
E、编程公用约定
1、USE字句
implementation部分的 uses 子句应该只包括 implementation 部分中代码需要的单元.无关的单元名应该删除;该部分应该包括类型本单元私有的类型声明, 变量声明,过程/函数
2、不要将耗费大量时间的代码放在单元的 initialization 部分.这将导致应用程序启动缓慢
3、匹配的begin…end要对齐,新的关键字相对于上一行向右移两格,begin,end语句应该单独作为一行,例如:
if…….Then
begin
end;
with的层次最好不超过三层。
4、确保你释放了在 Initialization 部分分配的全部项目
5、任何可能的地方, 所有的资源分配代码都必须以 try..finally
结构保护起来
6、try..except 应该只在你需要在产生意外时执行任务的情况下使用.一般来说,你不需要使用 try..except 来简单地显示错误信息,因为应用程序将通过 Application 对象自动实现这一点.在 except 子句中,如果你希望在执行过自己的任务后再调用缺省的意外处理程序,应该使用 raise 来再次产生这个意外.
F、注释和功能描述
建议在所有的源文件,工程文件,单元文件等中使用包含信息的文件头,有模块的功能描述,参数,时间,创建人员等;
注释在函数或命令行语句的上方;
六、数据模块窗口(DM)
1、所有数据字典下载的数据集控件都放在该数据模块窗口中,供系统统一使用。
2、所有子窗体用到的字典数据都通过引用该窗口得到,该数据模块窗口统一由专人维护。
附表:
Standard 页面
前缀 组件
mm TMainMenu
pm TPopupMenu
mmi TMainMenuItem
pmi TPopupMenuItem
lbl TLabel
edt TEdit
mem TMemo
btn TButton
cb TCheckBox
rb TRadioButton
lb TListBox
cb TComboBox
scb TScrollBar
gb TGroupBox
rg TRadioGroup
pnl TPanel
cl TCommandList
Additional 页面
前缀 组件
bbtn TBitBtn
sb TSpeedButton
me TMaskEdit
sg TStringGrid
dg TDrawGrid
img TImage
shp TShape
bvl TBevel
sbx TScrollBox
clb TCheckListbox
spl TSplitter
stx TStaticText
cht TChart
Win32 页面
前缀 组件
tbc TTabControl
pgc TPageControl
il TImageList
re TRichEdit
tbr TTrackBar
prb TProgressBar
ud TUpDown
hk THotKey
ani TAnimate
dtp TDateTimePicker
tv TTreeView
lv TListView
hdr THeaderControl
stb TStatusBar
tlb TToolBar
clb TCoolBar
System 页面
前缀 组件
tm TTimer
pb TPaintBox
mp TMediaPlayer
olec TOleContainer
ddcc TDDEClientConv
ddci TDDEClientItem
ddsc TDDEServerConv
ddsi TDDEServerItem
Internet 页面
前缀 组件
csk TClientSocket
ssk TServerSocket
wbd TWebDispatcher
pp TPageProducer
tp TQueryTableProducer
dstp TDataSetTableProducer
nmdt TNMDayTime
nec TNMEcho
nf TNMFinger
nftp TNMFtp
nhttp TNMHttp
nMsg TNMMsg
nmsg TNMMSGServ
nntp TNMNNTP
npop TNMPop3
nuup TNMUUProcessor
smtp TNMSMTP
nst TNMStrm
nsts TNMStrmServ
ntm TNMTime
nudp TNMUdp
psk TPowerSock
ngs TNMGeneralServer
html THtml
url TNMUrl
sml TSimpleMail
Data Access 页面
前缀 组件
ds TDataSource
tbl TTable
qry TQuery
sp TStoredProc
db TDataBase
ssn TSession
bm TBatchMove
usql TUpdateSQL
Data Controls 页面
前缀 组件
dbg TDBGrid
dbn TDBNavigator
dbt TDBText
dbe TDBEdit
dbm TDBMemo
dbi TDBImage
dblb TDBListBox
dbcb TDBComboBox
dbch TDBCheckBox
dbrg TDBRadioGroup
dbll TDBLookupListBox
dblc TDBLookupComboBox
dbre TDBRichEdit
dbcg TDBCtrlGrid
dbch TDBChart
Decision Cube 页面
前缀 组件
dcb TDecisionCube
dcq TDecisionQuery
dcs TDecisionSource
dcp TDec
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 广东电信 综合 业务 支撑 系统 IBSS 总体 设计 说明书 开发 规范 分册 V20