UML实用吗?

127

在大学期间,我参加了很多面向设计和UML 的课程,并认为 UML 可以用于改善软件项目,特别是用例映射,但它真的实用吗?我做过几个实习工作,发现 UML 在工业界中并没有被广泛使用。在项目中花时间创建 UML 图表值得吗?此外,我发现类图通常没有用,因为查看类的头文件会更快速。具体哪些图表最有用呢?

编辑:我的经验仅限于小型团队(少于10位开发人员)的项目。

编辑:许多很好的答案,虽然不是最冗长的,但我认为所选择的答案最为平衡。


4
2013年一项调查结果显示,UML并没有像软件工程教授们预期的那样被广泛使用,调查还揭示了一些原因:http://oro.open.ac.uk/35805/8/UML%20in%20practice%208.pdf。 - Fuhrmanator
31个回答

92
使用UML就像看着自己的脚走路。这是将通常可以无意识完成的工作变得有意识和明确。初学者需要仔细考虑他们正在做的事情,但专业程序员已经知道他们在做什么。大部分时间,编写代码本身比编写关于代码的文档更快且更有效,因为他们的编程直觉已经针对任务进行了调整。
然而,问题不仅仅在于你当前正在做什么。那么将来六个月后加入项目的新雇员需要速成代码时该怎么办?那么将来所有目前参与项目的人都离开五年后该怎么办?
为加入项目的任何人提供一些基本的、最新的文档资料非常有帮助。我并不主张使用完全展开的 UML 图表,包括方法名称和参数(维护难度太高),但我认为系统中组件的基本图表、它们之间的关系以及基本行为的基本图表是非常有价值的。除非系统设计发生了巨大变化,这些信息不应该经常更改,即使实现被微调。
我发现文档的关键是适度,没有人会读50页完全展开的 UML 图表和设计文档而不在几页之内打瞌睡。另一方面,大多数人会喜欢得到5-10页简单类图的基本描述,了解系统是如何组成的。
我发现 UML 有用的另一个场景是,当高级开发人员负责设计组件,但将设计交给初级开发人员实现时。

35
“六个月后新员工需要学习代码怎么办?” 那么,看看代码怎么样?这是唯一准确和完整的了解代码的方法。对于我们程序员来说,这也是最自然的方式。我认为,我们必须通过查看图表来完全理解代码的想法非常可笑,而且令人沮丧的是,这种垃圾居然变得普遍起来。 - BobTurbo
8
同意BobTurbo的观点,我从来没有用过UML,尤其是别人的UML。我总是更喜欢直接看代码。 - James Adam
10
在开始编码之前,我发现绘制UML类图可以节省时间。这让我能够想象设计上的错误和缺陷,并与同事讨论。更好的是,如果使用CASE工具绘制它们,它们将生成应用程序的基本结构代码。因此,回报是三倍的。 - Andrew S
15
即使是代码,一张图片仍然价值千言万语,@BobTurbo。我没有看到任何合理的反对意见 - 包括以“真正的程序员…”开头的论点在内。如果我要与我的团队讨论架构,我不会把10页源代码用透明胶带贴在白板上。 - DavidS
4
@BobTurbo 但是阅读别人的代码一直都容易吗?如果您只有一个月的时间来阅读微软的.NET源代码并完全理解它,那么您对此有多自信?即使您能够理解,您总是会问自己:“他为什么要这样做?为什么不那样做?”使用图表还可以进行适当的计划和分配编码任务,以便您不会重叠任务。它还有助于确定可行性、成本以及证明向客户/上级/非编码人员证明您的决策的证据。 实质上,除非您正在开发“Hello World”应用程序,否则建议使用UML。 - John Evans Solachuk
显示剩余2条评论

50

在一个足够复杂的系统中,某些地方考虑使用一些UML是有用的。

对于一个系统来说,适用的有用图表是各不相同的。
但最常用的包括:

  • 类图
  • 状态图
  • 活动图
  • 序列图

有许多企业认为它们非常重要,也有很多企业认为它们是完全浪费时间和精力的。

最好不要过火,考虑你所在项目的最佳选择,选择适用且有意义的内容。


38
使用UML就像看自己的脚步走路一样。它使你通常可以无意识地做到的事情变得明确和有意识。初学者需要仔细考虑他们正在做什么,但专业程序员已经知道他们在做什么了。大多数时候,写代码本身比写关于代码的内容更快更有效,因为他们的编程直觉已经适应了任务。
例外情况是当你发现自己在夜晚没有手电筒而且开始下雨,这时你需要看着自己的脚步避免跌倒。有时候你承担的任务比你的直觉更复杂,你需要放慢速度并明确陈述你的程序结构。然后,UML就是你可以使用的众多工具之一。其他工具包括伪代码、高层架构图和奇怪的隐喻。

