UML实用吗?

127

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

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

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


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

4
尽管这个讨论已经很久没有活跃了,但我认为有几点很重要需要补充。代码中的错误是一回事。如果不加修正就任其漂流下去,设计上的错误可能会变得非常臃肿且丑陋。而 UML 是自我验证的。我的意思是,它可以让您在多个数学封闭和互相检查的维度中探索您的模型,从而产生强大的设计。
UML 还有另一个重要方面:它直接与我们最强大的能力——视觉化——对话。例如,如果 ITIL V3(本质上足够简单)以 UML 图表的形式传达,它可以在几十张 A3 折叠纸上发布。相反,它以真正具有圣经般规模的几卷书的形式出现,引发了整个行业的惊叹、令人惊叹的成本和广泛的猝不及防的震动。

2
你读过UML标准吗?它完全没有数学背景,甚至存在内部不一致性。而且很难理解:例如,圆角矩形用于两个完全不同的事物(状态机中的状态和活动图中的操作和活动)。这太糟糕了。 - vainolo

4

从质量保证工程师的角度来看,UML图表可以指出逻辑和思考中的潜在缺陷。这让我的工作更加轻松 :)


3
UML图表对于捕捉和传达需求以及确保系统满足这些需求非常有用。它们可以在规划、设计、开发和测试的各个阶段进行迭代使用。
从主题“在开发过程中使用模型” http://msdn.microsoft.com/en-us/library/dd409423%28VS.100%29.aspx 中得知:
模型可以帮助您可视化系统所处的世界,澄清用户需求,定义系统的架构,分析代码,并确保您的代码符合要求。
您还可以阅读我对以下帖子的回复:
“如何学习‘良好的软件设计/架构’?” https://stackoverflow.com/questions/268231/how-to-learn-good-software-design-architecture/2293489#2293489

3
我相信有一种方法可以利用Cockburn风格的UML fish、kite和海平面用例,正如Fowler在他的书“UML Distilled”中所描述的那样。我的想法是将Cockburn用例用作代码可读性的辅助工具。
因此,我进行了一个实验,并在这里发布了一个带有“UML”或“FOWLER”标签的帖子。这是一个针对c#的简单想法。找到一种将Cockburn用例嵌入编程结构的命名空间中的方法(例如类和内部类命名空间,或者利用枚举类型的命名空间)。我相信这可能是一种可行且简单的技术,但仍然有疑问,需要其他人来检查它。它可能适用于需要一种伪特定领域语言的简单程序,该语言可以存在于c#代码的中心位置,而不需要任何语言扩展。
如果您感兴趣,请查看帖子。请点击这里

3
我认为UML是有用的,虽然我认为2.0规范使曾经清晰的规范变得有些臃肿和繁琐。我同意添加时序图等内容,因为它们填补了一个空缺...
有效地使用UML需要一些练习。最重要的是清晰地传达信息,需要建模并作为团队进行建模。白板是我发现最好的工具。我没有看到任何“数字白板软件”能够捕捉到实际白板的效用。
话虽如此,我喜欢以下UML工具:
  1. Violet - 如果再简单些就可以当成一张纸
  2. Altova UModel - 适用于Java和C#建模的好工具
  3. MagicDraw - 我最喜欢的商业建模工具
  4. Poseidon - 性价比不错的工具
  5. StarUML - 最好的开源建模工具

2

从学生的角度来看,我发现UML几乎没有用处。我认为具有讽刺意味的是,程序员们尚未开发出自动生成您所说必要的内容的程序。在Visual Studio中设计一个功能,可以提取数据的部分,寻找定义,并生成足够的答案,以便任何人都可以查看并理解程序,这将非常简单。这也会使它保持更新,因为它将直接从代码中获取信息来生成信息。


这并不容易!如果您使用逆向工程从实际代码中提取UML模型,您往往会在UML模型中得到太多细节,以至于它是无用的。毫无疑问,这是研究人员正在追求的目标,但这不是一个容易解决的问题。 - ComDubh

2
我对UML的问题之一是规范的易懂性。当我试图真正理解特定图表的语义时,我很快就会迷失在元模型和元元模型的迷宫中。UML的一个卖点是它比自然语言更不含糊。但是,如果两个或更多工程师对图表的解释不同,它就无法达到目标。
此外,我曾尝试在几个UML论坛上向OMG成员提出有关超结构文档的具体问题,但很少或没有结果。我认为UML社区还不够成熟以支持自己。

2

当你要表示一个类及其字段和方法时,就会使用UML,尽管它只是一种UML图。

UML的问题在于创始人的书籍过于模糊。

UML只是一种语言,它并不是真正的方法。

对我来说,我真的很讨厌开源项目中缺乏UML模式。拿像WordPress这样的东西,你只有一个数据库模式,什么都没有。你必须在Codex API周围漫步,试图获得大局。


2

我经常看到序列图和活动图被使用。我在与其他系统交互的“实时”和嵌入式系统方面做了很多工作,序列图非常有助于可视化所有交互。

我喜欢使用用例图,但我还没有遇到太多认为它们有价值的人。

我经常想知道 Rational Rose 是否是基于 UML 模型设计得到的应用程序的好例子。它臃肿、有错误、运行缓慢、丑陋...


2
我发现对于非常小的项目,UML并不是非常有用,但对于较大的项目非常合适。
基本上,你使用什么并不重要,你只需要记住两件事:
1. 您需要某种架构规划。 2. 您需要确保团队中的每个人实际上都在使用相同的技术进行项目规划。
因此,UML就是这样的:一个关于如何规划项目的标准。如果您雇用新人,他们更有可能了解任何现有的标准 - 无论是UML、流程图、Nassi-Schneiderman还是其他什么 - 而不是您现有的内部工具。
在我看来,对于单个开发人员和/或简单的软件项目,使用UML似乎过度了,但在较大的团队中工作时,我肯定希望有一些规划软件的标准。

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