资源描述
水利水电工程XXXXX辅助决策支持系统
团队开发规范
XXXXX设计有限公司
二XXX年十二月
文档信息:
文档名称
水利水电工程XXXXX辅助决策支持系统团队开发规范
描述
该文档详细定义了团队开发角色及职责、项目开发流程、开发过程控制商定、协作开发商定、代码版本控制、交流机制等
负责人
XX
状态
最后版
文档变更历史:
时间
修改人
章节
描述
-8-29
XXX
所有章节
创立文档草稿
-12-10
XXX
所有章节
修改
文档名称:
团队开发规.doc
审核成果:
审核人
意见
签名档
目 录
1 团队构成 1
1.1 产品管理 1
1.2 项目管理 2
1.3 开发 3
1.4 测试 4
1.5 角色共享 5
1.6 开发小组 5
1.7 专家小组 6
2 开发流程 7
2.1 达到共识 7
2.2 完毕项目筹划 8
2.3 完毕功能 8
2.4 稳定与发布 8
3 代码管理 10
3.1 编码规范 10
3.2 版本管理 10
3.2.1 概述 10
3.2.2 代码管理 10
4 附录:系统开发编码规范 11
4.1 类型级单位命名 11
4.1.1 类 11
4.1.2 枚举和构造 12
4.1.3 委派类型 12
4.1.4 接口 12
4.1.5 模块 13
4.2 办法和属性命名 13
4.2.1 办法 13
4.2.2 属性 13
4.2.3 事件 13
4.3 变量和常数 14
4.4 前缀 15
4.4.1 对象 15
4.4.2 变量/常量范畴 15
4.5 标签 16
4.6 名字空间 17
4.7 格式化 17
4.7.1 块 17
4.7.2 缩进 17
4.7.3 流 17
4.8 注释 18
4.8.1 注释规范 18
4.8.2 类(涉及Form等)、模块、组件、控件 19
4.8.3 办法、函数、事件与属性 19
4.9 完整性 20
4.10 安全性 20
1 团队构成
咱们整个软件开发团队由4种角色构成,分别为:
· 产品管理(Product Management)
· 项目管理(Program Management)
· 开发人员(Development)
· 测试人员(Test)
各角色在团队地位相称,各司其职。各个角色详细目的、职能以及责任在如下小节中进行详述。
1.1 产品管理
(1) 目的
满足客户需求。
产品管理目的就是满足客户需求。一种成功项目必要要可以满足客户和顾客规定。虽然项目达到了预算和时间目的,只要未能满足客户需求,那这就是一种失败项目。一方面必要认清和理解客户。有时,使用方和投资方目的需求并不完全相似,因而就需要清晰地区别和分析所有需求。
(2) 职能
· 市场
§ 推动市场和公关,以对目的客户发生效用
§ 突出产品与其她竞争对手区别性,以利于竞争
§ 分发解决方案,以便顾客可以容易地获得
§ 为顾客提供支持,以使其无论在购买还是使用过程中都留下正面印象
· 业务价值
§ 定义并维护项目业务对的性
§ 定义并衡量业务价值实现和评价
· 发展客户
§ 推动项目和解决方案远景目的
§ 负责客户盼望值和沟通
· 产品筹划
§ 收集、分析客户和业务需求,并区别其优先级
§ 执行市场调查、市场开拓和竞争对手分析
§ 拟定业务和成功原则
§ 辨认多目的发布筹划
1.2 项目管理
(1) 目的
在项目约束条件下完毕解决方案。
整个团队一种重要目的就是在项目约束条件下完毕项目。项目约束条件涉及预算和进度等。大某些项目会依照时间和资金使用来衡量项目成果。为了实现这个目的,项目管理负责并推动进度表、功能集和预算资金。她必要保证可以在对的时间发布对的项目或产品,保证对的理解了项目投资方盼望,并自始至终贯穿于项目执行过程中。
(2) 职能
· 项目管理
§ 跟踪和管理预算资金
§ 管理控制进度表
§ 推动风险管理流程
§ 加强团队沟通和协调
§ 跟踪进度和报告项目状态
§ 管理资源分派
· 解决方案构建
§ 推动整体项目设计
§ 负责功能规范
§ 负责解决方案范畴和重要决定
· 流程控制
§ 推动流程质量控制
§ 定义并推荐可改进处
· 管理服务
§ 实现项目管理流程并提供支持
§ 提供管理服务以保证高效团队运作
1.3 开发
(1) 目的
按照功能规范阐明、《软件开发需求分析报告》和《总体构造设计》规定进行开发。
功能规范阐明详细描述了整个团队将要提供应客户交付物。对整个团队来说,应当尽量精准地按照功能规范阐明来实现整个项目,由于功能规范阐明可以当作是整个团队和客户之间所达到共识。开发人员必要按照客户需求和功能规范阐明来构建整个解决方案。同步,开发人员还需要为整个团队提供技术方面征询,这样在设计和技术选取时可以尽量减少开发风险。开发人员提供较低层次功能设计,并预估完毕设计所需时间。
(2) 职能
· 技术征询
§ 为团队提供技术征询服务
§ 评估并验证所用技术
§ 积极参加功能规范阐明创立和审核
§ 定义开发原则
· 实现架构和设计
§ 提供针对解决方案应用程序、数据和技术细节,以便将公司架构映射到解决方案架构实现上
§ 负责并实现解决方案逻辑和物理设计
· 应用程序开发
§ 依照设计规范编写代码以实现功能
§ 在开发过程中进行代码审核,并共享知识和经验
§ 在测试人员协助下,依照测试筹划执行单元测试
· 架构开发
§ 为自动安装开发脚本
§ 开发安装文档
1.4 测试
(1) 目的
在确认所有产品质量问题都得到妥善解决后,批准产品发布。
所有软件产品在发布时都存在着缺陷。最重要是,在发布前,必要清晰地结识和鉴别出这些问题,可以以问题形式给出解决办法,或者是给出如何绕开该问题文档记录。宁愿对于已知问题,提供了文档或解决办法,也不要存在某些未知问题。由于这些未知问题,也许会带来不可预知后果。
(2) 职能
· 筹划测试
§ 开发测试办法和筹划
§ 参加设立质量原则
§ 开发测试阐明
· 测试
§ 开发并维护自动测试案例、工具和脚本
§ 执行测试,以拟定产品开发过程状态
§ 负责定义构造流程
· 测试报告
§ 为团队提供与产品质量有关数据
§ 跟踪所有缺陷,并保证在发布前得到妥善解决
1.5 角色共享
尽管团队构成包括了4种角色,但并不意味着一种团队至少需要4个成员,也不意味着一种人只能承担一种角色,重要是这4种角色必要在一种团队中体现。普通状况下,团队成员经常共享角色。在某些较小团队中,不同角色只能进行兼任。角色共享有两条重要原则:
一是开发构成员不能共享角色。开发人员是项目构建者,她们不应当从她们主任务中分身。如果对开发构成员规定额外角色,往往会使得她们无法准时完毕进度规定。
二是不要试图组合具备一定利益冲突角色。例如,产品管理和项目管理利益具备冲突点,因此她们角色不能组合。产品管理注重满足客户需求,而项目管理重要关怀在时间和预算限度内完毕项目。如果这两个角色组合在一起,那么在需求发生变更时,也许会发生某些状况,诸如没有足够地考虑客户满意度而忽视该变更,或者是没考虑对项目冲击盲目地接受变更。让不同团队成员担任这样角色有助于保证每个方面得到相称考虑和注重限度。同样,这也合用于组合开发人员和测试人员。
1.6 开发小组
开发小构成员构成
姓名
性别
年龄
职务/职称
业务专业
本项目分工
所在单位
1.7 专家小组
姓名
性别
年龄
职务/职称
业务专业
本项目分工
所在单位
专家小组负责系统开发过程中重要阶段评审、导截流技术问题解答和指引等。重要目的是保证系统理论先进性、更好满足客户需求和保障开发质量。
2 开发流程
在开发过程中,采用多里程碑式过程模型,如图 1 所示。而其中每一种循环均包括四个里程碑。
图 1 多里程碑模型
这四个里程碑构成循环放大后如图 2所示,称为“过程模型”。
图 2 过程模型
2.1 达到共识
· 基本完毕需求调研和分析(产品管理负责)
· 拟定大方向和长中短期目的
· 所有角色都参加讨论并真正认同结论
· 产生文档
§ 常用顾客情景:覆盖80%以上功能
§ 前景:言简意赅地阐明大方向,并有勉励团队作用
2.2 完毕项目筹划
· 编写详细功能规范(项目管理)
· 在编程前想清晰所有功能流程,并引导顾客明确需求
· 所有角色都参加审视功能规范
· 制定开发筹划和进度表(开发团队)
· 制定测试筹划和进度表(测试团队)
· 分派资源(人力和预算)
· 形成项目综共筹划和综合进度表
2.3 完毕功能
· 开发人员分别完毕自己功能
· 进行版本合理控制
· 对每一项可测试功能进行测试,无需等待
· 通过测试用例,对功能进行完整和重复检查
· 记录所有程序问题
· 实现解决缺陷自动流程
· 按照综合进度表不断检查进度
2.4 稳定与发布
· 测试组全面地测试功能,涉及性能和稳定性
· 开发组全力配合解决缺陷
· 监测质量状况
· 预测发布日期
· 专家会诊机制
§ 决定缺陷优先度
§ 决定哪些缺陷可以在下个里程碑或版本中解决
§ 决定由谁解决某个缺陷
3 代码管理
3.1 编码规范
请参看附录,系统开发编码规范。
3.2 版本管理
3.2.1 概述
版本控制有如下好处:
· 可以获得持续受版本控制项目,并保存不同版本区别以作比较
· 能获得版本控制工具中保存任何版本
· 可以把出错或误操作最新版项目恢复到对的历史版本
· 获得历史版本详细信息
在开发过程中,核心程序员对版本进行控制、对系统源代码进行集中管理,并做好程序备份和保密工作。
3.2.2 代码管理
核心程序员依照系统构造设计和详细设计,对系统实现功能进行分解,将实现各功能小模块分派给项目组开发人员,并事先设计好各模块接口。开发人员依照接口规定进行编码。编码完毕后进行单元测试。单元测试由开发人员完毕。单元测试后开发人员将本某些模块代码上交给核心程序员,核心程序员负责加入模块后系统测试。
系统所有代码由核心程序员管理,其他开发人员负责配合进行各模块开发。
4 附录:系统开发编码规范
在开发中保持良好编码规范是十分重要。程序开发人员应当严格遵循系统开发编码规范进行编码。
4.1 类型级单位命名
4.1.1 类
在为类(class)命名前一方面要懂得它是什么,如果通过类名提供线索,你还是想不起这个类是什么话,那么你设计就还做不够好。超过三个词构成混合名是容易导致系统各个实体间混淆。对于派生类命名应当避免带其父类名,一种类名字只与它自身关于,和它父类叫什么无关。
1 类命名
以Class声明类,都必要以名词或名词短语命名,使用大写字母作为词分隔,其她字母均使用小写,名字首字母使用大写不要使用下划线( _ )。如:
Class Indicator
当类是一种特性(Attribute)时,以Attribute结尾,当类是一种异常(Exception)时,以Exception结尾,如:
Class ColorSetException
Class CauseExceptionAttribute
当类只需有一种对象实例(全局对象,例如Application等),必要以Class结尾,如:
Class ScreenClass
Class SystemClass
当类只用于作为其她类基类,依照状况,以Base结尾:
MustInherit Class IndicatorBase
如果定义类是一种窗体,那么名字前面或背面必要加Frm。在本系统编码中,对于前解决和解决器模块使用窗体,在名字背面加后缀Frm,在后解决模块中使用窗体在名字前面加前缀Frm。如果是Web窗体,必要加后缀Page:
Class PrintFrm :Inherits Form ‘* Windows窗体
Class StartPage :Inherits Page ‘* Web窗体
2 类库命名
当前命名空间正在越来越广泛被采用,以避免不同厂商和团队类库间类名冲突。当未采用命名空间时候,为了避免类名冲突,普通做法是在类名前加上独特前缀,两个字符就可以了,固然多用某些会更好。
例如:
John Johnson数据构造类库可以用Jj做为前缀,如下:
class JjLinkList
4.1.2 枚举和构造
同样必要以名词或名词短语命名。最佳体现枚举或构造特点,如:
Enum ColorButtons ''以复数结尾,表白这是一种枚举
Structure CustomerInfoRecord ''以Record结尾,表白这是一种构造体
4.1.3 委派类型
普通委派类型以描述动作名词命名,以体现委派类型实例功能:
Delegate Sub DataSeeker (ByVal SeekString As String)
用于事件解决委派类型,必要以EventHandler结尾,如:
Delegate Sub DataChangedEventHandler (ByVal Sender As Object,ByVal e As DataChangedEventArgs)
4.1.4 接口
与其她类型不同,接口必要要由I作为前缀,并用形容词命名,突出体现实现接口类将具备什么能力:
Interface ISortable
4.1.5 模块
模块不是类型,她名称除了必要以名词命名外,必要加后来缀Module:
Module SharedFunctionsModule
上述所有规则共同特点是,每个构成名称词语都必要是大写开头,禁止完全大写或小写名称。
4.2 办法和属性命名
4.2.1 办法
最佳采用与类命名一致规则,无论是函数还是子程序,办法都必要以动词或动词短语命名。无需区别函数和子程序,也无需指明返回类型。
Sub Open (ByVal CommandString As String)
Function SetCopyNumber (ByVal CopyNumber As Integer)
参数需要指明ByVal还是ByRef,这一点写起来会让程序变长,但非常必要。如果没有特别状况,都使用ByVal。参数命名办法,参照背面“变量命名办法”。需要重载办法,普通不写Overloads,依照需要编写重载办法。
4.2.2 属性
原则上字段(Field)是不能公开,要访问字段值,普通使用属性。属性以简洁清晰名词命名:
Property Concentration As Single
Property Customer As CustomerTypes
4.2.3 事件
事件是特殊属性,只能在事件解决上下文中使用。命名原则普通是动词或动词分词,通过时态表白事件发生时间:
Event Click As ClickEventHandler
Event ColorChanged As ColorChangedEventHangler
4.3 变量和常数
常数以表白常数意义名词命名,普通不区别常数类型:
Const DefaultConcentration As Single=0.01
在严格规定代码中,常数以c_开头,如c_DefaultConcentration,但最佳不要用它,它会带来输入困难。普通类型变量,只要用故意义名字命名即可,不可使用简称和无意义名称诸如A,x1等,下面给出了良好例子:
Dim Index As Integer
Dim NextMonthExpenditure As Decimal
Dim CustomerName As String
不能起太长名字,应当尽量简洁,如下面例子:
Dim VariableUsedToStoreSystemInformation As String ''* 太复杂了
Dim SystemInformation As String ''* 对的,简朴明了
Dim sysInfo As String ''* 错误,过于简朴
特殊状况可以考虑一种字母变量:
Dim g As Graphic
对于控件,应当指明控件类型,办法是直接在变量背面加以类名:
Friend WithEvents NextPageButton As Button ''* 按钮
Friend WithEvents ColorChoicerPanel As Panel ''* 面版
Friend WithEvents CardFileOpenDialog As FileOpenDialog ''* 文献打开对话框等等,无需规定某种类型变量前缀,只需把类型写在背面就行了,试对比下列代码:
btnCancel.Text = &Cancel
CancelButton.Text = &Cancel
显然后者更能使阅读者明白变量类型是一种按钮。
4.4 前缀
4.4.1 对象
1 原则对象
名称 前缀 例子 阐明
System.Array arr arrUsers 顾客集合
System.Boolean bln blnDoesUserExist 顾客与否存在
System.Byte byt bytStreamContent 字节流内容
System.Char chr chrKeyPress 按键
System.DateTime dte dteCreatedDateTime 创立日期
System.Decimal dec decYearlySaleQuota 年度销售额
System.Double dbl dblTotalPrice 总金额
System.Interger int intMessages 消息数
System.Object obj objExternalFunction 外部功能
System.Single sng sngFinishRate 完毕率
System.String str strLoginName 登陆名称
System.Exception exc excRet 错误
System.Enum enm enmUserStates 顾客状态
Structure stu stuEmployees 员工类型
System.Data.SqlClient.SqlConnection cnn cnnDatabase 数据库连接
System.Data.SqlClient.SqlDataReader sdr sdrUserData 顾客数据读取器
2 自定义对象
咱们规定应当依照自定义对象名称来拟定该对象类型前缀,例子如下:
对象:SysSet
前缀:ss
例子:ssSafety
4.4.2 变量/常量范畴
依照变量与常量生存周期,咱们应当定义不同生存周期前缀以示区别,以便咱们清晰该变量/常量范畴。
1 类、模块、组件、控件
咱们规定在类、模块、组件、控件范畴内,变量生存周期前缀应当添加“m_”(Module-模块)。例子如下:
名称 前缀 例子 阐明
System.Array m_arr m_arrUsers 顾客集合
System.Boolean m_bln m_blnDoesUserExist 顾客与否存在
System.Byte m_byt m_bytStreamContent 字节流内容
System.Char m_chr m_chrKeyPress 按键
System.DateTime m_dte m_dteCreatedDateTime 创立日期
System.Decimal m_dec m_decYearlySaleQuota 年度销售额
System.Double m_dbl m_dblTotalPrice 总金额
System.Interger m_int m_intMessages 消息数
System.Object m_obj m_objExternalFunction 外部功能
System.Single m_sng m_sngFinishRate 完毕率
System.String m_str m_strLoginName 登陆名称
2 过程、函数、属性、事件
咱们规定在过程、函数、属性、事件范畴内,变量生存周期前缀应当添加“o_”(Owner-私有)。例子如下:
名称 前缀 例子 阐明
System.Array o_arr o_arrUsers 顾客集合
System.Boolean o_bln o_blnDoesUserExist 顾客与否存在
System.Byte o_byt o_bytStreamContent 字节流内容
System.Char o_chr o_chrKeyPress 按键
System.DateTime o_dte o_dteCreatedDateTime 创立日期
System.Decimal o_dec o_decYearlySaleQuota 年度销售额
System.Double o_dbl o_dblTotalPrice 总金额
4.5 标签
标签就是用于Goto跳转代码标记,由于Goto并不推荐使用,因此标签使用也比较苛刻。标签必要所有大写,中间空格用下划线_代替,并且应当以_开头,例如:
_A_LABEL_EXAMPLE:
如此定义标签是为了与其她代码元素充分区别。
4.6 名字空间
普通,一种工程使用一种名字空间,普通不需要用Namespace语句,而是在工程选项“Root Namespace”中指定,使用根名字空间可以使代码更加整洁,容易修改,这一点是VB十足长处。名字空间语法是:
公司名.产品名[.组件名复数]
如: Namespace COM.NET
Namespace COM.File.IO.Files
随便起一种名字空间名字绝对不是一种好主意,一定要遵守上述规定。
4.7 格式化
良好格式化代码对咱们浏览与维护有相称好处。
4.7.1 块
.NET提供了#Region...#End Region块控制。咱们应当依照代码所实现功能分类并以块组织起来。
4.7.2 缩进
每个层次直接都应当以Tab进行缩进,而不是Space(空格键)。
4.7.3 流
每个办法、函数、属性、事件应当有且只有一种入口和一种出口。如果碰见多层嵌套而需要直接跳出时候,请使用局部Boolean或者Integer变量来标示用以多层跳出。如:
Private Function TestForReturn() As Boolean
Dim o_blnRet As Boolean=False
Dim i As Integer,j As Integer
For i=1 To 100
For j=1 To 10
If (x) Then
o_blnRet=True
Exit For
Else
End If
Next
If o_blnRet Then
Exit For
Else
End If
Next
Return o_blnRet ' '这里是唯一出口
End Function
4.8 注释
4.8.1 注释规范
1) 注释中,应标明对象完整名称及其用途,但避免对代码过于详细描述
2) 每行注释最大长度为100个字符
3) 将注释与注释分隔符用一种空格分开
4) 不容许给注释加外框
5) 编码同步书写注释
6) 重要变量必要有注释
7) 变量注释和变量在同一行,与变量分开至少一种“Tab”键
8) 典型算法必要有注释
9) 在循环和逻辑分支地方上行必要就近书写注释
10) 程序段或语句注释在程序段或语句上一行
11) 在代码交付之前,必要删掉暂时或无关注释
12) 为便于阅读代码,每行代码长度应少于100个字符
4.8.2 类(涉及Form等)、模块、组件、控件
每个类、模块、组件、控件最开始地方必要输入该对象信息,样例内容与格式如下:
‘*****************************************************************
‘* 对象名称:OnlineUpdateService
‘* 功能阐明:在线更新Web Services
‘* 创立日期:/08/27
‘*****************************************************************
普通地,咱们规定内容有:对象名称、命名空间、作者、功能阐明、创立日期、修改日期、修改记录,特别地,咱们规定修改记录应当详细论述近来修改。
4.8.3 办法、函数、事件与属性
每个办法、函数、事件与属性最开始地方必要输入该对象信息,样例内容与格式如下:
‘*****************************************************************
‘*名称:OnlineUpdateFileAddUpdate
‘*功能:添加更改更新信息
‘*创立:/7/31
‘*修改:/8/27
‘*****************************************************************
规定内容有:名称、功能、创立、修改等,开发人员可以进行更详细注释。
4.9 完整性
代码段完整性普通在单元测试时就能发现,完整性错误重要发生在如下流程控制语句中:
1、If...Else...End If
2、Select Case...Case Else...End Select
3、for ...Next
4.10 安全性
对也许发生错误代码段要进行错误捕获解决,惯用语法格式如下:
Try...Catch...Finally...End Try
展开阅读全文