对敏捷设计的认识

    不要错误的认为设计就是一组和代码分离的UML图,一组UML图也许描绘了设计的一些部分,但是他不是设计!软件项目的设计是一个抽象的概念。他和程序的概括形状、结构、以及每一个模块、类和方法的详细形状和结构有关,可以使用很多不同的元素去描述它,即:源代码就是设计!
设计的臭味
当我们的软件出现下面一种气味时,可以表明我们的软件正在腐化。。。。
僵化性:很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的其他改动。
脆弱性:对系统的改动会导致系统中和改动的地方在概念上无关的许多地方出现问题。
牢固性:很难解开系统的纠结,使之可以成为一些可以在其他系统中重用的组件
粘带性:做正确的事情要比做错误的事情要困难些
不必要的复杂性:设计中包含有不具任何直接好处的基础结构
不必要的重复:设计中包含有重复的结构,而该重复的结构本可以使用单一的抽象进行统一
晦涩性:很难阅读,理解,没有很好的表现出意图。
僵化性
 如果单一的改动会导致有依赖关系的模块中的连锁改动,那么这样的设计就是僵化的。
 大部分的开发人员都以这样或那样的方式遇到过这种情况,他们会被要求进行一个简单的改动。他们看了哈给出了一个完成时间的估算。但是过了会儿,当他们对代码实际进行改动时,会发现有许多改动带来的影响自己并没有预料到,他们发现要在庞大的代码中搜索这个变动,并且要更改的模块数目也远远超出估算,最后他们会重复软件开发人员常说的一句话:它比我想象的要复杂的多啊....
脆弱性
随着模块脆弱性的增加,会改动引出意想不到的问题的可能性就越来越大,看起来有点搞笑,但是这样的模块是常常能看见的。这些模块需要不断的修补---所以他们从来也不会从TT(bug管理工具)中去掉。
牢固性
设计中包含了对其他系统有用的部分,但是要把这些部分从系统中分离出来需要的努力和风险一样大。
粘带性
包含:软件的粘带性和环境的粘带性
当面临一个改动时,开发人员常常会发现有多种改动的方法,其中一些方法会保持设计,而另外一些方法会破坏设计,当那些可以保持系统设计的方法比那些可以破坏设计的方法更难应用时,就表明设计具有高的粘带性。当然我们的希望是可以进行那些保持设计的改动。
不必要的复杂性
设计中包含有当前没有用的组成部分,如当开发人员预测需求的变化,并在软件中放置了处理那些潜在变化的代码时,常常会出现这种情况,开头,这样做觉得是见好事,为将来的变化做准备会保持代码的灵活性,并切可以避免以后进行痛苦的改动,但糟糕的是,结果正好相反,为过多的可能性做准备,致使设计中绝不会用到的结构,从而变得混乱。
不必要的重复
当系统中有重复的代码时,对系统改动会变得困难。
晦涩性
难以理解的模块,代码可以用清晰、富有表现力的方式编写,不能用晦涩,费解的方式一编写。
什么激发了软件的腐化???
在非敏捷环境中,由于需求没有按照初始设计预见的方式进行变化,从而导致了设计的退化,但是通常情况下,要求的改动都是很急迫的,并且进行改动的开发人员对于原始的设计思路并不熟悉(如某些公司的系统本身就是维护性的系统),因而虽然对设计的改动可以工作,但是它却以某种方式违反了原始的设计,随着改动的不断进行,这些违反渐渐的积累,设计就开始出现臭味了。
保持尽可能好的设计:
敏捷开发人员致力于保持设计尽可能的适当、干净。最好是每天、每小时都保持软件的干净。
最后
什么是敏捷设计?
敏捷设计是一个过程,不是一个事件。他是一个持续的应用原则、模式以及实践来改进软件的结构和可读性的过程。它致力于保持系统设计在任何时间都尽可能的简单、干净、以及富有表现力!

posted on 2006-06-25 10:58  kim  阅读(5325)  评论(13编辑  收藏  举报

导航