极限编程优势与局限性探讨

时间:2022-08-25 10:19:16

极限编程优势与局限性探讨

[摘 要] 本文首先提出了传统开发方法面临的问题,然后介绍了极限编程的优势和局限性,最后给出极限编程的适用范围。

[关键词] 极限编程;敏捷开发

[中图分类号] TP311.52 [文献标识码] A

由Kent Beck提出的Extreme Programming(XP)规定了一组核心的价值观和方法,它消除了重量型软件过程的不必要产物,从而减轻了开发人员的负担。极限编程是一种轻量、高效、低风险、柔性、可预测、科学且充满乐趣的软件开发方式。极限编程承诺降低项目风险,改善对业务变化的反应能力,在系统的整个生命周期内提高生产力。在很大程度上解决了传统软件开发面临的问题。

1 传统软件开发面临的问题

自从在软件行业引入工程的概念后,软件工程的研究成为软件行业的重要内容。传统的软件工程方法强调详细的规划和设计,使用大量的文档资料来保证软件产品的质量,在很大程度上解决了“软件危机”中出现的问题。但随着软件行业的不断发展,越来越多采用传统软件开发方法的项目依然存在各种不同问题,集中表现在以下三个方面:

1.1 无法应对需求的不断变化

在软件工程中,需求分析是软件开发的首要环节,也是软件开发的一个重要阶段,它直接决定着下一阶段的项目设计和规划的质量,可以说是决定整个项目成败的关键。但在实践中,由于需求分析人员经验、技能和水平的差异,以及客户自身知识和水平的限制,常常无法准确把握客户所有的需求。随着开发过程的进行,客户软件知识逐步增加,软件部署环境也会不断发生变化,客户会不断提出新的需求,满足客户新的需求会导致项目整体规划和设计的变化,造成已有人员、资金、时间等资源的浪费,影响项目正常进度的实施。另外传统开发方法多数采用一次性详细规划和设计,在开发中后期修改较为困难,严重时会导致整个项目从头再来。因此,传统开发方法难以应对客户不断变化的需求。

1.2 软件产品质量低下

虽然在传统软件开发过程中有严格的单元测试、集成测试、系统测试等多个测试环节,但随着系统规模的不断扩大,系统的复杂性不断增加,各个测试环节并不能发现全部的问题。加上软件部署环境下的硬件、软件、网络等多方面因素的影响,软件产品在交付后总会出现这样那样的问题,造成客户对项目的满意度降低。出现这种现象的根本原因在于项目开发机制和开发方法的影响。

1.3 项目风险较大

传统软件开发多采用结构化模块式设计,由项目经理将各功能模块分发给不同人员实现,然后再进行集成。这就造成系统某个功能模块由某个项目组成员实际控制,其他人都不熟悉。这样如果负责系统关键模块的人员流失,就会给项目开发带来很大的风险,影响项目的进度和产品质量。另一方面,项目组为了满足客户不断提出的部分新需求,被迫修改项目规划和设计,造成项目资源的浪费,常常会造成项目经费不足、项目进度无法实现等问题,无法如约履行与客户的合同。即使为如期交付软件系统而赶进度完成了项目,也会降低产品的质量,从而给项目带来极大的风险。

2 极限编程的优势

极限编程作为一种新型的敏捷开发方法,以产品质量为核心,综合采用了软件开发中的各种实践手段和方法,可以很好地解决上述传统软件开发方法所遇到的问题。

2.1 适应快速变化的项目需求

极限编程采用逐步规划,进化式设计的方式进行项目规划设计。项目组首先根据已知因素制定整体计划,然后根据项目环境和客户需求变化不断修改规划。进化式设计只考虑当前有用的功能和设计,不考虑将来可能的需求,而将可能需求放在必要时予以实现,从而使设计较好的适应最新项目进展,最大限度满足客户需求。这样可以提高软件产品质量和客户满意度,并能避免可能的开发资源浪费。

极限编程采取现场客户的工作方式,即客户在项目开发全过程和项目组一起现场工作,随时和项目组成员交流,对项目进行即时有效的反馈。这种现场客户的工作方式,可以让项目组及时发现项目目标与客户需求之间的差距,及时征求客户意见,得到客户反馈,尽早发现问题解决问题,从而避免项目返工和修改造成的资金、时间等资源的浪费。

2.2 保证较高的产品质量

质量是极限编程的核心,为了保证软件产品的质量,极限编程采用测试先行、持续集成等措施,并在设计中采用简单性原则。测试先行是在编写程序代码之前编写测试代码。传统开发方法中测试代码通常在程序代码后编写,这样测试代码会受程序员个人先入为主的影响。测试先行的方法避免了程序员先入为主的主观影响,使测试更客观更全面。持续集成是项目开发过程中系统各模块在开发过程经常性进行集成,通常每天进行一次或多次集成。持续集成可以及早发现集成中出现的问题,将问题解决在萌芽阶段,这样就避免了常见的大规模集成中出现大量问题的现象,防止在后期项目集成时风险过高。简单性原则即在项目规划、设计和实现时尽可能保持简单。在满足客户需求的前提下的简单可以保证系统的可靠性。从系统工程的角度而言越简单的系统可靠性越高,越复杂的系统则越脆弱。极限编程中的简单性原则,不但可以保证系统的可靠性,而且还可以避免不必要的功能的开发,节约项目资源,保证项目实施进度。测试先行、持续集成、简单性原则等措施和极限编程的其他措施一起保证了软件产品的较高质量。