4
这个网站有点奇怪,第一段无法表明你在引用某人的观点并对其持不同意见...但没错:伪代码也是一种很好的图解技术,并且非常常用。涉及树林、火炬等奇怪隐喻也很棒。 - Dan Rosenstark
完全不同意 - 如果你制作复杂的组件,UML 是必须的。 - yehonatan yehezkel

21

通用工作流和数据流程图可以在处理复杂过程时非常有用。根据我的经验,所有其他的图表(特别是UML)无一例外都是浪费时间和精力的痛苦。


16

我不得不表示反对,UML被广泛应用 - 任何涉及IT项目设计的地方都通常会使用UML。

现在,它是否被使用得好是另一回事。

正如Stu所说,从开发人员的角度来看,我发现用例(包括用例描述)和活动图最有帮助。

类图在展示关系以及对象属性(如持久性)时非常有用。但是,当涉及添加每个属性或属性时,它们通常过于复杂,并且一旦代码编写完成,它们往往很快过时。

UML的最大问题之一是需要花费大量的工作来保持其与正在生成的代码同步,因为很少有工具可以从代码重新设计UML,并且很少有工具做得好。


14

我想强调一下,我没有在大型(类似IBM的)企业开发环境中的经验。

我认为UML和Rational Unified Process更多地是在谈论你要做什么,而不是实际做你要做的事情。

换句话说,这在很大程度上是浪费时间。


10
我不会给你的回答投反对票,因为我认为这是一个好答案,但我完全不同意。每次我画出某个东西,我都可以节省几个小时甚至几个月的开发时间,而且近来我几乎总是一个人在开发。 - Dan Rosenstark
4
谈论和写下你想做的事情有助于你和他人更好地理解并及早发现可能存在的问题。 - Kamran Bigdely
我投反对票,因为在任何组织中,多于一人交流绝不是浪费时间。 - Eric

13

仅代表我的观点,应该只是丢弃。UML 是一个很好的沟通思想的工具,唯一的问题在于当你存储和维护它时,因为你实际上是创建了两个相同信息的副本,这通常会导致问题。

在最初的实现后,大部分 UML 应该从源代码中生成,否则它将很快过时或需要大量时间(并伴有手动错误)来保持更新。


哇,还有什么工具可以像Together一样,保持图表与代码的同步? - Dan Rosenstark
1
UML可以从源代码生成,这意味着对我来说,阅读UML并没有比阅读源代码更有益。换句话说,这是一种浪费。 - Marcus Downing
1
@MarcusDowning 不,它对新员工非常有帮助。查看UML比查看代码更快。 - Kamran Bigdely

10

我在学校的最后两个学期中共同教授了一门高级开发项目课程。该项目旨在与本地非营利组织合作,担任付费客户并用于生产环境。我们必须确保代码符合我们的预期,并且学生们收集了满足客户需求的所有数据。

课堂时间很有限,我的课外时间也很有限。因此,我们不得不在每次上课时进行代码审查,但由于有25名学生注册,个人审查时间非常短。我们发现在这些审查会议中最有价值的工具是ERD图、类图和顺序图。ERD图和类图仅在Visual Studio中完成,因此学生创建它们所需的时间微不足道。

这些图表可以非常快速地传达大量信息。通过快速概述学生的设计,我们可以快速确定他们代码中的问题区域,并立即进行更详细的审查。

如果没有使用这些图表,我们将不得不花费时间逐个查看学生代码文件以寻找问题。


+1 良好的数据可视化有助于揭示被无关细节掩盖的问题和趋势。 - Vlad Gudim

8
我有点晚来到这个话题,只想澄清几个小问题。问UML是否有用太过宽泛。大多数人似乎从典型/流行的UML作为绘图/沟通工具的角度回答这个问题。注意:Martin Fowler和其他UML书籍作者认为UML最好仅用于沟通。然而,UML还有许多其他用途。首先,UML是一种建模语言,具有映射到逻辑概念的符号和图表。以下是一些UML的用途:
- 沟通 - 标准化的设计/解决方案文档 - DSL(特定领域语言)定义 - 模型定义(UML配置文件) - 模式/资产使用 - 代码生成 - 模型到模型转换
考虑到上述用途列表,Pascal的帖子并不足够,因为它只涉及图表创建。如果上述任何一个是关键成功因素或需要标准化解决方案的问题领域,项目可以受益于UML。
应该从如何UML可能过度杀伤或适用于小型项目扩展到讨论何时使用UML会有意义或实际改进产品/解决方案,因为这是应该使用UML的时候。有些情况下,UML对于一个开发者也是有意义的,例如模式应用或代码生成。

6

UML多年来一直为我所用。当我刚开始学习时,我读了Fowler的《UML精简版》中他说的“只做足够的建模/架构等”。只需使用你需要的部分!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接