本文为敏捷软件开发 - 原则、模式与实践系列的一部分。
本文对应原书第7章。
设计的臭味
-
僵化性
僵化性是指难以对软件进行改动,即使是最简单的改动。如果单一的改动会导致有依赖关系的模块中的连锁改动,那么设计就是僵化的。必须要改动的模块越多,设计就越僵化。 -
脆弱性
脆弱性是指,在进行一个改动时,程序的许多地方就可能出现问题。常常是,出现新问题的地方与改动的地方并没有概念上的关联。 -
牢固性
牢固性是指,设计中包含了对其他系统有用的部分,但是要把这些部分从系统中分离出来所需要的努力和风险是巨大的。 -
粘滞性
粘滞性有两种表现形式:软件的粘滞性和环境的粘滞性。
当面临一个改动时,开发人员往往会有多种选择。其中,一些方法会保持设计,而另外一些会破坏设计。当那些可以保持设计的方法比那些生硬手法更难应用时,就表明设计具有高德粘滞性。
当开发环境迟钝、低效时,就会产生环境的粘滞性。 -
不必要的复杂性
如果设计中包含有当前没有用的组成部分,它就含有不必要的复杂性。为过多的可能性做准备,致使设计中含有绝不会用到的结构,从而变得混乱。一些准备也许会带来回报,但是更多的不会。期间,设计背负着这些不会用到的部分,使软件变得复杂,并且难以理解。 -
不必要的重复
当同样的代码以稍微不同的形式一再出现时,就表示开发人员忽视了抽象。对于他们来说,发现所有的重复并通过适当的抽象去消除它们的做法可能没有高的优先级别,但是这样做非常有助于使系统更加易于维护和理解。 -
晦涩性
晦涩性是指模块难以理解。代码可以用清晰、富有表现力的方式编写,或者可以用晦涩、费解的方式编写。代码随着时间而演化,往往会变得越来越晦涩。为了防止这种情况发生,开发人员必须要站在代码阅读者的位置,共同努力对他们的代码进行重构,并且他们的代码也需要被其他人评审。
敏捷团队不允许软件腐化
敏捷团队依靠变化来获取活力。团队几乎不进行预先设计,因此,不需要一个成熟的初始设计。他们更愿意保持系统设计尽可能的干净、简单,并使用许多单元测试和验收测试作为支援。这保持了设计的灵活性、易于理解。团队利用这种灵活性,持续地改进设计,以便于每次迭代结束所生产的系统都具有最适合于那次迭代中需求的设计。
敏捷开发人员如何做
- 他们遵循敏捷实践去发现问题
- 他们应用设计原则去诊断问题,并且
- 他们应用适当的设计模式去解决问题
软件设计腐化及敏捷设计的例子
参看原书7.3
结论
敏捷设计是一个过程,不是一个事件。它是一个持续的应用原则、模式以及实践来改进软件的结构和可读性的过程。它致力于保持系统设计在任何时间都尽可能得简单、干净以及富有表现力。
完整内容请查看敏捷软件开发 - 原则、模式与实践系列
网友评论