项目开发规范说明书

项目开发规范说明书
项目开发规范说明书

1.数据库开发规范

1.1.数据库表命名

数据库的表名采用以下规则进行编排:

(一)表的命名规则

前缀[2位]_类别[3位]_自定义部分。

前缀第一位说明(h 大额,b 小额,e 网银,m 信息管理,f 备付金)

前缀第二位说明(x 外联,w web,c 核心)

(二)为了移植方便,适应其他多种数据库的环境,要求表名长度<=16个英文字符。

(三)自定义部分不允许用拼音进行编排。

类别划分

类别说明类别码

控制类ctl

流水类jnl

明细类dtl

登录簿rgt

标准数据std

统计类cnt

日终day

举例说明:

操作员表:hc_ctl_teller

1.2.日期类型的问题

Oracle数据库和informix数据库不同,不支持自1899-12-31以来的long型日期处理。

但oracle和informix均支持字符串型的日期处理。

因此要求,对应于数据库表中日期型字段的定义,全部定义为STRING类型。

即:

char 变量名[9] ;

处理日期的函数(包括年月日转换、计算前后N天的日期、日期之间的天数等通过包装函数进行统一处理)。

格式为:YYYYMMDD

1.3.数据库错误宏定义

对于数据库操作出现的错误号,除了系统统一定义的宏以外,其他错误号禁止直接用数字描述。

以下均是错误的写法:

if ( SQLCODE == -1 )

if ( SQLCODE == 1403 )

……

正确的写法应该为:

if ( SQLCODE == SQLDUPDATA )

if ( SQLCODE == SQLNOTFOUND )

……

应用中常用的数据库错误编号的规范:

#define SQLNOTFOUND 1403 /* 记录未找到 */

#define SQLDUPDATA -1 /* 记录重复 */

#define SQLNOTABLE -942 /* 表不存在 */

#define SQLNOINDEX -1418 /* 索引不存在 */

#define SQLNULLDATA -1405 /* 数据有空值 */

这些宏定义将定义在系统公用的头文件(db_oracle.h)中。

1.4.字符串的使用问题

SQL语句中的字符串全部采用‘‘作为标识符,禁止使用“”等作为标识符。

取字符串的第M位到第N位,禁止使用 field_name[M,N],请使用SUBSTR()函数。

SUBSTR(字段名,起始位,长度)

多个字符串链接请用“ || ”。

例如:取帐号的第1位到第3位,第5位到第6位拼成串

SUBSTR(ACCT_NO,1,3) || SUBSTR(ACCT_NO,5,2)

禁止使用VARCHAR类型的字段作为数据库表结构的索引字段。规定只能如果是字符串类型的字段要求作为索引的话,只能使用 CHAR 类型。

数据库表中为CHAR和VARCHAR的字段,在用SELECT或FETCH取出值后,一定要去掉尾部的空格。原则上谁取出谁去掉空格。

1.5.SQL开发规范

1.5.1.索引和分区

表的记录数少于10000条,执行全表扫描。

在写查询条件时注意引用索引。

批量提取数据,使用按分区扫描。

比较值与索引列数据类型要保持一致性。

查询列与索引列次序保持一致。

排序列与索引列次序保持一致。

对于复合索引,SQL语句必须使用主索引列,按照复合索引组成列的顺序书写。 尽量不要对索引列进行计算,如有特例对索引列计算较多,则需建立函数索引。 in、or子句常会使索引失效,在表数据记录数大于10000条的情况下,考虑把子句拆开。

对于索引的比较,不使用NOT 。

删除一个表中的所有数据时,使用truncate,而不是delete。不能在事务中使用该语句,并且务必确认表中数据可以全部被删除。

1.5.

2.Select 列和where条件要求

在查询语句中查询表达式左边不允许出现函数及其它运算表达式,所有左边的表达式都可以用其它的方法在右边实现。

where条件中不要使用常量比较,将常量绑定到变量中使用。

查找数据时只取出确实需要的那些列,不要使用*来代替所有列名。要清楚明白地使用列名,而不能使用列的序号。

不要order by和group by排序操作。必须使用排序操作,请遵循如下规则:

?排序尽量建立在有索引的列上。

?查询结果集不要求唯一时,使用union all代替union。

1.5.3.多表连接

在表中的记录数低于10万条的情况下,可以使用多表连接。

多表连接时,必须使用表的别名来引用列。

使用EXISTS代替DISTINCT表达方式。

低效:

SELECT DISTINCT DEPT_NO,DEPT_NAME

FROM DEPT D,EMP E

WHERE D.DEPT_NO = E.DEPT_NO

高效:

SELECT DEPT_NO,DEPT_NAME

FROM DEPT D

WHERE EXISTS ( SELECT ‘X’

FROM EMP E

WHERE E.DEPT_NO = D.DEPT_NO);

多张大表进行Join时一条SQL语句中关联查询的大表不能超过3个。

1.5.4.嵌套查询

使用not exist代替not in子句进行嵌套查询。

例如:

SELECT …

FROM EMP

WHERE DEPT_NO NOT IN (SELECT DEPT_NO

FROM DEPT

WHERE DEPT_CAT=’A’);

为了提高效率.改写为:

SELECT ….

FROM EMP E

WHERE NOT EXISTS (SELECT ‘X’

FROM DEPT D

WHERE D.DEPT_NO = E.DEPT_NO

AND DEPT_CAT = ‘A’);

避免嵌套连接、子查询(多级)如:A = B and B = C and C = D 。

1.6.Proc语句规范

1.6.1.SELECT语句

EXEC SQL SELECT

field_name1,

field_name2 ,

field_nameN

FROM table_name_list , …

WHERE cond1

AND cond2

GROUP BY field_nameX, field_nameY

ORDER BY grouplist ;

建议一行不超过5个字段

1.6.

2.DECLARE语句

EXEC SQL DECLARE cursor_name FOR

SELECT field_name1,

field_name2 , …

field_nameN

FROM table_name_list , …

WHERE cond1

AND cond2

GROUP BY field_nameX, field_nameY

ORDER BY grouplist ;

1.6.3.UPDATE语句

EXEC SQL UPDATE table_name

SET field_name1 = :val1 ,

field_name2 = :val2 ,

……

field_nameN = :valN

WHERE cond1

AND cond2 ;

1.6.4.INSERT语句

简单的INSERT语句:

EXEC SQL INSERT INTO table_name VALUES (:stru_var) ;

复杂的INSERT语句:

EXEC SQL INSERT INTO table_name VALUES

(

:val1, :val2, … valN,

……

:valX, …. :valY

) ;

1.6.5.FETCH语句

简单的FETCH语句:

EXEC SQL FETCH curs_name INTO :stru_var ;

复杂的FETCH语句:

EXEC SQL FETCH curs_name INTO

:val1 , …., :valN ,

:valX, …, :valY ;

EXEC SQL fetch …

必须遵循 EXEC SQL fetch curs_name into ….的格式规范。游标使用完毕后要用

EXEC SQL close …关闭。

informix释放游标EXEC SQL free …在Oracle中不需要。

1.6.6.Update语句

标准的update语句格式:

EXEC SQL update table_name set

field_name1 = :val1 ,

field_name2 = :val2 ,

……

field_nameN = :valN

where

……

以下格式严禁使用:

EXEC SQL update table_name set * = :struct_val

where

……

即使Oracle支持该种语法,也会存在效率的问题!

Oracle不支持以下语法:

EXEC SQL update table_name set

( field_name1, field_name2, …… field_nameN ) =

( :val1 , :val2 , …… :valN )

where

….

请使用以下语法进行update操作:

EXEC SQL UPDA TE table_name SET

field_name1 = :val1 ,

field_name2 = :val2 ,

… …

field_nameN = :valN

WHERE cond1

AND cond2 ;

1.6.7.prepare 语句

prepare 动态语句在应用中会大量使用到,因为有些语句不能事先嵌入到PRO*C程序中,要根据程序运行情况或用户从输入设备上的输入,来确定执行的SQL语句。

动态SQL1: 不能是查询(SELECT)语句,并且没有宿主变量.

用法:拼一句动态SQL语句,并用EXECUTE IMMEDIATE执行,如:

strcpy(str_sql,“DELETE FROM test001 WHERE name=’username’”);

EXEC SQL EXECUTE IMMEDIATE :str_sql;

动态SQL2: 不能是查询(SELECT)语句,并且输入的宿主变量数目是知道的,

用法:拼一句动态SQL语句,用PREPARE,EXECUTE语句执行.

strcpy(sqlstring, "DELETE FROM test WHERE test_col = :K1 ");

EXEC SQL PREPARE sqlproc FROM :sqlstring;

EXEC SQL EXECUTE sqlproc USING :emp_number ;

动态SQL3: 用于创建动态查询, 并且要查询的字段以及输入的宿主变量数目是知道的

用法: 拼一句动态SQL语句,用PREPARE分析该语句,定义一个CURSOR进行取值 strcpy(sql,"select user_name from test WHERE test_col <> :K1 ");

