`
pengtyao
  • 浏览: 400940 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

初识敏捷开发

阅读更多
敏捷软件开发宣言
个体和交互 胜过 过程和工具
可以工作的软件 胜过 面面俱到的文档
客户合作 胜过 合同谈判
响应变化 胜过 遵循计划

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


敏捷宣言遵循的原则

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


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


  敏捷团队依靠变化来获取活力。团队几乎不进行预先设计,因此,不需要一个成熟的初始设计。他们更愿意保持设计尽可能的干净、简单,并使用许多单元测试和验收测试作为支援。这保持了设计的灵活性、易于理解性。团队利用这种灵活性,持续地改进设计,以便于每次迭代结束生成的系统都具有最适合于那次迭代中需求的设计。
为了改变上面软件设计中的腐化味,敏捷开发采取了以下面向对象的设计原则来加以避免,这些原则如下:
    单一职责原则(SRP)
    就一个类而言,应该仅有一个引起它变化的原因。
  开放-封闭原则(OCP)
  软件实体应该是可以扩展的,但是不可修改。
  Liskov替换原则(LSP)
  子类型必须能够替换掉它们的基类型。
  依赖倒置原则(DIP)
  抽象不应该依赖于细节。细节应该依赖于抽象。
 接口隔离原则(ISP)
  不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。
  重用发布等价原则(REP)
  重用的粒度就是发布的粒度。
  共同封闭原则(CCP)
  包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。
  共同重用原则(CRP)
  一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。
  无环依赖原则(ADP)
  在包的依赖关系图中不允许存在环。
  稳定依赖原则(SDP)
  朝着稳定的方向进行依赖。
  稳定抽象原则(SAP)
  包的抽象程度应该和其稳定程度一致。
  上述中的包的概念是:包可以用作包容一组类的容器,通过把类组织成包,我们可以在更高层次的抽象上来理解设计,我们也可以通过包来管理软件的开发和发布。目的就是根据一些原则对应用程序中的类进行划分,然后把那些划分后的类分配到包中。
敏捷设计是一个过程,不是一个事件。它是一个持续的应用原则、模式以及实践来改进软件的结构和可读性的过程。它致力于保持系统设计在任何时间都尽可能得简单、干净和富有表现力。
分享到:
评论

相关推荐

    1.初识敏捷-敏捷项目管理培训系列课程.pptx

    介绍了敏捷开发模式的发展阶段,通过实际案例,分享敏捷开发的框架,精神及原则。

    软件开发过程纵横谈(5):再谈敏捷过程

    总的来说,这个资源包为学习和实践敏捷开发提供了一套全面的指南,无论是对初识敏捷的新手还是希望深化理解的资深开发者,都能从中受益。通过学习,你将能够更有效地管理复杂项目,提升团队协作效率,并实现更快的...

    第1章初识软件工程.pptx

    结构化方法强调系统的逻辑结构,面向对象方法关注对象和类的组织,敏捷开发则强调灵活性和快速响应变化。 1.4 软件生存周期 软件生存周期是指从软件概念的产生到最终退役的整个过程,包括需求分析、设计、编码、...

    初识软件工程.pptx

    - 经历了结构化编程、面向对象编程、敏捷开发等多个阶段。 - 现代软件工程结合了传统方法与敏捷理念,如Scrum、Kanban等。 5. **软件工程的7条基本原理**: - 用分阶段的生命周期过程进行软件开发。 - 建立明确...

    初识JUnit

    在实际开发中,JUnit不仅帮助我们验证代码的正确性,还能促进持续集成和敏捷开发。通过与构建工具(如Maven或Gradle)集成,我们可以设置自动运行测试并在构建失败时发出警告,确保每次代码变更后,新增或修改的功能...

    2021年JAVA程序员必看的15本书JAVA自学书籍推荐.docx

    - **《Agile Java》中文版**:这本书强调敏捷开发和TDD(测试驱动开发),以最新的JDK版本为背景,适合希望深入了解现代Java编程方法的初学者。虽然作者将其定位为入门书籍,但对于完全新手可能稍显深度,适合有一定...

    Docker+Kubernetes(k8s)微服务容器化实践1

    微服务架构的诞生背景源于互联网行业的快速变化,敏捷开发和精益方法的普及,以及容器技术的成熟。微服务架构带来了诸多优势,如服务的独立性、敏捷性、技术栈的灵活性,以及能够组建高效团队。然而,微服务也带来了...

    互联网架构师 5.0 (106.98G)

    二十二、敏捷开发管理(选学) ---92.Scrum框架.mp4 ---93.团队合作.mp4 ---94.产品需求和用户故事.mp4 ---95.每日例会.mp4 二十九、CC服务-分布式存储引擎Elasticsearch ---176.基本操作.mp4 ---177.高级查询.mp4 -...

    getting_started_with_devsecops-v1_GettingStarted_devsecops_

    它源于DevOps,强调在敏捷开发过程中,早期引入安全检查和控制,以减少安全漏洞和风险。 二、DevSecOps的核心原则 1. 安全左移:将安全活动提前至开发的早期阶段,如需求分析和设计,而不是等到测试或部署阶段才...

    play1的文档资料

    "Play Framework 学习笔记(一):初识Play"和"Play Framework 开发入门"为初学者提供了入门指导,涵盖了框架的基本概念和基本操作。"Play! Framework试用手记"则分享了实际使用过程中的经验和心得。 6. **论坛...

    docker初识之五分钟认识docker

    在企业环境中,Docker 的使用可以简化软件的更新和发布流程,降低业务的敏捷性障碍,保证环境一致性,减少不同环境迁移的成本,缩短软件开发商的交付周期,降低实施成本。同时,容器的隔离性提供了一定的安全保障,...

    服务器后台性能及测试

    - **敏捷开发流程与性能测试**:在敏捷环境中,性能测试应融入到迭代开发中,及时反馈性能问题,快速调整优化。 6. **结束语** 性能测试是一个持续的过程,需要结合理论知识和实践经验,不断优化测试方法和工具,...

    devops团队第一个项目 凤凰项目

    此外,书中的“三步工作法”——计划、工作、审查,是对敏捷开发和精益管理思想的融合,它鼓励团队以更小的迭代周期完成任务,通过频繁交付来获取反馈,并对工作进行评审和改进。这种工作方式有助于提高效率,减少...

    云原生实践技术白皮书.pdf

    1. 重构IT运维和开发模式:云原生技术将推动更敏捷的开发流程和自动化运维。 2. 人工智能扩展:云原生助力AI从云端到边缘的部署,促进AI的广泛应用。 3. 加强5G网络能力:运营商利用云原生技术提升5G网络的服务质量...

    Django 文档,详细说明如何使用和部署

    - **开发过程**: Django提倡敏捷开发,提供了一套完整的开发、测试和调试工具,如内置的开发服务器、测试框架和管理命令。 **8. 管理后台** - **admin**: Django的admin界面是一个自动化的管理界面,用于创建、编辑...

Global site tag (gtag.js) - Google Analytics