UML在实践中的现状和一些建议
本文是我在csdn上看到的文章,由于认识中的共鸣,摘抄至此。 原文地址:http://blog.csdn.net/vrman/article/details/280157
UML在国内不少地方获得了应用。这应该说是个好事,然而背后我们也看到,这种应用大多属于不够冷静的炒作和跟风,UML在很多时候已经变成了一种形式主义的东西。实际上,UML本身所倡导的主旨是很好的,它保证了程序员之间的交流语言,RUP之类的工具也保证了软件开发过程的规范性,严格保证了先设计后开发,设计阶段有翔实的规范化的文档等。接下来,我们要看看目前的UML热潮是怎么产生的?为什么会存在形式主义?以及RUP之类的工具究竟存在哪些问题。
第一是目前几乎所有的UML工具都非常不好用,不美观、不直观、更不方便,在项目中进行同步维护也很困难。很多项目中用UML基本上可归于形式主义的范畴。事实上,UML本身是一种规范,而规范本身的目的在于更好的交流沟通和更快更好的设计质量,事实上现在UML的发展已经背离了这些更基本的宗旨。我崇尚简单就是美,最传统的流程图每个人都能看懂(甚至不是程序员也可以),现在的UML呢?太多不够体贴和人性化的东西了,过于抽象化和公式化。我想未来会有新的更轻量级的类似的东西取代落后、冗肿和封闭的UML。我个人崇尚简单就是美……
第二个问题是目前程序员的普遍素质不够。UML本身基本是于面向对象的软件设计思想的,没有足够优良的OO设计能力,很难有真正需要UML类别设计工具去表达自己设计意图的必要。这个观点不算夸张,其实有的人OO理论很强,但真正在实践中往往过度设计,或者设计本身极度不平衡,把项目开发改成了科研实验和上机实验。另外更多的一些人对自己的动手能力很信任,往往忽视设计环节,基本上项目的设计一直处于反复和动荡中。这些程序员不给他们一段时间学习和实践,是很难成为成熟的设计师的,在基本成熟之前,UML对他们将是一个形式化的东西,不会有很强的意义。Andrei曾经说程序员要到35岁才会成熟,而代码员可能20多岁就可以了。这句话里大概也有“设计本身是个很需要经验的工作”的意思。
第三个问题是少数社会层面的宣传误导。印度海归派、外企员工、IT译书作者和出版社、职业培训机构等处于各自的经验、目的和原因,大部分人完全背离现实的盲目鼓吹UML,甚至几乎片面的认为UML就是软件工程。外企应用UML其实也并不很成功,不过他们有成熟的培训体系,所以一定程度的弥补了UML过于晦涩的弱点,作为已经掌握他们的外企员工有一些可能会比较片面的欢迎UML。而印度海归派的目的就不用多说了,至于培训和译书的人很多都学者成分大于实战成分,他们需要鼓吹UML,不过早晚他们会发现更好的东西而放弃对UML的鼓吹。事实上,现在已经有人开始考虑这样作了。
第四个问题是少数程序员非常依赖自动代码框架生成,而这其实根本不是UML的关键问题。他们为了使用某些工具生成的一点也不符合中国人阅读习惯的代码,情愿放弃其他的一切。对他们来说UML只是一个代码生成工具而已,所以他们作的UML大都没有多大价值,比较形式化。
第五个问题是项目资源的问题。国内大多数项目实际可支配的资源非常有限,如果给其他外国公司的开发人员看无论开发周期还是资金人力都基本是荒唐可笑的。UML实际上应该贯穿始终,而不是只在最初的设计阶段,也应该贯穿整个项目组,包括设计、管理、开发、测试所有的人都应该应用它。
我想一般的公司如果没有极大的把握不用太迷信UML/RUP,其实某些基于轻量级项目并不需要RUP或UML。现在正打算学习UML的同行们,也尽可以先放下它,将来一定会有更优秀的技术取代它,现在不如多花点时间学习和实践一下OO设计等更基础的东西。其实仅仅熟悉一下工具软件和交流范式,将来对你来说只是几天到个把月的事情,不用那么在意。而对于那些现在已经决定了实战UML的项目,要想获得成功,我的建议如下:
第一,项目周期至少延长通常计划的50%至100%。你必须跟所有人解释说,只有这样才能让UML本身有意义,才能切实提高项目的设计质量。
第二,在项目开始集中提供一段时间的UML开发培训。贯穿项目始终,都要经常进行全方位面向对象设计思想的交流(当然是结合UML的),力图通过交流提高设计质量。
第三,顶住客户和公司领导方面的压力,坚持把尽可能多的设计问题在最初的设计阶段解决,而不要被迫匆匆完成形式主义的UML设计,然后把设计丢在一边,开始编码。
第四,妥善处理部分“精英”程序员的抵触情绪。能疏导就疏导,不能疏导应考虑压服甚至将他彻底排除在项目组外。UML量级的团队开发并不鼓励个人英雄主义,不下狠心将根本没机会推进下去。
第五,对项目的期望不要太高。无论是面对急于验收向上级邀功的政府客户,还是公司里不懂技术只懂蛮干的领导,都要保持低调,把它当做一个并不见得立竿见影的实验……
好了,就写这么多,祝大家好运。
UML在实践中的现状和一些建议的更多相关文章
- 记一次小团队Git实践(中)
对于初学者,从使用上先入手,往往学的最快,并从中汲取教训,再回头更深入的学习,效果尤佳. 安装git 安装git自不必说,mac已经内置了git,linux下一个命令就能搞定,windows下需要下载 ...
- 编程实践中C语言的一些常见细节
对于C语言,不同的编译器采用了不同的实现,并且在不同平台上表现也不同.脱离具体环境探讨C的细节行为是没有意义的,以下是我所使用的环境,大部分内容都经过测试,且所有测试结果基于这个环境获得,为简化起见, ...
- [UML]转:UML类图集中关系的总结
转:http://blog.csdn.net/dragonpeng2008/article/details/6836448 在UML类图中,常见的有以下几种关系: 泛化(Generalization) ...
- 实践中总结——理解haslayout和BFC
1.HASLAYOUT 首先,haslayout翻译成中文就是:有布局. 所谓布局,指的是一个元素可以对本身和里边的元素进行尺寸计算和定位.这里只是谈IE6/7,据说微软之所以不是对所有元素默认有布局 ...
- UML类图中的关系和表示方法
类图是用来描述程序中的类以及它们之间的关系的,使用类图可以帮助我们简化对系统的理解.在UML类图中比较常见的关系有六种,它们分别是:依赖.关联.聚合.组合.泛化.实现,这六种关系中类之间的紧密程度是依 ...
- 谈谈在DevOps实践中,感觉最重要的这三个技术……
从国内众多DevOps实践中,我们能看到下面三个技术尤其重要和火热: 容器:容器从根本上解决了软件对环境的依懒性,解决了各个环境之间的差异问题:它可以加速部署的速度,提高部署的效率:降低部署的成本.容 ...
- 你应当如何学习C++以及编程(细节是必要的,但不是重要的,把时间用在集中精力去解决问题,而不是学习新技术,那样练不成高手。在实践中提高才是最重要的。最最重要的内功还是长期学习所磨练出来的自学能力)good
最近在学习Qt但由于没有C++的基础,感觉学的很吃力.看到pongba的这篇文章感觉不错就弄过来了, 原文地址:http://blog.csdn.net/qter_wd007/article/deta ...
- UML类图中最重要的几种类关系及其表示
阅读UML图最常见到的类与类之间的关系有如下几种: 1.依赖关系 依赖关系是指一个类在计算时,应用了“另一个类”类型的参数,这种关系是偶然.临时.弱的. UML类图中,依赖关系用带单箭头的虚线表示,即 ...
- 读Java并发编程实践中,向已有线程安全类添加功能--客户端加锁实现示例
在Java并发编程实践中4.4中提到向客户端加锁的方法.此为验证示例,写的不好,但可以看出结果来. package com.blackbread.test; import java.util.Arra ...
随机推荐
- Spring Boot入门——json数据处理
1.引入fastJson插件 <!-- 引入fastjson插件 --> <dependency> <groupId>com.alibaba</groupId ...
- 在CentOS6.4中安装配置LAMP环境的详细步骤 - Leroy-LIZH
本文详细介绍了CentOS6.4系统中安装LAMP服务并对其进行配置的过程,即安装Apache+PHP+Mysql,参照了网上大神的设置,其他Linux发行系统可以参考~ 在本文中部分命令操作需要ro ...
- oracle 不走索引的原因
create table tb2 as select * from emp;alter table tb2 modify empno number(4) not null;翻到20W行 create ...
- MVC3 学习总结
1.项目文件结构 controllers,views 2.Model特性实现模型的客户端和服务端的验证 1)自带特性 2)扩展特性,或者重写特性 3.实现MVC filter 的类 ...
- 18 Python 模块引入
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块让你能够有逻辑地组织你的 Python 代码段. 把相关的代码 ...
- 在Windows 7上安装ACE 6.1.0
主机环境 操作系统:Windows 7 专业版准备ACE 用浏览器打开http://download.dre.vanderbilt.edu/,下载ACE-6.1.0和ACE-html-6. ...
- eShopOnWeb
eShopOnWeb https://www.cnblogs.com/sheng-jie/p/9616675.html 构建现代Web应用 1.引言 eShopOnWeb是基于ASP.NET Core ...
- C++对C语言的拓展(4)—— 函数重载
函数重载(Function Overload):用同一个函数名定义不同的函数,当函数名和不同的参数搭配时函数的含义不同. 1.重载规则 (1)函数名相同: (2)参数个数不同,参数的类型不同,参数顺序 ...
- ipad与iphone的屏幕分辨率
1.ipad分辨率,iphone 6 iPhone设备 尺寸 分辨率 点iPhone 3和3s 3.5英寸 (320×480) 3 ...
- bzoj 1016 [JSOI2008]最小生成树计数——matrix tree(相同权值的边为阶段缩点)(码力)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1016 就是缩点,每次相同权值的边构成的联通块求一下matrix tree.注意gauss里的 ...