本文是我在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在实践中的现状和一些建议的更多相关文章

  1. 记一次小团队Git实践(中)

    对于初学者,从使用上先入手,往往学的最快,并从中汲取教训,再回头更深入的学习,效果尤佳. 安装git 安装git自不必说,mac已经内置了git,linux下一个命令就能搞定,windows下需要下载 ...

  2. 编程实践中C语言的一些常见细节

    对于C语言,不同的编译器采用了不同的实现,并且在不同平台上表现也不同.脱离具体环境探讨C的细节行为是没有意义的,以下是我所使用的环境,大部分内容都经过测试,且所有测试结果基于这个环境获得,为简化起见, ...

  3. [UML]转:UML类图集中关系的总结

    转:http://blog.csdn.net/dragonpeng2008/article/details/6836448 在UML类图中,常见的有以下几种关系: 泛化(Generalization) ...

  4. 实践中总结——理解haslayout和BFC

    1.HASLAYOUT 首先,haslayout翻译成中文就是:有布局. 所谓布局,指的是一个元素可以对本身和里边的元素进行尺寸计算和定位.这里只是谈IE6/7,据说微软之所以不是对所有元素默认有布局 ...

  5. UML类图中的关系和表示方法

    类图是用来描述程序中的类以及它们之间的关系的,使用类图可以帮助我们简化对系统的理解.在UML类图中比较常见的关系有六种,它们分别是:依赖.关联.聚合.组合.泛化.实现,这六种关系中类之间的紧密程度是依 ...

  6. 谈谈在DevOps实践中,感觉最重要的这三个技术……

    从国内众多DevOps实践中,我们能看到下面三个技术尤其重要和火热: 容器:容器从根本上解决了软件对环境的依懒性,解决了各个环境之间的差异问题:它可以加速部署的速度,提高部署的效率:降低部署的成本.容 ...

  7. 你应当如何学习C++以及编程(细节是必要的,但不是重要的,把时间用在集中精力去解决问题,而不是学习新技术,那样练不成高手。在实践中提高才是最重要的。最最重要的内功还是长期学习所磨练出来的自学能力)good

    最近在学习Qt但由于没有C++的基础,感觉学的很吃力.看到pongba的这篇文章感觉不错就弄过来了, 原文地址:http://blog.csdn.net/qter_wd007/article/deta ...

  8. UML类图中最重要的几种类关系及其表示

    阅读UML图最常见到的类与类之间的关系有如下几种: 1.依赖关系 依赖关系是指一个类在计算时,应用了“另一个类”类型的参数,这种关系是偶然.临时.弱的. UML类图中,依赖关系用带单箭头的虚线表示,即 ...

  9. 读Java并发编程实践中,向已有线程安全类添加功能--客户端加锁实现示例

    在Java并发编程实践中4.4中提到向客户端加锁的方法.此为验证示例,写的不好,但可以看出结果来. package com.blackbread.test; import java.util.Arra ...

随机推荐

  1. hibernate学习(2)

    1 实体类编写规则 2 hibernate主键生成策略 3实体类操作 (1)crud操作 (2)实体对象状态 4 hibernate的一级缓存 5 hibernate事务操作 (1)事务代码规则写法 ...

  2. SQL Server 2016 —— 聚集列存储索引的功能增强

    作者 Jonathan Allen,译者         邵思华         发布于     2015年6月14日   聚集列存储索引(CC Index)是SQL Server 2014中两大最引 ...

  3. Merge 2

    在SQL2008中,新增了一个关键字:Merge,这个和Oracle的Merge的用法差不多,只是新增了一个delete方法而已.下面就是具体的使用说明: 首先是对merge的使用说明: merge ...

  4. node中的加密模块 crypto

    crypto 加密模块(不是很安全):是使用md5来加密,这是node自带的模块,不需要安装. 引入模块: const crypto = require('crypto'); 当用户注册时,我们将从前 ...

  5. web自动化:DOM对象

    一. 什么是DOM对象 定义:DOM(Document Object Mode,文档对象模型)是一套web标准,定义了访问HTML文档的一套属性.方法和事件 本质:网页与脚本语言沟通的桥梁.脚本语言通 ...

  6. angular复选框式js树形菜单(一)

    treeView.html <ul class="tree-view"> <li ng-repeat="item in treeData" n ...

  7. 20165210 Java第一周学习总结

    20165210 2018<Java程序设计>第一周总结 教材学习内容总结 第一章知识要点 Java在当代需求量极高 Java程序不依赖平台 Java内置对多线程的支持 重点安装JDK 源 ...

  8. 2018.7.27 wireless charger TX evaluation kit based on STWBC-EP

    1 introduced 我们需要设计一个无线充电方案: 功能需求:通用的无线充电平台 参数要求:8-10W step1: 找寻资料  http://www.ti.com/sitesearch/doc ...

  9. 三、Jmeter--HTTP请求默认值(HTTP Request Defaults)和访问地址参数化

    一.HTTP请求默认值(HTTP Request Defaults) 1. 在本地搭建了一个wordpress开源论坛,那么我每次访问论坛的地址(服务器名称或IP)是不变的,端口也是不变的,协议也是不 ...

  10. 3、Selenium调用IEDriverServer打开IE浏览器

    学习Selenium时若想调用IE浏览器,均需要以下步骤 (1).http://selenium-release.storage.googleapis.com/index.html 下载IEDrive ...