第7章 什么是敏捷设计
实际上满足工程设计标准的唯一软件文档,就是源代码清单 ---- Jack Reeves
设计的臭味
- 僵化性(Rigidity)
僵化性是指难以对软件进行改动。如果单一的改动会导致有依赖关系的模块中的连锁改动,那么设计就是僵化的。很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的其它改动 - 脆弱性(Fragility)
脆弱性是指对系统的改动会导致系统中和改动的地方在概念上无关的许多地方出现问题。也就是说,出现新问题的地方与改动的地方并没有概念上的关联。 - 牢固性(Immobility)
设计中包含了对其他系统有用的部分,但是要把这些部分从系统中分离出来所需要的努力和风险是巨大的。很难解开系统的纠结,使之成为一些可在其他系统中重用的组件 - 粘滞性(Viscosity)
粘滞性有两种表现形式:软件的粘滞性和环境的粘滞性。无论哪种粘滞性,都很难保持项目中的软件设计。我们希望创建易于保持设计的系统和项目环境 - 不必要的复杂性(Needless complexity)
指的是设计中包含有不具任何直接好处的基础结构。如果设计中包含有当前没用的组成部分,它就含有不必要的复杂性。换句话说你为未来预留功能实现的代码都是没有必要的 - 不必要的重复(Needless Repetition)
设计中包含有重复的结构,而该重复的结构本可以使用单一的抽象进行统一 - 晦涩性(Opacity)
模块很难阅读、理解,没有很好地表现出意图。
在非敏捷环境中,由于需求没有按照初始设计预见的方式进行变化,从而导致了设计的退化。通常,改动都很急迫,并且进行改动的开发人员对于原始的设计思路并不熟悉,因此,