引自:http://www.cnblogs.com/leslies2/archive/2012/06/29/2569765.htmlhtml
项目管理与软件开发的质量、效率、最终成果息息相关,本文主要讲述软件项目的风险评估、成本预算、客户沟通、须要分析、开发管理、成品交付等多个流程。
在现今国内的项目的管理形式十分零乱,对管理欠缺重视,以至不少项目由于失去管理而最终折腰。
不少的实战形人才只重视于开发环节,而对其余的流程欠缺认识(包括本人),于是致使项目欠缺有条理的、阶段化的管理。
本人是一个典型的只重视开发的管理者,在屡次的教训中深入地体会到管理的重要性,于是以此文章对项目管理做出一个总结,当中存在不少的不足之处,敬请各位点评! 数据库
文件下载:项目管理流程.docx 安全
1、 风险评估 服务器
软件项目风险是指在整个项目周期中所涉及的成本预算、开发进度、技术难度、经济可行性、安全管理等各方面的问题,以及由这些问题而对项目所产生的影响。项目的风险与其可行性成反比,其可行性越高,风险越低。软件项目的可行性分为经济可行性、业务可行性、技术可行性、法律可行性等四个方面。而软件项目风险则分为产品规模风险、须要风险、相关性风险、管理风险、安全风险等六个方面: 网络
项目的风险是与产品的规模成正比的,通常产品规模越大,问题就越突出。尤为是估算产品规模的方法,复用软件的多少,需求变动的多少等因素与产品风险息息相关: 架构
(1) 估算产品规模的方法 框架
(2) 产品规模估算的信任度 函数
(3) 产品规模与之前产品规模平均值的误差 工具
(4) 产品的用户数 性能
(5) 复用软件的多少
(6) 产品需求变动的多少
不少项目在肯定需求时都面临着一些不肯定性。当在项目早期容忍了这些不肯定性,而且在项目进展过程中得不到解决,这些问题就会对项目的成功形成很大威胁。若是不控制与需求相关的风险因素,那么就颇有可能产生错误的产品或者拙劣地建造预期的产品。每一种状况对产品来说均可能致命的,这些的风险因素有:
(1) 对产品缺乏清晰的认识
(2) 对产品需求缺乏认同
(3) 在作需求分析过程当中客户参与不够
(4) 没有优先需求
(5) 因为不肯定的须要致使新的市场
(6) 不断变化需求
(7) 缺乏有效的需求变化管理过程
(8) 对需求的变化缺乏相关分析等
许多风险都是由于项目的外部环境或因素的相关性产生的。控制外部的相关性风险, 能缓解策略应该包括可能性计划,以便从第二资源或协同工做资源中取得必要的组成部分,并觉察潜在的问题,与外部环境相关的因素有:
(1) 客户供应条目或信息
(2) 交互成员或交互团体依赖性
(3) 内部或外部转包商的关系
(4) 经验丰富人员的可得性
(5) 项目的复用性
软件技术的飞速发展和经验丰富员工的缺少,意味着项目团队可能会由于技巧的缘由影响项目的成功。 在早期,识别风险从而采起合适的预防措施是解决风险领域问题的关键,好比:培训、聘请顾问以及为项目团队招聘合适的人才等。关于技术主要有下面这些风险因素:
(1) 缺少培训
(2) 对方法、工具和技术理解的不够
(3) 应用领域的经验不足
(4) 对新的技术和开发方法应用不熟悉
尽管管理问题制约了不少项目的成功,可是不要由于风险管理计划中没有包括全部管理活动而感到惊奇。在大部分项目里,项目经理常常是写项目风险管理计划的人,他们有先天性的不足——不能检查到本身的错误。于是,使项目的成功变得更加困难。若是不正视这些棘手的问题,它们就颇有可能在项目进行的某个阶段影响项目自己。当咱们定义了项目追踪过程而且明晰项目角色和责任,就能处理这些风险因素:
(1) 计划和任务定义不够充分
(2) 对实际项目状态不了解
(3) 项目全部者和决策者分不清
(4) 不切实际的承诺
(5) 不能与员工之间的进行充分地沟通
软件产品自己是属于创造性的产品,产品自己的核心技术保密很是重要。但一直以来,咱们在软件这方 面的安全意识比较淡薄,对软件产品的开发主要注重技术自己,而忽略了专利的保护。软件行业的技术人员流动是很广泛的现象,随着技术人员的流失、变动,很能会致使产品和新技术的泄密,导致咱们的软件产品被它公司窃取,致使项目失败。并且在软件方面关于知识产权的认定目前尚未明确的一个行业规范,这也是咱们 软件项目潜在的风险。
(1) 以开发方诱导能保证需求的完整,使需求与客户的真实指望高度一致。再以书面方便造成《用户需求》这一重要的文档,避免疏漏形成的损失在软件系统的后续阶段被逐步地放大。
(2) 设立监督制度,项目开发中任何较大的决定都必须有客户参与进行的,在该项目中项目监督由项目开发中的质量监督组来实施。
(3) 需求变动须要通过统一的负责人提出,而且要用户需求的审核领导承认,需求变动应该是按期而不是随时的提出,并且开发方应该作好详细的记录,让客户了解需求变动的实际状况。
(4) 控制系统的复杂程度,过于简单的系统结构,对用户来使用比例会有明显的折扣,甚至形成软件寿命太短。反之,软件结构的过于灵活和通用,必然引发软件实现的难度增长,系统的复杂度会上升,这又会在实现和测试阶段带来风险。适当控制系统的复杂程度有利于下降开发的风险。
(5) 从软件工程的角度看,软件维护费用约占总费用的55%~70%,系统越大,该费用越高。对系统可维护性的轻视是大型软件系统的最大风险。在软件漫长的运营期内,业务规则确定会不断发展,科学的解决此问题的作法是不断对软件系统进行版本升级,在确保可维护性的前提下逐步扩展系统。
(6) 设定应急计划,每一个开发计划都至少应该设定一个应急预案去应对出现突发状况和不可遇知的风险。
2、 成本预算
(1) 自上而下的预算方法
自上而下的预方法主要是依据上层、中层项目管理人员的管理经验进行判断,对构成项目总体成本的子项目成本进行估计,并把这些判断估计的结果传递给低一层的管理人员,在此基础上由这一层的管理人员对组成项目的子任务和子项目的成本进行估计,而后继续向下一层传递他们的成本估计,直到传递到最低一层。
使用此预算方式,在上层的管理人员根据他们的经验进行的费用估计分解到下层时,可能会出现下层人员认为上层的估计不足以完成相应任务的状况。这时,下层人员不必定会表达出本身的真实观点,不必定会和上层管理人员进行理智地讨论,从而得出更为合理的预算分配方案。在实际中,他们每每只能沉默地等待上层管理者自行发现问题并予以纠正,这样每每会给项目带来诸多问题。
自上而下更适用于项目启动的前期,与真实费用相差在30% ~ 70%之间。
Scrum使用自上而下的成本预算方式,它不会当即精确地肯定成本,而是以最大限度容纳客户对将来产品要求所产生的变动。
(2) 自下而上的预算方法
自下而上方法要求运用WBS(Work Breakdown Structure,工做分解结构)对项目的全部工做任务的时间和预算进行仔细考察。最初,预算是针对资源(团队成员的工做时间、硬件的配置)进行的,项目经理在此之上再加上适当的间接费用(如培训费用、管理费用、不可预见费等)以及项目要达到的利润目标就造成了项目的总预算。自下而上的预算方法要求全面考虑全部涉及到的工做任务,更适用于项目的初期与中期,它能准备地评估项目的成本,与真实费用相差在5% ~ 10%之间。
注解:WBS
WBS是面向提交成果对项目的分解,从提交成果的列表能够肯定每一个提交成果须要执行的活动。Scrum会对WBS进一步细化,把一个迭代分解为一个或多个的工做包,再把工做包分解为细小的开发任务(通常开发任务的开发周期在15个工做小时之内)。
整体成本预算就是结合下列多个成本预算方式综合计算的开发成本:
(1) 零基数预算
在成本预算的初期应该使用零基数的计算原则,而不可使用相似于:以上一年整体费用加上20% 这样粗略的方式计算项目成本。
(2) 软硬件成本、物品成本
物品成本是指相似于:服务器(RAM 硬盘 CPU NIC卡 RAID簇)成本、维护成本、机房租金、光纤通信成本、软件成本等的成本。
计算成本时须要考虑组装硬盘需时的长短,技术人员须要具有的质素,产品供应商可否提供保证质量,管理时是否须要额外的管理人员这些多方因素。
(3) 软件许可证成本
(4) 外包成本
当使用相似:视频、短信、移动电信类服务、门户网站等子项目时能够考虑之外包形式完成,以下降开发成本。
(5) 人力资源成本
计算人力资源成本时应该使用以最高和最低的工做效率估算平均效率的方式,计算出人力资源的平均成本。
(6) 维修保养成本
3、 客户沟通的过程
从客户沟通的方向出发来看,软件项目可分为:需求识别、方案定制、项目实施、项目结束等4个不一样的阶段,各个阶段都具备不一样的沟通重点。
(1) 文本沟通
在需求识别的前期,应该经过问卷、原型展现、界面展现、逻辑处理展现、准化文档模板等方式进行全方位多角度的分析,随时将不明确之处反馈给客户,以期待客户解答。并以文本记录的方式创建须要分析书,并要求客户审核需求分析书,以达到须要分析与客户的真实指望高度一致的结果。
(2) 业务逻辑沟通
在进行业务沟通时,应该了解客户的行业语言,以促进业务分析的过程,越过应用需求和开发之间的鸿沟。沟经过程提倡以草图或者可视信息化的方式进行, 针对不一样层面的企业用户提供最适合的操做界面。以多角度的方式思考问题,要抓住需求重点,尤为是客户方领导所关注的创新类和实用类需求。
(3) 需求变动的规范化管理
需求变动在软件开发类项目中是能够理解的,但必须对需求变动作好规范化的管理,以免出现需求无止境变动的风险。需求变动必须由统一的负责人提出,而且由用户需求的审核领导者承认。需求变动的提出应该是按期而不是随时的,开发方应该作好详细的文本记录,让客户了解需求变动的实际状况和开发方为之所付出的成本代价。
该阶段项目的主要任务是与客户共同制定一个之前期明确的需求、双方的资源、项目开始的阶段、实施的时间约定、项目费用限制等为基础的具备可操做性的项目计划,从本阶段开始争取客户全面参与项目的管理,并以双方的共同利益考虑项目实施的具体计划与风险规避。
在该阶段,软件项目团队应该与客户共同领导项目的实施。同时,项目团队应实时评估客户满意度,并经过持续改进的方式提升客户满意度,还应要求客户参加必要的培训,以及在必要时检查项目产品。在出现客户的需求变动前,应主动与客户沟通交流,使客户充分了解项目的每一个环节,以及变动带来的影响,减小需求变动。若是出现客户需求变动,应与客户一块儿共同解决由变动引发的成本、进度、质量变化。
该阶段主要进行项目成果的移交,并把系统交付给维护人员,帮助客户实现商务目标,结清各类款项。完成这些工做后应该进行项目评估,审核此项目的成果并总结项目经验。
在产品型项目做为开发成果时,相关销售人员应该注意:对产品的推销不该该过度承诺。若是过度承诺,会给后续的项目实施带来困难;一旦承诺没有兑现,也会下降客户满意度,影响从此合做。若是有附加承诺,必定要以文本形式记录,让实施项目经理知晓并传达给项目组成员。
注解:在软件项目中,须要明确如下四种客户角色
A. 要明确最终使用部门和用户,要去了解他们现有的工做方式,要让他们知道项目的目标框架,知道项目要解决他们的哪些困难,但绝对不是所有困难,这样能够较好的控制项目范围。
B. 要明确需求的提出者,他或者他们要可以表明最终客户群体。提出产品需求的这类客户要具备必定的技术、业务能力和权威,可以真正表明最终客户团队的意愿和想法,最好有IT基础,可以用IT语言描述问题和需求,以利于双方的沟通、协做,避免产生歧义。
C. 要明确作需求确认的中层领导,他要把握方向。软件开发项目是解决实际生产或者管理问题,同时 也是领导系统建设的具体实现,作需求确认的客户领导,既要了解高层领导的系统建设要点和方向,又要谙熟具体业务和生产管理实际。若是是这样的客户领导来把 握和决策,对企业软件开发项目的顺利进展做用非凡。
D. 要明确谁来对成品提意见,谁来验收。项目验收环节,是项目的收尾环节,若是验收的人对项目初期的需求目标不了解,会从态度和产品实际使用效果上对验收产生负面的影响,对提供产品的企业关闭项目很是不利。根据实践总结,由需求提出人和确认人来作项 目的验收工做,可以促进项目的顺利完成,避免延期。
4、 需求分析
需求过程包括需求开发和需求管理2个部分:
(1) 需求开发就是对开发前期的管理,与客房的沟经过程,能够分为4个阶段:需求获取、需求分析、编写需求和需求验证。
(2) 需求管理:就是软件项目开发过程当中控制和维持需求约定的活动。包括:变动控制、版本控制、需求跟踪、需求状态跟踪。
需求的层次包括:业务需求、用户需求、功能需求、非功能需求等4个方面。
(1) 提取业务对象
业务对象是指系统使用的真实对象,例如一个供应链管理 (Supply Chain Management ,简称SCM) 业务对象主要包括:生产批发商、零售商、送货商、顾客多个层次。
(2) 提取业务流程
在了解业务逻辑的过程当中,应该列举出所开发软件模块的各自职能,并细化每一个工做流程,深刻分析业务逻辑。
(3) 性能需求
在分析的前期应该注意客户对所开发软件的技术性能指标,如存储容量限制、运行时间限制、安全保密性等。
(4) 环境需求
环境需求是指软件平台运行时所处环境的要求,如硬件方面:机型、外部设备、数据通讯接口;软件方面:系统软件,包括操做系统、网络软件、数据库管理系统方面;使用方面:使用部门在制度上,操做人员上的技术水平上应具有怎样的条件。
(5) 可靠性需求
对所开发软件在投入运行后发生故障的几率,应该按实际的运行环境提出要求。对于重要的软件,或是运行失效会形成严重后果的软件,应提出较高的可靠性要求。
(6) 安全保密要求
在需求分析时应当在这方面恰当地作出规定,对所开发的软件给予特殊的设计,使其在运行中,其安全保密方面的性能获得必要的保证。
(7) 用户界面需求
为用户界面细致地规定到达的要求。
(8) 资源使用需求
开发的软件在运行时和开发时所须要的各类资源。
(9) 软件成本消耗与开发进度需求
在软件项目立项后,根据合同规定,对软件开发的进度和各步骤的费用提出要求,做为开发管理的依据。
(10) 开发目标需求
预先估计之后系统可能达到的目标,这样能够比较容易对系统进行必要的补充和修改。
需求分析的主要任务是借助于当前系统的逻辑模型导出目标系统的逻辑模型,其流程以下:
(1) 肯定对系统的综合需求(功能、性能、运行、扩充需求)
(2) 制做产品需求文档 (PRD)
(3) 分析系统的数据需求(概念模型、数据字典、规范化)
(4) 导出目标系统的详细的逻辑模型(数据流图、数据字典、主要功能描述)
(5) 开发原形系统
(6) 从PRD提取编制软件需求规格说明书(SRS)
注解:SRS格式
1.引言 2系统概述(项目背景、系统目标、核心业务流程) 3.术语说明 4.系统结构(架构图、功能图)
5.主体功能与业务逻辑(重点) 6.接口需求(内部、外部接口、) 7.网络整体设计(拓扑网络、主机、组网)
8.运行环境(Linux、Windows、IIS、 WebLogic、Tomcat、OLAP、OLTP、JDK 8.0 、.NET Framework 4.0等)
5、 面向对象程序设计(略)
(1) SRP单一职责链
每一个类都应该只负责作一件事。
(2) OCP开封闭合原则
软件的实体(类、模块、函数等)应该是能够扩展的,可是不可修改的。
(3) LSP替换原则
子类必须能替换他们的基类型。
(4) DIP依赖倒置原则
高层模块不该该依赖于低层模块,两者都应该依赖于接口与抽象类。抽象不该该依赖于细节,细节应依赖于对象。
(5) ISP接口隔离原则
不该该强迫客户依赖于并未使用的接口,而应该把胖接口分离。
(1) 业务对象的提取
(2) 根据SRS、CRC等实现用况建模
(3) 实现业务顺序图
(4) 创建类图,根据用况图创建对象之间的关联
(5) 绘制活动图、实现协做图、状态图
6、 开发管理
(1) 设计整体架构
针对系统的实施须要,采起适当的且成熟的框架结构。
(2) 控制可扩展度
扩展度过大,将提升系统的复杂程度,延长开发时间;扩展度太低,会直接影响系统的二次开发与维护。控制系统的可扩展性,能提升开发效率,下降系统维护的难度。
(3) 创建基础设施
合理分配部署软、硬件等基础设施所须要的时间与成本(例如:服务器的订购安装、光纤接入、软件平台订购)。
(4) 划分开发任务
利用WBS(Work Breakdown Structure,工做分解结构)对可交付结果进行分类与划分。每一个项目都能划分为多个不一样阶段,每一个阶段又能够分为多个工做包(Work Package),工做包是WBS里最小的可交付结果,最后从工做包中分解出多个开发任务列表。
(5) 部署开发进度
一个项目应该按进度划分为多个开发阶段,每一个阶段的开发周期通常在30~60个工做日之内。在此阶段内应该与客户举行协商会议,制定产品路线图,在开发过程当中邀请客户积极参与并提出反馈意见。而后把该时段内的开发任务按照开发难度,依赖性,重要性等多方条件划分为多个迭代周期。
在Scrum 敏捷软件开发原则中,应该把每一个迭代任务进一步细分为多个开发任务列表,再开发任务分配给组员各自负责,而开发时间应该控制在15个工做小时之内。若是开发时间超出15个工做小时,应该考虑把开发任务再度细化。开发任务建议应该由组员自主选择,而不要使用强制分配的方式。
(5) 测试项目成果
每一个工做包都应该同步部署测试工做,提升项目的质量。对出错BUG的工做包应该由测试人员以文本方式记录,向开发人员展现错误所在,让开发人员及时进行修改。
(1) 组建团队
按照工做任务与项目时间的前提条件创建团队,按团队职责分配人员,通常团队人数应该控制在8~12人之间。当团队人数超过15人时,应该考虑把团队分解成2个独立团队,负责不一样的开发任务。
(2) 分配开发任务
在每一个迭代周期内(通常是15~30个工做日),应该把每一个工做包进一步细分为多个开发任务,再开发任务分配给组员各自负责,开发时间应该控制在15个工做小时之内。若是开发任务的开发时间超出15个工做小时,应该考虑把任务再度细化。而开发任务应该以自由选择的方式分配给每一个组员。
(3) 监督开发进度
在迭代的前期举行一次会议,让组员了解开发的进展及流程,并以自主选择的方式分配开发任务。期间可以使用Microsoft Project等工具记录开发流程的进展,在每一个工做包完成开发后应该进行性功能的测试,并以文本方式记录测试结果。
天天举行一次15分钟的站立会议,让组员交待昨天已完成的开发任务,当天将要作的任务,与开发过程当中所遇到的问题。并在每周末举行一次例行会议,交待整体进程。
在迭代末期举行一次冲刺会议,总结项目的进展,交行已完成的任务,回顾该迭代周期内所遇到的问题,为下一个迭代作好准备。
(4) 系统测试
对每一个已完成的工做包进行适时的测试,保证系统质量与性能。对测试结果进行文本的记录,并把测试结果与绩效工资收入挂钩,并以真实数据计算组员的绩效收入。
(5) 解决开发中所遇到的问题
对开发人员进行前期培训,可适当按工做能力分配任务,指导组员的开发。当遇到问题时应该在当天的站立会议时即时提出,并在15个工做小时内解决所遇到的问题以防止问题进一步扩大。
(1) 质量须要的是计划、设计而并不是审查的。在产品创建的初级,必须与“质量保证”(QA)的部门进行协商,以正式文档的方式,决定恰当的质量策略和标准。
(2) 在开发过程当中使用TDD(测试驱动开发)的模式,提升开发质量。测试人员应该以文本方式记录bug,并与开发人员共同工做的,把突出的缺陷演示给开发人员,以提升修改的效率。
(3) 在每一个迭代的结束时进行一次产品效果的演示,从客户、使用者、高层领导中收集反馈信息。在团队内部举行评审会议,分析测试结果,了解产品性能,为下次迭代所须要作的改进作好计划。
(1) 在产品须要识别阶段,应该以文档形式记录产品功能与开发流程,在开发计划须要修改时,应该与客户共同探讨,让客户了解计划修改对项目进度所形成的影响。
(2) 项目计划的修改应该由统一的负责人提出,而且由用户需求的审核领导者承认。需求变动的提出应该是按期而不是随时的。
(3) 计划的变动应该作好详细的文本记录,让客户了解需求变动的实际状况和开发方为之所付出的成本代价。
7、 产品交付
在项目开发最终完成后,对开发人员来讲可算是放下工做的重担,但对项目经理来讲这每每是项目的关键时刻。前期的风险评估、成本预算、需求分析、软件设计都是为了引导项目走向这一时刻,此时全部的目光都将投向项目管理人员。你可能发现大量而琐碎的工做将要在几个小时内完成,此刻项目经理更须要保持清醒与镇定,把最后的工做视为微型项目来对待。细致地对项目进行后期的审核,分析项目成果、项目团队的效率、可交付产品的价值,以此审核结果可做为项目管理经验总结的一部分。
在项目交付前,应该把项目交给相关的“质量保证”(QA)部门进行质量评审,并邀请典型用户感觉产品的质量。
正常状况下在项目的前期就会订立项目交付的协议,项目交付方式分为非正式验收与正式验收两种。通常在项目完成后都会先进行非正式验收,让客户体会项目的质量并提出反馈意见,最后在客户确定产品质量后再以书面协议的形式进行正式的产品验收。
在项目的最后,应该制定项目的最终报告,此报告能够视为是对该项目一个记录,但报告没必要包含项目的全部方面。通常最终报告应该包含如下方面:
(1) 最初引进项目时的初期项目视图
(2) 对该项目的价值评估及支持性信息
(3) 项目的范围
(4) 项目的开发流程及WBS
(5) 项目的会议记录
(6) 项目变动的报告及变动的理由
(7) 与项目相关的沟经过程文件
(8) 项目的审核报告与客户验收报告
(9) 项目成员的表现报告
(10) 项目的最终成果