EXEC SQL PREPARE sqlproc FROM :sql;

EXEC SQL DECLARE cur_user_name CURSOR FOR sqlproc;

EXEC SQL OPEN cur_user_name USING : AA;

while(1)

{

EXEC SQL FETCH cur_user_name into :ora_id;

if (sqlca.sqlcode < 0)

{

/*FETCH CURSOR失败*/

EXEC SQL CLOSE cur_user_name;

}

if( sqlca.sqlcode == SQLNOTFOUND)

{

break;

}

}

EXEC SQL CLOSE cur_user_name;

1.7.Oracle的事务

1.7.1.ORACLE XA事务

(一)int tpopen(void)

描述:建立与一个资源管理器得连接,该资源管理器是该SERVER所在得组中定义的.

并且在buildserver时要用-r 参数指定该资源管理器.如果采用默认的TPSVRINIT()该函数会自动被调用。

参数:无

返回值:失败返回-1,错误号保存在全局变量tperrno中。

(二)int tpclose(void)

描述:关闭与一个资源管理器得连接,如果采用默认的TPDONE()该函数会自动被调用,

参数:无

返回值:失败返回-1,错误号保存在全局变量tperrno中。

(三)int tpbegin(unsigned long timeout, long flags)

描述:开始一个全局事务

参数:

timeout:全局事务的超时时间,从tpbegin()开始,过了TIMEOUT秒该全局事务还没有完成,

该全局事务将因超时而回滚,范围为0 to 2 31 -1秒,0表示可以为无穷长。注

意:TIMEOUT应该大于SCANUNIT

FLAGS:保留值,现在没有用到,要设为0

返回值:失败返回-1,错误号保存在全局变量tperrno中。

(四)int tpcommit(long flags)

描述:对一个全局事务进行提交操作

参数:FLAG应该设为0

返回值:失败返回-1,错误号保存在全局变量tperrno中。

(五)int tpabort(long flags)

描述:对当前的全局事务进行回滚

参数:FLAG应该设为0

返回值:失败返回-1,错误号保存在全局变量tperrno中。

Oracle对于以下类型的语句

EXEC SQL create table …

EXEC SQL drop table …

EXEC SQL truncate table …

EXEC SQL drop index …

……

会提交前面数据库处理的事务,请编程时注意。

1.8.Oracle的for update等待

在应用中为防止无限期地等待被锁定的行,请使用SELECT...FOR UPDATE(WAIT/NOW AIT) 语句控制等待时间

(1)设置等待时间,超时将返回错误

select * from aa for update wait 10;

发现有锁等待,10秒后报资源忙的异常

(2)不设置等待时间,直接报资源忙的异常

select * from aa for update nowait ;

发现有锁等待,直接报资源忙的异常

2.C程序开发规范

2.1.命名规范

2.1.1.源程序命名

(1)源文件名全部以英语进行命名。

(2)用不超过20个字母的英文或英文缩写表示文件含义。如果是多个英文的缩写,每个缩写开头字母大写,缩写之间无任何分隔符号。按照模块+功能名的方式来进行命名。

举例说明:

服务总控程序:HcServConsole.c

2.1.2.头文件命名

(一)头文件名称规则

前缀(2位)+ 连接符(‖_‖)+ 自定义部分

(二)头文件名全部以英语进行命名。名称不能超过12个英文字母,文件名称中不许出现汉字和不可见字符等内容,不允许以拼音的方式组成头文件名称。

(三)除了公共宏定义外,每个组可以自定义头文件,用于定义所有本组涉及到的宏。

系统设置一个统一的宏定义文件、存放整个系统使用的宏定义(如数据库出错号

定义)。需要强调的是,如果是系统头文件中已经定义的宏,每个组不允许再自

行定义。

(四)为了防止程序调用过程中由于函数参数变动而引起的测试和运行异常情况,每个数据库表结构的定义,每个数据库只允许建立一个数据库表结构定义的头文件。

(五)VIEW32文件编译后产生的头文件,每个组规定只允许采用一个统一的文件

2.1.

3.库文件命名

(一)库文件名全部以英语进行命名。

(二)文件编排规则:lib模块名.a

模块模块名

举例说明:

原则上各个功能模块只提供一个库文件,尽量避免应用程序链接一堆库文件的情况。

2.1.4.VIEW32文件名和VIEW32结构命名

VIEW32文件命名遵循以下原则:

(1)VIEW32文件名全部以英语进行命名。

(2)文件编排规则:

组名(有无小组划分)_view32.v

例如:结算组的VIEW32文件为:

SET_view32.v

(3)VIEW32结构命名规范:

STRU_组名+自定义部分。

例如:存款组联机帐务交易的VIEW32名为:

STRU_SA VONLINE

2.1.5.全局变量和静态变量

项目组在系统范围内限制全局变量的使用,项目中所有的全局变量定义代码将汇集在一个.c文件中,由项目负责人负责进行维护。项目组成员需要增加、修改、删除全局变量时,必须向项目负责人提出申请,经过相应讨论之后如果获得同意,由项目负责人进行操作。在单个模块范围内使用的非局部变量应定义为静态变量(static)。全局变量和静态变量的名字应当具有说明性,遵循本规范中定义的命名约定。全局变量和静态变量定义和声明处均应加上注释,标明其用途和取值范围、意义等。

例如:

static int OnlineFlag; /* Flag of System status, 1-->Online 0--->Offline */

long AccountID; /* Identifier of account */

1.1.1.变量命名

(一)变量名要求用英文或英文缩写进行命名。

(二)变量不允许以“_”开头。避免与操作系统冲突。

(三)变量名称不能超过20位。

(四)局部变量的值应尽可能地显式初始化

(五)以变量类型(小写)为前缀,后面的单词的第一个字母大写(不采用“_”分隔)变量类型前缀

int I

Long L

Double D

Float F

Short sh

Char c

String s

Pointer p

数组z

结构st

举例说明:

int iCountNo;

char sAcctountNo[33] ;

1.1.

2.函数命名

(一)函数名称采用英文短语命名,不能使用拼音方式。

(二)要求函数名能表示基本功能。

(三)函数名称长度不超过20位。

(四)要求各组对外提供的函数开头以分组为单位加上前缀用来区分。

1.1.3.Makefile命名

原则上按照开发目录划分,每个组的库文件目录(libsrc)全集中在一个目录下。(一)全系统采用统一的名称:“makefile”。

不允许再出现make_lib、make_test、make_server 等各种各样的makefile文件名。

1.2.程序书写规范

1.2.1.程序头

程序头是对程序的详细描述信息,需要包含以下要素:

(一)程序名称

(二)程序的功能简述

(三)程序的环境说明

(四)程序建立日期、作者等

(五)程序的维护记录

SVN源代码管理需要增加的特定内容

模板如下:

/*** 文件名:TestServer.pc

* 功能概述: Tuxedo案例程序

* 作者:XXXX

* 创建时间: 2010/12/24

* 环境说明: Aix 6.0 XLC v9

* 说明: ORACLE PROC常用语句案例

*

***/

1.2.2.函数标签

每个函数均需要完整的函数标签,要素包括:

(一)函数名称

(二)重点输入输出参数描述、返回说明

(三)函数特殊说明

模板如下:

/* * 函数名:tpsvrinit() *

功能:tuxedo服务初始化函数*

参数:

返回:0:成功-1:失败

特殊说明:无*/

1.2.3.程序注释

(一)为了统一风格,移植方便,程序注释一律采用以下格式:

以“ /* ”开始,以“*/”结束。

不允许用“ // ”等注释格式。

(二)对于一段代码来说,经过精心安排的注释增强了它的可读性与可维护性。注释的使用范围包括:提示性地说明某个变量的用途;描述某个算法的实现等等。每个

注释都力求切题、简明、精确、不拖泥带水;避免照搬程序代码、冗长、易使人

曲解。

(三)注释应随着相应程序代码的修改而及时更新。由于历史原因而遗留在程序代码中的错误注释只能使读该程序代码的人产生困惑,并对其它正确的注释产生不应有的怀疑。

(四)注释的格式必须有程序的修订人员,修订日期,修订原因,修订模式(增加,删除,修改)

(五)【尾随注释】:

如果一行内可以写得下得注释,可以直接使用“ /* */ ”格式。

例如:

/* 查找费率代码表,准备进行手续费的处理 */

【块注释】:如果注释太长,一行内写不下,采用以下格式:

模板:

/*

* 定期一本通贷方打印

* 要素:账号+客户名+支取方式+开户行+电话+开户日期

* 起始行+重复记录数

*/

1.2.4.头文件书写

头文件书写除了和其他源代码一样的程序标签外,以下的原则需要遵循:

(一)为了防止重复包含和引用,每个头文件均采用以下的格式进行定义:#ifndef 宏名

#define 宏名

书写头文件的内容

#endif

(二)宏名的编排规则:

_DEF_头文件前缀(头文件名、全部大写)_H_

例如:

