敏捷软件开发的含义

简介:

 敏捷软件开发

  人与人之间的交互是复杂的,并且其效果从来都是难以预期的,但却是工作中最重要的方面。
                                                                                                                  -- Tom DeMacro和Timothy Lister
  敏捷软件开发宣言:
  ① 个体和交互 胜过 过程和工具
  ② 可以工作的软件 胜过 面面俱到的文档
  ③ 客户合作 胜过 合同谈判
  ④ 响应变化 胜过 遵循计划
  虽然右项也有价值,但是我们认为左项具有更大的价值。
  敏捷宣言遵循的原则:
  ① 我们最优先要做的是通过 尽早的、持续的交付有价值的软件来使客户满意。
  ② 即使到了开发的后期,也欢迎改变需求。 敏捷过程利用变化来为客户创造竞争优势。
  ③ 经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。
  ④ 在整个项目开发期间, 业务人员和开发人员必须天天都在一起工作
  ⑤ 围绕被激励起来的个体来构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。
  ⑥ 在团队内部, 最具有效果并富有效率的传递信息的方法,就是面对面的交谈
  ⑦ 工作的软件是首要的进度度量标准。
  ⑧ 敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。
  ⑨ 不断地关注优秀的技能和好的设计会增强敏捷能力。
  ⑩ 简单是最根本的。最好的构架、需求和设计出于自组织团队。
  每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。
  
      当软件开发需求的变化而变化时,软件设计会出现 坏味道,当软件中出现下面任何一种气味时,表明软件正在腐化。
  n 僵化性: 很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的其它改动。
  n 脆弱性: 对系统的改动会导致系统中和改动的地方在概念上无关的许多地方出现问题。
  n 牢固性: 很难解开系统的纠结,使之成为一些可在其他系统中重用的组件。
  n 粘滞性: 做正确的事情比做错误的事情要困难。
  n 不必要的复杂性: 设计中包含有不具任何直接好处的基础结构。
  n 不必要的重复性: 设计中包含有重复的结构,而该重复的结构本可以使用单一的抽象进行统一。
  n 晦涩性: 很难阅读、理解。没有很好地表现出意图。

  敏捷团队依靠变化来获取活力。团队几乎不进行预先设计,因此,不需要一个成熟的初始设计。他们更愿意保持设计尽可能的干净、简单,并使用许多单元测试和验收测试作为支援。这保持了设计的灵活性、易于理解性。团队利用这种灵活性,持续地改进设计,以便于每次迭代结束生成的系统都具有最适合于那次 迭代中需求的设计。
  为了改变上面软件设计中的腐化味,敏捷开发采取了以下面向对象的设计原则来加以避免,这些原则如下:
   ① 单一职责原则(SRP):就一个类而言,应该仅有一个引起它变化的原因。
   ② 开放-封闭原则(OCP):软件实体应该是可以扩展的,但是不可修改。
   ③ Liskov替换原则(LSP):子类型必须能够替换掉它们的基类型。
   ④ 依赖倒置原则(DIP):抽象不应该依赖于细节。细节应该依赖于抽象。
   ⑤ 接口隔离原则(ISP):不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。
    ⑥ 重用发布等价原则(REP):重用的粒度就是发布的粒度。
    ⑦ 共同封闭原则(CCP):包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。
   ⑧ 共同重用原则(CRP):一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。
   ⑨ 无环依赖原则(ADP):在包的依赖关系图中不允许存在环。
   ⑩ 稳定依赖原则(SDP):朝着稳定的方向进行依赖。
   ⑾稳定抽象原则(SAP):包的抽象程度应该和其稳定程度一致。
  上述中的包的概念是:包可以用作包容一组类的容器,通过把类组织成包,我们可以在更高层次的抽象上来理解设计,我们也可以通过包来管理软件的开发和发布。目的就是根据一些原则对应用程序中的类进行划分,然后把那些划分后的类分配到包中。
  敏捷设计是一个过程,不是一个事件。它是一个持续的应用原则、模式以及实践来改进软件的结构和可读性的过程。它致力于保持系统设计在任何时间都尽可能得简单、干净和富有表现力
目录
相关文章
|
数据安全/隐私保护 Python
|
SQL 运维 数据可视化
Apache Calcite
Apache Calcite
|
8月前
|
数据采集 自然语言处理 DataWorks
阿里云DataWorks接入DeepSeek大模型
2025年2月18日,阿里云DataWorks正式接入DeepSeek-R1(671B)与DeepSeek-R1-Distill-Qwen-32B大模型。此举显著提升平台的数据处理、分析和治理能力,简化数据开发流程,并支持智能数据查询、自动化报告生成等应用场景,推动企业级数据治理智能化进程,助力企业实现数据驱动的创新发展。
518 11
|
人工智能 Serverless API
不用看就能懂,快速理解海量视频内容
想要快速理解海量视频内容?借助视频视觉理解技术,您可以轻松实现视频内容的自动化分析和信息提取。这项AI技术不仅大幅提升了工作效率,还为开发者提供了更多创意和应用的可能性。
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
337 10
订单支付异常情况处理
订单支付异常情况处理
571 1
|
弹性计算 安全 数据安全/隐私保护
远程桌面连接Windows实例,提示“为安全考虑,已锁定该用户账户,原因是登录尝试或密码更改尝试过多”错误解决方案
远程桌面连接Windows实例,提示“为安全考虑,已锁定该用户账户,原因是登录尝试或密码更改尝试过多”错误解决方案
2400 0
|
传感器 机器人
STM32 E18-D80NK红外检测
E18-D8ONK 这是一种 集发射与接收于一体 的光电传感器,发射光经过调制后发出,接收头对反射光进行解调输出。有效的避免了可见光的干扰。透镜的使用,也使得这款传感器最远可以检测80厘米距离的问题(由于红外光的特性,不同颜色的物体,能探测的最大距离也有不同;白色物体最远,黑色物体最近)。
733 0
|
弹性计算 Java Maven
开发笔记20 | 多模块 Maven 工程部署
开发笔记20 | 多模块工程部署
14528 118