2.3 降低项目风险

传统项目开发中常常存在人员流失和预定进度无法实现等风险。极限编程采用代码集体拥有和频繁的开发机制。代码集体拥有即项目组所有成员都可以对系统代码的任何部分进行修改。这样系统代码由项目组集体拥有,避免了部分代码由某个人单独控制的现象,即使部分项目组成员流失,也不会对项目开发造成重大影响。频繁是项目组经常进行功能性的,向客户展示项目组的阶段性成果,一方面有利于确认客户需求,避免开发中走弯路;另一方面有利于进一步的规划和设计,可以不断精确控制项目时间进度,按指定日期完成项目。频繁还有利于提高项目组成员的成就感和开发信心。

3 极限编程的局限

极限编程作为一种优秀的敏捷开发方法,有其不可替代的优势,但同时因其独特的开发机制和措施,极限编程也有其自身局限性,主要有以下几个方面。

3.1 团队规模有限

极限编程不特别依赖正式文档,重视口头交流。因为口头交流相对文档交流更直接、效率更高。但如果团体规模过大,团队成员之间全面的相互口头交流将会变得比较困难。同时极限编程实现代码集体拥有,项目组成员可以任意修改所有代码,如果项目组成员过多,这种修改将会变得难以预料、无法控制,因此团队规模必须得到控制。在实践中采用极限编程进行开发的团队规模通常在10人以下。

3.2 文化认同有一定难度

极限编程采用结对编程的工作方法。结对编程即两个人在一台电脑前协同工作,一起进行项目设计、测试和开发。这对部分个性鲜明的程序人员来说可能是无法接受的,同时项目领导也可能会对两个人共同工作的效率和效果不信任。极限编程为了保持项目组成员的工作热情和工作效率,提倡每周工作40小时,这一点对于一些急欲完成项目的项目领导来说是无法接受的。因此要实施极限开发的项目必须要求项目团队领导和团队成员认同和接受极限编程的文化。

3.3 对项目组成员要求较高

实施传统开发方法的项目组通常分工较细,项目组成员分别负责设计、开发、测试等不同工作。但实施极限编程的项目组成员要完成设计、测试和开发等多种工作。因此要求项目组成员具有较强的综合素质和多方面的工作能力。这一点对于项目团队的组建具有较高的难度。

4 极限编程的适用范围

极限编程以其优秀的特性受到了众多程序人员和项目组的青睐。根据极限编程的特性及其应用情况,极限编程在以下情况下应用较为合适。

4.1 需求变化大的项目

极限编程可以适应快速变化的项目需求,因此在需求变化较大或需求不够明确的项目中适宜采用极限编程开发方法。

4.2 开发风险高的项目

极限编程采用代码集体拥有、频繁等措施,在降低项目开发风险方面具有较好的效果。如果项目开发风险较高,采用极限编程开发方法可以极大限度地降低项目的开发风险,保障项目的顺利完成。

4.3 人员精干的团队

极限编程开发方法对项目团队要求较高,要求团队人员具有设计、开发、测试等多种能力。对于人员精干的团队来说,团队规模较小且团队成员具有较强的工作能力,因此适合采用极限编程进行项目开发。

参考文献:

[1]冯山,陈世平等.XP―适合中小型软件系统的敏捷方法[J].西南石油学院学报,2003,12.

[2]卜鸥.多层次极限编程及应用范围扩展[J].重庆师范学院学报(自然科学版),2003,6.

[3]钟琪,何俊梅,张为群.基于极限编程的统一过程探讨[J].西南师范大学学报(自然科学版),2004,4.

[4]芮雄健,王忠民.基于敏捷软件开发方法的基金管理信息系统开发[J].计算机应用,2004,11.

[5]张战波.空管软件开发过程的极限编程实践[J].中国民航学院学报,2004,10.

[6]杜荣华,龚德俊等.极限编程在大型项目开发中的应用[J].交通与计算机,2004,6.

[7]熊斌贝,陈海.结对编程成本与收益之探[J].计算机与现代化,2004,11.

[8]黄敏.用极限编程解决软件开发项目中的常见问题[J].电子科技,2004,3.

[9]李航.敏捷型软件开发方法与极限编程概述[J].计算机工程与设计,2003,10.

[10]邓靖颖,黄穗.敏捷开发:极限编程在管理信息系统开发中的实践探讨[J].计算机工程,2004,12.

[11]Radmila Juric.Extreme Programm-

ing and its Development Practices[M].22"' Int. Conf. lnformation Technology lnterfaces /TI 2000(June):13-16,2000.

[12]Barry Boehm.The Agile Methods Fr-

ay[J].Tom DeMarco, computer,2002,June.

[13]James E.Tomayko,Carnegie Mellon.Teaching Extreme Programming Remotely[M].Proceedings of the 18th Conference on Software Engineering Education & Training (CSEET’05).

[14]Grel Hedin, Lars Bendix, Bo ris Magnusson.Introducing Software Engineering by means of Extreme Programming[C],Processings of the 25th International Conference on Software Engineering(ICSE’03).

上一篇:宁要“诚实的失败”不要“虚假的成功” 下一篇:大学物理实验中如何培养学生的创新思维能力