对于头文件CADdefine.h,格式书写如下:

#ifndef _DEF_CADDEFINE_H_

#define _DEF_CADDEFINE_H_

头文件内容

#endif

(三)数据库表结构定义头文件格式规范:

#ifndef _DEF_CADDEFINE_H_

#define _DEF_CADDEFINE_H_

EXEC SQL BEGIN DECLARE SECTION ;

头文件内容

EXEC SQL END DECLARE SECTION ;

#endif

(四)用宏定义表达式时,要使用完备的括号。

如下定义的宏都存在一定的风险:

#define MULT( a, b ) a * b

#define MULT( a, b ) (a * b)

#define MULT( a, b ) (a) * (b)

正确的定义应为:

#define MULT( a, b ) ((a) * (b))

1.2.5.日志问题

日志信息参考基础函数库中日志处理。

区分错误日志与调试日志,在错误日志中,区分数据库处理错误,与逻辑处理错误。

日志中必须包含,源程序名,错误行数, 错误说明,对于数据库处理错误,必须加上sqlcode值。

(一)开发中详细添加日志级别

区分DEBUG-调试,INFOR –一般信息, W ARNING -警告, ERROR-错误, (二)错误定位

日志信息精确定位错误原因,及发生错误数据值。

(三)错误码

对账错误码表,匹配对应错误码

1.2.6.C语句格式规范

1.2.6.1.变量使用

开发过程使用变量应该遵循以下原则:

(四)不使用全局变量,不使用extern 变量,降低程序数据藕荷程度。公共报文头变量除外。

(五)变量初始化的问题。定义指针时初始化为NULL,对指针型(包括数组)变量的内容使用memset初始化,其他自动变量、自定义全局变量申明时也要注意

初始化。

(六)不要同时使用char *和void *;尽量避免类型强制转换,因为结果在运行时不可预测。但对于空的操作例外。

(七)指针变量问题。首先要明确指针越少用程序越可靠;指针在定义后应马上初始化为NULL,这是一个开发的好习惯;指针要初始化,它包含空间分配和内

存初始化,使用memset对所有指针类型进行内存初始化;对于动态申请的内

存(malloc),在使用完后要求进行空间释放,原则上谁分配谁释放,若分配

者在填写内容后退出,则由最后使用者释放。

(八)为了避免维护人员维护时产生理解上的二义性,任何情况下,条件语句中禁止出现赋值操作。

1.2.6.2.一般语句

以下情况在开发过程中需要注意:

(一)程序的缩进:4个字符。

(二)空行

空行用于将程序的各个主要部分自然地分隔开。同时,程序的各个函数之前也应有一块空行和注释,用于描述该函数。

(三)可执行语句应当单独成一行,并从它所在的开始花括号层缩进一个制表符宽度。本规则同样适用于空语句。

如下所示:

if (name_p == (char *) NULL) return ; (错误)

if (name_p == (char *) NULL)

{

return ; (正确)

}

(四)二元操作符

二元操作符的前后都必须放一空格('->'与'.'除外,其前后不用放置任何空格)。一元操作符与操作数之间不用放置任何空格。

如下所示:

A=B + C ; (错误!)

A =

B +

C ; (正确)

A++ ;

1.2.6.3.i f语句

一个简单的if语句:

if ()

{

...

}

另外,条件很长的情况下,需要分行进行处理,并通过适当的()来避免条件的二义性。例如:

if ( sPack->flag == 2 &&

( acct_attr == 40 || acct_attr == 44 || acct_attr == 46 ) )

{

}

在一个简单的if-else组合中,关键字else应当新起一行,并与if保持同一缩进层次。

if ()

{

...

}

else

{

...

}

else-if链接形式:

if ()

{

...

}

else if ()

{

...

}

else if ()

{

...

}

1.2.6.5.f or语句

for语句书写按照以下格式:

for ( I=0 ; I

{

…… ;

…… ;

}

如果for语句内容太多,要分为多行进行处理:

for ( i=0 ; strcmp(funcname,MID_FUNC_TAB[i].funcname)

&& strcmp("XXXXXXXXXX",MID_FUNC_TAB[i].funcname) ; i++ );

禁止写成一行。

一个while语句块必须用花括号括起来(即使该块仅含单独一个语句):

例如:

while ( )

{

…… ;

}

1.2.6.7.do-while语句(本项目不使用此模式)

一个do/while语句块必须用花括号括起来(即使该块仅含单独一个语句):

格式:

do

{

…… ;

} while ( ) ;

1.2.6.8.s witch语句

switch语句书写遵循以下原则:

(一)保留字case与default应当与保留字switch保持一个缩进层次,并且后跟一空格(并非一制表符),然后才是常量表达式。与某种情况(case)相对应的代码块应当再缩进一个层次。

(二)每种情况(case)单独成一行。

(三)对应于一个代码块的多种情况(case)不要用空行分隔开。

(四)如果在某个代码块中省略了break语句,使得程序的执行继续到下一个代码块,则必须在该代码块之后放置一块注释以指明这一点,参见下例。(五)必须用break语句明确表示某个代码块结束后,程序的执行转移到整个switch语句之后。即便是一个switch语句的最后一种情况(case或default),也应如此。

(六)如果一个case语句的最后一条语句是return,为了增加程序的可阅读性,后面也必须写上break语句。

以下是switch语句的模板程序:

switch ( iHitKey )

{

case UP :

case LEFT :

... ...

break ;

case DOWN :

... ...

/* 此处没有break,参照ENTER选项继续执行 */

case ENTER :

... ...

break ;

default :

... ...

break ;

}

1.2.6.9.常见的内存错误及其对策

(一) 内存分配未成功,却使用了它。

建议:在使用内存之前检查指针是否为NULL。如果指针p是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查。如果是用malloc来申请内存,应该用

if(p==NULL) 或if(p!=NULL)进行防错处理。

(二) 内存分配虽然成功,但是尚未初始化就引用它。

建议:不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。

(三) 内存分配成功并且已经初始化,但操作越过了内存的边界。

建议:在使用数组时经常发生下标?多1?或者?少1?的操作,特别是在for循环语句中,循环次数很容易出错,导致数组操作越界,这种情况需要特别当心。

(四) 忘记了释放内存,造成内存泄露。

建议:动态内存的申请与释放必须配对,程序中malloc与free的使用次数一定要相同。

(五) 释放了内存却继续使用它。

有三种情况:

1)程序中的对象调用关系过于复杂,实在难以搞清楚某个对象究竟是否已经释放了内存,此时应该重新设计数据结构,从根本上解决对象管理的混乱局面。

2)函数的return语句写错了,注意不要返回指向?栈内存?的?指针?或者?引用?,因为该内存在函数体结束时被自动销毁。

3)使用free或delete释放了内存后,没有将指针设置为NULL。导致产生?野指针?。

建议:用free或delete释放了内存之后,立即将指针设置为NULL。

1.2.7.函数与过程相关建议

规则2-1:对所调函数的错误返回码要仔细、全面地处理。

规则2-2:明确函数的功能,精确(而不是近似)地实现函数设计。

规则2-3:编写可重入函数时,应注意局部变量的使用(如编写C/C++语言的可重入函数时,应使用auto即缺省态局部变量或寄存器变量)。

说明:编写C/C++语言的可重入函数时,不应使用static局部变量,否则必须经过特殊处理,才能使函数具有可重入性。

规则2-4:编写可重入函数时,若使用全局变量,则应通过关闭中断、信号量(即P、V 操作)等手段对其加以保护。

说明:若对所有使用的全局变量加以保护,则此函数就不具有可重用性,即当多个进程调用次函数时,很可能使有关全局变量变为不可知状态。示例:假设Exam是int型全局变量,函数Squre_Exam返回Exam平方值。那么如下函数不具有可重入性。 Unsigned int example(int para) { unsigned int temp; Examp = para; //(**)

Temp=Square_Exam(); Return temp; }

此函数若被多个进程调用的话,其结果可能是未知的,因为当(**)语句刚执行完后,另外一个使用本函数的进程可能正好被激活,那么当新激活的进程执行到此函数时,将使Exam赋予另一个不同para值,所以当控制重新回到?temp=Square_Examp()?后,计算出的temp很可能不是预想中的结果。此函数应如下改进。

