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 ...
随机推荐
- dp2--合并石子(一)
dp2--合并石子(一) 一.心得 二.题目 石子合并(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 有N堆石子排成一排,每堆石子有一定的数量.现要将 ...
- java: InputStreamReader将字节的输入流变成字符的输入流,OutputStreamWriter将字符的输出流变成字节的输出流
InputStreamReader:将字节的输入流变成字符的输入流, OutputStreamWriter:将字符的输出流变成字节的输出流 //将缓冲区的内容读取,可以一次读取 //可以接收键盘的输入 ...
- 2017-03-05 CentOS中配置守护服务(Supervisor)监听dotnet core web程序的运行
我们继续解决上篇博客的问题,我这个人有个毛病,不喜欢遗留什么问题,也不喜欢问题说不明白,具体要怎么解决一定要详尽,因为经常自己遇到问题的时候,去翻别人的博客,就会遇到这样的问题,很苦恼,又说废话了. ...
- 177. Nth Highest Salary
问题描述 解决方案 CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT BEGIN declare number int; set numbe ...
- 论文笔记 — Learning to Compare Image Patches via Convolutional Neural Networks
论文: 引入论文中的一句话来说明对比图像patches的重要性,“Comparing patches across images is probably one of the most fundame ...
- python中的SMTP发送邮件
一. 介绍 python3中自带了smtplib模块和email模块 smtplib模块:负责与邮件服务器的交互 email模块:负责组织邮件内容 二. smtplib模块 smtplib模块:主要是 ...
- MySQL 索引的知识整理
前言: 很多面试者,在面试的时候,都会回答,”索引就相当于一本书的字典,有了他能够很快的找到数据”, 这种答案好像在读书的时候老师告诉这么说的吧.今天来全面的描述一下数据库索引的原理及优化 ...
- MAMP软件的安装和使用
MAMP Pro软件是一款很好的在MAC下面运行的网站集成环境软件,功能强大,配置简单,十分便于本地调试,其由Apache+MySQL+PHP+动态DNS配置构成,PHP的版本可以动态切换到最新版.无 ...
- 201621123014《Java程序设计》第十二周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车. 2.1 简述如何 ...
- python在字符串中查找字符
两类函数: find(),rfind() index(),rindex() 找到了都返回下标. find找不到返回-1,index找不到抛出ValueError. 带r的表示从右向左找. 都可以使用第 ...