`
brofe
  • 浏览: 232868 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

什么是敏捷开发

阅读更多

  人与人之间的交互是复杂的,并且其效果从来都是难以预期的,但却是工作中最重要的方面。

  -- Tom DeMacro和Timothy Lister

  敏捷软件开发宣言:

  n 个体和交互 胜过 过程和工具

  n 可以工作的软件 胜过 面面俱到的文档

  n 客户合作 胜过 合同谈判

  n 响应变化 胜过 遵循计划

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

  敏捷宣言遵循的原则:

  n 我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。

  n 即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。

  n 经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。

  n 在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。

  n 围绕被激励起来的个体来构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。

  n 在团队内部,最具有效果并富有效率的传递信息的方法,就是面对面的交谈。

  n 工作的软件是首要的进度度量标准。

  n 敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。

  n 不断地关注优秀的技能和好的设计会增强敏捷能力。

  n 简单是最根本的。

  n 最好的构架、需求和设计出于自组织团队。

  n 每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。

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

  n 僵化性: 很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的其它改动。

  n 脆弱性: 对系统的改动会导致系统中和改动的地方在概念上无关的许多地方出现问题。

  n 牢固性: 很难解开系统的纠结,使之成为一些可在其他系统中重用的组件。

  n 粘滞性: 做正确的事情比做错误的事情要困难。

  n 不必要的复杂性: 设计中包含有不具任何直接好处的基础结构。

  n 不必要的重复性: 设计中包含有重复的结构,而该重复的结构本可以使用单一的抽象进行统一。

  n 晦涩性: 很难阅读、理解。没有很好地表现出意图。

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

  为了改变上面软件设计中的腐化味,敏捷开发采取了以下面向对象的设计原则来加以避免,这些原则如下:

  n 单一职责原则(SRP)

  就一个类而言,应该仅有一个引起它变化的原因。

  n 开放-封闭原则(OCP)

  软件实体应该是可以扩展的,但是不可修改。

  n Liskov替换原则(LSP)

  子类型必须能够替换掉它们的基类型。

  n 依赖倒置原则(DIP)

  抽象不应该依赖于细节。细节应该依赖于抽象。

  n 接口隔离原则(ISP)

  不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。

  n 重用发布等价原则(REP)

  重用的粒度就是发布的粒度。

  n 共同封闭原则(CCP)

  包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。

  n 共同重用原则(CRP)

  一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。

  n 无环依赖原则(ADP)

  在包的依赖关系图中不允许存在环。

  n 稳定依赖原则(SDP)

  朝着稳定的方向进行依赖。

  n 稳定抽象原则(SAP)

  包的抽象程度应该和其稳定程度一致。

  上述中的包的概念是:包可以用作包容一组类的容器,通过把类组织成包,我们可以在更高层次的抽象上来理解设计,我们也可以通过包来管理软件的开发和发布。目的就是根据一些原则对应用程序中的类进行划分,然后把那些划分后的类分配到包中。

  敏捷设计是一个过程,不是一个事件。它是一个持续的应用原则、模式以及实践来改进软件的结构和可读性的过程。它致力于保持系统设计在任何时间都尽可能得简单、干净和富有表现力。

分享到:
评论

相关推荐

    敏捷开发项目流程介绍,什么是敏捷开发

    敏捷开发

    敏捷开发模式.xls

    通俗易懂的解释了什么是敏捷开发模式!敏捷开发带来的好处和优点!传统的瀑布开发模式有哪些弊端,敏捷开发模式和瀑布开发模式的比较和不同!

    深度讲解:Agile and Tooling敏捷开发与工具

    【什么是敏捷开发】 敏捷开发起源于2001年的“敏捷宣言”,由17位软件开发专家共同提出。它提倡快速反馈、迭代开发和持续改进,旨在提供更高效、更具适应性的开发过程。常见的敏捷框架有Scrum、Kanban、XP(极限编程...

    敏捷开发 敏捷开发 敏捷开发 敏捷开发

    "敏捷开发 敏捷开发 敏捷开发 敏捷开发"这个标题多次提及敏捷开发,表明其重要性和讨论的焦点。 描述中重复的“敏捷开发敏捷开发”,进一步强调了这一主题的重要性,暗示内容可能涵盖了敏捷开发的各种方面,如原则...

    敏捷软件开发:原则、模式与实践

    首先,我们需要理解什么是敏捷开发。敏捷开发是一种以人为本、迭代、增量的软件开发方法论,强调灵活应对需求变化,以快速交付有价值的软件。这一理念源自2001年的“敏捷宣言”,其四大价值观是:个体和交互高于流程...

    敏捷开发--敏捷之道

    2.1 什么是敏捷开发 敏捷开发起源于2001年的敏捷宣言,它倡导个体和互动高于流程和工具,可工作的软件高于详尽的文档,客户合作高于合同谈判,响应变化高于遵循计划。其核心价值包括:重视个体和互动、可工作的软件...

    敏捷开发,敏捷开发,敏捷开发,敏捷开发

    ### 敏捷开发的核心理念与实践 #### 一、敏捷开发概述 敏捷开发是一种强调灵活性、快速响应变化的软件开发方法论。与传统的瀑布模型相比,敏捷开发更加注重团队之间的紧密协作、持续改进以及高质量的产品交付。...

    敏捷开发的艺术

    现在已经有大量的书籍描述敏捷开发是什么或者为什么它能帮助软件项目成功,但很少有哪一本书能把针对开发者、管理者、测试者和客户的信息合并成一个整体,从而使其能够直接应用。, 本书为敏捷的计划、开发、交付和...

    敏捷开发知识体系

    主要内容包括:敏捷开发的哲学理念、价值观、敏捷开发方法框架和敏捷实践,企业敏捷转型参考框架,帮助企业回答为什么要进行敏捷转型,敏捷转型包含哪些内容和如何开展敏捷转型等问题。 第1章 敏捷开发知识体系总体...

    系统分析师-敏捷开发方法

    系统分析师-敏捷开发方法 本文将论述敏捷开发方法在系统分析师中的应用,通过实践证明,在项目的开发中采用合适的敏捷开发方法可以有效地缩短开发时间,提高产品质量。本文将从以下几个方面论述敏捷开发方法的应用...

    Scrum敏捷软件开发.pptx

    一、什么是敏捷开发? 敏捷开发是一种软件开发方法,可以应对客户快速变更的需求。它强调以人为核心,基于迭代和增量的开发方式,通过自组织,沟通协作,循序渐进地开发软件。 二、敏捷开发价值观 个体和互动 ...

    敏捷开发pdf学习敏捷开发的资料

    **敏捷开发:一种创新的项目管理方法** 敏捷开发是一种应对快速变化需求的软件开发方法论,它强调灵活性、协作性和客户参与。源自2001年发布的“敏捷宣言”,敏捷开发的核心理念是人与交互优于过程与工具,可工作的...

    敏捷开发咨询方案.pdf

    什么是敏捷开发 7 1. 敏捷宣言 7 2. 敏捷12原则 7 3. ThoughtWorks在敏捷业界的地位 8 四. 敏捷开发给企业带来的价值 9 1. 产品提高 10 2. 人才培养 11 3. 流程改善 13 4. 总体效果 16 五. 项目实施方案 17 阶段I:...

    敏捷开发实践

    敏捷开发实践,包含java开发技术等各种集合类问题,了解什么是敏捷开发,为什么要提倡敏捷开发等

    敏捷软件开发.pdf

    Martin(也被称为“鲍勃叔叔”),作为软件开发和工程领域的大师,阐述了敏捷开发中的核心原则、设计模式和实践,尤其是在极限编程(Extreme Programming, 简称XP)方面的应用。XP是一种敏捷软件开发方法,它在预算...

    SCRUM(敏捷开发模式)演讲PPT

    根据提供的文件内容,以下是关于SCRUM(敏捷开发模式)的相关知识点: ### 软件过程 软件过程是指为了构建高质量软件所需完成的任务框架。它包括一系列步骤,如定义任务工作步骤、中间产品、资源、角色、方法、工具...

    软件项目管理论文:敏捷在软件开发中的应用

    本文从敏捷方法的定义,提出背景,实施方法等方面对敏捷方法进行描述,并与传统软件工程方法相对比,分析敏捷开发的优劣。通过实际软件开发的案例分析软件生产的价值观,得出敏捷方法在软件开发中的价值。关键词:...

Global site tag (gtag.js) - Google Analytics