工程软件开发之团队开发规范FB_第1页
工程软件开发之团队开发规范FB_第2页
工程软件开发之团队开发规范FB_第3页
工程软件开发之团队开发规范FB_第4页
工程软件开发之团队开发规范FB_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.水利水电工程XXXXX辅助决策支持系统团队开发规范XXXXX设计有限公司二XXX年十二月.文档信息:文档名称水利水电工程XXXXX辅助决策支持系统团队开发规范描述该文档详细定义了团队开发的角色及职责、项目开发流程、开发过程控制的约定、协作开发的约定、代码版本控制、交流机制等负责人XX状态最终版文档变更历史:时间修改人章节描述2008-8-29XXX所有章节创建文档初稿2008-12-10XXX所有章节修改文档名称:团队开发规.doc审核结果:审核人意见签名档.目 录1团队组成11.1产品管理11.2项目管理21.3开发31.4测试41.5角色共享51.6开发小组51.7专家小组62开发流程7

2、2.1达成共识72.2完成项目计划82.3完成功能82.4稳定与发布83代码管理103.1编码规范103.2版本管理103.2.1概述103.2.2代码管理104附录:系统开发编码规范114.1类型级单位的命名114.1.1类114.1.2枚举和结构124.1.3委派类型124.1.4接口124.1.5模块134.2方法和属性的命名134.2.1方法134.2.2属性134.2.3事件134.3变量和常数144.4前缀154.4.1对象154.4.2变量/常量的范围154.5标签164.6名字空间174.7格式化174.7.1块174.7.2缩进174.7.3流174.8注释184.8.1注释

3、规范184.8.2类(包括Form等)、模块、组件、控件194.8.3方法、函数、事件与属性194.9完整性204.10安全性201 团队组成我们的整个软件开发团队由4种角色组成,分别为: 产品管理(Product Management) 项目管理(Program Management) 开发人员(Development) 测试人员(Test)各角色在团队的地位相当,各司其职。各个角色的具体目标、职能以及责任在以下的小节中进行详述。1.1 产品管理(1) 目标满足客户需求。产品管理的目标就是满足客户需求。一个成功的项目必须要能够满足客户和用户的要求。即使项目达到了预算和时间的目标,只要未能满足

4、客户需求,那这就是一个失败的项目。首先必须认清和理解客户。有时,使用方和投资方的目标需求并不完全相同,因此就需要清晰地区别和分析所有的需求。(2) 职能 市场 推动市场和公关,以对目标客户发生效用 突出产品与其他竞争对手的区别性,以利于竞争 分发解决方案,以便用户能够容易地获得 为用户提供支持,以使其无论在购买还是使用过程中都留下正面的印象 业务价值 定义并维护项目的业务正确性 定义并衡量业务价值的实现和评价 发展客户 推动项目和解决方案的远景目标 负责客户期望值和沟通 产品计划 收集、分析客户和业务需求,并区分其优先级 执行市场调查、市场开拓和竞争对手分析 确定业务和成功的标准 识别多目标的

5、发布计划1.2 项目管理(1) 目标在项目的约束条件下完成解决方案。整个团队的一个主要目标就是在项目的约束条件下完成项目。项目的约束条件包括预算和进度等。大部分项目会根据时间和资金的使用来衡量项目的结果。为了实现这个目标,项目管理负责并推动进度表、功能集和预算资金。他必须保证能够在正确的时间发布正确的项目或产品,保证正确理解了项目投资方的期望,并自始至终贯穿于项目执行过程中。(2) 职能 项目管理 跟踪和管理预算资金 管理控制进度表 推动风险管理流程 加强团队沟通和协调 跟踪进度和报告项目状态 管理资源分配 解决方案构建 推动整体项目设计 负责功能规范 负责解决方案范围和重要决定 流程控制 推

