极限编程

来源:互联网 发布:软件总体设计方案 编辑:程序博客网 时间:2024/04/28 21:02
极限编程
极限编程是一种轻量级的、灵活的、简单的软件工程方法。与传统的开发过程不同,极限编程的核心活动体现在需求——测试——编码——设计过程中。因此使用于规模小、进度紧、需求变化打的项目。它希望以最高的效率和质量来解决用户目前的问题,以最大的灵活性和最小的代价来满足用户未来的需求。
在传统的软件系统开发中,系统需求是在项目开发的开始阶段就确定下来的,并在之后的开发过程中保持不变的,这就意味着从进入项目开发到之后的所有阶段出现的所有需求变更,将导致开发成本急速增加。极限编程是一种轻量级的、灵巧的、简单的软件工程方法,适合于12人以下的开发团队,它的主要目标在于面对商业软件系统环境做出了务实的选择,力求降低需求变更而带来的成本增加,进而提高软件的开发效率。
极限编程简介
极限编程(简称XP)是一种敏捷开发方法,供中小型组用于开发需求快速变化的软件。它是由美国软件工程专家Kent Beck对极限编程这一创新软件过程方法进行了解释:“XP是一种轻质量、高效、低风险、柔性、可预测、科学而充满乐趣的软件开发方法。” 极限编程是价值而非实践驱动的高度迭代的开发过程。其价值体现在以下几个方面“第一,简单:在XP中,简单被定义为“在管用的前提下,做简单的事情”即实现最简单的可行方案。XP认为应该尽量保持代码的简单,只要能够满足工作需要就行,这样有利于代码重构和优化。第二,交流:所有的方法都包含在交流过程中,而在XP中,这是其核心价值观。它侧重与口头交流,XP追求有效的交流,而且强调项目开发人员、设计人员、客户之间的等有效的、及时的交流,确保各种信息的畅通。第三,反馈:反馈对于任何项目的成功都是生死攸关的,在XP中,有关软件状态的问题是通过持续的、明确的反馈来回答的。通过反馈,大道迅速交流、编码、测试、发布项目的。第四,勇气:即勇于放弃和重构,对于用户的反馈,XP程序员要勇于对自己的代码进行修改,即使有些修改可能会使得原来已经通过的测试又出现错误,但是经过团队的共同攻关,最终必然会取得满意的效果。
极限编程的开发过程及特点
与传统的开发过程不同,极限编程的核心活动体现在需求——测试——编码——设计过程中,因此对工作环境、需求分析、设计、编程、测试、发布等提出了新的思路和需求。
工作环境:XP要求每个参加项目开发的人都担任一个角色,并履行相应的权利和义务。所有的人都在一个开放式的开发环境中工作,最好是在同一个大房间中工作,随时讨论问题,强调每周40小时工作制度,不加班。
需求分析:客户被纳入开发队伍。由于客户不具备计算机专业知识,无法用专业术语明确的描述需求,所以开发人员和客户在一起,用讲故事的方式把需求表达出来,开发人员根据经验将许多故事组合起来,或将其进行分解,最终记录在小卡片上,这些故事讲陆续被程序员在各个周期内,按照商业价值、开发风险优先顺序逐个开发。
设计:XP强调简单设计,即用最简单的办法实现每个小需求。在XP中,没有哪种传统开发模式中一次性的、针对所有需求的总体设计,这些设计只要能够满足系统客户在当前的需求就可以了,不需要考虑将来可能的变化,整个设计过程包括在整个螺旋式发展的项目中。
测试:XP开发人员在编写代码之前进行测试,而不是在开发完成后再进行测试。开发人员编写单元测试,对方法以及可能出现问题的每个地方进行测试。编写好对针对组件的所有测试后,开发人员只编写刚好能够通过测试的代码。编写这样的测试将为系统提供一套完整的测试,而我们只编写最简单的,能够管用的代码。仅当类通过了所有的测试,编写工作才算完成。所有这些测试是极限编程开发过程中最重要的文档之一,也是最终交付给用户的内容之一。
编程:结对编程是极限编程的一大特色,即两个人一起使用同一个屏幕,同一个键盘,共同完成一段程序的编码。结对编程的好处是,可以提高纪律性,更容易写出优质代码,同时保证编程的流畅进行,更重要的是,能够使得整个团队更方便的分享编程经验,有利于新手快速成长。
发布:XP要求按照开发计划,每经过一个开发周期,软件就发布一次,而不是像传统的开发方法那样,整个软件开发完后才发布。在一个开发周期内,开发人员要求客户选择最有价值的user story作为未来一两个星期的开发内容,一个开发周期完成后,提交给客户的系统虽然不是最终的产品,但是他的内容已经实现了几个客户认为是最重要的story ,开发人员将逐元测试盒集成测试,因此,虽然软件并不完备但是,发布的软件客户还是可以真正使用的。
极限编程的优点
对公司的开发者而言,XP可以让开发者专注于编写代码,避免了不必要的文案工作及会议。它营造了更好的工作氛围,更多学习新技术的机会,并令你的员工有成就感。
相比于传统开发方式,通过XP开发的软件缺陷更少。它令公司对其商业需求的变化做出更快速的反应,而且价格低廉,开发者也少有怨言。
从公司管理的角度来看,这种方法可以减少你对牛人的依赖。同时它也提升了员工满意度。
在XP下,你无需设计未来。你设计今天。整个理念就是,写简单代码,以及在需求改变的时候相应的改变你的设计。
. 你的开发人员是两人结队编程,从头到尾都在一起工作。代码有着统一的规范性和可读性,大家都能够理解代码并按照需求改善代码。而且,结队编程在一定时间内是最有效率的。
XP项目与传统软件开发的最大区别在于,XP是以测试推动开发。在XP下可以在编写代码之前开始测试。每一个环节的代码都要100%通过单元测试。没有unit-level bug和回归bug也意味着开发者能够专注他们自己的工作。你的客户确立自动验收测试以确认该软件的每一个功能的运行质量。
在XP下,每一个测试阶段之后都可以发布一个小体积软件。最重要的是,每一阶段完成时都有些东西能够拿给客户看。
在传统流水线方式下,如果项目计划变更,之后要赶上档期就会需要很大投入。XP的方法可以令你提前判断进程。
极限编程从最简单的解决方案入手。你可以在之后添加其他功能。这个概念的目的在于为今天做计划,设计及编码,而不是为了明天。
来自系统,客户和团队的反馈是极限编程成功的关键。在这个概念的指导下,系统的漏洞在前期就被发现,客户可以反复进行验收测试,从而最大限度的降低你产品中的错误。
极限编程的缺点:    其缺点主要表现为:(1)以代码为中心,忽略了设计;(2)缺乏设计文档,局限于小规模项目;(3)对已完成工作的检查步骤缺乏清晰的结构;(4)质量保证依赖于测试;(5)缺乏质量规划;(6)没有提供数据的收集和使用的指导;(7)开发过程不详细;(8)全新的管理手法带来的认同度问题;(9)缺乏过渡时的必要支持
极限编程的运用
XP适用于规模小、进度紧、需求变化大、质量要求严的项目。它希望以最高的效率和质量来解决用户目前的问题,以最大的灵活性和最小的代价来满足用户未来的需求,XP在平衡短期和长期之间做了巧妙的安排。 
    我国的软件开发过程经常存在一些问题,如:客户需求变化频繁、系统支付时间一推再推、交付系统错误层出不穷、因程序员半途跳槽而导致工作不能顺利完成、需求估计不足、因程序员之间交流少而导致代码重复开发、文档不能真实地反映实际情况等等。为了有效地克服上述问题,软件机构在项目开发时,有意识地采用XP方法,并且取得了一定效果。通过对这些应用的总结,可以概括出,XP应用确实具有一定的适用范围,而应用成功的关键在于,充分认识XP应用过程中的优缺点,在保持组织既有的开发过程和生命周期模型的前提下,结合应用类型、项目特点和组织文化,借鉴、汲取个别对项目有效的XP方法,在领会其精神实质的基础上灵活运用,而不是全部照搬硬套。另外以下几个问题也是在应用中需要注意的: 
    1、不同方法的目标对象和适用环境各不相同,学习和运用流行的过程方法论是实施过程改进的好办法,但在具体应用过程中,应整合其最佳元素,设计出适合具体实际项目的过程体系。 
    2、在软件工程实践中要充分把握好开发技能、软件过程和组织管理各个要素的平衡,不能偏重某一方面,轻视另一方面; 
    3、在应用XP时,应该首先从基本实践入手,逐渐深入到扩展性实践,因为基本实践彼此独立,互不影响,而扩展性实践则是建立在某些基本实践的基础上的,而且要采取循序渐进、迂回反复(迭代)的策略,而不是一步到位,这样容易取得成功。 
    我国目前许多开发机构中已经使用了XP方法,但是,由于XP理论本身仍然
    处于不断完善和改进阶段,另外具体的开发项目也有各自的特点,因此,如何更好地将其应用到实际的项目开发过程中还需要进一步深入研究。

0 0