软件项目进度与成本管理带着问题思考:1:为什么软件总是无法按照预期进度完成?2:软件的开发到底需要多少成本?需求不断变更-开发过程中重复增加工作量,返工,开发停滞软件估算不准确-过于乐观的估算,估算方法的不合理风险得不到有效控制-人员变动,开发环境与工具无法保障,资金,评审决策造成进度与成本失控的杀手:需求控制与管理小组-认真做好需求分析是成功的一半,有效地控制需求变更将进一步保证进度的顺利进展和成本约束.引进科学的软件估算办法-理性地进行软件估算,而不是完全拍脑袋凭经验,在不断的实践中修订完善,将估算的准确率提高到10%以内的理想目标.风险控制-成为优秀的舵手,避开暗礁,使得开发人员专注有效地工作.措施:•懂得如何界定需求范围!提前预备潜在和未来的需求!•合适的需求描述方法!控制需求:只有准确地估算软件的功能,才能比较精确的估算出软件的成本,并制订出合理的进度计划。软件估算对进度与成本控制非常重要!•规模估算•工作量估算•人员时间估算•资源估算软件估算•明确项目经理的责任权利与义务!•创造项目小组的良好的外部环境!•让客户、领导与项目组共担风险!风险控制软件进度制定软件项目计划是控制开发进度和成本必须要做的工作。目标是提供一个框架,使得管理者能够对资源,成本及进度进行合理的估算。软件估算是在一个限定的时间框架内所做的,并且随着项目的进展不断更新。定义”最好的情况“及”最坏的情况“,使得项目的结果能够限制在一定范围内。(一)软件项目计划首先要做的是:软件估算解决三个问题:1.需要多长时间?2.需要多少工作量?3.需要多少人?•不懂行•没有足够的时间•需求不明确,变动大•缺乏易用科学计量方法•复杂的计算软件估算很困难估算从产品的范围描述开始。在“范围”被“界定”前,不可能得出一个有意义的估算。第一个任务:确定软件范围软件范围描述了将被处理的数据和控制、功能、性能、约束、接口及可靠性。成本和进度估算都是以面向功能的基础的。第一个任务:确定软件范围人员可复用构件硬件/软件工具第二个任务:估算完成软件开发所需的资源资源描述可用性陈述需要该资源的时间该资源被使用的持续时间工作分解:将复杂的项目分解成一组明确定义的活动,直到能够对每个活动进行准确的测算。测定工作量需要和可能获得的实际人力资源相结合。第三个任务:测定工作量六个标准:1.状态/完成是可计量的2.明确定义了开始/结束事件3.活动有一个可交付成果4.时间/费用容易估计5.活动工期在可接受期限内6.工作安排是独立的第三个任务:测定工作量WBS:工作分解结构WBS(WorkBreakdownStructure)是根据树形图将一个功能实体(项目)先分解为子项目,再逐级分解成若干个相对独立的工作单元,并确定每个工作单元的任务及其从属的工作(或称之为活动);以便更有效地组织项目的进行。第三个任务:测定工作量-WBS第四个任务:制订项目进度与成本计划报告只有建立在准确的软件估算基础上的计划才是可信和可执行的。第四个任务:制订项目进度计划报告只有建立在准确的软件估算基础上的计划才是可信和可执行的。第四个任务:进度计划是“大致的”:进度计划的编制原则:•最短进度•有效进度(最佳的情况)•普通进度最短进度:----不可能完成的任务期望能达到最短进度的要求:1:员工:最拔尖的人才2:管理:最理想的项目管理3:工具支持:先进的工具4:方法:最具时效的开发方法和工具5:压缩:进度压缩再压缩,直到无法压缩能够达到有效进度的条件:1:员工:拥有当前的最好的人才2:管理:具有丰富的经验与良好的团队协作3:工具支持:有效的工具4:方法:采用快速开发实践5:压缩:优化的压缩有效进度:----实践中的最佳情况:大多数的情况下:1:员工:中等水平2:管理:有经验但不是特别熟练3:工具支持:能够开展工作的工具4:方法:可用的方法5:压缩:简单的压缩普通进度:----一般状况:(二)进度计划的陷阱•过于乐观或过于悲观•里程碑无法确定和推进•被忽视的任务过于乐观或悲观•盲目乐观地“想当然”便会被“当然”地击败•被前景和利润的诱惑冲昏头脑•悲观使人畏惧而步履缓慢•过于悲观的计划将大大增加成本里程碑无法明确创建•开发过程阶段交叉,无法清晰建立里程碑•过度追求“完美”的阶段成果,拣了芝麻丢掉西瓜•“死亡”的里程碑-表面一套背实践另外一套容易被忽视的任务•测试期(往往超过了开发期的两倍以上)•确认与评审(等待的时间也许长得无法忍受)•人员培训(磨刀还是要误砍柴功)•假期(周末,节假日,病假,事假等)•沟通与会议(传达和被理解比想象中占用的时间要多的多)•软件估算是保证项目进度计划的基础•由上而下分解,由下而上估算•进度计划是不断修正的动态计划要点回顾软件成本带着问题思考:1:如何快速估算软件成本?2:软件成本控制?涉及到软件成本的常见问题:情境一:你们帮我们设计个办公自动化系统,需要多少钱?情境二:我们预算投入200万建立公司的信息管理系统,你们能不能做的到?(一)软件成本软件成本的构成一:•人员工资•差旅费•通讯费•硬件•工具•福利费二:•管理费用分摊•人员招聘费用•风险费用•培训成本费•技术支持费•用户教育费•包装制作费•市场推广费等等常见的故事:曾经有一位项目经理解释他的项目计划,其中有几个成员在某几天里面是没有工作安排的,他说:“就让他们待在公司里面休整一下吧,反正也不花钱。”…软件成本的快速估算(1)以人月为基础:(人员数×开发周期×单位工资)×3(成本系数)例如:人员平均工资5000元,共需要6名工程师,项目开发周期为4个月则简单的成本估算为(6人×4月×5000元)×3=360000元软件成本的快速估算(1)以人月为基础:经验:人员规模越大,成本系数越高。技术水平越高,成本系数越高。开发周期越长,成本系数越高。一般系数为:1.5~3.0之间。软件成本的快速估算(1)以人月为基础:特征:•简单,容易估算•需要建立在工作量计算的基础上进行估算•不够准确,弹性大软件成本的快速估算(2)以功能点为基础:功能模块单价×功能点数×开发系数例如:某个系统可分为10个模块,每个模块按照历史的经验计算,其中:3个为15000元,开发难度系数为25个为20000元,开发难度系数为32个为4000元,开发难度系数为1则系统的成本为:(15000×3)×2+(20000×5)×3+(4000×2)×1=398000元软件成本的快速估算(2)以功能点为基础:历史经验:•系统越复杂,开发难度系数越高•开发架构与语言越高级,开发难度越高•功能点越精细,准确度越高•团队开发历史越久,准确度越高功能点单价除了根据历史经验外可参考同等规模的同行报价。软件成本的快速估算(2)以功能点为基础:功能点的估算办法:1、整理出项目功能列表;2、将功能列表进行归类,整理成模块;3、按照模块估算代码量和工作量;4、估算出功能点的成本;5、根据用户的需求和实现方式,估算开发系数。软件成本的快速估算(2)以功能点为基础:特征:•需要参照历史经验或者同类产品•需要进行需求分析与概要设计•准确度相对比较高软件成本的成本估算(3)以代码量为基础:利用WBS方法,先把项目任务进行合理的细分,分到可以确认的程度,然后估算每个WBS要素的费用。前提:•完整准确限定的项目需求。•分析制作完成所必需的逻辑步骤。•编制WBS表。软件成本的成本估算(3)以代码量为基础:特征:•准确度最高•工作量大,估算工作本身也占据成本与进度•不仅可做项目估算,也可作为项目控制的依据。(二)软件报价软件报价的相关因素①软件成本②销售模式③市场战略软件的销售办法销售性质销售方法成本加权“一次收费”性光盘发行,网上下载注册中分期授权网上注册,出售许可证卡低分帐模式厂商OEM,捆绑销售,中低收取服务费ASP应用服务提供中用户定制项目招投标,系统集成最高软件的报价原则•个性化定制的越多,成本加权越高•产品化成熟度越低,成本加权越高•行业与专业特征越明显,成本加权越高同样功能和性能的软件产品,因为销售方式的不同,报价很可能相差巨大!市场战略最终决定软件的报价启动新兴市场扩大市场占有率打击竞争对手市场巩固和维护市场战略最终决定软件的报价抢占新兴市场没有明显的可比性价格试探受到客户心理承受能力约束与软件成本关联不大市场战略最终决定软件的报价扩大市场占有率市场成熟,出现竞争对手销售规模与销售单价获得平衡虽然与软件成本有关,但利润同样丰厚市场战略最终决定软件的报价打击竞争对手进入已有市场或受到竞争对手严重威胁以极低的价格或者不计短期成本的方式打击对手相对忽略软件直接成本,而更重视的是性价比以及综合竞争优势。市场战略最终决定软件的报价市场巩固和维护报价以获得客户忠诚度和满意度为原则价格与软件开发直接成本关联不大,而与服务成本有关。要点回顾•按照人月工资能够快速估算软件成本。•同样的软件有多种报价模式。•市场战略决定了软件报价。