敏捷软件开发之什么是敏捷设计

敏捷设计强调灵活应对变化,避免僵化、脆弱、复杂的设计。通过保持设计的清洁、简单,持续改进以适应需求迭代。敏捷团队遵循设计原则,运用模式,确保设计始终保持最佳状态,如同外科医生对待消毒过程一样对待设计的整洁性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第7章 什么是敏捷设计

实际上满足工程设计标准的唯一软件文档,就是源代码清单 ---- Jack Reeves

设计的臭味

  1. 僵化性(Rigidity)
    僵化性是指难以对软件进行改动。如果单一的改动会导致有依赖关系的模块中的连锁改动,那么设计就是僵化的。很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的其它改动
  2. 脆弱性(Fragility)
    脆弱性是指对系统的改动会导致系统中和改动的地方在概念上无关的许多地方出现问题。也就是说,出现新问题的地方与改动的地方并没有概念上的关联。
  3. 牢固性(Immobility)
    设计中包含了对其他系统有用的部分,但是要把这些部分从系统中分离出来所需要的努力和风险是巨大的。很难解开系统的纠结,使之成为一些可在其他系统中重用的组件
  4. 粘滞性(Viscosity)
    粘滞性有两种表现形式:软件的粘滞性和环境的粘滞性。无论哪种粘滞性,都很难保持项目中的软件设计。我们希望创建易于保持设计的系统和项目环境
  5. 不必要的复杂性(Needless complexity)
    指的是设计中包含有不具任何直接好处的基础结构。如果设计中包含有当前没用的组成部分,它就含有不必要的复杂性。换句话说你为未来预留功能实现的代码都是没有必要的
  6. 不必要的重复(Needless Repetition)
    设计中包含有重复的结构,而该重复的结构本可以使用单一的抽象进行统一
  7. 晦涩性(Opacity)
    模块很难阅读、理解,没有很好地表现出意图。

在非敏捷环境中,由于需求没有按照初始设计预见的方式进行变化,从而导致了设计的退化。通常,改动都很急迫,并且进行改动的开发人员对于原始的设计思路并不熟悉,因此,虽然对设计的改动可以工作,但是它却以某种方式违反了原始的设计。然后,我们不能把这种退化归罪于需求的变化,而是设法找到一种方法,使得设计对于这种变化具有弹性。
敏捷团队依靠变化来获取活力。团队几乎不进行预先设计,因此不需要一个成熟的初始设计。他们更愿意保持系统尽可能的干净、简单,并使用许多单元测试和验收测试作为支援。这保持了设计的灵活性、易于理解性。团队利用这种灵活性,持续地改进设计,以便于每次迭代结束所生成的系统都具有最适合于那次迭代中需求的设计

  • 遵循敏捷实践去发现问题
  • 应用设计原则去诊断问题
  • 应用适当的设计模式去解决问题

保持尽可能好的设计

敏捷开发人员致力于保持设计尽可能地适当、干净。这不是一个随便的或者暂时性的承诺。敏捷开发人员不是每几周才清洁他们的设计,而是每天,每小时、甚至每分钟都要保持软件尽可能地干净、简单并富有表现力。他们人来不说“稍后我们会回来修正它”。
敏捷开发人员对待软件设计的态度和外科医生对待消毒过程的态度是一样的。消毒过程使外科手术成为可能。没有它,被感染的风险之高是难以忍受的。敏捷开发人员对于他们的设计有同样的感觉。

结论

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值