敏捷开发方法,是一种理念。一种我看来很新颖的理念。我以前编程实践中,常常将预编程序的各方各面都准备好才动手编程,而且所编程序往往只有一个版本。而且这个版本,还是我预想版本的功能缩减版。也就是点子多,能力短。学习了敏捷开发,我希望我在编程实践中能够运用,提高自己的程序质量,项目质量,为团队开发做些思想上的准备。
下面,我想总结一下敏捷开发方法。
极限编程XP篇
极端编程(eXtreme Programming)是一种开发纪律,以简单性、交流、反馈和勇气为基本宗旨。它的做法是以有效的实践规则将整个团队紧密联系起来,通过充分的反馈使团队随时知道自己目前的状况和恰当的调节规则以适应自己的特殊情况。
核心实践:简单设计,成对编程,测试优先开发,设计改进
极端编程队伍会总是保持系统能够集成并且在所有的时间运行。程序员以成对的方式编写所有的产品代码,并且在所有时间内都共同工作。他们以相似的形式编码以保证所有成员都可以按需要理解和改进所有的代码。
Scrum篇
Scrum的基本假设是:
开发软件就像开发新产品,无法一开始就能定义软件产品最终的规程,过程中需要研发、创意、尝试错误,所以没有一种固定的流程可以保证专案成功。Scrum 将软件开发 团队比拟成橄榄球队,有明确的最高目标,熟悉开发流程中所需具备的最佳典范与技术,具有高度自主权,紧密地沟通合作,以高度弹性解决各种挑战,确保每天、每个 阶段都朝向目标有明确的推进。
Scrum 开发流程通常以 30 天(或者更短的一段时间)为一个阶段,由客户提供新产品的需求规格开始,开发团队与客户于每一个阶段开始时挑选该完成的规格部分,开发团队必须尽力于 30 天后交付成果,团队每天用 15 分钟开会检查每个成员的进度与计划,了解所遭遇的困难并设法排除。
Scrum较传统开发模型的优点
Scrum模型的一个显著特点就是响应变化,它能够尽快地响应变化。
精益软件开发篇
精益原则:
尊重一线人员;消除浪费;增强学习;尽量延迟决定;嵌入质量;快速交付;整体优化。
因为软件开发通常具有一定的不确定性,基于多种选择的方法能够达成更好的结果,尽可能的延迟决定,直到能够基于事实而不是不确定的假定和预测来做出决定。系统越复杂,那么这个系统容纳变化的能力就应该越强,使其能够具备推迟重要以及关键的决定的能力。
动态系统开发篇
Dynamic System Development Management
动态系统开发方法(DSDM)是众多敏捷开发方法中的一种,它倡导以业务为核心,快速而有效地进行系统开发。实践证明DSDM是成功的敏捷开发 方法之一。
原则1:用户必须持续参与 ;
原则2:必须授予DSDM团队制定决策的权利;
原则3:注重产品的经常交付;
原则4:满足业务用户用途是接受交付品的主要依据
原则5:迭代和增量式开发对得到正确的业务解决方案是必不可少的;
原则6:开发过程的所有变化可逆;
原则7:在高层次上制定需求的基线;
原则8:测试自始至终贯穿于开发周期之中;原则9:所有项目涉众间的通力合作是不可获缺的;
对于具有以下特性的应用,DSDM特别适合:
1、交互式、功能通过用户界面体现。
2、有清晰的用户群。
3、没有复杂计算。
4、如果是大型应用,可以分解成小的功能部件。
5、有时间限制。
6、需求不清楚或不确定
特性驱动开发篇
它强调特性驱动,快速迭代,即能保证快速开发,又能保证适当文档和质量,非常适合中小型团队开发管理。它提出的每个功能开发时间不超过两周,为每个用例user case限定了粒度,具有良好可执行性,也可以对项目的开发进程进行精确及时地监控。它抓住了软件开发的核心问题领域,即正确和及时地构造软件。FDD还打破了传统的将领域和业务专家/分析师与设计者和实现者隔离开来的壁垒。分析师被从抽象的工作中解脱出来,直接参与到开发人员和用户所从事的系统构造工作中。
由5个活动组成:1. 开发一个全局的模型;2. 建立特征列表;3. 依据特征规划;4. 依据特征设计;5. 依据特征构建。
水晶开发篇
水晶项目开发描述:
总设计师和2~7个开发人员
在一个大办公区或相邻办公室里;
使用白板和挂图等信息传播器;
方便联系到专家用户;
干扰已经排除;
每个月或两个月, 最长一个季度把可运行、测试过的、有用代码交付给用户;
周期性地反思和调整工作惯例;
水晶项目开发核心特征:
经常交付;
--项目主办者根据团队的工作进展获得重要反馈;
--用户有机会发现他们原来的需求是否是他们真正想要的, 有机会将观察结果反馈到开发当中
--团队得以调整开发和配置的过程, 并且可以鼓舞士气
--规定Timing Box确定最终的迭代交付时间点
反思改进;
--反思研讨会
渗透式交流;
个人安全;
--当您指出困扰您的问题时,不用担心受到打击和报复
--知无不言, 言无不尽
--不会因为承认自己的无知而受到伤害
--学会理解他人的形式方式, 甚至是在激烈讨论的时候
--意识到只有团结才能解决单凭个人不能解决的问题
--团队成员间友善的氛围, 有善意聆听的意愿
焦点;
--每个成员都知道他们最重要的两件优先任务是什么
--所有成员都能保证有连续两天、每天有两个小时不被打扰来开展工作
--Focus Time禁止打扰
与专家用户建立方便的联系;
--与实际用户取得直接联系
--制定评审和交流计划
--每周或者每半周举行一次用户会议, 或者团队自身就拥有一个或者一个以上富有经验的用户
--帮助小组、用户界面原型开发、采访、测试、公告牌、可用性实验室、观察研究、焦点小组
拥有自动化测试、配置管理、经常集成的技术环境;
--自动化测试
--配置管理
--经常集成
水晶项目开发方法:
Methodology shaping
反思研讨会:Keep, Problem, Try
闪电式计划
Delphi估计
每日起立会议
实质性交付设计
流程微观模型
肩并肩编程
燃烧图表