Unsigned int example(int para) { unsigned int temp; [申请信号量操作] //若申请不到―信号量‖,说明另外的进程正 //处于给Exam赋值并计算其平方过程中(即正 Exam = para; //在使用此信号),本进程必须等待其释放信号 Temp = Square_Exam();//后,才可继续执行。 [释放信号操作] //若申请到信号,则可继续执行,但其他进程必 //须等待本进程释放信号量后,才能再使用本信 //号。 return temp; }

? 建议2-1:防止将函数的参数作为工作变量。

说明:将函数的参数作为工作变量,有可能错误的改变参数内容,所以很危险。对必须改变的参数,最好先用局部变量代之,最后再讲该局部变量的内容赋给该参数。示例:如下函数的实现不太好: Void sum_data(unsigned int num, int *data, int *sum)

{ unsigned int count; *sum = 0; for (count = 0; count < num; count++) { *sum

+= data[count]; //sum成了工作变量,不太好。

} } 若改为如下格式,则更好些: Void sum_data( unsigned int num, int *data, int *sum) { unsigned int count; int sum_temp; sum_temp = 0; for ( count = 0; count < num; count ++) { sum_temp += data[count]; } }

? 建议2-2:函数的规则尽量限制在200行以内。

说明:不包括注释和空格行。

? 建议2-3:一个函数仅完成一件功能。

? 建议2-4:为简单功能编写函数。

说明:虽然为仅用一两行就可完成的功能去编写函数没有必要,但用函数可使功能明确化,增加程序的可读性,亦可方便维护、测试。示例:如下语句功能不很直观。 Value = ( a > b ) ? a : b; 改为如下格式就很清晰: int max ( int a, int b) { return ((a > b ) ? a:b);

} value = max ( a, b); 或改为如下。 #define MAX (a, b) (((a) > (b)) ? (a) : (b)) value = MAX (a, b);

? 建议2-5:不要设计多用途面面俱到的函数。

说明:多功能集于一身的函数,很可能使函数的理解、测试、维护变得困难。

? 建议2-6:函数的功能应该是可以预测的,也就是只要输入数据相同就应产生同样的输出。

说明:带有内部―存储器‖的函数的功能是不可预测的,因为它的输出可能取决于内部存储器(如某标记)的状态。这样的函数既不容易理解又不利于测试和维护。在C/C++语言中,函数的Static局部变量是函数的内部存储器,有可能使函数功能不可预测,然而,当某函数的返回值为指针类型时,则必须是Static的局部变量的地址作为返回值,若为Auto类,则返回为错针。示例:如下函数,其返回值(即功能)是不可预测的。unsigned int integer_sum( unsigned int base ) { unsigned int index; static unsigned int sum = 0; //注意,是static类型的。 //若改为auto类型,则函数即变为可预测。 For ( index = 1; index <= base; index ++) { sum += index.; }

return sum; }

? 建议2-7:尽量不要编写依赖于其他函数内部实现的函数。

说明:此条为函数独立性的基本要求。由于目前大部分高级语言都是结构化的,所以通过具体语言的语法要求与编译器功能,基本就可以防止这种情况的发生。但在汇编语言中,由于其灵活性,很可能使函数出现这种情况。示例:如下是在DOS下TASM的汇编程序例子。过程Print_Msg的实现依赖于Input_Msg的具体实现,这种程序是非结构化的,

软件项目开发计划规范

软件项目开发计划规范 1 引言 1.1编写目的 ? 阐明开发本软件的目的; ? 说明编写这份项目开发计划的目的; ? 指明软件需求说明书所预期的读者。 1.2背景 ? 表示待开发的软件系统的名称、代码; ? 列出本项目的任务提出者、开发者、用户及实现该软件的计算中心或计算机网络; ? C.说明该软件系统同其他系统或其他机构的基本的相互来往关系。 1.3定义 列出本文件中用到的专门术语的定义和外文首字母组词的原词组。 1.4参考资料 列出用得着的参考资料,如: a.本项目的经核准的计划任务书或合同、上级机关的批文; b.属于本项目的其他已发表的文件; c.本文件中各处引用的文件、资料,包括所要用到的软件开发标准。列出这些文件资料的标题、文件编号、发表日期和出版单位,说明能够得到这些文件资料的来源。 2 项目概述 2.1 工作内容 简要地说明在本项目的开发中须进行的各项主要工作。 2.2主要参加人员 扼要说明参加本项目开发工作的主要人员的情况,包括他们的技术水平。 2.3产品 2.3.1程序 列出需移交给用户的程序的名称、所用的编程语言及存储程序的媒体形式,并通过引用有关文件,逐项说明其功能和能力。 2.3.2文件 列出需移交给用户的每种文件的名称及内容要点。 2.3.3服务 列出需向用户提供的各项服务,如培训安装、维护和运行支持等,应逐项规定开始日期、所提供支持的级别和服务的期限。 2.3.4非移交的产品 说明开发集体应向本单位交出但不必向用户移交的产品(文件甚至某些程序)。 2.4验收标准 对于上述这些应交出的产品和服务,逐项说明或引用资料说明验收标准。 2.5完成项目的员迟用限 2.6本计划的批准者和批准日期 3实施计划 3.1工作任务的分门与人员分工

项目编码规范

项目代码编程规范 1.应用范围 本规范应用于采用J2EE规范的项目中,所有项目中的JAVA代码(含JSP,SERVLET,JAVABEAN,EJB)JS代码、HTML代码及数据库设计均应遵守这个规范。同时,也可作为其它项目的参考。 2.设计类和方法 2.1. 创建具有很强内聚力的类 方法的重要性往往比类的重要性更容易理解,方法是指执行一个独立逻辑的一段代码。类常被错误的视为是一个仅仅用于存放方法的容器。有些开发人员甚至把这种思路作了进一步的发挥,将他们的所有方法放入单个类之中。 之所以不能正确的认识类的功能,原因之一是类的实现实际上并不影响程序的执行。当一个工程被编译时,如果所有方法都放在单个类中或者放在几十个类中,这没有任何关系。虽然类的数量对代码的执行并无太大的影响,但是当创建便于调试和维护的代码时,类的数量有时会带来很大的影响。 类应该用来将相关的方法组织在一起。 当类包含一组紧密关联的方法时,该类可以说具有强大的内聚力。当类包含许多互不相关的方法时,该类便具有较弱的内聚力。应该努力创建内聚力比较强的类。 大多数工程都包含许多并不十分适合与其他方法组合在一起的方法。在这种情况下,可以为这些不合群的方法创建一个综合性收容类。 创建类时,应知道“模块化”这个术语的含义是什么。类的基本目的是创建相当独立的程序单元。 2.2. 创建松散连接和高度专用的方法 2.2.1.使所有方法都执行专门的任务 每个方法都应执行一项特定的任务,它应出色的完成这项任务。应避免创建执行许多不同任务的方法。 创建专用方法有许多好处。首先调试将变得更加容易。 2.2.2.尽量使方法成为自成一体的独立方法 当一个方法依赖于其他方法的调用时,称为与其他方法紧密连接的方法。紧密连接的方法

图书管理系统项目开发计划书

学校代码: 10128 学号:200720205012 200710205008 200710205010 200710205006 课程设计 题目:图书管管理系统 —项目开发计划书 学生姓名:李军霍瑞光 安启超夏文涛 学院:信息工程学院 系别:计算机系 专业:软件工程 班级:软件07-1 指导教师:刘利民教授 马志强讲师 2010年7月16日

目录 1.引言 (1) 1.1编写目的 (1) 1.2项目背景 (1) 1.3定义 (1) 1.4参考资料 (1) 2.项目概述 (1) 2.1工作内容 (1) 2.2条件与限制 (2) 2.3产品 (2) 2.4运行环境 (3) 2.5服务 (3) 2.6验收标准 (3) 3.实施计划 (3) 3.1任务分解 (3) 3.2进度 (3) 3.3预算 (4) 3.4关键问题 (4) 4.人员组织及分工 (4) 5.交付期限 (4) 6.专题计划要点 (5)

1.引言 1.1编写目的 此项目开发计划书的编写主要是为了给开发《图书管理系统》做主要的规划和整合,在开发过程中起到引导作用,以及给使用者提供简要的说明。 1.2项目背景 a.大三第二学期实习内容:图书管理系统 b.项目开发小组成员:李军、霍瑞光、安启超、夏文涛 c.用户:中小学、大中专院校及企事业单位图书馆 d.项目开发环境:集成开发环境 e.软件名字:图书管理系统,版本是1.0。 1.3定义 文档中采用的专门术语的定义及缩略词简要如下: Microsoft SQL Server 1.4参考资料 [1] ftp://https://www.360docs.net/doc/cb8011604.html,/Upload/LLM/ 列出的资料 [2] 软件工程导论(第四版)张海藩主编北京:清华大学出版社2003 [3] 图书管理系统可行性研究报告霍瑞光2010.7 2.项目概述 2.1工作内容 在四周内要为图书馆建立一个图书管理系统,完成软件的开发、测试及试运

项目开发计划全解

开发计划 20101115 汪永峰 锡市凯旋电机有限公司 项目名称: 艾默生用电机 准: 期: 2010年11月15日 号: 制:

项目开发计划 艾默生电机设计开发 1/5 编号:20101115 1 任务来源 新产品设计建议书 0KX/QR0705-02-20101115 2目标 2010年10月1日前完成电机10台的制造,所试制的电动机规格为: 供电动机的技术要求,或参考客户提供样品电机测试数据并与之基本一致。 3 项目内容及要求 3.1根据顾客样机,对样机进行检测并岀具检测报告。根据顾客提供电动机的性能要求进行电机的设计,应与 样品电机的性能基本一致。 工作流程 3.2 电动机的外观与样品一致,机械寿命达 10000次以上。 3.3 电机耐压性能:2000 V/mi n. 3.4 电动机的安全性能应符合相关国家的法律法规及标准。 3.5 在2011年1月20日前完成电机样机 10台的制造,于 1月份交付上海艾默生公司检测试用。 220V AC ,电磁设计数据根据顾客提

项目开发计划 艾默生电机设计开发 2/5 编号: 5组织机构 项目组成员:徐磊(组长)、汪永峰(副组长)、金菊凤(副组长)、吴传渠、邵海林、顾文峰、沈阳、 冯菲丽。 职责和权限 收集主机相关技术资料(包括技术条件、使用说明书等); a )负责工艺文件的制定及标准化工作; b )采用新工艺的跟踪实施; C )对时间及工艺准确性负责。 工夹模具:唐东杰、顾文峰 a )负责公司内相关工夹模具的设计、制造工作,并对其设计、制造质量负责; b )相关零部件的制造工作。 质量检验:沈阳 负责项目实施过程中的质量检验工作。 a )负责所有零部件、外协件的加工制造; 6.7 外购外协、生产试制:金菊凤 6.1 项目组长:徐磊 a) 负责项目策划、组织、控制和协调工作; 6.2 6.3 b) C ) d) 审批项目计划及日程安排计划; 负责其他相关文件的审批工作; 负责项目工作进度的检查考核及奖惩工作。 项目副组长:汪永峰、金菊凤 a) b) C) d) e) f) 编制质量计划; 编制详细的进度计划,对时间进度负责; 技术方案的制定及审定工作; 各种相关文件的审核工作; 召开必要的技术会议; 样品电机的制造; 项目主设计:吴传渠 a) 6.4 b) C) d) e) f) 负责项目全套技术文件、工艺文件的制定; 跟踪实施样品电机的制造; 提供详细进展报告及例外事件报告; 对技术文件的硬错误负责; 负责样品电机的验证工作并形成文件。 工艺及标准化:邵海林、冯菲丽 6.5 6.6

