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 ...
随机推荐
- Linux软件安装(一)
软件安装方式: 1. rpm方式 该方式软件安装本质与Windows下安装软件方式一致,就是把软件包里面的二进制代码文件复制到系统指定目录(如 C://program files) 优点:软件安装非常 ...
- JavaScript的DOM操作(节点操作)
创建节点createElement()var node = document.createElement(“div”);没什么可说的,创建一个元素节点,但注意,这个节点不会被自动添加到文档(docum ...
- 算法练习1---桶排序java版
今天复习了桶排序. 例如现在有满分为10分的试卷,学生得分分别为2,8,5,3,5,7,现在要给这些分数按照从大到小输出,使用桶排序的思想:有11个桶,每个桶有一个编号,编号从0-10,每出现一个分数 ...
- 《Effective C++》——条款08:别让异常逃离析构函数
考虑如下代码: class Widget{ public: ... ~Widget(){...}//假设这个可能吐出一个异常 }; void doSomething() { std::vector&l ...
- BRICH
一.简介 Brich是典型的基于层次的聚类算法.最大的特点就是适合数据量特别大的数据集,处理速度很快,因为该算法扫描一遍数据集. 该算法是利用了一个树状结构来快速聚类,该结构类似平衡B+树.每一个叶子 ...
- Git和Github使用说明
1. 安装 官网地址:https://git-scm.com/downloads 我这里使用的是git version 2.19.1.windows.1,全程傻瓜式安装,点下一步即可,可以把命令模式和 ...
- 20179203 《Linux内核原理与分析》第十二周作业
Return-to-libc 攻击实验 一.实验描述 缓冲区溢出的常用攻击方法是用 shellcode 的地址来覆盖漏洞程序的返回地址,使得漏洞程序去执行存放在栈中 shellcode.为了阻止这种类 ...
- LeetCode LFU Cache
原题链接在这里:https://leetcode.com/problems/lfu-cache/?tab=Description 题目: Design and implement a data str ...
- poj2374 Fence Obstacle Course[线段树+DP]
https://vjudge.net/problem/POJ-2374 吐槽.在这题上面磕了许久..英文不好题面读错了qwq,写了个错的算法搞了很久..A掉之后瞥了一眼众多julao题解,**,怎么想 ...
- redis设置为null问题
查看源码后发现,redis没有删除方法,本想给他设置为null,但是redis报错,所有仔细想了一下,发现redis提供了一个时间限制方法,所有可以让redis的时间限制为1s,就想当于删除redis ...