6、动流程质量控制 定义并推荐可改进处 管理服务 实现项目的管理流程并提供支持 提供管理服务以保证高效的团队运作1.3 开发(1) 目标按照功能规范说明、软件开发需求分析报告和总体结构设计的要求进行开发。功能规范说明详细描述了整个团队将要提供给客户的交付物。对整个团队来说,应该尽可能精确地按照功能规范说明来实现整个项目,因为功能规范说明可以看成是整个团队和客户之间所达成的共识。开发人员必须按照客户需求和功能规范说明来构建整个解决方案。同时,开发人员还需要为整个团队提供技术方面的咨询,这样在设计和技术选择时可以尽量减少开发风险。开发人员提供较低层次的功能设计,并预估完成设计所需的时间。 (2) 职能

7、 技术咨询 为团队提供技术咨询服务 评估并验证所用技术 积极参与功能规范说明的创建和审核 定义开发标准 实现架构和设计 提供针对解决方案的应用程序、数据和技术细节,以便将企业架构映射到解决方案架构的实现上 负责并实现解决方案的逻辑和物理设计 应用程序开发 根据设计规范编写代码以实现功能 在开发过程中进行代码审核,并共享知识和经验 在测试人员的帮助下,根据测试计划执行单元测试 架构开发 为自动安装开发脚本 开发安装文档1.4 测试(1) 目标在确认所有的产品质量问题都得到妥善处理后,批准产品发布。所有的软件产品在发布时都存在着缺陷。最重要的是,在发布前,必须清楚地认识和鉴别出这些问题,可以以问题

8、的形式给出解决方法,或者是给出如何绕开该问题的文档记录。宁愿对于已知的问题,提供了文档或解决方法,也不要存在一些未知的问题。因为这些未知的问题,可能会带来不可预知的后果。(2) 职能 计划测试 开发测试方法和计划 参与设置质量标准 开发测试说明 测试 开发并维护自动测试案例、工具和脚本 执行测试,以确定产品开发过程的状态 负责定义构造流程 测试报告 为团队提供与产品质量相关的数据 跟踪所有缺陷,并保证在发布前得到妥善处理1.5 角色共享尽管团队组成包含了4种角色,但并不意味着一个团队至少需要4个成员,也不意味着一个人只能承担一种角色,重要的是这4种角色必须在一个团队中体现。一般情况下,团队成员

9、常常共享角色。在一些较小的团队中,不同的角色只能进行兼任。角色共享有两条重要原则:一是开发组成员不能共享角色。开发人员是项目的构建者,他们不应该从他们的主任务中分身。如果对开发组成员要求额外的角色,往往会使得他们无法按时完成进度要求。二是不要试图组合具有一定利益冲突的角色。比如,产品管理和项目管理的利益具有冲突点,所以他们的角色不能组合。产品管理注重满足客户需求,而项目管理主要关心在时间和预算的限度内完成项目。如果这两个角色组合在一起,那么在需求发生变更时,可能会发生一些情况,诸如没有足够地考虑客户满意度而忽略该变更,或者是没考虑对项目的冲击盲目地接受变更。让不同的团队成员担任这样的角色有助于

10、确保每个方面得到相当的考虑和重视程度。同样,这也适用于组合开发人员和测试人员。1.6 开发小组开发小组成员组成姓名性别年龄职务/职称业务专业本项目分工所在单位1.7 专家小组姓名性别年龄职务/职称业务专业本项目分工所在单位专家小组负责系统开发过程中重要阶段的评审、导截流技术问题的解答和指导等。主要目标是保证系统的理论先进性、更好的满足客户需求和保障开发质量。2 开发流程在开发过程中,采用多里程碑式的过程模型,如图 1 所示。而其中每一个循环均包含四个里程碑。图 1 多里程碑模型这四个里程碑组成的循环放大后如图 2所示,称为“过程模型”。图 2 过程模型2.1 达成共识 基本完成需求调研和分析(

11、产品管理负责) 确定大方向和长中短期目标 所有角色都参与讨论并真正认同结论 产生的文档 常见用户情景:覆盖80%以上功能 前景:言简意赅地说明大方向,并有激励团队的作用2.2 完成项目计划 编写详细的功能规范(项目管理) 在编程前想清楚所有功能流程,并引导用户明确需求 所有角色都参与审阅功能规范 制订开发计划和进度表(开发团队) 制订测试计划和进度表(测试团队) 分配资源(人力和预算) 形成项目综合计划和综合进度表2.3 完成功能 开发人员分别完成自己的功能 进行版本合理的控制 对每一项可测试的功能进行测试,无需等待 通过测试用例,对功能进行完整和重复的检验 记录所有程序问题 实现解决缺陷的自