软件项目代码编码规范

变更履历

目录 1总则 (4) 2源代码完整性保障 (4) 3源代码的授权访问 (4) 4代码版本管理 (5) 4.1系统初验 (6) 4.2试运行 (6) 4.3系统终验 (7) 4.4系统验收标准 (7)

1总则 1、为保障公司源代码和开发文档安全不至于泄露,保证源代码的完整,明确源代码控制管理流程,特制定此管理办法。 2、本办法适用于所有涉及接触源代码的各部门各岗位。所涉及部门都必须严格执行本管理办法。 3、源代码直接控制管理部门为技术开发部。 4、本办法管理重点在于控制管理源代码的完整性,不被非授权获取,不被非授权复制和传播。 5、本办法所指源代码不仅限于公司开发人员自行编写实现功能的程序代码,而且还包括相应的开发设计文档及用于支撑整个系统运行所必须具备的第三方软件、控件和其它支撑库等文件。 2源代码完整性保障 1、所有软件的源代码文件及相应的开发设计文档均必须及时加入到指定的源代码服务器中的指定库中。 2、我们研发的产品软件运行所必须的第三方软件、控件和其它支撑库等文件也必须及时加入源代码服务器中指定的库中。 3、软件开始编写或者调整代码之前,其相应的设计文档和代码必须先从相应的SVN库进行SVNUpdate操作。软件编码或功能调整结束测试正确无误后,相应的源代码必须进行SVNCommit操作,在最终进行SVNCommit操作之前需要再进行SVNUpdate操作,查看是否有冲突产生,如果有冲突产生需要和冲突相关人一并解决冲突。 3源代码的授权访问 1、源代码服务器对于共享的SVN库的访问建立操作系统级的,基于身份和口令的访问授权。 第十条在SVN库中设置用户,并为不同用户分配不同的,适合工作的最小

可行性研究报告软件需求说明书项目开发计划

软件工程之分析设计 课程设计报告 学院:计算机科学与技术学院 专业:软件工程 班级:0602班 学号:06001647 姓名:马超(组长) 同组人:路凯王志刚赵鑫 指导教师:李爱萍宋春花 时间:2009年6月

校内资源共享系统项目分工 1、概要分工: 2、详细分工: 由于我们软件开发小组人员有限,并且时间有限,我们不可能让需求分析员,做完需求分析,就闲着;也不可能让测试师、编程人员在可行性研究阶段闲着。所以,我们在做每个阶段时,都是有明确分工的。让每个成员都参与,发挥各自的聪明才智,提出各自的主张,并进行激烈的探讨。在这种氛围下,我们提出了我们的产品目的,明确了产品的功能,完善了产品各方面的性能,并将各个模块的核心代码基本都落实,并最终结束了各方面的测试,完成了本系统的设计。

校内资源共享系统可行性分析报告 1 引言 1.1编写目的: 可行性研究的目的是为了对问题进行研究,以最小的代价在最短的时间内确定问题是否可解。 经过对此项目进行详细调查研究,初拟系统实现报告,对软件开发中将要面临的问题及其解决方案进行初步设计及合理安排。明确开发风险及其所带来的经济效益。本报告经审核后,交软件经理审查及软件开发人员分析。 项目背景: 开发软件名称:校内资源共享系统。 项目任务提出者:项目组成员。 项目开发者:王志刚路凯赵鑫马超。 用户:学校全体师生。 实现软件单位:太原理工大学网络中心 项目与其他软件,office 播放器下载工具(如迅雷): 本项目采用B/S架构,客户端的程序是建立在Windows xp 系统上。以J2EE ORACLE为应用程序的开发软件,服务器端采用Windows工作站,是采用Oracle 10g的为开发软件的数据库服务程序。 1.3 定义: [专门术语]: Oracle10g: 系统服务器所使用的数据库管理系统(DBMS)。 SQL: 一种用于访问查询数据库的语言 事务流:数据进入模块后可能有多种路径进行处理。 主键:数据库表中的关键域。值互不相同。 外部主键:数据库表中与其他表主键关联的域。 ROLLBACK: 数据库的错误恢复机制。 [缩写词]: 格式化工厂:各种音频、视频、图片等格式转化的工具。 1.4 参考资料: 《Oracle数据库基础》,贾素玲王强主编,清华大学出版社。 《Web应用开发技术:JSP》,崔尚森张白一,西安电子科技大学出版社。 《Java EE编程技术》,郝玉龙等编著 2.可行性研究的前提 要求 主要功能:提供一个学校内师生信息共享的平台 性能要求:服务器速度要足够快,以便能支持在线播放;磁盘阵列要足够大,以 便存储下大家共享的信息。 输出要求:数据完整,详实,流畅性好。 输入要求:简捷,快速,实时,大家一起来维护。 安全与保密要求:上传人员和管理人员有对信息的删除权限,个人的注册信息保密。 完成期限:预计3个月,即截止2009年9月 15日。

软件项目开发计划书

软件项目开发计划书 Company Document number:WUUT-WUUY-WBBGB-BWYTT-1982GT

软件开发计划书 项目名称:图书管理系统 目录

1引言 编写目的 为了保证项目团队按时保质地完成项目目标,便于项目团队成员更好地了解项目情况,使项目工作开展的各个过程合理有序,有必要以文件化的形式,把对于在项目生命周期内的工作任务范围、各项工作的任务分解、项目团队组织结构、各团队成员的工作责任、团队内外沟通协作方式、开发进度、经费预算、项目内外环境条件、风险对策等内容以书面的方式描述出来,作为项目团队成员以及项目干系人之间的共识与约定,项目生命周期内的所有项目活动的行动基础,项目团队开展和检查项目工作的依据。 本项目开发计划用于从总体上指导图书管理系统项目顺利进行并最终得到通过评审的项目产品。本项目开发计划面向项目组全体成员。 背景 山西农业大学图书管理系统是由沈阳师范大学委托我们开发的大型管理系统,主要功能是实现图书馆的信息化管理,包括读者信息管理,书籍信息管理,借阅信息管理,管理者信息管理等功能。项目周期为六个月,项目背景规划如表所示。 表项目背景规划

图书管理系统是学校信息管理系统的一个重要组成部分,它需要学生基本信息系统提供学生的基本资料,因为很多情况下,图书证号和学生的学生证号是一样的,而且在图书管理中,需要知道学生所在的系别和班级等信息;另外,它还需要教职工信息系统提供基本资料,因为教职工当然也能在图书馆借阅图书。因此,在设计时可以和校园信息管理系统的其他系统使用同一个数据库管理系统,以便系统之间的信息交流和管理。 定义 专门术语: SQL SERVER:系统服务器所使用的数据库关系系统(DBMS)。 SQL:一种用于访问查询数据库的语言 事务流:数据进入模块后可能有多种路径进行处理。 主键:数据库表中的关键域。值互不相同。 外部主键:数据库表中与其他表主键关联的域。 ROLLBACK:数据库的错误恢复机制。 缩写: 系统:若未特别指出,统指本图书管理系统。 SQL:Structured Query Language(结构化查询语言)。 ATM:Asynchronous Transfer Mode (异步传输模式)。 UML:统一建模语言、是一套用来设计软件蓝图的标准建模语言,是一种从软件分析、设计到编写程序规范的标准化建模语言。

