对敏捷设计的认识

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

posted on 2006-06-25 10:58 kim 阅读(2357) 评论(13)  编辑 收藏 所属分类: C#编程敏捷开发(Agile Development)

评论

#1楼  2006-06-25 12:39 U2U      

学习了   回复  引用  查看    

#2楼  2006-06-25 16:02 极地银狐.NET      

嗯...不错!!   回复  引用  查看    

#3楼  2006-06-25 16:30 foxty [未注册用户]

感觉过于理论化了.另外有个地方比较疑惑.

搂住的 "一组和代码分离的UML图" 表达了一种什么意思?
  回复  引用    

#4楼  2006-06-25 17:09 rtwet [未注册用户]

:)   回复  引用    

#5楼  2006-06-25 20:28 思考中{OO}      

说得不错   回复  引用  查看    

#6楼  2006-06-25 23:28 Hussar      

我理解的意思是软件产品的最终成品还是代码。UML只是实现设计的一种表达形式和辅助方法。
个人认为任何设计和编码的技巧只能是帮助软件做的更好,背离这个基础就是奇技淫巧。所以像设计模式这样的东西你要知道什么时候该用什么模式,还要知道什么时候不该用什么模式,因为事物都具有两面性。
另外不必要的复杂性的存在有时候是一种心理因数。复杂性必然带来有的人可以维护这些代码,有的人不能维护这些代码,这样有的人才可以吊起来卖。   回复  引用  查看    

#7楼 [楼主] 2006-06-26 09:18 kim      

@foxty
源代码就是设计!代码和UML图的关系是密不可分的!!!   回复  引用  查看    

#8楼  2006-06-26 09:30 Aplo      

书是看得不错,不过太过于教条主义,不过过分的强调设计会给系统带来很多负担(包括性能、软件复杂程度等等)。而且最重要的一点就在于如果设计者对所在领域不够熟悉,不精通,没有对所在领域发展有一个清晰和正确的认识,那他对软件的变化和发展也是不可预知的,在这时如果还要强调某些设计,只会给项目带来过分的负担以及复杂度。   回复  引用  查看    

#9楼 [楼主] 2006-06-26 10:20 kim      

@Aplo
不觉得太过于教条主义啊,事实上跟我们公司现在的系统有很多相似之处啊.这些在实际环境中应该是很普篇的呀.   回复  引用  查看    

#10楼  2006-06-26 11:00 AlphaTeam123 [未注册用户]

@Aplo
要看你是做什么软件。
1、产品还是项目。
2、独立供应商还是外包。
如果你是独立供应商,如果需求没有了解好,就是再怎么设计也没用。
外包或公司内部需求已经清楚了,所以技术部门能够大展拳脚的就是设计。   回复  引用    

#11楼  2006-06-26 17:48 henry      

敏捷开发人员致力于保持设计尽可能的适当、干净。最好是每天、每小时都保持软件的干净。
----------
在实际开发时这个是最头痛的.
想问下楼主花在代码重构上的时间大概占代码编写周期多少?
你们在编写代码时如何保持代码的一致性?
要面临底层框架(调整)重构时你们通常如何进行协调的?

  回复  引用  查看    

#12楼 [楼主] 2006-06-26 19:13 kim      

@henry
代码重构上的时间大概占代码编写周期多少?
这个不好说啊,各个公司的系统不一样,还有设计也不一样.不能一概而论.有一本模式与重构的书,讲得不错.推荐看哈.
编写代码时如何保持代码的一致性?
对于敏捷开发来说,最理想的开发方式是结对开发,所以编写出来的代码肯定是一致的拉.
要面临底层框架(调整)重构时你们通常如何进行协调的?
还没真正做过这样的事,我到希望我们公司的系统能进行一次这样的重构呢.
  回复  引用  查看    

#13楼  2006-06-27 09:00 Aplo      

不错,有这么一种开发模式真的令人羡慕啊!
我们现在的开发简直是无可救药,公司没有统一的开发模式,没有公共类库,个人做个人的开发(架构),代码质量低,难以阅读………………
为什么会这样啊,楼主高人们能不能给我一些指点!
谢谢。

另外我还想问楼主,你们在做重构的时候有没有相应的重构软件?
我看过《重构》那本书,可是感觉如果没有一款软件支持的话,纯手工,有点天方夜谭。你们用的是什么软件?vs2005支持的不完整。效率也一般。
  回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-06-25 11:06 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接:
 

导航

统计

公告

中文: 罗江华
英文: KIM
职务: 高级软件工程师
工作地: 成都/新加坡
MSN: ljhkim6@hotmail.com

---------------------------

我的微软MVP配置
我的书


俱乐部:[cdproclub@gmail.com]
网站:http://www.cdpro.com.cn

与我联系

搜索

 

常用链接

留言簿(21)

我参与的团队

随笔分类(195)

随笔档案(154)

文章分类(4)

文章档案(11)

相册

收藏夹(8)

创业

技术网站

我的好友

最新评论