`
阅读更多

敏捷软件开发是自上世纪90年代Kent Beck提出极限编程【XP】时开始兴起的,这种编程方法用一组价值标准、原则和实践来规划、编码、设计和测试软件;随后很多公司或者是牛人都提出了很多自己所实施敏捷的一些方法、方式;归纳起来有以下一些:XP【 eXtreme Programming 】、Scrum、Crystal、FDD【 Feature Driven Development 】、ASD【 Adaptive Software Development 】、DSDM【Dynamic Systems Development Method】、TDD【 Test Driven Development 】、LSD【Lean Software Development】等;虽然说各种实施方式方法各不相同,但是所体现的思想是完全相通的,他们的目标基本上都是:减少浪费、提高效率、改进质量 ;于是在2001年成立了敏捷联盟【Agile Alliance】,并且发布了敏捷软件开发宣言以及相关设计原则;

敏捷软件开发宣言

  • 个人和交流     胜过 过程和工具【Individuals and interactions over processes and tools】
  • 可用的软件     胜过 面面俱到的文档【Working software over comprehensive documentation】
  • 与客户沟通和交流  胜过 合同谈判【Customer collaboration over contract negotiation】
  • 响应变化        胜过 遵循计划【Responding to change over following a plan】

虽然右项也有价值,但是我们认为左项具有更大的价值:

  • 我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。
  • 即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。
  • 经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。
  • 在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。
  • 围绕被激励起来的个体来构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。
  • 在团队内部,最具有效果并富有效率的传递信息的方法,就是面对面的交谈。
  • 工作的软件是首要的进度度量标准。
  • 敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。
  • 不断地关注优秀的技能和好的设计会增强敏捷能力。
  • 简单是最根本的。
  • 最好的构架、需求和设计出于自组织团队。
  • 每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。

当软件开发需求的变化而变化时,软件设计会出现坏味道,当软件中出现下面任何一种气味时,表明软件正在腐化:

  • 僵化性: 很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的其它改动。
  • 脆弱性: 对系统的改动会导致系统中和改动的地方在概念上无关的许多地方出现问题。
  • 牢固性: 很难解开系统的纠结,使之成为一些可在其他系统中重用的组件。
  • 粘滞性: 做正确的事情比做错误的事情要困难。
  • 不必要的复杂性: 设计中包含有不具任何直接好处的基础结构。
  • 不必要的重复性: 设计中包含有重复的结构,而该重复的结构本可以使用单一的抽象进行统一。
  • 晦涩性: 很难阅读、理解。没有很好地表现出意图。

敏捷团队依靠变化来获取活力。团队几乎不进行预先设计,因此,不需要一个成熟的初始设计。他们更愿意保持设计尽可能的干净、简单,并使用许多单元测试和验收测试作为支援。这保持了设计的灵活性、易于理解性。团队利用这种灵活性,持续地改进设计,以便于每次迭代结束生成的系统都具有最适合于那次迭代中需求的设计。为了改变上面软件设计中的腐化味,敏捷开发采取了以下面向对象的设计原则来加以避免,这些设计原则如下

  • 单一职责原则(SRP/Single Responsibility Principle) :就一个类而言,应该仅有一个引起它变化的原因。
  • 开放-封闭原则(OCP/Open-Close Principle) :软件实体应该是可以扩展的,但是不可修改。
  • Liskov替换原则(LSP/Liskov Substitution Principle) :子类型必须能够替换掉它们的基类型。
  • 依赖倒置原则(DIP/Dependency Invertion Principle) :抽象不应该依赖于细节。细节应该依赖于抽象。
  • 接口隔离原则(ISP/Interface Separate Principle) :不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。
  • 重用发布等价原则(REP/Reuse Equivalence Principle) :重用的粒度就是发布的粒度。
  • 共同封闭原则(CCP/Common Close Principle) :包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。
  • 共同重用原则(CRP/Common Resue Principle) :一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。
  • 无环依赖原则(ADP/Acyclic Dependency Principle) :在包的依赖关系图中不允许存在环。
  • 稳定依赖原则(SDP/Stabilization Dependency Principle): 朝着稳定的方向进行依赖。
  • 稳定抽象原则(SAP/Stabilization Abstract Principle) :包的抽象程度应该和其稳定程度一致。

敏捷软件开发实践

那我们如何来开展敏捷呢,一般来说,有很多的实践是所有敏捷开发都具备的,当然如果你们的团队已经具备了这样的特征,那说明你们已经踏上了敏捷之路,可能你们自己并没有意识到;比如:强调任何的功能都需要有测试用例和测试代码 、非常多的短迭代 、坚持持续集成 、不断的考虑重构 、尝试结对编程 、开始抛弃瀑布模型转而使用项目墙 、每次项目后坚持PPR 、每日开展standup meeting ……

PS:关于敏捷其实有非常多的理论基础,各种敏捷方法也都有自己所专注的地方,更多的信息可参考:

敏捷开发介绍:http://www.itisedu.com/phrase/200603291800375.html

SOA 和敏捷方法基础:http://www.ibm.com/developerworks/cn/webservices/ws-agile1/

敏捷联盟:http://www.agilealliance.org/

TW首页:http://www.thoughtworks.com.cn

敏捷(agile)开发与极限编程(XP):http://blog.csdn.net/mood8125/archive/2006/01/21/585354.aspx

敏捷软件开发模型--SCRUM:http://www.cnblogs.com/Ring1981/archive/2006/09/07/496591.html

分享到:
评论

相关推荐

    敏捷开发之Scrum扫盲篇

    **敏捷开发之Scrum扫盲篇** 敏捷开发是一种软件开发的方法论,强调适应性、灵活性和团队合作,以快速响应变化并提供高质量的产品。Scrum是敏捷开发中的一个框架,它以其高效、迭代和增量的特性深受业界欢迎。本文将...

    敏捷开发基础.ppt

    敏捷开发是一种以人为核心、迭代、逐步交付的开发方法论,旨在提高开发团队的灵活性和应对变化的能力。在“敏捷开发基础.ppt”中,主要介绍了敏捷开发的价值观、核心理念以及实践工具,如持续集成和自动测试,这些都...

    敏捷开发AgileDevelopment.ppt

    敏捷开发AgileDevelopment.ppt 软件工程技术

    火星人敏捷开发手册 2012-12-31(修正了页眉)

    ### 火星人敏捷开发手册 2012-12-31(修正了页眉) #### 敏捷开发概述 敏捷开发是一种强调快速响应变化、注重团队协作、持续交付高质量产品的软件开发方法论。它提倡通过短周期迭代的方式,使产品能够更快地适应...

    火星人敏捷开发手册-免费的Scrum开发过程手册 2011-07-21

    ### 敏捷开发与Scrum方法论 #### 一、Scrum敏捷开发概述 **火星人敏捷开发手册**是一份基于Scrum敏捷方法的免费教材,旨在帮助企业内部小组进行敏捷开发的培训。该手册不仅提供了关于Scrum的基本概念,还深入讲解...

    敏捷开发-Scrum.pptx

     Scrum敏捷方法一分钟扫盲  Scrum敏捷方法丨的工作产品  Scrum敏捷方法丨的觇色  猪不鸡的故亊 Scrum过程 读前预习内容  创建和维护产品待开収项(Product Backlog)  迭代计划会 产品负责人准备什么?...

    火星人敏捷开发手册 2012-02-29

    ### 火星人敏捷开发手册 2012-02-29 #### Scrum基本知识 **Scrum概述** Scrum是一种基于敏捷原则的项目管理框架,旨在通过迭代的方式快速交付高质量的产品。其核心思想是通过短周期的迭代(通常称为Sprint)来...

    火星人敏捷开发手册 2012-08-15

    ### 火星人敏捷开发手册 2012-08-15 #### Scrum基本知识 **Scrum概述** Scrum是一种基于敏捷原则的项目管理框架,旨在通过迭代的方式快速交付高质量的产品。其核心思想是通过短周期的迭代(通常称为Sprint)来...

    《企业敏捷转型案例》之腾讯的敏捷玩法就是不一样!

    推广期则进一步设立了内部顾问团队,开发扫盲课程,不断对各个团队进行培训,以促进敏捷理念的传播和接纳。然而,腾讯面临的挑战包括团队规模和应用方法的差异,多元化产品的研发需求,过程改进中的不适应性,以及新...

    cmmi瀑布模型.rar

    综上所述,这些文件内容涵盖了CMMI的理论基础、不同成熟度级别的比较、CMMI与敏捷开发的对比,以及可能需要的辅助阅读工具。理解并运用这些知识,可以帮助组织提升软件开发过程的规范性、效率和质量,同时适应不同的...

    软件测试的技术学习路线图

    首先,需要了解常见的软件开发流程及模型,主要了解敏捷开发相关知识。然后,需要学习软件测试的定义、分类、测试的流程、测试用例编写方法以及缺陷(bug)的管理及生命周期。其次,需要了解Web端和App的常见测试点...

Global site tag (gtag.js) - Google Analytics