项目开发规范

项目开发规范 1.Java编程规范 1.1命名规范 定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。 1.Package的命名:包的名字都由一个小写字母组成。 2.Class的命名:类名必须由大写字母开头,其它字母都小写的单词组成。 3.方法的命名:方法名必须由一个小写字母开始,后面的单词用大写字母开始。 4.变量的命名:变量名必须由一个小写字母开始,后面的单词用大写字母开始。 5.Static final变量的命名:static final变量的名字应该都大写,并且指出完整含义。 6.数组的命名:数组应该以byte [] buffer的形式,而不是byte buffer[]的形式定义。 1.2Java文件样式 1.版权信息:版权信息必须在java文件的开头,比如: /** *Copyright ? 2000 Shanghai XXX Co. Ltd. *All right reserved */ 2.数据库设计规范 2.1命名规范 1.数据库文件名:使用汉语拼音或者英文单词作为文件名,一律使用小写。 2.数据库表名称:数据库表名由前缀tb加实际名字组成,实际名字英文首字母大写 3.数据库表字段名称:每个单词首字母大写。 4.sql语句规范:所有sql语句关键词如:select,update等均大写。 3.网页设计约定 3.1命名规范 1.所有控件id号均由开发人员名称首字母作为前缀。 2.js代码命名规范参考java编程规范。 4.文档书写规范 4.1需求分析书写规范 1.目的和对象:简明编写需求说明书的目的,指明读者对象; 2.项目背景描述: a.项目的委托单位、开发单位和主管部门。 b.该软件系统与其他系统的关系,描述本项目的适应场合及处理业务。 c.项目名称:本项目的名称,包括项目的全称、简称、代号、版本号。 d.名称定义:列出文档中用到的专门术语的定义和缩写词的原文,对重要的或者有 特殊意义的名词进行定义。 3.调研情况描述:描述主要的调研活动及对象。 4.用户特点: a.用户业务描述:描述适用本项目处理的业务。 b.用户情况:介绍本项目的用户情况,包括:用户的工作流程;用户的相关部门及 职责;用户的技术水平;用户原有系统的情况:介绍用户现在使用的系统的主要情况,包括主要的不足。 5.任务概述

编码规范以开发手册范本

1.软件开发手册 1.1.围 本标准规定了基于公司信息系统构建平台进行业务应用系统开发的编程格式规,主要包括命名规、代码注释、性能、以及常用语句的书写要求和约束等。统一规的格式有利于项目的交付和后续维护。 1.2.引言 1.1.1.简介 所有的程序开发手册都包含了各种规则。一些习惯自由程序的人(例如 Java 程序员)可能对这些规则很不适应,但是在多个开发人员共同协作的情况下,这些规则是必需的。这不仅仅是为了开发效率,而且也为了测试和后期维护。 良好的编码习惯有助于标准化程序的结构和编码风格,使源代码对于自己和别人都易读和易懂。在开发周期中越早使用恰当的编码规定,将会最大程度的提高项目的生产率。良好的编码习惯除了代码格式,详细的注释外,还应该包括使用有助于提高程序效率的编码方式。 规的开发有助于提高源码的可读性,可维护性,对于提高项目的整体效率更是不可缺少的(尤其是团队开发)。 1.1. 2.目的 本文是一套面向Java programmer 和Java developer进行开发所应遵循的开发规。按照此规来开发Java程序可带来以下益处: ●代码的编写保持一致性, ●提高代码的可读性和可维护性, ●在团队开发一个项目的情况下,程序员之间可代码共享, ●易于代码的回顾。 1.3.源程序 1.3.1.源程序命名 Java源程序的名字应该是这种形式:ClassOrInterfaceName.java。ClassOrInterfaceName 应该是在Java源程序中定义的 class或者interface的名字(关于classes和interface的命

名规请参考3.2)。源程序的文件名后缀通常为.java。 1.3. 2.供发布的文件 如果文件编译后,需要用打包的形式发布,那么这个包的名字应该是有代表性的(例如应该是这个模块或者这个文件所在单元的名字)。通常包的扩展名有 *.jar(推荐使用)或者 *.zip、*.ear、*.war等。 1.3.3.源文件的组织 一个Java源文件应该包含如下的元素,并按照以下顺序书写: 1)版本信息和声明 2)包的声明 3)引用声明 4)类或者接口的声明 以上元素之间以至少一个空行来分隔。 1.3.3.1.版本信息和声明 每一个源程序应该以一个包含版本信息和声明的块为开始。 例如: /** * application name: sample1 * application describing: this class handels the request of the client * copyright: Copyright ? 2002 金质工程所有 * company: neusoft * time: 2002.02.25 * * author Brunce * version ver 3.1 */

软件项目开发计划

1引言 (1) 1.1编写目的 (1) 1.2背景 (1) 1.3定义 (1) 1.4参考资料 (1) 2项目概述 (1) 2.1工作内容 (1) 2.2主要参加人员 (1) 2.3产品 (2) 2.3.1程序 (2) 2.3.2文件 (2) 2.3.3服务 (2) 2.3.4非移交的产品 (2) 2.4验收标准 (2) 2.5完成项目的最迟期限 (2) 2.6本计划的批准者和批准日期 (2) 3实施计划 (2) 3.1工作任务的分解与人员分工 (2) 3.2接口人员 (3) 3.3进度 (3) 3.4预算 (3) 3.5关键问题 (3) 4支持条件 (3) 4.1计算机系统支持 (3) 4.2需由用户承担的工作 (3) 4.3由外单位提供的条件 (4) 5专题计划要点 (4)

项目开发计划(GB856T——88) 1引言 1.1编写目的 说明:编写这份软件项目开发计划的目的,并指出预期的读者。 1.2 背景 说明: a.待开发的软件系统的名称; b.本项目的任务提出者、开发者、用户及实现该软件的计算中心或计算机网络; c.该软件系统同其他系统或其他机构的基本的相互来往关系。 1.3定义 列出本文件中用到的专门术语的定义和外文的首字母组词的原词组。 1.4参考资料 列出用得着的参考资料,如: a.本项目的经核准的计划任务书和合同、上级机关的批文; b.属于本项目的其他已发表的文件; c.本文件中各处引用的文件、资料,包括所要用到的软件开发标准。列出这些文件资 料的标题、文件编号、发表日期和出版单位,说明能够得到这些文件资料的来源。2项目概述 2.1工作内容 简要地说明在本项目的开发中须进行的各项主要工作。 2.2主要参加人员 扼要说明参加本项目开发的主要人员的情况,包括他们的技术水平。

学生选课系统软件项目开发计划书

学生选课系统软件项目开发计划书 1.引言 1.1编写目的 开发基于互联网的学生选课系统,提高管理工作的效率、提高信息的开放性、改善学生和教师对其最新信息查询的准确性。 1.2项目背景 某校在校生近50000人,每学期在期末都要进行一次对学生的学习质量测评,要求所有学生都要参加。以前测评的方式都是手工考核操作,由教务处发出试卷,每个同学填写完成后交回到教务处。然后教务处再使用手工的方法对试卷进行统计汇总,最后得出学生的成绩。 建议进行《学生成绩考核系统》的开发。 我院计算机系具备进行该软件系统开发的能力并承担本软件系统的开发与维护工作。该软件系统由我院教务处使用。 1.3定义 《学生成绩考核系统》以下简称《考核系统》。 1.4 参考资料 (1)” 学生成绩考核系统系统定义报告” (2) ” 学生成绩考核系统可行性研究报告” 2. 主要内容 2.1 工作内容 系统所需要的基础数据来源: “考核系统”需要实现的功能包括两大部分: 一是前台的数据采集,具体包括:德育测试页面、体育测试页面、智力测试页面、数据存储页面。 二是后台的数据管理部分:包括测试设置、德育测试、体育测试与智力测试的数据统计及查询。 2.2条件和限制 使用SQL SERVER 2005作为数据库的建设工具,相关的管理程序开发主要使用SQL SERVER 2005及NET等。 2.3 产品 2.3.1 程序 可运行的程序包括:SQL SERVER 2005,Microsoft Visual Studio 2005 2.3.2 文档 可行性研究报告,项目开发计划书,软件需求说明书,概要设计说明书,详细设计说明书,数据库设计说明书,操作手册,测试计划,测试分析报告,项目开发总结报告。 2.4 运行环境 《学生成绩考核系统》应该运行在Windows 7 以及以上版本的平台上。 2.5 验收标准《学生成绩考核系统》能让学生能成绩考核和查看成绩,教师能管理成绩。 2.6本计划的批准者和批准日期:批准者张树明批准日期2015年4月27日 3. 实施计划

项目开发计划管理制度