12、动流程 按照综合进度表不断检查进度2.4 稳定与发布 测试组全面地测试功能,包括性能和稳定性 开发组全力配合解决缺陷 监测质量情况 预测发布日期 专家会诊机制 决定缺陷的优先度 决定哪些缺陷可以在下个里程碑或版本中解决 决定由谁解决某个缺陷3 代码管理3.1 编码规范请参看附录,系统开发编码规范。3.2 版本管理3.2.1 概述版本控制有如下好处: 可以获得连续的受版本控制的项目,并保存不同版本的区别以作比较 能获得版本控制工具中保存的任何版本 能够把出错或误操作的最新版的项目恢复到正确的历史版本 获得历史版本的详细信息在开发过程中,核心程序员对版本进行控制、对系统源代码进行集中管理,并做好程

13、序的备份和保密工作。3.2.2 代码管理核心程序员根据系统结构设计和详细设计,对系统实现的功能进行分解,将实现各功能的小模块分配给项目组的开发人员,并事先设计好各模块的接口。开发人员根据接口要求进行编码。编码完成后进行单元测试。单元测试由开发人员完成。单元测试后开发人员将本部分模块代码上交给核心程序员,核心程序员负责加入模块后的系统测试。系统的全部代码由核心程序员管理,其它开发人员负责配合进行各模块的开发。4 附录:系统开发编码规范在开发中保持良好的编码规范是十分重要的。程序开发人员应该严格遵循系统开发编码规范进行编码。4.1 类型级单位的命名 4.1.1 类在为类(class)命名前首先要知

14、道它是什么,如果通过类名的提供的线索,你还是想不起这个类是什么的话,那么你的设计就还做的不够好。超过三个词组成的混合名是容易造成系统各个实体间的混淆。对于派生类的命名应该避免带其父类名,一个类的名字只与它自身有关,和它的父类叫什么无关。1 类命名以Class声明的类,都必须以名词或名词短语命名,使用大写字母作为词的分隔,其他的字母均使用小写,名字的首字母使用大写不要使用下划线( _ )。如: Class Indicator 当类是一个特性(Attribute)时,以Attribute结尾,当类是一个异常(Exception)时,以Exception结尾,如:Class ColorSetExce

15、ption Class CauseExceptionAttribute 当类只需有一个对象实例(全局对象,比如Application等),必须以Class结尾,如:Class ScreenClass Class SystemClass 当类只用于作为其他类的基类,根据情况,以Base结尾:MustInherit Class IndicatorBase 如果定义的类是一个窗体,那么名字的前面或后面必须加Frm。在本系统编码中,对于前处理和处理器模块使用的窗体,在名字的后面加后缀Frm,在后处理模块中使用的窗体在名字的前面加前缀Frm。如果是Web窗体,必须加后缀Page: Class Print

16、Frm : Inherits Form * Windows窗体Class StartPage : Inherits Page * Web窗体2 类库命名目前命名空间正在越来越广泛的被采用,以避免不同厂商和团体类库间的类名冲突。当未采用命名空间的时候,为了避免类名冲突,一般的做法是在类名前加上独特的前缀,两个字符就可以了,当然多用一些会更好。例如: John Johnson的数据结构类库可以用Jj做为前缀,如下:class JjLinkList 4.1.2 枚举和结构同样必须以名词或名词短语命名。最好体现枚举或结构的特点,如:Enum ColorButtons 以复数结尾,表明这是一个枚举 St

