北京市软件开发项目概算指南
©版权所有International Business Machines Corporation2003。保留所有权利。
大多数软件项目失败。 实际上,Standish小组报告说,超过80%的项目失败,原因是它们超出预算,延迟,功能缺失或合并。 而且,有30%的软件项目执行得很差,以至于它们在完成前就被取消了。 根据我们的经验,使用Java,J2EE,XML和Web服务等现代技术的软件项目也不例外。 本文概述了提高软件开发项目的成功率的十大因素。 Standish Group等行业领导者还记录了软件项目的关键成功因素。
项目成功因素
1.招聘技术熟练和经验丰富的人员 -当今的环境比以往任何时候都更加复杂。 诸如WebSphere®Studio的工具帮助; 但是最后,没有经验的人充其量只能产生中等水平的结果,并且在大多数情况下会失败,因为他们不了解良好的项目管理和应用新技术的最佳方法。 优秀的项目经理和建筑师或技术负责人可以共同领导项目。 他们为项目定下基调,并对其最终成功产生巨大影响。 如果您拥有这种类型的资源,请很好地对待它们。 项目经理和技术负责人应与其他团队成员进行面谈,他们应该对谁加入团队拥有最终决定权。 团队的其他成员也需要具有高于平均水平的技能和经验。 表现欠佳的人需要不断的关注,通常永远不会“得到它”。 最后,他们通常会拖累团队并减慢进度。 但是,这并不意味着团队不能拥有初级人才。 通常,只要有机会,他们就会更有动力去做得更好。 例如,在一个由20人组成的团队中,可能有2位领导者,6位高级资源,9位中层资源和3位初级资源。 这个由20人组成的团队分为4个或5个小团队,每个小组由团队领导。 IBM软件服务和IBM全球服务 (IGS)具有经验丰富的项目经理,架构师,技术主管和顾问,可以为您的项目提供帮助。
2.使用前沿技术,而不是前沿技术 -许多财富500强公司已成功将成熟的技术(例如J2EE和WebSphere产品系列)用于对公司的业务方式产生重大影响的软件项目。 在某些情况下,有必要应用一种领先的技术,该技术有助于获得比竞争对手明显的优势。 但是,这种策略存在风险,在这种情况下,让优秀的人员参与该项目显得尤为重要。 因为很少有人有这种经验,所以获得外部专家的帮助很重要。 采用前沿技术或未经测试的技术的项目应考虑研究项目。 对新兴技术进行概念的早期证明可能会很有用。 但是,基于这种技术的项目可以以与采用更成熟技术的项目相同的方式或相同的成本交付,这是不现实的。
3.使用适当的开发过程 -现代软件项目的性质要求基于螺旋的开发过程,例如Rational Unified Process(RUP),迭代式IGS方法之一,甚至是敏捷方法,例如eXtreme Programming。 螺旋过程具有多个阶段,这些阶段可以逐步降低项目风险。 在每个阶段的最后,是一个通过或不通过的决定。 在早期阶段,原型用于开发团队或用户界面的新技术。 例如,RUP为每个阶段定义角色,任务和工件,以提醒项目团队需要为该项目考虑什么。 对于任何项目来说,最重要的因素不是使用哪个过程,而是如何很好地应用它。 项目经理和技术负责人需要相信并理解如何根据当前问题调整流程,以及如何使用最佳实践执行流程。 一个过程提供有关需要做什么的指导和提醒。 另一方面,过分偏离流程原则也是灾难的根源。 随附的文章“软件开发项目的最佳实践”有更多详细信息。
4.提供正确的工具 -任何软件项目都需要适当的工具来为团队提供生产力帮助。 工具包括正确的硬件以及设计,编程和测试生产力的帮助。 这些工具的成本合理性相对容易。 例如,假设像WebSphere Studio Application Developer这样的IDE每周可为程序员节省5个小时,而该程序员平均每小时为公司节省50美元。 显而易见,投资回报率(ROI)值得。 这同样适用于确保团队使用最新最快的PC进行开发,并提供了适当的测试环境以进行质量保证,用户接受和部署测试。 对新工具或技术的培训对于确保充分利用它们也至关重要。
5.使用源代码管理 -在项目开始时使用源代码管理(SCM)系统。 所有文档(不仅仅是源代码)都在SCM系统的版本控制下。 这使团队可以返回并查看项目的历史记录,并保留所有与项目相关的文档的先前版本的副本,例如用例,体系结构和设计文档以及测试脚本和计划。 我建议使用企业级SCM产品。
6.应用合理的估算技术 -大多数项目的进度进度超出了预期进度,从25%到100%,但是有些项目的进度进度预测准确度在10%之内。 没有准确的时间表估计,就没有有效计划的基础。 但是,在项目的早期阶段,时间和精力的估算是模糊的。 这些估计值应包括应急费用,并可能引用为+ 100%。 软件开发是逐步完善的过程,估计也是如此。 随着项目的进行,估算变得更加精确。 在项目结束时,实际的时间和精力是已知的。 大多数软件工程师倾向于低估,因此自然可以预期项目成本会有所增长。 估计时间表时,请注意不要包含太多时间表压缩。 在某些情况下,团队无法达成紧凑的时间表,最终,他们将大步错过。
7.将工作分解为微型里程碑任务 -微型里程碑是里程碑的较小版本。 主要里程碑是阶段或增量的结束。 为了达到这一点,项目在整个过程中需要微型里程碑。 迷你里程碑的耗时少于1-2天,以小时为单位。 优点是改进了状态报告,对是否遗漏了微型里程碑的情况进行了细粒度的控制,由于每天大约有一个微型里程碑而获得的动力得到了改善以及降低了计划风险。 为避免任何项目出现问题,建议从项目开始就使用微型里程碑。 记录和跟踪微型里程碑的最佳方法是使用电子表格。 来自诸如MicroSoft®Project之类的工具的项目计划更适合用于更高级别的任务。 自然地,只有当前阶段被细分为微型里程碑。 连续的阶段会及时细分。 尽管开发人员认为迷你里程碑不便,但此问题抵消了团队领导和单个开发人员定义自己的里程碑并分散项目管理和跟踪工作的能力。 通常,一旦开发人员将其分解为微型里程碑,技术主管定义的任务就会变得更大。 有时,技术负责人可能会建议更快或更可维护的替代方法,而在其他情况下,则同意任务分解,并且必须花更多时间分配给任务。 早期的小型里程碑计划工作可以防止潜在的灾难。
8.跟踪所有项目时间 -跟踪每个人在项目上花费的时间,而不仅仅是按小时支付的顾问和承包商,这一点很重要。 优点是可以将个人的小时数与计划的小时数进行比较。 如果该人已被转移到其他任务,则应采取步骤。 此外,将实际工时与估算工时进行比较,从而将估算的技术反馈给下一个项目阶段或下一个项目。 估算微型里程碑的已完成工时还可以提前发现任何超限情况,以便可以进行纠正。 使用微型里程碑技术需要技术主管,团队主管和单个开发人员的时间和精力。 至少每周一次,使用电子表格汇总每个开发人员的工作状况,以便项目经理可以更新每个较高级别任务的完成百分比。 这将项目管理负担分散到其他团队成员。 跟踪项目时间需要进行更多工作,但是它们提供了非常有效的项目管理。
9.唯一不变的就是变化 -对于大多数项目,需求每月变化不到5%。 这些变化的发生有多种原因,例如某人未能在正确的时间提出正确的问题,解决的问题已经改变,用户改变了主意或看法,商业环境发生了变化或市场发生了变化。 要素蠕变是成本和进度超支的最常见来源。 在项目的早期阶段,需求量很大。 在某个阶段(通常在第二阶段结束时),需要解决需求并基本上将其锁定。 然后,由“变更委员会”实施变更管理流程,该变更委员会由项目所涉及的每个领域的代表组成,例如业务,市场营销,开发,质量保证,用户文档,支持和项目管理。 变更委员会负责将变更分配给合适的人员,对变更进行澄清,并确定所有各方的估算。 有了足够的信息,变更委员会可以决定是接受还是拒绝变更。 接受更改后,将其添加到计划中并更改计划。 有更改的项目可能会比没有更改的原始计划晚交付,但是它仍然成功,因为它满足了修订后的时间表和利益相关者的期望。 在启动变更板后,如果变更超过5%的项目表示该项目定义不明确或无法控制,则可能会失败。
10.项目领导 -公司主管必须由负责并负责结果的单个主管来支持软件项目。 这位关键主管不仅提供愿景,而且通过获取和控制项目所需的资源来帮助支持团队。 同样重要的是,该主管不要干预或微观管理团队。 高管相信团队能够交付。
结论
本文提供了十个因素的列表,这些因素有助于提高软件开发项目的成功率。 通过遵循这些准则,您将有更大的机会在预算内和计划的时间范围内完成项目,维持一支高效的团队,并最大程度地减少功能变更。 请参阅Mike的有关最佳实践的随笔文章,即软件开发项目的最佳实践 。
翻译自: https://www.ibm.com/developerworks/websphere/library/techarticles/0306_perks/perks.html
北京市软件开发项目概算指南