僵化性是指难以对软件进行改动,即使是简单的改动。如果单一的改动会导致有依赖关系的模块中的连锁改动,那么设计就是僵化的。必须要改动的模块越多,设计就越僵化。
大部分开发人员都以这样或那样的方式遇到过这种情况。他们会被要求做一个看起来简单的改动。他们仔细检查这个改动并对所需的工作做出了一个合理的估算。但是过了一会儿,当他们实际进行改动时,会发现有许多改动带来的影响,自己并没有预测到。他们发现自己要在庞大的代码中搜寻这个变动,要更改的模块数目也远远超出最初估算,并且还会不断发现其他一些必须要记得做的更改。最后,改动所花费的时间远比初始估算的长。当问他们为何估算得如此不准确时,他们会重复软件开发人员惯用的悲叹,“它比我想象的要复杂得多!”
脆弱性是指,在进行一个改动时,可能会导致程序的许多地方出现问题。常常是,出现新问题的地方与改动的地方并没有概念上的关联。要修改这些问题又会引出更多的问题,从而开发团队就像一只不停追逐自己尾巴的狗一样忙得团团转。
随着模块脆弱性的增加,改动会引出意想不到的问题的可能性就越来越大。这看起来很荒谬,但是这样的模块是非常常见的。这些模块需要不断地修补--它们从来不会被从错误列表中去掉。开发人员知道需要对它们进行重新设计,但是谁都不愿意去面对重新设计中的难以琢磨性,你越是修正它们,它们就变得越糟。
网友评论