敏捷开发
在敏捷开发中采用演进式架构设计,在敏捷开发的生命周期中,我们通过每一次迭代来丰富与更新我们的设计方案,以使其最大限度地符合客户对系统的需求。这里所指的需求,包括功能性需求和非功能性需求。敏捷开发过程的方法很多,主要有Scrum,Crystal,Feature Driven Development(FDD),Adaptive Software Development(ASD), Rational Unify Process(RUP),Test Driven Development(TDD),以及最重要的eXtreme Programming(XP)等。
一、极限编程
极限编程(XP)是敏捷方法中最箸名的一个。它是一种经历过实践考验的轻量级软件开发方法学。由一系列简单却互相依赖的实践组成。这些实践结合在一起形成了一个胜于部分结合的整体。从具体开发的角度来看,XP内层的过程是一个基于TDD的开发周期。
XP的生命周期是一个持续迭代的过程,每次都是一个个特征的定义、估量、选择和开发的迭代。它的增量过程如图:
XP的十二条惯例和规则
1. 现场客户(On-Site Customer)
2. 计划项目 (Planning Game)
3. 频繁地小规模发布软件 (Small Releases)
4. 简单设计 (Simple Design)
5. 测试驱动开发 (Test Driven Development)
6. 持续集成 (Continuous Integration)
7. 集体拥有代码 (Collective Code Ownership)
8. 编程规范 (Coding Standards)
9. 重构 (Refactoring)
10. 系统隐喻 (System Metaphor)
11. 结对编程 (Pair Programming)
12. 平稳的工作效率 (Sustainable Pace)
XP是最轻量级的开发流程,其最主要的精神是『在客户有系统需求时,给予及时满意的可执行程式』。
它开发流程的基本步骤为:
1.开发人员随时可以和客户进行有效沟通,撰写user stories以确认需求。
2.简易快速的系统设计,撰写独立的验证程式以解决特殊困难的问题,找出演算法即可丢弃验证程式。
3.规划多次小型阶段的专案计划,以最快速度完成每一阶段的程式交付客户,客户负责Acceptance tests;
4. Coding前必须完成Unit Test与Acceptance tests程序,所有模组整合前都须经过Unit Tests;
5.开发人员必须快速回应Bug与需求变更;
6.要求二人一组使用一台电脑设计程式,当一人coding时,另一人负责思考与设计;
7.程式必须符合程式规范,并常做程式的重整(Refactoring)。
二、Scrum开发流程
SCRUM开发流程是Agile Process的一种,以英式橄榄球争球队形(Scrum)为名,基本假设是『开发软体就像开发新产品,无法一开始就能定义Final Product的规程,过程中需要研发、创意、尝试错误,所以没有一种固定的流程可以保证专案成功』。 Scrum将软体开发团队比拟成橄榄球队,有明确的最高目标,熟悉开发流程中所需具备的最佳典范与技术,具有高度自主权,紧密地沟通合作,以高度弹性解决各种挑战,碓保每天、每个阶段都朝向目标有明确的推进,因此SCRUM非常适用于产品开发专案。
SCRUM开发流程通常以30天为一个阶段,由客户提供新产品的需求规格开始,开发团队与客户于每一个阶段开始时挑选该完成的规格部份,开发团队必须尽力于30天后交付成果,团队每天用15分钟开会检视每个成员的进度与计画,了解所遭遇的困难并设法排除。
三、RUP开发流程- Rational Unify Process
RUP为IBM Rational公司经过多年的研发与经验所提出的软体开发流程,其内容含盖Business modeling, Requirement Modeling, Logical Design, Implementation, Testing, Deployment等软体开发生命周期的直接工作,与Project Management, Change & Configuration Management,Environment support等支援性工作。 RUP的内容非常丰富,不同的专案需要不同调整,IBM Rational提供RUP workbench工具,方便调整RUP,并公布于Web,方便专案成员遵循统一的流程规范进行工作。
RUP的主要精神为:
1.专案进行采用Iterative程序分阶段渐进地完成专案功能;
2.广泛使用Visual Modeling于商业需求分析、系统分析与系统设计;
3.强调架构设计;
4.对每项工作所需要的技术、工具、做法、范本、检查项目均有详细的定义,架构完备且具有可调整的弹性。