`

uml之实践感悟

阅读更多

刚出道的时候,做业务系统很喜欢用uml来做分析和设计模型,很喜欢在rose中作以下事情:
1.以用户需求作为输入,做用例分析和领域模型设计,得到一个系统用例模型和领域模型
2.接下来就做模型迁移(转换),将用例模型和领域模型转换为特定语言环境的设计模型和数据库模型,比如java和oracle,其中还可以在java组件上直接应用23种设计模式。
3.接下来将设计模型和数据库模型正向工程为java代码框架和数据库建库脚本(或者直接在数据库中建表)
4.如果想将代码或者数据库表和设计模型或者数据库模型保持同步,可以进行逆向工程(这些uml工具真的很强大)
4.接下来就是实现所有的代码框架和编写dao组件
5.最后可能的话还可以画一个部署模型

整个路线图看起来很好很强大很清晰,也很和谐。但是做到后来总是很困惑,可能是自己对uml把我不好或者是滥用了uml,那就是:分析模型和设计模型画好后,代码也写了一部分了,结果客户说他的需求要做大的变更。我傻眼了,需求的变化导致分析模型要调整,设计模型也要调整(你不要骂我做的模型不具备可扩展性),代码也要做一部分的调整(记住只是一部分),我该如何下手:
a.修改分析模型,然后将分析模型再转换为设计模型,然后将设计模型再转换为代码模型(框架)和数据库模型
b.直接修改分析模型,直接修改设计模型,直接修改代码和数据库模型
c.直接修改代码和数据库表,然后采用逆向工程方法同步先前的设计模型,数据库模型,然后再逆向工程到分析模型(呵呵,这些uml工具确实很强大)

采用上述a,b,c三种方法都是一件很痛苦的事情,而且会导致分析模型,设计模型和代码模型的不同步,另外,采用方法a很可能导致你已经编写好的代码和数据库脚本被模型转换出来的新代码框架和数据库脚本给覆盖掉。这时你就彻底傻眼了,所有的代码和脚本都得重新来过(谁知到以前的代码是怎么写的,有些人会说你不是有配置库吗,有版本管理吗,把原来的代码考回来不就是了,事情要是有这么简单就好了,关键是你有这么多的时间去反反复复做这些事情吗,项目的进度怎么保证,如果是在单纯地玩玩uml也没什么,关键咱们是在做项目)。
如果项目的规模比较大,大面积出现上述的情况,那么这个项目就很危险了,一般情况下项目都会以失败而终结,当然这是我碰到的一般情况,可能您或者是大家碰到的情况要好些。

 

后来再也不去做那种傻事了,在项目中顶多用uml画画静态的用例图、类图、实体关系图(也叫分析模型,领域模型)以及动态的时序图什么的,作为交流和沟通使用,或者作为文档备案,这样就够了,不再去搞什么正向工程和逆向工程了,更多的时候只是用office word来画几个草图,然后放到需求或者设计文档中就可以了。

 

曾经听一位uml培训老师讲到:只要架构师或者设计师将系统的体系架构和代码框架设计好,剩下的事情只要程序员去填空就可以了。呵呵,我个人觉得这个老师很天真,也很单纯,一个系统不可能就这么简简单单就出来了的,要不还要那么多迭代开发方法干什么。

最后说一下Hashmap与Entity的问题该怎么处理,之前我也不知道怎么处理,后来上面的那位uml培训老师告诉我可以用uml 2.x中的组合结构图(Compostion Construction diagram)来表示复杂的类结构,例如java中的内部类和匿名类。

分享到:
评论
17 楼 crane136 2011-01-30  
UML是标准语言,但是具体的项目要具体分析,不一定每个项目都是需要这么标准严格。
项目总结时,将UML包含进来供后续的跟踪和更新也是不错的选择。
16 楼 liyan1709 2011-01-26  
UML,只是一种手段,一种交流的方式;楼主先前的做法太教条化了,自己也体验到了同步模型的痛苦。软件开发的最终目的是软件产品,其他都是为这个目的服务的。所以不管是各种模式、各种模型、各种开发方法,只可借鉴,不可死搬硬套,还是仔细分析自己项目的具体情况,借助这些方法论的东西,最主要是体会其中的思想,才能和项目完美的结合,不至于陷入僵局
15 楼 yangguo 2010-04-30  
这个跟是否该画UML图,画到什么程度,画些什么图半毛钱关系也没有。

大量的翻工原因是软件工程本身没有被有序执行。需求没有搞定就已经开始编码了。上层的改动必然导致下层一层一层的变化。

UML是基于软件工程的,而中国的软件公司只有浮躁两个字,根本就没有严格执行软件工程的,所以你却照搬UML那套来用,翻跟斗是必然的。
14 楼 yin_bp 2010-04-27  
不可否认uml确实是表述我们软件设计和需求分析的最好的预言了,呵呵,因此uml掌握的好的话,那么就能非常好地用他来描述我们软件的体系结构和基本思路,正所谓工欲善其事、必先利其器也就是这个意思吧,凡是把握个度就好。
真的有个时候想用个什么符号来表述一下某个意思,左想右想硬是找不到合适的来表述,但是了解uml的话,可能里面有很多符号可以非常合适地恰当地描述你的思想和意图。真是千里寻他千百度,原来它就在你手里,呵呵。
13 楼 修己安人 2010-04-27  
UML用来描述思路是非常不错的。
但要做到相当的规范,是很困难的,是需要付出很高的代价的。
因此,我们使用UML要做一个权衡。在粗细粒度上做出选择。
12 楼 wmteo77 2010-04-27  
惭愧,都是画些简单的草图,估计连uml都不是,顶多是业务模型
11 楼 yin_bp 2010-04-27  
xiao-qiang163 写道
楼主好像对你的老师很不服气啊呀, 

我觉得人啊,还是应该学会回报,几年前,别人教你!你现在牛了,就说别人天真???

其实,框架这个东西,你用 UML 画出来,也可以,直接以代码表现快速搭环境,也可以,

任何事都不是一成不变的,要看项目的紧迫度,我觉得,


一个很小的项目,又是很急,难道你还要用  UML画,一个一个地画,再产生代码?? 有必要吗 ?  像这种情况,框架师可以把代码大概写一下,让工程师有个整体的概念,有很多事,可以等项目后期再完善,以备将来维护,



呵呵,说实话,我很佩服这位老师,uml的培训课程讲得非常不错,是我听过的培训里面讲得最棒的老师,另外,我是最近一个月才听他讲的课,然后有感而发,才写的这个帖子,写这个帖子的意思不是说我很牛,也并没有真正地说这个老师天真呵呵,只是有感而发,希望大家不要误会我的意思。

10 楼 xiao-qiang163 2010-04-27  
楼主好像对你的老师很不服气啊呀, 

我觉得人啊,还是应该学会回报,几年前,别人教你!你现在牛了,就说别人天真???

其实,框架这个东西,你用 UML 画出来,也可以,直接以代码表现快速搭环境,也可以,

任何事都不是一成不变的,要看项目的紧迫度,我觉得,


一个很小的项目,又是很急,难道你还要用  UML画,一个一个地画,再产生代码?? 有必要吗 ?  像这种情况,框架师可以把代码大概写一下,让工程师有个整体的概念,有很多事,可以等项目后期再完善,以备将来维护,
9 楼 jyslb 2010-04-25  
比较熟悉和经常使用class diagram, activity diagram, state diagram, use case diagram, sequence diagrame,其他不怎么用
8 楼 liwenjie 2010-04-23  
还是按照敏捷的思想不到非常需要这个文档就不写这个文档,UML图也是一样。但是我发现使用UML把设计意图表达出来第一非常清晰。
第二容易发现设计的问题和逻辑的缺漏,比如实体间的关系,反正图上就这些实体,那么我们一一检查两者关系好了。我个人进行设计、交流的时候使用UML,通常是2个或者多人,每个人先有自己的想法然后边讨论,边画图,图也画好了,设计也出来了,做到非常清晰,并且可以作为以后工作交接、备忘的设计文档,如果以后有改动,就把图拿出来,在上面修改,这样也做到了设计与文档同步。我不太建议用UML生成代码,我很推荐headfirst 设计模式中的UML,只要能清晰地说明设计意图最好,哪怕不是特别的正规。比如包图、类图,反映了其之间的关联、依赖关系就好,哪怕在上面加上了数据流向。
我个人用visio画图。
7 楼 zhangdaiping 2010-04-22  
piao_bo_yi 写道
LZ的UML一定用得很熟练。我觉得LZ前期的确是正向工程和逆向工程整过度了。同意LZ后期做法,仅保存对于理解系统所必要的图就可以了。
关于那句“架构师或者设计师将系统的体系架构和代码框架设计好,剩下的事情只要程序员去填空就可以了”,其实不是不可能的。很多对日外包就是这么做的。我觉得很牛。不过这也不等于人家没有迭代。
LZ说的那个ENTITY和HASHMAP的问题是什么意思,能描述下吗?


小日本的这种开发成本很高,所以填空的事都是找成本低的地方来做,比如国内。
6 楼 yin_bp 2010-04-19  
ENTITY和HASHMAP的问题指的是怎么用uml中的图来表述java中的匿名类、内部类和主体类之间的关系,呵呵,ENTITY对应Map中的内部类Map.Entry ,需要用uml图来表述一个复杂关系的例子。
5 楼 piao_bo_yi 2010-04-19  
LZ的UML一定用得很熟练。我觉得LZ前期的确是正向工程和逆向工程整过度了。同意LZ后期做法,仅保存对于理解系统所必要的图就可以了。
关于那句“架构师或者设计师将系统的体系架构和代码框架设计好,剩下的事情只要程序员去填空就可以了”,其实不是不可能的。很多对日外包就是这么做的。我觉得很牛。不过这也不等于人家没有迭代。
LZ说的那个ENTITY和HASHMAP的问题是什么意思,能描述下吗?
4 楼 yin_bp 2010-04-19  
关键看我们对这些uml工具掌握的熟练程度,掌握得好就能够利用其很好地表述我们业务需求和业务流程
3 楼 mouse5s306 2010-04-18  
培训的过程往往让人感觉事情很美好。
但到实际中,情景就颠覆了。
培训灌输的东西只能够做借鉴,该怎么处理还是应该从项目的实际情况出发。
2 楼 chenjianjx 2010-04-13  
Correct!
UML只应该用于沟通,而且必须是粗粒度的。想知道细粒度的设计,去看看代码。
1 楼 huatu122 2010-04-13  
uml是个好东西,但是大多公司由于需求变动而造成uml只是个摆设而以

相关推荐

    感悟UML中的禅理UML降低了开发效率

    UML的存在可以看作是对“不可说之说”的尝试,类似于禅宗中“不立文字,直指人心”的哲学。虽然难以用语言完全描述复杂的设计,但UML提供了一种可视化的方式来传达这些难以言表的概念。就像禅宗通过公案和故事来启发...

    UML建模课程设计(大学生社团管理系统).pdf

    综上所述,UML建模课程设计的大学生社团管理系统是一个全面、功能强大的工具,它结合了现代信息技术,旨在提升高校社团管理的效率,降低管理成本,同时培养学生的软件工程实践能力。通过深入学习和应用UML,不仅可以...

    软件学院软件工程实践感想

    这个过程中,我积累了丰富的知识和实践经验,以下是我对软件工程的一些核心理解和感悟。 首先,软件工程并非单纯的技术活动,它涉及到项目管理、团队协作和沟通技巧。在实践中,我们学习了如何制定合理的项目计划,...

    UML课程设计存档说明

    - 自我感想:表达个人在设计实践过程中的体会和感悟,这有助于自我成长和未来的学习方向。 3. 致谢或附录:这部分可以感谢指导老师、团队成员或其他对项目有贡献的人。附录则用于放置补充材料,如源代码、数据表、...

    UML宿舍楼管理系统报告

    本课程设计通过对UML语言的理解与应用,结合Rational Rose工具的实践操作,完成了宿舍楼管理系统的模型构建。项目覆盖了从需求分析到系统设计的全过程,不仅锻炼了学生的技术能力,还培养了团队协作精神。通过这样的...

    UML本科生信息管理系统-rational rose 2003

    - **自我感想**:每位成员都表达了对于此次项目设计的感受和体会,认识到理论与实践相结合的重要性,以及团队合作的价值。 #### 六、总结 通过这个项目,不仅实现了对学生选课系统的需求分析和设计,更重要的是让...

    UML实验报告 武汉理工大学

    根据给定的文件信息,我们可以提炼出以下关键...综上所述,这份实验报告不仅展示了UML建模的实际应用,也体现了软件工程中需求分析、系统设计、编码实现和测试评估的全过程,对于培养学生的综合实践能力具有重要意义。

    软件建模实验报告.doc

    这部分是学生自我反思和学习总结的地方,可以分享在使用StarUML过程中遇到的问题、解决方法以及对软件建模的理解和感悟。 实验成绩的评定不仅依据实验报告的完整性,还包括实验预习、实验操作和实验态度等多个方面...

    数据库课程设计心得体会_2.pdf

    标题中的“数据库课程设计心得体会”指的是作者通过亲身参与一次数据库课程设计比赛,对数据库学习、设计及应用的体验和感悟。描述部分虽然未提供具体内容,但从标签“互联网”可以推测,这次课程设计可能涉及到...

    Java编程实践大作业 GUI 五子棋 用eclipse写的

    5.文档里面没有UML图 介意的不要下载 6.我写了五子棋的简单,中级,高级,三个模式,以及具有悔棋功能 7.人机对战 两人交替落子 由用户优先落子 8.本代码算法一般,有待优化 9.菜单-开始-重新游戏/读档/存档/悔棋/...

    架构设计资源(4)

    7. **中国优秀软件架构师感悟录.pdf**: 这可能是一本包含中国顶级架构师经验分享的书籍,提供了他们对成功架构设计的独特见解和实践案例。 8. **+打通软件需求到架构设计之墙.pdf**: 这份文件可能关注的是如何...

    软件方法书

    八、作者的个人经历与感悟 潘加宇分享了自己从程序员到软件工程专家的成长历程,以及创建UMLChina平台的初心和愿景。他的经验表明,软件工程不仅是技术的积累,更是思维方式和解决问题能力的提升。 九、本书的特点...

    软件工程报告.docx

    作者详细记录了教务管理系统项目的各个阶段,包括可行性研究、项目开发计划、概要设计、详细设计、UML建模、测试计划与分析以及用户操作手册的编写过程,同时也分享了在程序编写阶段的经验与感想。以下是对这些关键...

    建模实验.rar

    10. **实验报告**:最后,实验可能要求提交一份详细的实验报告,总结学习成果,分析建模过程中的问题和解决方案,以及实验后的感悟和改进点。 尽管压缩包内的“新建文件夹”没有提供具体的文件名,但通常这样的...

    一位中国软件工程师的感言

    - 强调了学习UML、Rose和RUP等工具和模型的重要性,即使没有足够的成功案例,也需要勇于尝试和实践。 - 印度公司的管理水平,如让高中生也能编写代码,反映了其成熟和规范的管理体系。 总结来说,这篇感言提出了...

    终极期望之:Ivar Jacobson 的软件工程传世经典

    他的工作对于软件工程实践产生了深远影响,特别是在需求分析和系统设计阶段。 Jacobson的主要贡献之一是引入了“用例(Use Case)”的概念。在《面向对象的软件工程》一书中,他详尽阐述了如何通过用例来捕获、定义...

    2019年软件工程师工作总结范文三篇.doc

    2. 技术进步:在技术方面,作者在这一年中深入研究了设计模式、EJB、.Net平台和UML建模,取得了一定的突破,设计出一套基于.Net平台的系统架构和开发工具,并在实践中得到验证。此外,作者还分享了在线上发表的技术...

    一个IT人士的个人经历,给迷失方向的朋友.txt

    - **软件架构与设计模式**:虽然文章中未明确提及具体的软件架构或设计模式,但可以推断出作者对于UML等建模语言以及面向对象编程原则有一定的了解和应用经验。 #### 四、行业变迁与适应策略 - **行业变迁**:作者...

    [详细完整版]软件工程设计.doc

    最后,实训感想部分强调了实训对于提高个人技能和未来就业准备的价值,反映了软件工程设计不仅需要扎实的专业知识,还需要不断学习和提升,以适应不断变化的市场需求。 总之,这份实训报告涵盖了软件工程中的需求...

Global site tag (gtag.js) - Google Analytics