敏捷软件开发的含义

 敏捷软件开发

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

                                                                                                                  -- Tom DeMacro和Timothy Lister

  敏捷软件开发宣言:

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


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


  ③ 客户合作 胜过 合同谈判


  ④ 响应变化 胜过 遵循计划


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

  敏捷宣言遵循的原则:

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

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

  ③ 经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。
  ④ 在整个项目开发期间,业务人员和开发人员必须天天都在一起工作

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

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

  ⑦ 工作的软件是首要的进度度量标准。
  ⑧ 敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。

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

  ⑩ 简单是最根本的。最好的构架、需求和设计出于自组织团队。

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

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

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

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

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

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

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

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

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

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

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

  ① 单一职责原则(SRP):就一个类而言,应该仅有一个引起它变化的原因。

  ② 开放-封闭原则(OCP):软件实体应该是可以扩展的,但是不可修改。

  ③ Liskov替换原则(LSP):子类型必须能够替换掉它们的基类型。

  ④ 依赖倒置原则(DIP):抽象不应该依赖于细节。细节应该依赖于抽象。

  ⑤ 接口隔离原则(ISP):不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。

    ⑥ 重用发布等价原则(REP):重用的粒度就是发布的粒度。

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

  ⑧ 共同重用原则(CRP):一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。
  ⑨ 无环依赖原则(ADP):在包的依赖关系图中不允许存在环。

  ⑩ 稳定依赖原则(SDP):朝着稳定的方向进行依赖。

  ⑾稳定抽象原则(SAP):包的抽象程度应该和其稳定程度一致。

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

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

时间: 2024-10-11 21:32:55

敏捷软件开发的含义的相关文章

敏捷软件开发基础: 持续集成环境的构建

敏捷意味着什么 Agile可以说是近几年来软件工程界最"热"的一个单词,关于它的文章.书籍.讨论不 计其数.尽管如此,却仍有大量的从业者对Agile存有误解和困惑.Agile到底意味着什么 呢?仅仅是一些漂亮.时髦的宣传吗?到底怎样才算是Agile呢?做到了Agile能为软件开发团队带来什么好处呢?类似的问题还有很多. Agile其实根本不是一个什么新鲜.时髦的东西,它已经存在了数十年之久了.在这数 十年中,那些取得成功的软件开发团队无一不是敏捷开发团队.他们在自己的软件开发过 程中大

敏捷软件开发实践-Sprint Status Track

介绍: 对于敏捷软件开发来说,能时刻保持跟进项目的进度是非常重要的,因为你可以随时了解团队的健康状况,并且对各种突发情况进行突发的处理,从而保证每个迭代结束后我们的项目可以按时的交付. 实现方式: 看项目进度的最好的工具当然是burndown chart,我们使用Jira做项目管理工具,Jira中有一个Report视图,可以非常直观的显示story的burn down 曲线,从而让团队直观的明白这个sprint进展的如何. 当然了,这个是从story级别的,它衡量的是随着时间的流失,story

敏捷软件开发实践-Code Review Process

介绍: 在敏捷软件开发中,从代码的产生速度上来看,要比传统Waterfall产生速度高很多.因为我们把时间安排的更加紧凑了.那么这么多的代码,如何能保证这些代码质量呢?很多人可能直接想到静态代码检测工具.没错,那些是可以定义一个代码检查规则来确保代码的质量,但是那个仅仅是从语言角度,那么逻辑是否已经最优化了?可重用性是否已经优化到极致了?这些是静态代码工具不能完成的,所以我们需要Code Review 实现方式: 对于已经在项目组很久的人来说: 虽然传统的code review就是把代码从仓库c

敏捷软件开发实践:概括

应朋友之邀,我准备写一组文章关于敏捷软件开发的实践,也帮助广大没有用过Agile的或者只停留在书本内容上的朋友亲临敏捷软件开发这个惊心动魄的历程. 所谓敏捷,书本上有很多的介绍,我也不想重复发明轮子了,反正就我的理解,敏捷的精髓就是面向变化,敏捷这个词语,我最早遇到是出现在玩各种游戏中,所谓的"力量型"英雄,"敏捷型"英雄,比如暗黑的亚马逊,比如魔兽世界的猎人,这种职业往往有很高的闪避,而且可攻可守,或者说三国杀里面最典型的赵云"闪杀杀闪闪,能进能退&qu

Visual Studio Team Architect 团队的敏捷软件开发(第一部分)

在最近几次与客户面对面的交流中,我有幸分享了我们团队如何在日常工作中进行敏捷软件开发.毫 无疑问,这在中国开发人员中是个热门话题,我也想利用博客这个平台与更多的读者进行书面的交流.当 然关于敏捷开发利弊得失的争论有不少,而相关的开发模式也分成了TDD (Test Driven Development), Scrum, XP(eXtreme Programming)等流派.就我个人而言,一个团队是否严格遵循某种既定的敏捷方法并 不重要,但一定得选择并采用一种(或几种)最适合自己开发团队和开发项目的

敏捷模型驱动开发(AMDD):攀登敏捷软件开发的关键

Agile Model Driven Development (AMDD): The Key to Scaling Agile Software Development 敏捷模型驱动开发(AMDD):攀登敏捷软件开发的关键   Table of Contents 目录 Overview 概述 Envisioning 展望 Initial agile requirements modeling 初始化敏捷需求建模 Initial agile architecture modeling 初始化敏捷架

《系统分析与设计方法及实践》一2.2 敏捷软件开发

2.2 敏捷软件开发 在传统的软件开发方法中,工作人员努力构建客户想要的产品.他们花费大量的时间努力从客户那里获取需求,针对需求进行分析和建模,并且归纳成规格说明书.然后,评审说明书,与客户开会讨论,最后签字.表面上看他们开发的产品是符合客户的要求的,但通常事与愿违.在项目快要结束的时候,需求和范围.产品的适用性成为争论的焦点. 敏捷软件开发方法告诉我们开发项目是一个学习的体验.没有谁能完全理解所有需求之后才开始项目,即使是客户也一样.客户一开始有一些主意,但是他们也会随着项目的进展进一步了解他

Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发

Scrum 求助编辑百科名片:http://baike.baidu.com/view/1528674.htm    敏捷软件开发模型--SCRUM Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发.包括了一系列实践和预定义角色的过程骨架.Scrum中的主要角色包括同项目经理类似的Scrum主管角色负责维护过程和任务,产品负责人代表利益所有者,开发团队包括了所有开发人员. 目录 简介 Scrum创始人简介 历史 Scrum的特性 Scrum中的角色 Scrum会议 文档 展开 简介 S

云计算提高敏捷软件开发的六种方式

云计算和虚拟化可以让你创建虚拟机,并使用基于云的服务用于项目管理.问题管理和具有自动化测试的软件构建.而这又从六个方面鼓励了敏捷软件开发. 澳大利亚综合金融服务领先供应商之一澳洲联邦银行(Commonwealth Bank)建立了一个私有云来运行内部应用程序作为服务.这些应用程序使用超过300个Oracle数据库,这些数据库都被合并到按需Oracle实例中,而该实例可以由浏览器界面内的应用程序开发团队进行非常迅速的配置.这使开发团队配置生产质量环境的准备时间从三个月缩减到两分钟. 同时,Sale