前言:想要写出一篇令人眼前一亮的文章吗?我们特意为您整理了5篇项目开发的流程范文,相信会为您的写作带来帮助,发现更多的写作思路和灵感。
第一部分,开发项目的筹备工作
在报行政机关审批之前,房地产开发公司应办理好土地用地手续,根据项目规模和性质,委托具有相应项目资质的勘察设计单位对拟建项目进行研究,并制作报告书,应附有详细的规划设计参数和效果图。
第二部分,行政审批部分
根据我国现有建设,房地产建设项目的行政许可程序一般可分六个阶段:1)选址定点;2)规划总图审查及确定规划设计条件;3)初步设计及施工图审查;4)规划报建图审查;5)施工报建;6)建筑工程竣工综合验收备案。
一、选址定点
1、项目立项,国家计划管理机关和有关政府机关审查可行性研究报告,进行项目立项的审批。
2、国土资源局进行土地利用总体规划和土地供应方式的审查。
3、建委办理投资开发项目建设条件意见书。
4、环保局办理环境影响评估,出具生产性项目环保意见书。
5、文化局、地震局、园林局、水利局对建设工程相关专业内容和范围进行审查,签署相应的意见。
6、规划部门办理项目选址意见书。
二、规划总图审查及规划设计条件的确定
1、人防办进行人防工程进行条件审查。
2、国土资源局进行土地预审。
3、公安消防支队、公安交警支队、教育局、水利局、城管局、环保局、园林局、文化局对建设工程相关专业内容和范围进行审查,签署意见。
4、规划部门对规划总图进行评审,核发《建设用地规划许可证》,并确定用地条件。
三、规划设计和施工图设计审查
1、规划部门对初步设计根据已审批的规划要求进行审查。
2、公安消防支队对初步设计的消防设计条件进行审查。
3、公安局交警支队对初步设计的交通条件进行审查。
4、人防办对初步设计的人防设计进行审查。
5、国土资源局进行用地预审。
6、市政部门、环保局、卫生局、地震局等相关部门对初步设计涉及的专业内容进行专项审查。
7、建设管理机关对落实初步设计批准文件的要求向施工图进行审查。
四、规划报建审查
1、公安消防支队和人防机关进行消防设计和人防工程进行审查。
2、建委、市政部门、园林局、环保局、卫生局按职责划分,按有关专业技术规范对相关专业内容和范围进行审查。
3、规划部门复核经要求变更部分的规划设计补充核准规划设计条件,核发《建设工程规划许可证》。
五、施工报建登记
1、建设单位办理施工报建登记。
2、建设方对工程进行发包,确定施工队伍。招标类工程通过招标确定施工队伍,非招标类工程直接发包。
3、建委组织职能部门对工程开工条件进行审查,核发《建筑工程施工许可证》。
六、商品房预售许可的行政审批
向房地产管理部门办理预售登记,核发《商品房预售许可证》。开发企业申请办理《商品房预售许可证》应当提交下列证件(复印件)及资料:
1、以下证明材料:
(1)土地使用权证书;
(2)建设工程规划许可证和施工许可证;
(3)按拟预售的商品房计算,投入开发建设的资金达到工程建设总投资的25%以上,并已经确定施工进度和竣工交付日期。
2、开发企业的《营业执照》和资质等级证书;
3、工程施工合同;
4、商品房预售方案。预售方案应当说明商品房的位置、装修标准、配套设施、竣工交付日期、预售总面积、交付使用后的物业管理等内容,附商品房预售总平面图、分层平面图。
七、建设工程竣工综合验收备案
1、建筑工程质量监督站(机构)对建设单位提供的竣工验收报告及相应需提供的验收证明文件进行备案审查。
2、规划部门、市政部门、水利局、环保局、文化局、卫生局、公安消防支队、园林局以及其他需要参加验收的部门,按照、法规、规章的有关规定对相关专业内容和范围进行验收。
3、建委综合各部门验收、审查意见,对符合审核标准和要求的,出具建设工程项目竣工综合验收备案证。
第三部分 项目权属初始登记阶段
1、由房管局核准新建商品房所有权初始登记。
2、开发商应提交材料:
(1)申请书;
(2)企业营业执照;
(3)土地使用权证;
(4)建设用地规划许可证;
(5)建设工程规划许可证;
(6)施工许可证;
(7)房屋竣工验收资料
(8)房屋测绘技术报告;
软件开发项目管理从最早的传统项目管理软件工程期到近年的迭代模型时期,最后到目前的敏捷软件开发时期。敏捷软件开发的成功五项因素分别如下。
(1)建立自组织团队。传统的管理方式具有命令和控制的特点,经理制定目标和计划,团队负责完成,发挥不出员工的创造力,影响了企业的效率。软件开发的敏捷开发要求员工自我管理,个人控制时间和目标,员工能参与流程和项目决策。
(2)用户故事在需求管理中的应用。软件开发企业最大的敌人不是用户,而是变化。瀑布模型难以适应目前软件市场需要,因此软件开发工作要取得用户的参与,顺应市场的变化。
(3)用户故事的度量,它能为产品投资收益提供估计结果,辅助产品决策。对故事点大小讨论时,能鼓励团队成员重复讨论,充分理解需求。故事点度量方式一致,提高统计团队工作效率。
(4)持续集成。它能提高项目构建自动化程度,将人力成本更多投放到开发任务。项目更有可见性,构建结果更加丰富,一目了然。团队对开发产品更有信息。
(5)掌握迭代,为员工提供稳定的生活节奏,保持一致的周期循环流程,沟通过程中控制时间。
(6)坚持反馈和改进,了解自身情况,改善团队效率。
精益生产的目标为提高质量和消除消费。看板原则要求生产降低库存量、降低生产周期、生产基于交叉培训和单元并对过程进行持续改善。如同超市进货一样,当货架上货物少于设定值,供货商会及时将其填满。将看板管理与敏捷软件开发结合起来,能够达到效率和质量的有效结合,软件产品周期频繁,能达到按天级别。
2.项目看板方法流程设计
增量迭代开发开发流程存在着三点问题。
(1)每个迭代的用户故事较多,产品经理和开发工程师认为很多功能没有价值,而项目经理认为需要跟踪的项目较多。
(2)对于为期四周的迭代观念不统一,部门不同,期望值不同,测试人员认为时间不充分,产品经理认为需要等待太长时间。
(3)部门之间缺乏协作,缺乏透明的项目进展和进度,太多时间花费在流程上。敏捷软件开发有三个典型流程,分别XP、Scrum及看板,经过比较,看板原则可以解决迭代用户故事较多的情况,对于规模小及优先级别高的用户故事能够迅速完成,并满足产品经理对产品的预期。
2.1 基于看板管理的敏捷软件开发流程方案设计
看板一般应用于汽车生产等工业领域中,在敏捷软件开发中看板管理只是理论上行得通,但是在实际上还缺乏经验。而且其受到产品特点、客户差异及企业文化的影响。其流程主要为,(1)定义并可视化流程;(2)限制WIP数量,流程可视化于物理板能够让项目透明,让团队对目前的任务充分明确。限制WIP数量则能让团队在思考时排除千扰,提高个体效率,项目工作不以来时间计划,而是取决团队能力;(3)拉动式生产,每个团队成员只需要对自己环节加以关注,等待任务-完成工作-到下一环节等待区^这种方式推动了产品开发前进步伐。
2.2 看板流程准备和实施
(1)是动员和人员培训,先获取领导层的理解和信任,再向所有员工培训敏捷开发和看板方法,最后,每个部门进行讨论。
(2)制定需求管理环节,产品经理提出产品需求,创建用户故事,技术团队估算用户故事工作量。通过需求分析,工程师能够获取信息,完成研发工作,产品经理全程辅助开发和测试,解答相关问题。
(3)开发流程改造,主要变化在对程序代码的管理方式进行改变,主要有主干和分支两种。
(4)测试流程改造,主要表现为两个方面,一方面提高系统自动化测试率来加快回归测试的进度,另一方面增加测试环境满足功能测试需求。
(5)项目管理流程的建立。
2.3 看板流程的实施
当所有准备工作完成之后,看板方法第36增量迭代之后,可以正式实施。产品经理将用户故事进行排列再制成任务卡,贴在用户故事一列,完成需求分析会议。开发组建立功能分支进行开发,测试组应用功能测试环境对用户故事进行测试,直到产品。团队成员每天早上聚集看板附近,明确自己的任务,下班前,项目经理将每天的任务卡状态变化汇总。敏捷流程要求强调团队自组织和员工自我管理,但是不可忽视项目经理的作用,项目经理能够组织人员,梳理工作节奏,保证沟通流畅,促进项目进展。
3.看板方法效果分析
[关键词]软件项目;设计管理;流程
[中图分类号]TP31 [文献标识码]A [文章编号]1672-5158(2013)06-0076-01
1 何为流程及在软件项目管理中的作用
1.1 软件开发的目的
在进行软件项目开发活动中,要实现很多目标,比如关于项目的范围、成本、时间以及质量等,项目协调也是要完成的目标。项目协调可以满足项目参与者和利益相关者的要求,伴随软件规模和它所涉及领域的扩展,软件项目管理变得越来越复杂,大大的增加了管理难度,造成这结果的主要因素是不能管理其过程如果管理项目在无纪律混乱的情况下,那么项目组织就很难总结出好的管理方法和工具,就更不用说从中获益了。管理严谨的好处不仅能够就检查和改进在阶段内出现的偏差,还可以及时的终止项目。甚至还可以避免人才的来去带来的负面影响。如果想要有效的对过程进行控制,就不得不对项目管理流程更加明确。
1.2 软件项目的构成
一系列活动有机构成流程。而个人与团体构成基本活动,基本活动的构成不需要来自其他活动的转换。流程的每个活动间都有着自己的独有的流向,在流程过程中包含着明显的开始与结束,所以这是一个非静止的概念。从结构方面可以看出,流程由四个基本因素构成:活动及活动的逻辑关系、承担着、实现办法。流程管理所包含的不但有管理技术,还有现代管理的理想,以前的职能管理凭借的是控制、塔式组织。但随着时间的推移其已经不能适应市场竞争和当今企业的发展需要,以分工理论为主的管理理论已经使用了几百年,目前又返回到系统和整合上面。
1.3 软件项目生命周期的一系列的开发过程是各种各样的流程活动
软件项目是由各种各样活动流程活动组成的,具体包括如下,软件项目的计划编制、系统分析、概要设计、详细设计、程序编码、测试与维护等活动过程都属于流程活动:制定软件项目管理流程,当我们在制度项目管理流程过程中,要着重考虑一下几点:(1)流程的制定可以将项目逐步引至成功,(2)流程的制定可以适应软件的开发,(3)流程的制定对项目开发可以起到指导作用,(4)流程制定是使用流程图表示的,可以让每个参与者都能够清楚的明白管理过程与开发过程之间的关系,(5)流程过程中的参评要有明确的定义、标准和方法。
2 软件项目管理大体过程设计
2.1 软件项目管理的构成
软件项目管理过程大体可以分为以下几部分:项目构思、项目立项、签订合同和执行合同。可以使用P1、P2、P3、P4、P5代替。同时也可以划分为五个里程碑,分别是:完成立项、签订合同、定义功用、产品开发、投入市场,可以用TM1、Tm2、Tm3、TM4、TM5代替。
2.2 软件项目管理的流程分析
项目管理的大体流程分析,项目搜寻是项目开始的前提,其阶段主要任务包括收集市场信息、客户需求、以及潜在的需求。项目立项阶段就是可行性的研究阶段,就是讨论成本与效益的可行性。项目售前阶段是项目立项与签订项目合同的这段时间,主要任务包括以下几个方面:做好与客户介绍交了的计划、对产品的销售对象要有一个比较全面的了解以及客户对项目感兴趣的原因和对产品的要求。合同生成阶段要做的是对项目方案的比较与相关的政策法规的认识,以及对合同的评估以及签订合同。合同执行阶段是项目管理流程的重要环节,主要包括软件的开发、测试、验收、系统的维护等过程。
3 软件项目失败的原因和软件项目管理方法的探究
3.1 软件项目失败的原因
我们可以从目前国内外的软件行业企业可以看出,“软件危机”的影响仍持续着软件行业。软件项目的实施情况也总是很难令人满意。经过研究发现,软件项目之所以会失败的原因主要有以下两方面:一是应用项目发展难以控制;二是项目管理者对项目管理工作的认识掌握还不成熟。实践证明,缺乏有效的项目管理是致使软件项目失控的直接原因。
3.2 制定项目的任务
软件项目计划的主要作用是用来协调其他计划的,协调的目的是为了指导控制和执行可操作文件。它这是对客户需要的理解表现,是开展项目活动的开始,也是开展其他工作的依据,项目计划由全局计划和下属计划构成。在下属计划制定时,项目经理必须遵循的原则是:谁负责那一部分工作,那部分的计划就有谁来制定,项目经理只需审批就行。
3.3 开发过程的制定
软件开发之所以存在较大风险,最主要原因是软件过程能力低,这是因为管理软件过程十分困难,为此就非常有必要在软件过程的控制和管理方面加强。不同的软件项目有着不同的过程,虽然项目计划与执行是互相交叉的,其主要部分是相似的,但是不同的项目的每个过程它所包含的具体活动是差之毫厘谬以千里,而且由于不同的制定者所使用的开发技术和技术路线的不同,所导致的侧重点就不可能相同了。项目经理在计划制定前就必须根据开发软件的实际情况,建立一个稳定性好、可控的软件开发模型。
3.4 加强过程控制
软件项目的开发和实施总是处于动态之中,这种动态是持久的、永恒无止境的,世上不存在静止的软件项目。需求、技术、系统结构、代码都会发生变化,就算是连环计都会发生变化,项目经理在做好了计划和准备后,最重要的任务就转换到过程的控制上来了。过程管理和变更控制是过程控制的主要部分。配置管理是一个软件项目能否顺利执行的前提。在软件开发过程中比如会出现很多的附加产品,比如代码、一系列文档、数据等等,这些产品是有用的。而且随着软件项目的改变这些产品都会发生变法生产出不同的版本,试想一下,如果配置管理失效,项目工作人员势必会深陷配置项的“泥潭”。很明显我们应该加强项目过程的任何部分细节。
4 结束语
在本文设计的软件项目管理总体流程及相关技术,目前已经十分成熟了,在软件项目的研发和管理中已经大量的采用了。流程管理在软件项目管理中的使用,降低了软件项目管理的复杂性,增加了软件项目的成功率。事实也证明,根据企业和项目的实际情况,制定软件项目的实施步骤,确定产品的用处,指明各阶段的开始条件和终止条件,进行有效的流程控制与管理,这样将会极大的提高了软件开发的效率和降低项目的失败率。
参考文献
[1]罗铁清,王如龙,软件项目管理的研究及在项目开发中的应用,项目管理技术2005,3:66-70
[2]刘宽宏,殷人尾,基于GMMI的过程和产品质量保证模型,计算机工程,2004,30(15):75-77
【关键词】项目带动 软件蓝领
1.前言。我国软件行业已形成较大的规模,软件行业的从业机会逐年递增,而处于软件人才金字塔结构底部的“软件蓝领”更是需求巨大。面对强大的市场需求,如何才能培养出符合要求的“软件蓝领”以适应市场的需求呢?运用“项目带动式”教学可更好地培养出“软件蓝领”。
“软件蓝领”是指进行软件开发工作的初级技术人员,主要从事比较基本的程序代码编写、调试、测试等重复性的工作,一般对外语和技术水平要求较低,但需要有一定的实践经验。因为软件行业的发展速度快,新的知识、新的技术、新的工具不断出现,所以还需要“软件蓝领”有较强的更新知识的能力。
“项目带动式”教学是指围绕项目开展学习的一种教学模式,本质上是一种应用(或仿真应用)驱动,是一种软件教学的互动。项目为中心的学习模式,既让学生学习到软件开发知识和技能,使学生对软件开发具有一定的工作经验,使之易于适应工作后的软件开发环境;还将在编写软件的过程中,培养学生的自主学习能力和群体协同的能力,培养学生的责任心和完成项目的决心。这种教学方式适合“软件蓝领”的培养,尤其适合在职业技术院校中采用,可以很好地让学生在完成项目的同时掌握基础知识,培养其自学新知识、新技术的能力。
2.软件“项目带动式”教学的概念与特点。软件“项目带动式”教学模式,围绕“软件蓝领”职业岗位能力的形成、科学设计和选择项目,根据特定的完整的软件工程项目所需要的知识、能力和素质结构,进行教学方案设计,按照软件工程项目的操作流程组织实施教学,使学生在项目开发的过程中,获取知识和经验,达到人才培养的目标。项目是指具体的软件工程项目或软件生产项目,可以是模拟的项目,也可以是具有实战性质的项目。项目是人才培养的核心要素,具有完整的流程,贯穿于人才培养的始终。学生在项目实施中学习知识,锻炼技能,掌握技术,提升职业素养,实现培养目标。
软件“项目带动式”人才培养模式的特点是将教学过程与软件项目工程充分地融为一体,围绕项目工程的需要构建课程体系,组织实施教学,有利于瞄准岗位设课程、瞄准能力搞教学,提高教学的针对性和实效性;在项目工程的具体实施过程中学生根据自己的兴趣和特长,重点选择不同的职业岗位、扮演不同的角色,学习目的更明确、针对性更强,有利于学生个性的培养,也为学生未来的择业奠定良好的基础;以具体工程项目或生产项目带动教学,使整个教学过程能始终贴近生产第一线,学生可以及时了解行业的发展趋势,掌握最新的设计理念、管理理念和工程施工技术。学校可以更准确地了解市场对人才的需求状况,及时主动地调整教学内容。改革教学方法,使培养的人才具有更强的社会适应性和就业竞争力。将专业教育融入行业背景,有利于学校专业教育与市场行业运作的衔接,有利于实现学生与行业、与社会的“零距离接触”,真正实现职业技术教育以需求为宗旨,以就业为导向,产学研相结合的教育理念。
3.“项目带动式”教学的实施步骤。
3.1 以项目带动教学的教学目标。从企业的实际需求出发,中职“软件蓝领”需要掌握的技能主要有两种:
3.1.1 必备技能。包括:
①基本理论知识技能,包括计算机基础知识、数据结构和算法、操作系统知识、工具软件、测试软件;
②网络知识技能,包括网络基础、综合布线系统知识;
③计算机程序设计语言知识,至少包括一种计算机编程语言,例如C、C++、JAVA等;
④软件设计开发工具,包括Visual Studio、Jbuilder等;
3.1.2 附加技能。包括:
①软件工程与项目管理知识,包括CMM流程、PMP(项目管理)相关知识、软件开发模型。
②团队沟通协作能力。
针对这些教学目标去选项目,在完成项目的情况下带动教学内容的学习。
3.2 以项目带动教学过程的实施。项目将贯穿整个教学的始终,在完成项目的过程中学习知识,在学习的同时完成项目,理论教学和实践教学同步进行,相辅相成。
理论教学的进行要结合具体工程项目进行讲解,引导学生分析、讨论,获取知识,提高解决实际问题的能力。通过教学,使学生明了所学知识为何种工程项目(或生产项目)的实施服务,对培养何种能力有效。提高教学的针对性,调动学生学习的积极性,实现理论教学与工程实践的有机融合。
实践教学的进行需先筛选项目,项目选择与教学时间和进度相关,通常选择难度适中、对开发技能要求较低及工作量与教学时间相吻合的项目。这里以使用VC开发一款类似计算器功能的软件为例详细说明“项目带动式”教学的实施步骤。
首先由教师制定和本项目的工作流程和工作计划。
通常软件项目的工作流程如下,这些工作流程可参考软件成熟度模型(CMM)。
①计划制定;
②需求分析;
③软件项目开发;
④软件项目测试;
⑤版本;
⑥版本结束。
接下来按照项目要求进行角色配置。一般软件工程相关的人员包括项目经理和开发人员。项目经理可以由老师兼任,老师同时负责对项目方案总体的把握。在这个项目中,根据功能可分为界面和计算两个部分,可以据此将学生分为两个小组,称为A组或称界面组和B组或称计算组。每个小组确定一位小组长,负责对各组组内的工作内容和工作计划进行跟踪和汇总。另外一个重要角色是项目配置管理员(CMO),负责对软件产品本身涉及的工具,配置物料进行归档管理。
接下来按CMM流程开展项目。在“项目带动式”教学中,教与学的相辅相成主要体现在如何解决项目进行过程中的难题。项目本身是有很强的目的性的,真正的项目要求必须按照规定的进度,符合要求的质量进行交付。学生和老师必须在项目进展过程中想很多办法,不断提升个人的技能,才能保证项目成功完成。在项目开展过程中,将暴露出众多问题,而圆满地解决这些问题,既可以锻炼学生的动手能力,独立解决问题能力,还可以增强学生适应项目环境的能力,更重要的是,可极大的鼓舞学生的信心。
通常项目开发中主要的问题可以分为以下几类,针对性地解决这些问题,将可以最大限度的发挥“项目带动式”的优势。
①学生基础知识不扎实的问题。学生对项目涉及的基础知识掌握不够,无法满足项目开发的所有知识点需求。此时教师应启发学生进行相互学习和培训,或者引导学生主动去寻求这些知识进行自学。即教师应力避直接告知正确方式或结果,而是通过引导,“授之以渔”。对于学生反馈较多的问题,说明这是较普遍而又必须克服的,则教师可以提前将相关材料准备妥当,结合当前项目进行充分说明,以保证项目的进度和质量不受影响。
②项目小组间的团队合作问题。较中等的项目都可以分为多个项目小组,各自完成项目一部分功能,最后汇总为单一软件。教师在划分项目小组时,须充分考虑到人力与工作量的问题。较单独的项目功能可独立为小组,各小组间接口尽量要简单明确,防止因为接口问题产生的内耗。
③项目质量问题。教师在项目的早期应引导学生重视测试问题。“项目带动式”方法较重视学生动手能力培养,并应兼顾项目开发的质量评估,以确保学生在项目实施中收到良好的训练。教师可以在项目开发前期指定一到两位学生参与测试计划的写作和测试用例的写作。他们可以是各小组中开发人员,也可单独出来,仅做测试。教师参考测试学生的测试结论,对项目进行评估,甚至可以对项目小组直至每位负责开发的学生的工作进行评估。
在克服了上述诸多问题后,“项目带动式”教学一般会取得成功。由于软件项目基本不需要场地,又不会造成较多的人员花费,软件项目本身已经有较成熟的开发管理流程(例如CMM模型),又有较多的知识获取渠道,如网络、开源社区、其他知识共享体系,因而将“项目带动式”教学应用于软件项目,应用于“软件蓝领”人员的培养中,比较便利,易于规范化,是教学法的一种新的应用,更有利于填补我国软件人员的缺口。
4.运用项目带动教学模式培养软件蓝领注意事项。
4.1 适当的项目决定了该教学模式的成败。项目是“项目带动式”人才培养的核心要素,必须妥善选择。软件开发项目可大可小,需要根据教学环境综合考虑,包括计算机资源、学生本身已经具有的软件开发素质、学生人数等。必须准备有一定难度,通过努力可达成质量要求的项目,尤其是具有实战性质的项目,因为这种项目还可以通过互联网,获得认可,更加有利于总结经验获取信心。软件项目的获取,可来自本校的实际需求,例如排课表,排座位等软件开发;可以从校企合作中获取;可在互联网上获取一些适当需求,作为仿真开发的输入。
4.2 科学的设计项目开发流程。项目开发流程设计的恰当与否,直接关系到学生对知识的掌握,关系到专业培养目标的实现。设计项目流程时应注意:
4.2.1 项目流程要覆盖多角色,保证学生深入了解角色配置。项目开发不能仅包括一到两个流程,必须涵盖整个的软件开发流程,使学生对各个流程中工作任务有较好的理解,加强学生对软件开发团队的理解。
4.2.2 项目流程要明确,开发计划尽量详细完整。每个项目开发的关键步骤(称为里程碑)需要在项目开发时即制定下来,并到每一位项目参与者。教师的工作环境犹如“作战室”,跟踪项目的进展,适当的调整工作计划等等,都需要及时开展并到各角色。
4.2.3 项目的安排要照顾学生的接受能力,需循序渐进。当学生对项目缺乏了解时,需培训学生的相关知识;当学生对项目理解出现偏差时,需强调项目的特点,引导学生纠正偏差。项目流程中复杂的部分,需分解到每个开发阶段,避免学生不知所措。
【关键词】CMMI;软件过程;项目管理
一、CMMI概述
CMMI(Capability Maturity Model Integration),英文的意思是”能力成熟度模型集成”。由卡内基.梅隆大学的软件工程协会(Software Engineering Institute,简称SEI)在CMM的基础上完善而成,目的是通过一个合理的体系模型来对软件组织开发能力进行合理有效的评估,帮助软件组织在模型实施的过程中提高软件过程管理能力,降低软件系统开发风险,在预定的项目周期和预算内开发出高质量的软件产品。并且充分考虑了软件工程与系统工程的集成,使得CMMI不再局限于纯粹软件的范畴。
二、CMMI模型概要
软件开发的风险之所以大,是由于软件过程能力低,其中最关键的问题在于软件开发组织不能很好的管理其软件过程,从而使一些好的开发方法和技术起不到预期的作用。而且项目的成功也是通过工作组的杰出努力,所以仅仅建立特定人员上的成功不能为全组织的生产和质量的长期提高大下基础,必须在建立有效的软件工程实践和管理实践的基础设施方面,坚持不懈地努力,才能不断改进,才能持续的成功。
CMMI提供了一个框架,将软件过程改进的进化步骤组织成5个成熟等级,为过程不断改进奠定了循序渐进的基础。表1给出了CMMI-SE/SW 1.1 Staged Representation模型概要,5个等级各有其不同的行为特征。不同等级组织的行为特征:即一个组织为建立或改进软件过程所进行的活动,对每个项目所进行的活动和所产生的横跨各项目的过程能力。
以下是5个等级其不同的行为特征:
初始级:在成熟度第一级中,过程通常是特殊而混乱的,而且组织通常没有提供稳定的环境。这些组织的成功,往往依赖组织成员的能力与英雄主义,而不是使用一套经过验证的过程。除了特殊、混乱的环境之外,成熟度第一级的组织也经常会产生可运行的产品和服务,不过它们经常会超过项目的预算和进度。成熟度第一级组织的特征有过度承诺的倾向、在紧急关头放弃过程,以及无法重复成功经验。
已管理级:在成熟度第二级中,组织已达到成熟度第二级所有过程域的特定及共性目标。换言之,组织的项目已确保需求是被管理的,而且其过程是经过规划、执行、度量及控制的。在处于压力的期间,成熟度第二级所反映的过程规范,可提供协助以确保现行的实践会保持不变。在这些实践适宜的情况下,项目的执行和管理,就按计划进行。在成熟度第二级,需求、过程、工作产品及服务是受管理的。在定义的时间点(例如:重要里程碑、重要任务完成时),管理等级都可以了解工作产品的状况和服务的交付情形。建立有关相关人员的承诺,并视需要修订。管控工作产品并与相关人员共同审查工作产品和服务可满足其特定的需求、标准及目标。
已定义级:已将管理和工程两方面的软件过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准的、剪裁的标准软件过程来开发和维护软件。
量化管理级:收集了软件过程和产品质量的度量数据。软件过程和产品质量均得到定量的了解和控制。软件开发的成本、进度和软件质量等都可以定量预测。
优化级:通过收集来自过程和来自实验创新思想和技术的定量反馈信息,使得持续的过程改进成为可能。
三、经验体会:
众所周知,商业公司以追求利润为目的,实施CMM(或CMMI)对公司的帮助何在?一次在面试软件开发工程师问到公司实施CMMI对你的工作有什么帮助,或者你觉得有什么益处。他想了想说觉得没有什么益处,除了大量的文档以外。笔者听了觉得有一种振动,如果所有接受这个流程,或者使用这个流程的人都是这个感受的话,这将是过程改进从业人员的悲哀。
公司在流程建设以及流程改进过程中,希望更多的从实施人员的立场来考虑,希望流程真正体现了公司需要的工作过程,并对此工作过程进行不断的优化。业界在谈到过程改进时,都会提到过程改进是为商业目标服务的,但是在遵循商业目标的前提下,流程要实施其实主要还是要靠项目组来实施,而不是靠质量保证组(QA)去检查,或者说质量管理部门成天追着后面要文档。在流程建设过程中,应更多地考虑怎么帮助项目组提高工作效率,减少重复劳动,让项目组人员真正感受到过程改进人员是提供帮助的,流程是必须的工作过程,而不是带来更多的文档或更多的不愿意做的事情。
以下是笔者对于公司的过程以及过程改进的一些体会:
1.过程改进形成了良好的工作氛围
公司在建立流程文档的时候,是从公司已有的工作过程出发,进行整理,而不是质量管理人员孤立地闭门造车。质量管理人员经过与项目组人员多次的沟通、了解,最后总结并形成流程文档。从符合公司商业目标来说,软件工程过程组(SEPG)一直致力于组织文化的培育。这个文化培育可能是比较虚的词,这么说吧,当有新人加入公司的时候,大家可以不断感受到这种气氛,就是这个组织是一个什么样的工作氛围。
倡导一个开明公正的氛围,而这个倡导因为是从上到下进行的,因此比较有效。从高层经理,中层经理,一直到下面普通员工,一直在一个开明、公正的氛围中工作的话,大家都会自觉维护这个氛围。当新人加入时,尤其是新毕业的学生,一进来感觉就比较好,而且很快会接受这种氛围。
从过程改进方面来说,也是在这个氛围中进行的,对于工作流程的整合,对于工作流程的每一个细小的改进,组织中的每一个人都可以进言献策,而不是由领导说了算,或由质量管理人员说了算。也正因为如此,过程改进以及执行都能比较得到大家的认可,项目组人员在项目开发过程中也比较乐于接受这些流程。
2.流程化管理让工作更有序化
流程文档是从实际工作过程中抽取并定义的。在整合过程中,对于过程角色以及角色的职责做了进一步的清晰定义,同时,对于工作过程也做了制定了工作步骤要求。这样,从客户方发出项目开始,一直到项目验收,项目总结,定出了一整套的流程。就是从第一步开始,下一步怎么做,定义了一个做事方式。另外,在流程里面定义了在一个阶段到下个阶段的职责,比如说这个阶段谁负责,负责人干什么事,其他人员干什么事,基本上都定义清楚了。这样很大程度上避免了有些事情大家都觉得应该干,而有些事情却没有人干的局面。所以,流程定义到了每个角色的头上,这样的话,不同的角色,比如在这个项目组是一个负责人,可能到另外一个项目组是一个普通的工程师,因为角色不同,在不同项目里面的工作也不同。而这些定义,当项目启动的时候,都转化为项目开发计划。
每个项目都要求做项目开发计划,这个计划包括这个项目在自己开发部是怎么做的,同时还包括如果在这个项目外包给软件公司,对软件公司怎么管理的计划,还有我们这边人员怎么配置的计划,这个计划里面包括了很多内容。其他还有配置管理的计划,SQA计划等等,这些计划都包含在软件开发的计划里面。从这个计划建立以后,在后面的过程中基本上要求按照计划执行。但是同时因为项目是变化的,有可能项目定义的内容会有一些偏差,这个时候要求对计划进行监控,如果出现大的偏差的话,开发计划就要调整,如果出现小的偏差,就需要对Schedule进行调整。同时,如果外包给软件公司的项目,也要求软件公司提供项目计划,而且要求他们每周对进度进行汇报。同时,在计划里面还定义了milestone review,不同阶段的review谁参加,大概是什么时候,这个都要求在计划里面进行定义。
项目组人员在项目计划的指导下,因为职责明确,步骤清晰,都能更有效和高效地工作,避免了许多不必要的重复工作(rework),大家感觉项目做的比以前更顺畅,同事间合作也更融洽,少了很多互相推诿。
3.通过流程化管理,全员的风险意识会大大提高
定义一个比较详细的风险分析流程,流程中要求制作风险标注表。风险标注表是基于FMEA的方式,里面有风险的发生概率,发现的严重程度等等。所以要求在项目开始时候,就进行风险分析,风险分析的结果作为项目开发计划的一部分。风险分析时主要从资源和项目进度等各方面进行分析,同时提供了一套典型的分析表给大家作为参考。所谓的典型风险表就是从各个项目里面制定的风险中抽取,以及从各个项目反馈回来的可能风险,不断更新和充实典型风险表。在执行这个流程的时候,在项目一开始就要标识风险,如果超过一定数值的风险,就要做对应的策略。这样的话,项目开始就有风险的计划,风险的标识,和风险对应计划。在项目开发过程中每周对风险进行识别,有没有新的风险出现,有没有原来的风险数值的降低,等于就是在全项目的过程中,对风险有一个控制。在项目过程中有一整套的风险管理,可能大家在不知不觉中接受了这种风险管理的意识,有的时候在日常生活,甚至是整个公司的其他事情都不自觉的就有了风险意识。所有的东西归根到底就是给每个员工成功感,觉得在这个公司有发展的前途。
下面说一下工作量的量化。工作量的量化不是一件容易的事情,从实际需要出发,做了一些量化的工作。前面提到的项目开发计划,根据WBS分割,对项目规模进行估计,在此估计的基础上安排人员与进度。同时,收集每天的工作记录,以便进行计划工时与实际工时的比较、追踪与监控。为此特意开发了一个系统来录入计划,并可以让每一个员工按照不同分类记录自己每天的工作工时。在此过程中,可能会遇到数据不准确的问题,但基于公司比较开明的氛围,以及让每个员工意识到收集数据并非是为了限制员工,而是为了帮助员工,收集到的数据的可信度也在逐步提高。这些收集到的数据,一是作为经验数值,被用于其他项目计划,二是作为实际与计划的偏差依据,便于项目经理对人员的工作负荷进行调整,或者在发现偏差时,尽早采取行动。正是让项目组人员看到数据对于自己的好处,大家都积极配合,提交尽量准确的数据。比如:从普通的项目组的感觉来说,至少工作量的量化可以给普通开发人员一个机会,可以提出来工作量超时的问题,在真正超时情况下,可以拒绝一些事情,而不是说上面领导说了算,不顾下面员工的实际情况,只能靠加班来达到经理的要求。所以,这个流程带给普通的开发人员一个渠道,来反应这个工作确实是超时了,而且需要上面的经理,甚至高层经理帮助解决。
4.流程化管理给普通开发人员带来了工作成就感
关于工作的成就感,涉及到每个人的感受。从流程角度来说,或者说从过程改进的角度来说,在计划方面,Review方面能促使组织中的每个人的工作更有成就感。Review分技术Review和管理Review。技术Review就是提前介入,提前减少风险,使项目的质量朝预想方向进行。实际上Review也是减少了项目组人员的工作时间。还有计划、Review,风险分析等等,都减少了救火事件。当然每个项目都会存在救火的时间,但是流程就是帮助项目组尽量减少救火的出现。在很多公司里面存在这种状况,如果某个项目一直很顺利,什么事都没有出,平平淡淡过去了,领导会觉得这个项目没有出现英雄人物,如果出现救火了,出现一个大问题,出现一个或几个英雄把这个困难克服了,事情终于做完了,可能觉得体现了公司的能力。但是如果软件开发想产业化,比如说想做大规模的开发的话,应该还是尽量避免救火的出现,而且尽量避免靠某些英雄人物的存在。
还有一个,定义的比较好的项目总结流程,也在一定程度上增加了成就感。根据流程定义,到项目验收通过,无论涉及到三方或者两方的情况,要求三方或者两方必须做总结,一个是质量数据的总结,再一个就是经验教训的总结,总结项目过程中好的点、不好的点,给其他方。比如说软件公司觉得需求写得不是很清晰,可以在项目总结时反馈。而且在做完总结之后,不是说做完了就完了,还要开会讨论,要定义下一个项目该怎么改进,关联各方怎么改进。而且自己内部在项目结束之后要在相应的人员中开总结会,开总结会的时候,管理方面有什么做得不好的,技术方面哪些方面要提高的,沟通方面有哪些问题,这些东西都要总结下来。这些总结,三方或者两方都是共享,在下一个项目的时候,就不会犯同样的错误。所以,从流程的角度来说,项目组感觉虽然这个项目很繁杂,工作任务很重,但是工作还是很有成就感的。
四、小结
软件过程管理的度需要根据具体公司的实际情况,人力、物力投入,人员素质,项目情况来选择,抽象的软件过程管理理论固然完美,但只有对提高本公司、本部门软件开发水平和质量有帮助的才是最合适的。
参考文献
[1]郑人杰,殷人昆,陶永雷.实用软件工程(第二版)[M].清华大学出版社,2005.
[2]克里西斯,科纳德,沙恩.CMMI—过程集成与产品改进指南(影印版)(英文版)[M].清华大学出版社,2004.
[3]杨一平,等.软件能力成熟度模型CMM方法及其应用[M].人民邮电出版社,2001.