随着时间的推移,各式各样的修改、新增需求会使软件变得越来越难以维护。软件逐渐的变得腐化了。
但软件出现下面这些气味时,就表明软件正在腐化。
僵化性(Rigidity)
很难对系统进行改动,哪怕是最简单的,因为每个改动都会迫使许多对系统其他部分的改动。应该是代码的耦合太厉害了。
脆弱性(Fragility)
对系统的改动会导致系统中和改动的地方在概念上无关的许多地方出现问题。导致这种问题的情况很多,功能不单一什么的都可能导致。
牢固性(Immobility)
很难解开系统的纠结,使之成为一些可在其他系统中重用的组件。功能间的依赖关系太强,以至于使用一个功能,必须同时处理很多不必要的功能。
粘滞性(Viscosity)
做正确的事情比错误的事情要困难。
软件的粘滞性
面对改动,一些方法可以保持设计而另一些方法会破坏设计。当那些可以保持设计的方法比破坏设计的方面更难应用时,就表明软件具有粘滞性。
环境的粘滞性
当开发环境迟钝、低效时,就会产生环境的粘滞性。
不必要的重复(Needless Complexity)
设计中包含有不具任何直接好处的基础结构。
不必要的重复(Needless Repetition)
设计中包含有重复的代码,而该重复的结构本可以使用单一的抽象进行统一。不要使用剪切和粘贴功能,它们是重复之源。
晦涩性(Opacity)
很难阅读、理解。没有很好的表现出意图。
那么是什么导致了软件的腐化呢?
在非敏捷环境中,由于需求没有按照初始设计预见的方式进行变化,从而导致了设计的退化。
但是敏捷团队是依靠变化来获得活力的。我们不需要事先设计,因此我们不需要一个完善的初始设计,那么自然不会由于需求的变化导致设计腐化了。