软件工程管理与控制体系

1 软件开发流程

1.1 软件工作流程

为了便于对软件开发工作进行计划和控制,需要对整个软件开发的工作进行划分,抽象出几个相对独立的流程,它们分别是需求、分析、设计、实施、测试、部署、项目管理、配置与变更管理、环境支持 9 个工作流程,其中前 6 个为核心工作流程,后 3 个为附加流程,为前者更好的进行提供支持服务。每个流程都分别处理不同的工作,需要不同的技能。它们之间有明显的前后顺序。每个流程结束后都应做适当的评审,需求分析结束后必须做正式而严格的评审。

1.2 迭代式开发

对于大多数软件系统,都存在需求和设计风险,仅靠一次开发过程就能完成项目开发的期望是不现实的,为此,我们可以采用迭代式开发方法,把整个项目开发过程,预先划分成 2-5 次迭代开发过程,每次迭代时间不少于 1 个月,迭代次数因项目规模和复杂程度而异,每次迭代都需要经历以上 9 个工作流程,每次迭代都得到一个可运行的版本,都完成了一定的功能,规避了一些风险,直到最后一次迭代完成时,实现了所有的功能,得到了用户需要的最终产品。

迭 代式开发与传统的变更和恢复机制不同,前者承认需求和设计中必定存在风险,而主动划分多次开发过程尽早规避风险,后者力求需求分析和系统设计尽量准确,而 通过变更和恢复机制处理意外因素。二者处理问题的角度不同,各有千秋,对于需求复杂或技术难度大的系统,适合采用前者。

每一次迭代都应作为一个重要的里程碑,解决了重要的问题和规避了重大的风险,都要进行正式的复审。

 

1.3 阶段评审

    有 效的管理需要有效的检查和控制,没有控制的计划不成为计划。在软件开发的几个关键流程中都需要严格的检查和控制,也就是常说的阶段评审。阶段评审必须由关 键人员负责执行,切记开发人员自己评审,需求分析结束后,必须邀请用户参与评审,概要设计结束后必须邀请资深的系统设计师参与,如果没有足够的人员,项目 组之间可以交叉评审。最重要的是要重视评审,要保证评审有效。

 

 

 

 

2 软件工程角色

为 保障软件工程的顺利实施,建立合理的角色管理体系是整个软件工程管理中一个重要的方面。我们采用角色分工的方法,首先划清角色职责,在具体的项目实施过程 中为每位成员分配角色(根据项目规模和人员情况,可以一人兼多个角色和多人充当一个角色),以保证项目开发过程的各个环节责任明确、分工到人。角色数量与 公司规模和项目规模有关,一般设置为项目经理、需求分析工程师、系统设计工程师、高级软件工程师、软件编码工程师、测试设计工程师、测试工程师、软件支持工程师 8 个角色。

通 过划分软件工程角色,可以根据技术员的技能安排相关的任务,可以有目的的培训或招聘相关技能的人才,可以有重点的稳定高级人才,防止人员流动带来的风险。 我有什么类型的业务,我就需要什么样的人,而不是,我有什么样的人,我就做什么样的业务。如果没有明确的角色划分,就没有合理的职责分配,一个人几乎什么 都需要掌握(学习是有成本的),当他达到一定的水平之后,自然就追求更高的待遇,他具备高级软件工程师的水平,但我们更需要程序员,我们应该提供什么样的 待遇呢?我们需要什么样的人,我们就提供什么样的待遇。

在 传统的项目小组中,我们往往安排技术高超、经验最丰富的程序员做项目经理,这是一个误区,技术高超、经验丰富的人应该做系统分析和设计,他是技术专家,这 是他的特长,项目经理应该是一个管理、协调和客户关系专家,有时,二者可以是一个人,但决不是一个角色,在大的项目中,二者更应当分开。技术人员一般不善 于处理客户关系,很多项目的失败就是因为客户关系处理不好造成的。

     一个人到底是什么角色,是在项目中根据项目特点和个人技能临时确定的,并不一定代表一个人的能力和未来,是因事就人,而不是因人就事。

2.1 项目经理

