敏捷设计是一个过程,而不是一个事件。它是一个持续的应用原则、模式以及实践改进软件结构和可读性的过程。
腐化软件的气味
当软件出现下面现象,表明软件正在腐化。
- 僵化性
- 脆弱性
- 顽固性
- 粘滞性
- 不必要的复杂性
- 不必要的重复
- 晦涩性
僵化性
给了一个看起来简单的改动的合理估算,实际改动时发现改动带来的很多影响并没有预测到,需要修改的模块数目远远超过最初的预测,所话费的时间比初始估算的长。
脆弱性
进行一个改动时,可能会导致程序的许多地方出现问题。出现新问题的地方与改动的地方并没有概念上的关联。要修正这些问题又会引起更多的问题。
顽固性
设计中包含了对其他系统有用的部分,要把这部分从系统分离出来所需要的努力和风险是巨大的。
粘滞性
粘滞性有两种表现形式。
软件的粘滞性,一些方法会保持设计;另外一些会破坏设计(拼凑的方法),当可以保持系统设计的方法比拼凑手法更难应用时,表明设计具有高粘滞性;
环境的粘滞性,开发华宁迟钝,低效时,会产生环境的粘滞性。比如编译时间很长,开发被引诱做不会导致大规模编译的改动,破坏原设计。
不必要的复杂性
设计中包含了当前没有用的组成部分,它就含有不必要的复杂性。这些么有用的组成部分往往来自于开发预测需求的变化,在软件中设置的应变代码。
不必要的重复
复制和粘贴的代码。当在一个重复代码体重发现了错误,就必须在每个重复体中一一修改,但是每个重复体之间都会有细微的差别,修正方式也不尽相同。
晦涩性
模块难以理解,开发人员必须站在代码阅读者的角度,努力的对代码进行重构。
总结
敏捷开发人员致力于保持设计尽可能的适当、干净。不是每几周才"清洁"他们的设计,而是每天,每小时甚至每分钟都要保持软件尽可能的干净、简单并富有表达力。下面会介绍一些原则,敏捷开发人员不会把这些原则应用到一个庞大的预先设计中。相反,这些原则被应用在一次次的迭代中。没有任何征兆的情况下,应用这些原则是不明智的。