项目开发计划管理制度(试行) 第一条目的 为规范计划管理流程,提高整体计划管理质量,提高公司整体运作效率,制订本制度。 第二条适用范围 本制度适用于上海土地获取后项目开发计划的编制、执行与管理。 第三条定义 项目运营计划——获取新项目后上报总部决策(II)计划中明确的项目经营计划; 项目年度指导性经营计划——年初(5月)根据公司次年年度经营指标制定的项目次年年度指导性经营计划; 项目年度经营计划——年末(10月)根据公司次年年度经营指标制定的项目次年年度经营计划; 项目开发节点计划(动态计划)——围绕项目开发确定的各阶段主要控制节点(70个节点)计划 A类节点——项目开发节点计划中的重要控制节点; B类节点——项目开发节点计划中关键路径上的重要任务,专业、部门间的主要接口工作;C类节点——项目开发节点计划中影响较单一的节点,其变化不影响后续重要节点。 集团项目运营管理平台——一由集团开发综合项目工程、销售、成本、结算、规划、资源、资金等信息的管理平台。 项目计划信息平台——由上海公司开发对项目开发主线上的主要工作时间节点进行集中管理的信息平台。 上海沟通协作平台——由上海公司开发对沟通信息集中管理的信息平台。 第四条计划管理职责 4.1 产品决策与计划管理委员会:负责指导公司各项目制定或修订项目年度经营计划;负责项目开发节点计划的审批与调整;负责项目A类开发节点计划的变更审批。 4.2 事业部/项目部:负责项目开发节点计划的编制与上报;负责项目开发各阶段的计划落实与协调;

4.2 工程管理部:负责项目开发节点计划的审核与备案;负责项目开发节点计划执行情况的跟踪、反馈及评估,参与重要配合工作的协调; 4.3财务管理部:负责对事业部/项目部年度经营计划进行审核并对执行情况进行监控; 4.4项目发展部:负责新项目获取阶段协调相关部门(工程、设计、营销等)根据公司年度经营指标制定项目运营计划,并于项目交底会时将项目运营计划移交事业部/项目部。 4.5 设计部、营销部等各职能部门:提供相关专业资源,支持项目经营计划落实;指导、协调专业性工作。 第五条计划编制 5.1 集团决策计划: 新项目获取阶段(项目立项后)由项目发展部跟据公司年度经营指标要求牵头各相关部门(工程/项目代表、设计、财务等部门参与)确定项目运营计划,通过项目决策会(十六级会议体系第六个会议)审批,作为当年计划考核基准版本。 5.2年度经营计划: 通过经营计划会,公司以项目运营计划为基础确定项目各年度经营计划,作为项目开发计划实施的依据。 5.3项目各分期开发节点计划 按照公司年度经营计划要求,由事业部/项目部组织相关专业编制项目各分期开发节点计划。 5.4 计划编制参照的内容 5.4.1 项目开发计划编制应首先考虑公司整体经营计划明确的节点要求;各事业部/项目部围绕公司经营计划节点对各阶段的工作进行统筹安排; 5.4.2参考工期作为编制项目开发计划的辅助信息,供计划编制人员参照建立起项目开发过程的初步框架,需要另外依据项目所处的不同环境及不同限定因素确定合理的附加工期。第六条计划审批 项目开发节点计划经工程管理部审核后报工程总监或产品决策与计划管理委员会审批,工程管理部备案、发布,事业部/项目部录入项目运营平台及项目计划信息平台。

项目开发及编码规范

项目开发规范文档修订历史记录

1.简介 目的 1、用于规范指导开发组进行开发 2、便于成员间的沟通与交流。 3、有助于项目质量和稳定。 4、为后期维护提供支持 2. 项目开发流程 项目开发过程归纳分为以下步骤: 1. 建立SVN项目版本控制。包括文档,源码,Lib包等。 2. 了解需求,并对需求文档的书写。(见文档结构规则附录)。 3. 详细设计文档。(见文档结构规则附录)。 功能模块设计,重要模块的算法设计。 数据库设计等。 根据需求定义开发平台及环境。 4. 编码。 搭建开发平台,配置开发环境。 编码。 单元测试案例。 5. 书写软件安装手册文件,数据库脚本文件,以及注意事项(release notes)。 6. 交互测试组测试。根据测试组测试结果是否回归第4步(测试回归最好不要超过2 次)。 7. 测试通过,交付上线使用。 维护手册 使用手册

3. 代码规范 Java 代码规范 3.1.1 Java类名 类名可由:英文字母,数字,下划线组成。(数字,下划线不能够开头) 类名由一个或者多个单词组成。单词通常要求简洁明了达意。能够通过类名能够大致了解此类的作用和用途。 类名要求首字母大写,多个单词组成类名时,单词的首字母要求大写。 建议:类名不要过于简单或者太长。可以对单词采用简化的名称:入: Number 简化为:num 。 3.1.2 Java类结构 类仅作为数据结构,没有行为,他封装了一组或者相似的一些行为方法。所以一个类尽量功能单一,或者功能类似共有行为的。一个类不要过于庞大。 通常情况下: 一般逻辑类中应该有构造方法和main方法,main方法中应该有测试代码。 每个类应该有 toString() 方法。 3.1.2.1 包和引入语句 在多数Java源文件中,第一个非注释行是包语句。在它之后可以跟引入语句。 报名的定义全部是小写字母。具体定义依据项目而定。 引入包时候,同一类型的归纳到一块,用空行隔开。例如: import 3.1.2 类注释 Java类开头应该有相应的注释:类版本描述,作者签名,日期时间,公司备注,类的功能作用相关描述等。(详细查看:注释) 3.1.2.2 类成员变量 a) 类变量要求放在类的开始声明。一行声明一个。 b) 变量名称首字母要求小写。其他命名规则类似与类名。 c) static , final 类型的变量,字母要求全部大写。 d) 尽量在声明局部变量的同时初始化。 e) 避免局部变量和成员变量同名,覆盖了成员变量。 f) 尽量变量私有化,缩小变量的作用域。 3.1.2.3 类成员方法 a) 方法名命名规则类似于成员变量命名规则。 b) 成员方法尽量私有化。

产品开发项目计划说明书模板

报告编号:产品开发计划 项目号: 项目名称: 编制人: 部门: 日期: 版权所有侵权必究 All Copyright Reserve

目录 1 内容简介 (4) 1.1 文档目的 (4) 1.2 文档范围 (4) 2 项目概况 (4) 3 项目组织结构 (4) 4 项目依赖关系分析 (5) 5.1 项目关键路径分析及保障措施 (5) 5.2 项目依赖关系分析 (5) 5.3 项目关键成功因素 (6) 5.3 技术方法和工具 (6) 5 交付件 (6) 6 项目计划 (7) 6.1 项目的里程碑计划 (7) 6.2 项目WBS计划(highlevel计划) (9) 7 人力资源和技能需求 (9) 8 项目所需其它资源 (10) 9.1关键物料需求计划 (10) 9.2实验设备和环境资源计划 (10) 9 资料开发计划 (11) 10 对外合作计划 (11) 11 外包任务 (12) 10.1 子承包商资料 (12) 10.2 外包任务的范围 (12) 10.3 里程碑、交付件 (12) 12 预算/分配(可选) (12) 13 验收标准(可去掉) (12) 14 质量计划(也可单独成文档) (12) 12.1 项目过程定义 (13) 12.2 质量目标 (13) 12.3 通过技术手段保证质量 (13) 12.4 质量控制活动 (13) 12.5 质量保证活动 (15) 15 项目沟通计划 (15) 14.1 项目组会议 (15) 14.2 项目报告机制 (16) 16 项目的重用计划 (16) 15.1 现有重用构件 (16) 15.2 新增重用构件 (16) 17 配置管理计划 (17) 18 问题 (17) 19 风险管理计划 (17) 20 客户的参与 (18) 21 培训计划 (18)

银行管理系统 项目开发计划书

软件工程课程设计 项目计划书 项目名称:银行管理系统 学院:计算机科学与技术学院 专业:计算机科学与技术专业 班级: 姓名: 指导教师: 2011 年11 月03 日

目录 软件工程课程设计 (1) 项目计划书 (1) 1 系统主题 (4) 1.1引言 (4) 1.2背景/选题动机/目的 (4) 1.3系统与“创新杯”的主题关系(2) (5) 1.4市场调查过程和结论(3) (5) 2 需求分析 (6) 2.1概要 (6) 2.2使用场景 (6) 2.3可行性分析报告 (7) 2.4 应用领域/实用性分析 (8) 2.5未来发展方向 (8) 3 团队组成和分工 (8) 4 系统功能概述 (9) 4.1功能需求分析 (9) 4.2 系统性能要求 (9) 4.3功能点列表 (10) 4.4性能点列表 (10) 4.5数据描述 (11) 5 系统设计概要 (11) 5.1实现系统所采用的技术方案和技术亮点 (11) 5.2系统构架 (12) 5.3功能模块描述 (12) 5.4 E-R图 (17) 5.5用例图 (19) 5.6概念数据模型图 (20) 5.7业务模型 (21) 5.8 界面 (22) 6 系统环境 (27)

