敏捷软件开发和极限编程介绍.docVIP

  • 5
  • 0
  • 约2.31万字
  • 约 16页
  • 2017-11-30 发布于江西
  • 举报
敏捷软件开发和极限编程介绍

敏捷软件开发和极限编程介绍 0. 软件开发的本质 先让我们看看一般的产品生产: 例一,汽车生产。原材料、配件等采购完毕(我这里说到了采购配件,这相当于把部分功能的生产转交给其他职能公司。对应到软件生产的(子)项目外包。这个话题在本文就不扩展了),进入生产、组装、测试车间,进行一系列规定的工作流程。正常情况下,如果不发生不可抗拒的事件,那么可以按时完成合同规定的交付。这中间不会有什么变动性和不可预测性。 例二,再来看一个例子,比如某人想盖一栋房子,他想使用环保材料,当开发商给出房子的草图、价格预算,交给他时,他可能会改变主意。在建造房子的过程中,他的一些想法会逐渐明朗化。当房子盖好之后,实物呈现在他眼前时,原先他的那套装修想法也可能根据房子的实际样子来做调整,比如厨房的布局、主卧的装潢等。总的来说,事先的计划遇上了变化,站在“客户至上”的位置上,开发商业就要改变计划,满足客户的新需要。至于如何操作,那是合同谈判的事。客户改变想法是有理由的,因为原先那一套东西都是构筑在设计中的(纸质设计图,有的开发上会提供3D图形或动画),客户直到见到实物,才会有他进一步的,更明确的想法。 软件开发是也生产性的行业,他的产品是交付给客户的软件。类比上面的例子,软件开发更接近于建筑行业,需求会变动,每次生产的东西都不太一样,甚至大不一样。更例外的一点,软件开发的工作量和时间估计比建筑生产更具备不确定性。这种不确定性来自于需求变动、资金支持、技术风险、人员流动、质量控制、功能范围的确定等。 (另外,一般来说通常客户只能规定四个变量 “代价、时间、质量、范围”中的三个,另外一个就是开发团队来选择了,比如客户准备花$XXX在这个月底实现所有功能点;那么在压力下,质量的选择就是开发团队来确定了;否则就得调整客户选择的其他三个变量。——这四个变量之说来自《拥抱变化》,极限编程的开山之作。) 总的来说,软件生产的本质是具备创新性的新产品开发。 新产品开发有那些特征呢? · 不可能在前期创建一成不变的、详细的规格说明。 · 在开始阶段,很难进行预期分析。随着经验数据的出现,计划与估算的可能性才会相应增加。 · 在开始阶段,识别、定义、调度、和安排所有的细节活动都是不太可能的。通过构建反馈周期,可以推动自适应步骤。 · 一般情况是主动适应没有定义的变动,并且改动率比较高。 与创新性新产品开发对应的就是具备可预见性的制造。它可以有笨重的前期规格说明、估算、推测计划等。而新产品开发拒绝这些“可靠的”前期规格说明,理由是: · 客户或者用户不可能明确知道他们到底要什么。(需要通过逐步的交流和引导让其明确起来) · 他们很难陈述所有的需求和知识。 · 他们想要的许多细节只能在开发过程中逐步展现出来。 · 细节对于他们可能过于复杂。 · 当他们看到了产品的开发,他们将可能会改变初衷。 · 外部压力(比如竞争者的产品或者服务)导致需求的变更或者增加。 1. 近年来软件项目的一些统计数据以及一般性结论 正是因为软件开发不是循规蹈矩的可预见性的生产活动,而是具创新性的新产品开发活动,所以很多采用遵循可预见性产品生产方式的软件项目最终都以失败收场,不管是小企业还是知名企业。这是新产品开发肯定会有的情况,当然也有方法论的问题。 让我们来看一组软件开发领域的研究和统计数据,这些数据显示了近年来软件项目开发的基本情况: 图1.显示了一个对23,000个项目“成功实施—持续时间”的关系,这里的“成功”定义为“项目在资金预算和项目工期内完成,并具备所有预先指定的特征和功能”。(Standish98 Jim Johnson, et al. 1998. ChAOS: A Recipe for Success, 1998. Published Report. The Standish Group)(大家可以用这个定义来衡量一下自己公司的项目成功率如何。) 图1. 项目成功率和项目持续时间的关系图 (横坐标为项目持续时间(多少个月);纵坐标是项目成功的比率) 从这个图中,我们可以看出项目持续时间短的成功率比较高。可见小型项目易于成功。另外也有研究表明小团队的项目更易于获得成功。 图2. 显示了软件项目开展过程中增加进来的变动性因素的情况。项目大小以功能点来衡量,在图中对应横坐标;纵坐标表示需求的变动,仍以功能点为单位。(Jones97 Jones, C. 1997.

文档评论(0)

1亿VIP精品文档

相关文档