l          负责制定并提报项目开发计划和迭代开发计划,负责项目小组成员的内部管理并对其工作进行绩效考核,其工作向技术中心经理负责。

l          根据项目开发计划,组织项目实施会议,安排及部署项目开发任务。

l          组织项目各阶段的阶段评审,并对各个阶段的进度和质量负管理责任。

l          管理、检查项目开发过程中的各个文档,管理并监督源代码、目标代码的交付工作,并按照软件配置管理的要求完成项目的配置管理工作。

l          按照项目进度表,保障项目小组内部各阶段的工作衔接。

l          协调好项目小组成员之间的关系,保证小组成员即时学习与了解与项目有关的技术要点,积极参与公司安排的科研活动和技术研讨活动。

l          在项目的售前、售中、售后加强与客户方主管人员的沟通、协调,维护良好的客户关系。

 

2.2 需求分析工程师

l          根据商务合同的要求积极与客户的业务人员联系,全面、深入、细致地了解用户的业务流程及软件需求。

l          按照需求分析规范的要求编制需求分析文档。

l          协助项目经理制定项目开发计划。

l          参与需求分析、概要设计等过程的阶段评审,从是否达到需求分析要求的角度提出评审意见。

 

2.3 系统设计工程师

l          根据需求分析结果及概要设计规范设计、编制概要设计说明。

l          保证概要设计的科学性、可行性,并与需求分析一致。

l          协助项目经理制定项目开发计划。

l          依照开发计划的要求保证设计进度。

l          参与需求分析、概要设计、详细设计等过程的阶段评审,从是否达到概要设计的角度提出评审意见。

 

2.4 高级软件工程师

l          根据概要设计结果及详细设计规范设计、编制详细设计文档。

l          保证详细设计满足概要设计对功能界定、可靠性、用户界面等各方面的要求。

l          依照开发计划的要求保证设计进度。

l          参与概要设计、详细设计、软件实现等过程的阶段评审,从是否达到详细设计要求的角度提出评审意见。

 

2.5 软件编码工程师

l          依照项目设计文档及项目经理的安排构造代码。

l          依照软件编码规范的要求保证软件开发的质量。

l          在模块开发过程中做好内部测试工作。

l          依照开发计划的要求保证开发进度。

l          依照软件编码规范做好代码注释。

l          参与相关模块的详细设计、软件实现、集成测试等过程的阶段评审,从是否达到软件实现要求的角度提出评审意见。

l          依照配置管理的要求做好源代码及目标代码的管理及交付工作。

l          协助软件支持工程师完成对用户的培训及售后服务。

 

2.6 测试设计工程师

l          参与项目开发的全过程,充分理解项目需求,了解概要设计和功能完成情况,并能对产品的结构及功能提出建设性意见。

l          根据产品需求及功能设计,进行测试设计,并按照测试计划规范设计、编写测试计划。

l          组织测试工程师 实施测试,对测试结果进行监督。

l          参与相关阶段评审,对测试设计负责,并对测试结果负管理责任。

 

2.7 测试工程师

l          按照测试计划的要求设计测试用例,并且实施测试。

l          按照相关规范要求编写测试日志及测试报告。

l          参与相关阶段评审,对测试的准确性、可靠性负责。

 

2.8 软件支持工程师

l          积极保持与客户方业务人员的联系,听取用户的意见,并保证与项目组的沟通。

l          参与阶段评审会及内部技术会议,并依据会议讨论要点及相应规范建立阶段评审和内部会议文档。

l          开发项目的“帮助”系统,依照用户手册规范编写用户手册。

l          协助项目经理做好项目配置管理工作。

l          对项目、产品进行后续跟踪,完成售后服务工作,对用户进行相应的培训及技术支持。

 

3 规范化开发过程文档

   为 了提高软件的可维护性,便于人员交流和项目复审,在软件开发过程中,应提供完备的开发过程文档,而且,所有的文档应保持统一的格式,可以根据项目规模对有 些文档进行取舍。每种文档都提供了固定的模板,而且,对文档内容做了提示和约束。随着项目经验的积累,可以适当修改和优化文档模板,从可复用级别到达的自 我完善级别。

   

已经提供的标准化文档如下:

l          项目可行性分析报告

l          软件开发计划说明书

l          需求分析说明书

l          概要设计说明书

l          数据库设计说明书

l          详细设计说明书

l          软件测试计划

l          测试日志

l          测试报告

l          工作日志

l          工作周报

l          会议记录

 

以上各文档的模板以独立文件的方式提供。

 

4 可复用型组织

传 统的软件开发组织采用项目小组制,签定软件开发合同后,公司临时成立一个项目小组,负责本软件项目的开发工作。从需求分析、系统设计到软件编码及系统测试 等工作全部由项目小组成员独立完成,在项目开发流程中,影响项目成败的关键因素是需求分析和系统设计,需要由经验丰富的技术人员从事,但公司中具有这种技 能的人往往不够,导致项目小组中无法进行职责分配,往往大家一块去调研、一块做设计、一块做编码,导致需求和设计风险较大、开发效率较低、开发成本较高, 软件质量得不到保证。鉴于这种情况,我们可以成立软件工程小组、技术支持小组和客户服务小组三个可复用的组织,他们分别从事不同的工作,由不同技能的人组 成,一个人可以参与多个组织。它们都为项目小组服务,并安排人员参与不同的项目小组,提供不同的技能,在某一方面可以做的更好。一个项目小组一般由软件工 程小组和客户支持小组的部分成员,以及几名程序员临时组成,项目结束后,项目小组也随即解体。

 

成立三个小组具有如下好处:

l          可以有目的的培养相关的技能和人才;

l          相关技能的人可以互相学习,共同提高;

l          可以有目的的稳定和留住人才;

l          各项目小组之间可以复用一些技术和经验;

l          便于组建低成本的软件编码队伍或开发基地;

l          便于实施规范化的软件工程管理和控制。

 

 

与 客户直接打交道的主要是市场部、软件工程小组和客户支持小组的成员,项目小组中的大多数人是不需要与客户接触的,可以采取在偏远地区建立软件开发基地或软 件加工合作伙伴的方式,降低开发成本。公司应该发挥自己的优势,做好市场工作,接更多的项目,然后做好需求分析和概要设计,并对软件开发过程进行严格的控 制即可。需求不稳定、不明确是影响该模式成功实施的关键因素,这可以通过两种途径加以克服:( 1 )需求分析工程师的经验,有经验的需求分析工程师,应该会听、会记、会引导、会分析,能够充分了解客户的业务流程;( 2 ) 客户有效的配合,多与客户沟通,做好客户关系,讲明利害,客户就会作好配合,让客户单位的技术人员参与项目小组(挂名),会起到事半功倍的效果。项目进行 过程中,项目经理要不断的与客户沟通,搞好客户关系,很多项目的失败,不是因为项目做得不好,而是因为客户关系没作好。

成 立共享小组并不意味着要加多少人员,只需要把现有的技术人员重新整合,用其所长,每个人都要在项目小组中工作,同一项目小组的人员可以有机会交流和沟通。 在开发过程中,遇到了问题可以直接请教相关的小组,营造一种合作、互助、高效的工作环境,有些问题你考虑了一天可能还没解决,别人可能 10 分钟就会解决。

 

5 总结

   项 目管理的目标是保证项目以较低成本按期完成,同时还要满足用户需求。因此项目管理必须围绕着费用、工期和质量三个要素进行。合理分工和技术复用是降低开发 成本的有效途径。工作流程划分和角色划分是合理分工的基础。成立软件工程小组、技术支持小组及客户支持小组可以对不同技能的人进行优化组合,实现有效的技 术复用。迭代式开发流程和制定开发计划是保证工期的有效途径。完善的需求分析、阶段评审、测试及统一的软件工程文档是保证软件质量的有效途径。

阅读更多
个人分类: MTK
想对作者说点什么? 我来说一句

软件需求工程及管理过程

2008年09月17日 4.66MB 下载

Java技术人员择业规划

2010年10月26日 2.32MB 下载

项目管理10大管理思维导图

2017年11月03日 1016KB 下载

门窗安装工程管理软件

2010年05月15日 126KB 下载

软件工程管理

2013年07月29日 9.44MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