6.1开发平台 (27) 6.2 Client运行环境 (27) 6.3 Server运行环境 (28) 7 项目时间进度表 (28) 7.1总体进度表 (28) 7.2软件工作产品规模和工作量估计 (28) 8 风险分析 (29)

1系统主题 1.1引言 在现代化的银行管理中,银行管理系统有着十分重要的作用,然而,用大型软件系统对于小型的企事业单位,不啻于“杀鸡用牛刀”,因此小型软件对于这种单位自然有十分重要作用。某小型企业出与这种目的制作了这银行账户管理系统。 1.2背景/选题动机/目的 随着社会经济的发展,信息化程度的不断深入,银行的传统业务己愈来愈不能满足银行客户的需要。 现今,人们的金融意识、科技意识己经有了很大的提高,在紧张忙碌的生活中,己越来越来不习惯每月奔忙于各银行营业柜台之问去排队缴各种各样的费用了;同时,各种经营单位如电信、移动、供电、煤气、自来水、证券等等一是为了提高服务质量、方便客户,二是为了减轻自己日趋繁重的工作量,纷纷委托银行为其开展代收代付业务:同时,随着我国加入世贸组织的日益临近,我国的银行业将面临更加激烈的同业竞争,如何提供更多的金融产品和更优质的服务,如何吸引更多的客户,如何利用计算机技术加强银行帐户信息管理、进行银行业务再造,提高银行的工作效率和业务竟争能力是摆在各家银行面前的一个迫切需要解诀的问题。 近几年来,各商业银行加快了与社会各业的合作,利用自身的网点优势和业务特点,为其提供各种高效、快捷的代收代付业务,也就是中间代理业务,目前以与广大人民群众生活密切相关的各项缴费业务如水电费、电话费、手机费等代收业务为主,这些业务开展方式多种多样,但一般都离不开计算机的高效管理支持。 随着代理业务不断发展,业务品种越来越多,各项业务做法互有差异,这就对银行的电子化水平和相应的管理水平提出了更高的要求。如何利用电子化的手段构建一个高效统一的、通用灵活的系统来管理各种各样的业务,是每个商业银行所要研究的课题。支持决策系统的,需要在数据库的基础上,进行联机分析处理,每次处理的数据量大,响应时间长。 特别是银行每天要处理大量的存取款事件,做好存取款是银行工作重要的环节,然而要有效处理必须要有良好的程序和数据管理系统来建立一个良好的软件系统来实现快速、有效、准确、安全的处理银行事物。

项目开发计划

二、项目开发计划 目录 1.引言 (1) 1.1编写目的 (1) 1.2项目背景 (2) 1.3定义 (2) 1.4参考资料 (2) 2.项目概述 (2) 2.1工作内容 (2) 2.2条件与限制 (2) 2.3产品 (3) 2.3.1程序 (3) 2.3.2文档 (3) 2.4运行环境 (3) 2.5服务 (3) 2.6验收标准 (4) 3.实施计划 (4) 3.1任务分解 (4) 3.2进度 (4) 3.3预算 (4) 3.4关键问题 (4) 5.交付期限 (5) 6.专题计划要点 (5) 1.引言 1.1编写目的 本报告的主要作用是确定各个项目模块的开发情况和主要的负责人,供各项目模块的负责人阅读,做到及时协调,按步有序进行项目的开发.减少开发中的不必要损失. 具体步骤:拟订开发计划书,分配项目工作,安排项目进度。 计划对象:软件一班14开发小组。

1.2项目背景 项目名称:药库管理系统。 项目任务提出者:张朋 项目开发者:张朋,任蒙爱,周景,彭慧超,赵莺歌。 项目使用者:全体学生和老师。 1.3定义 1.4参考资料 《软件工程导论》, 《C# 》 《数据库》 《c#项目开发实例》 2.项目概述 2.1工作内容 各开发人员根据时间先后安排,分别对项目进行开发 各项主要工作: 软件开发人员对调查结果进行分析,拟订实现方案(如程序结构,流程,数据结构等)。软件编程人员对软件进行集中开发。 软件审核人员对软件进行评定,审核。 2.2条件与限制 完成项目应具备的条件: ●开发平台 ●开发基础设施 ●开发人员 ●维护人员 开发单位已具有的条件: ●开发基础设施

项目编码规范编写指南

项目编码规范 1 命名规范 1).包名采用域后缀倒置的加上自定义的包名,采用小写字母。 在部门内部应该规划好包名的范围,防止产生冲突。部门内部产品使用部门的名称加上模块名称。产品线的产品使用产品的名称加上模块的名称。 格式: com.huawei.产品名.模块名称 com.huawei.部门名称. 项目名称 示例: Relay模块包名 com.huawei.msg.relay 通用日志模块包名 com.huawei.msg.log 2). 类名和接口使用类意义完整的英文描述,每个英文单词的首字母使用大写、其余字母使用小写的大小写混合法。 示例: OrderInformation, CustomerList, LogManager, LogConfig 3). 方法名使用类意义完整的英文描述:第一个单词的字母使用小写、剩余单词首字母大写其余字母小写的大小写混合法。 示例: private void calculateRate(); public void addNewOrder(); 4). 方法中,存取属性的方法采用setter 和 getter方法,动作方法采用动词和动宾结构。格式: get + 非布尔属性名() is + 布尔属性名() set + 属性名() 动词() 动词 + 宾语() 示例: public String getType(); public boolean isFinished(); public void setVisible(boolean); public void show();

public void addKeyListener(Listener); 5).属性名使用意义完整的英文描述:第一个单词的字母使用小写、剩余单词首字母大写其余字母小写的大小写混合法。属性名不能与方法名相同。 示例: private customerName; private orderNumber; private smpSession; 6). 常量名使用全大写的英文描述,英文单词之间用下划线分隔开,并且使用 final static 修饰。 示例: public final static int MAX_VALUE = 1000; public final static String DEFAULT_START_DATE = "2001-12-08"; 7). 属性名可以和公有方法参数相同,不能和局部变量相同,引用非静态成员变量时使用 this 引用,引用静态成员变量时使用类名引用。 示例: public class Person { private String name; private static List properties; public void setName (String name) { https://www.360docs.net/doc/cb8011604.html, = name; } public void setProperties (List properties) { Person.properties = properties; } } 8).如果函数名超过15 个字母,可采用以去掉元音字母的方法或者以行业内约定俗成的缩写方式缩写函数名。 示例: getCustomerInformation() 改为 getCustomerInfo() 2 程序注释规范 1)、基本注释(必须加)

项目开发计划模板

项目开发计划 (仅供内部使用) 文档作者:____________________ 日期:____/____/____ 开发/测试经理:____________________ 日期:____/____/____ 产品经理:____________________ 日期:____/____/____ 管理办:____________________ 日期:____/____/____ 请在这里输入公司名称 所有不得复制

项目开发计划 1 引言 1 .1编写目的 本开发计划的目的是: a.把在开发过程中对各项工作的人员、分工、经费、系统资源条件等问题的安排用文档形式记载下来,以便根据本计划开展和检查本项目工作,保证项目开发成功; b.制订项目组开发过程中的评审和审查计划,明确相应的质量管理负责人员; 规定软件配置管理的活动内容和要求,明确配置管理工作的人员。 特别要求:需求分析必须详细,并且有相关专家合作进行, 1 .2背景 本项目软件名称为《电能质量数据分析软件》。 任务来源于(略)公司; 交办单位:(略)公司; 承办单位:长峰新康科技XX公司。 1 .3参考资料 无; 1 .4术语和缩写词 暂无; 特别说明:有关公司内部秘密的内容用(略)代替。 2 任务概要 2 .1工作内容 本项目开发过程中需要进行的各项主要工作为: 编制附和软件需求要求的软件功能的软件。 文档计划建立: 软件开发计划; 软件目录 软件需求规格说明 项目开发计划 可行性报告

软件标准规X 软件测试计划 软件测试办法 概要设计说明 软件可靠性和安全性设计指南 硬件总体设计报告 详细设计说明 软件详细设计报告 软件代码(略) 测试分析报告 软件可靠性和安全性设计检查单 软件评审检查单 软件使用说明 2 .2产品 2 .2.1程序 见需求。 2 .2.2文档 文档内容见2.1中文档建立。 文档格式要求按照软件模式化要求进行,模式按照如下名称模板要求规定:软件开发计划→项目开发计划; 文档目录→软件目录; 需求分析报告→软件需求规格说明; 概要设计文档→概要设计说明; 详细设计文档→详细设计说明; 源代码→软件标准规X; 软件使用说明书→软件使用说明; 软件测试报告→测试分析报告; 软件审查报告→软件评审检查单。 2 .2.3服务 培训: 时间:1天; 内容:软件使用及安装; 软件支持:略。

相关文档
最新文档