17、ructure CustomerInfoRecord 以Record结尾,表明这是一个结构体 4.1.3 委派类型 普通的委派类型以描述动作的名词命名,以体现委派类型实例的功能: Delegate Sub DataSeeker (ByVal SeekString As String)用于事件处理的委派类型,必须以EventHandler结尾,如:DelegateSub DataChangedEventHandler(ByVal Sender As Object, ByVal e As DataChangedEventArgs) 4.1.4 接口与其他类型不同,接口必须要由I作为前缀,并用形容词

18、命名,突出表现实现接口的类将具有什么能力: Interface ISortable 4.1.5 模块模块不是类型,他的名称除了必须以名词命名外,必须加以后缀Module: Module SharedFunctionsModule上述所有规则的共同特点是,每个组成名称的词语都必须是大写开头,禁止完全大写或小写的名称。4.2 方法和属性的命名 4.2.1 方法最好采用与类命名一致的规则,无论是函数还是子程序,方法都必须以动词或动词短语命名。无需区分函数和子程序,也无需指明返回类型。 Sub Open (ByVal CommandString As String) Function SetCopyN

19、umber (ByVal CopyNumber As Integer)参数需要指明ByVal还是ByRef,这一点写起来会让程序变长,但非常必要。如果没有特别情况,都使用ByVal。参数的命名方法,参考后面“变量的命名方法”。需要重载的方法,一般不写Overloads,根据需要编写重载方法。4.2.2 属性原则上字段(Field)是不能公开的,要访问字段的值,一般使用属性。属性以简洁清晰的名词命名: Property Concentration As Single Property Customer As CustomerTypes 4.2.3 事件事件是特殊的属性,只能在事件处理上下文中使用

20、。命名的原则一般是动词或动词的分词,通过时态表明事件发生的时间: Event Click As ClickEventHandler Event ColorChanged As ColorChangedEventHangler4.3 变量和常数常数以表明常数意义的名词命名,一般不区分常数的类型: Const DefaultConcentration As Single=0.01在严格要求的代码中,常数以c_开头,如c_DefaultConcentration,但最好不要用它,它会带来输入困难。普通类型的变量,只要用有意义的名字命名即可,不可使用简称和无意义的名称诸如A,x1等,下面给出了良好的例

21、子: 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对于控件,应该指明控件的类型,方法是直接在变量后面加

22、以类名: Friend WithEvents NextPageButton As Button * 按钮 Friend WithEvents ColorChoicerPanel As Panel * 面版Friend WithEvents Card As * 文件打开对话框等等,无需规定某种类型的变量的前缀,只需把类型写在后面就行了,试对比下列代码: btnCancel.Text = &Cancel CancelButton.Text = &Cancel显然后者更能使阅读者明白变量的类型是一个按钮。4.4 前缀 4.4.1 对象 1 标准对象名称 前缀 例子 说明 System.Array a

23、rr 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

24、 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 sdrUs

25、erData 用户数据读取器 2 自定义对象我们规定应该根据自定义对象的名称来确定该对象类型的前缀,例子如下:对象:SysSet前缀:ss例子:ssSafety4.4.2 变量/常量的范围根据变量与常量的生存周期,我们应该定义不同的生存周期前缀以示区别,以便我们清楚该变量/常量的范围。 1 类、模块、组件、控件我们规定在类、模块、组件、控件范围内,变量的生存周期前缀应该添加“m_”(Module模块)。例子如下:名称 前缀 例子 说明 System.Array m_arr m_arrUsers 用户集合 System.Boolean m_bln m_blnDoesUserExist 用户是否存

26、在 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 外部功

27、能 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

28、 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 名字空间通常,一个工程使用一个名字空间

29、,通常不需要用Namespace语句,而是在工程选项的“Root Namespace”中指定,使用根名字空间可以使代码更加整齐,容易修改,这一点是VB十足的优点。名字空间的语法是:公司名.产品名.组件名的复数如: Namespace COM.NET Namespace COM.随便起一个名字空间的名字绝对不是一个好主意,一定要遵守上述规定。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_blnRetAs Boolean=False Dim i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论