UML 实用吗?

在大学里,我学过许多面向设计和 UML的课程,我认识到 UML 可以用来帮助一个软件项目,特别是 用例映射,但是它真的实用吗?我已经完成了一些合作工作术语,而且似乎 UML 在行业中并没有得到大量的使用。在项目中创建 UML 图是否值得?此外,我发现类图通常没有用处,因为查看类的头文件更快。具体来说,哪些图是最有用的?

编辑: 我的经验仅限于10个以下的小型开发项目。

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

33674 次浏览

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

UML 有它的位置。随着项目规模的扩大,它变得越来越重要。如果您有一个长期运行的项目,那么最好使用 UML 来记录所有内容。

UML 只是人与人之间交流的方法之一。 白板更好。

我不得不表示反对,UML 被广泛使用——任何正在设计 IT 项目的地方,UML 通常都在那里。

现在是否正在使用 好吧是另一回事。

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

当试图显示关系以及对象属性(如持久性)时,类关系图可能非常有用。当涉及到添加任何单个属性或属性时,它们通常是过度的,特别是当代码编写完成后,它们通常很快就过时了。

UML 最大的问题之一是,一旦代码生成,就需要大量的工作来保持其最新,因为很少有工具能够从代码中重新设计 UML,而且仍然很少有工具能够做得很好。

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

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

我经常想知道 Rational Rose 是否是您从基于 UML 模型的设计中获得的各种应用程序的一个很好的例子。肿胀,有虫子,缓慢,丑陋。

在一个充分的 复杂的系统中,有些地方一些 UML被认为是有用的。

The useful diagrams for a system, vary by applicability.
但使用最广泛的是:

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

There are many enterprises who swear by them and many who outright reject them as an utter waste of time and effort.

最好不要太过头,想什么对你的项目是最好的,并选择适用的和有意义的东西。

我将通过提及我没有在大型(类似 IBM 的)公司开发环境中的经验来限定我的答案。

我看 UML 和 Rational Unified Process的方式是,它更多地是关于你将要做什么,而不是实际上的 DOING你将要做什么。

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

I co-taught a senior-level development project course my last two semesters in school. The project was intended to be used in a production environment with local non-profits as paying clients. We had to be certain that code did what we expected it to and that the students were capturing all the data necessary to meet the clients' needs.

Class time was limited, as was my time outside of the classroom. As such, we had to perform code reviews at every class meeting, but with 25 students enrolled individual review time was very short. The tool we found most valuable in these review sessions were ERD's, class diagrams and sequence diagrams. ERD's and class diagrams were done only in Visual Studio, so the time required to create them was trivial for the students.

这些图表非常迅速地传达了大量的信息。通过对学生的设计有一个快速的概述,我们可以在他们的代码中快速地隔离出问题区域,并在现场执行一个更详细的评审。

如果没有使用图表,我们将不得不花时间一个接一个地查看学生的代码文件来寻找问题。

我发现 UML 对于非常小的项目并不真正有用,但是对于较大的项目确实很适合。

基本上,你用什么并不重要,你只需要记住两件事:

  • 你想要一些建筑规划
  • 您希望确保团队中的每个人实际上都在使用相同的技术进行项目规划

So UML is just that: A standard on how you plan your projects. If you hire new people, there are more likely to know any existing standard - be it UML, Flowchard, Nassi-Schneiderman, whatever - rather than your exising in-house stuff.

对我来说,将 UML 用于单个开发人员和/或一个简单的软件项目似乎有些过分,但是当我在一个更大的团队中工作时,我肯定会想要一些规划软件的标准。

使用 UML 就像边走边看自己的脚。它使你通常可以无意识地做一些有意识和明确的事情。初学者需要仔细考虑他们在做什么,但是一个专业的程序员已经知道他们在做什么。大多数时候,编写代码本身比编写代码更快、更有效,因为他们的编程直觉与任务相适应。

唯一的例外是为什么你发现自己在没有手电筒的夜晚在树林里,而且开始下雨了——然后你需要看看你的脚,以免摔倒。有时候,你所承担的任务比你的直觉所能处理的要复杂得多,你需要放慢速度,明确地陈述程序的结构。那么 UML 是您可以使用的许多工具之一。其他包括伪代码、高级体系结构图和奇怪的隐喻。

UML 是有用的,是的! 我使用它的主要用途是:

  • 集思广益,讨论一个软件应该如何工作。这样可以很容易地交流你的想法。
  • Documenting the architecture of a system, it's patterns and the main relationships of its classes. It helps when someone enters your team, when you're leaving and want to make sure your successor will understand it, and when you eventually forget what the hell that little class was meant for.
  • Documenting any architectural pattern you use on all your systems, for the same reasons of the dot above

我只是不同意 迈克尔当他对他说 对单个开发人员和/或一个简单的软件项目使用 UML 似乎有些过头了。我已经在我的小型个人项目中使用过它,并且使用 UML 对它们进行文档化,这为我节省了大量的时间,当我七个月后回到这些项目中时,我已经完全忘记了我是如何构建和组装所有这些类的。

UML seems to good for large projects with large teams of people. However I've worked in small teams where communication is better.

不过,使用 UML 风格的图是很好的,特别是在计划阶段。我倾向于用代码思考,所以我发现编写大规格很难。我更喜欢写下输入和输出,让开发人员在中间设计。

根据我的经验:

The ability to create and communicate meaningful code diagrams is a necessary skill for any software engineer who is developing new code, or attempting to understand existing code.

了解 UML 的细节——什么时候使用虚线,或者圆形端点——并不十分必要,但是仍然很有必要。

我相信 UML 是有用的,因为它能让人们思考他们的类之间的关系。开始思考这种关系是一个很好的起点,但它肯定不是每个人的解决方案。

我相信 UML 的使用对于开发团队的工作环境是主观的。

使用 UML 就像边走边看自己的脚。它使你通常可以无意识地做一些有意识和明确的事情。初学者需要仔细考虑他们在做什么,但是一个专业的程序员已经知道他们在做什么。大多数时候,编写代码本身比编写代码更快、更有效,因为他们的编程直觉与任务相适应。

这不仅仅是你在做什么的问题。那么六个月后来的新员工呢? 他们需要跟上代码的进度?五年之后,当所有目前在项目中工作的人都离开的时候,情况又会怎样呢?

对于稍后加入该项目的任何人来说,拥有一些基本的最新文档是非常有帮助的。我不提倡使用方法名称和参数的完整的 UML 图(太难维护了) ,但是我确实认为系统中组件的基本图及其关系和基本行为是非常宝贵的。除非系统的设计发生巨大的变化,否则即使在实现被调整的情况下,这些信息也不会发生很大的变化。

我发现文档的关键是适度。没有人会阅读50页带有设计文档的完整的 UML 图而不睡着几页。另一方面,大多数人希望得到5-10页的简单类图,其中包含一些关于系统是如何组合在一起的基本描述。

我发现 UML 有用的另一种情况是,高级开发人员负责设计一个组件,然后将设计交给初级开发人员实现。

Throw away only in my opinion. UML is a great tool for communicating ideas, the only issue is when you store and maintain it because you are essentially creating two copies of the same information and this is where it usually blows. 在最初的一轮实现之后,大部分 UML 应该从源代码中生成,否则它将很快过时或者需要大量的时间(手动错误)来保持更新。

UML 为我工作了很多年。刚开始的时候,我读了福勒的 UML 蒸馏,他说: “做足够的模型/建筑等。”。用你的 需要

我相信可能有一种方法可以利用 Cockburn 风格的 UML 鱼、风筝和海平面用例,正如 Fowler 在他的书“ UML 蒸馏”中所描述的那样我的想法是使用 Cockburn 用例作为代码可读性的辅助手段。

所以我做了一个实验,这里有一个关于它的标签“ UML”或“ FOWLER”这是 c # 的一个简单想法。找到一种方法将 Cockburn 用例嵌入到编程构造的名称空间中(例如类和内部类名称空间,或者利用名称空间进行枚举)。我相信这可能是一个可行的和简单的技术,但仍然有问题,需要其他人来检查。对于那些需要一种伪领域特定语言的简单程序来说,这种语言可以存在于没有任何语言扩展的 c # 代码之中。

如果你感兴趣,请查看这个帖子。

我在使用 UML 时遇到的问题之一是规范的可理解性。当我试图真正理解一个特定图表的语义时,我很快就会迷失在元模型和元元模型的迷宫中。UML 的卖点之一就是它比自然语言更明确。然而,如果两个或更多的工程师对一个图表的解释不同,那么这个目标就失败了。

此外,我还尝试在几个 UML 论坛上询问关于上层结构文档的具体问题,并询问 OMG 本身的成员,结果很少甚至没有。我认为 UML 社区还不够成熟,不足以支持它自己。

我认为 UML 是有用的,我认为2.0规范使得曾经清晰的规范有些臃肿和繁琐。我同意时间表的版本等,因为他们填补了空白..。

学习有效地使用 UML 需要一点实践。最重要的一点是清晰的沟通,需要的时候建模,以及作为一个团队建模。白板是我找到的最好的工具。我还没有看到任何“数字白板软件”已经设法捕捉到一个实际的白板效用。

That being said I do like the following UML tools:

  1. 维奥莱特-如果它是更简单,它将是一张纸

  2. Altova UModel-Java 和 C # 建模的好工具

  3. MagicDraw - My favorite commercial tool for Modeling

  4. 波塞冬-体面的工具与良好的性价比

  5. StarUML-最佳开源建模工具

我来到这个话题有点晚,只是想澄清几个小问题。询问 UML 是否有用,因为它太宽泛了。大多数人似乎从典型的/流行的 UML 作为绘图/通信工具的角度来回答这个问题。注意: Martin Fowler 和其他 UML 书作者认为 UML 最好只用于交流。然而,UML 还有许多其他用途。最重要的是,UML 是一个有符号和图表映射到逻辑概念的建模语言。下面是 UML 的一些用法:

  • 沟通
  • Standardized Design/Solution documentation
  • 领域特定语言定义
  • 模型定义(UML 概要文件)
  • Pattern/Asset Usage
  • 代码生成
  • 模型到模型转换

由于 Pascal 发布的上面的使用列表仅仅说明了图的创建,因此是不够的。如果上述任何一个都是关键的成功因素或者是需要标准化解决方案的问题领域,那么项目可以从 UML 中受益。

这个讨论应该扩展到如何 UML 可以被过度杀死或者应用到小型项目中,以讨论何时 UML 有意义或者实际上将改进产品/解决方案,因为那时 UML 应该被使用。有些情况下,一个开发人员的 UML 也可以感觉到,比如模式应用程序或代码生成。

从 QA 工程师的角度来看,UML 图表指出了逻辑和思维中的潜在缺陷

UML 在两个方面很有用:

  • 技术方面: 许多人(经理和一些功能分析师)认为 UML 是一个奢侈的特性,因为 代码就是文档: 在调试和修复之后开始编码。UML 图与代码和分析的同步迫使您很好地理解客户的要求;

  • 管理方面: UML 图是客户需求的一面镜子,客户的需求是不准确的: 如果你没有使用 UML 进行编码,也许你可以在大量工作之后发现需求中的一个 bug。UML 图允许您找到可能存在的争议点,并在编码 = > 帮助您进行规划之前解决这些问题。

一般来说,所有没有 UML 图的项目都有一个表面的分析,或者它们的规模很小。

如果您在 linkedin 组 系统工程师,请参阅 我以前的讨论

作为一个学生,我发现 UML 几乎没有什么用处。我觉得很讽刺的是,程序员还没有开发一个程序,将自动生成的东西,你说是必要的。在 Visual Studio 中设计一个特性非常简单,它可以提取数据片段、查找定义和产品答案,这样任何人都可以查看它,无论大小,并理解程序。这样还可以使它保持最新,因为它可以直接从代码中获取信息来生成信息。

UML 在这个行业中肯定有它的一席之地。想象一下,您正在为波音飞机或其他一些复杂的系统构建软件。UML 和 RUP 在这里会有很大的帮助。

最后,UML 只是因为 RUP 而存在。我们是否需要 UML 或者其他相关的东西来使用 Java/。网?实际的答案是,他们有自己的文档(javadoc 等) ,这是足够的,让我们完成我们的工作!

UML 没有谢谢。

尽管 UML 只是一种 UML 图,但只要你用它的字段和方法来表示一个类,就可以使用它。

UML 的问题在于创始人手册太模糊了。

UML 只是一种语言,不是一种方法。

对于我来说,我真的觉得缺乏开源项目的 UML 模式很烦人。比如 Wordpress,你只有一个数据库模式,没有别的。你必须在法典应用程序编程中漫步,才能得到全局。

UML 图对于捕获和通信需求以及确保系统满足这些需求非常有用。它们可以在规划、设计、开发和测试的各个阶段迭代地使用。

From the topic: 在开发过程中使用模型 at http://msdn.microsoft.com/en-us/library/dd409423%28VS.100%29.aspx

模型可以帮助您可视化系统的工作环境,明确用户的需求,定义 您的系统架构,分析代码,并确保您的代码满足要求。

你可能也想看看我对以下帖子的回复:

如何学习“优秀的软件设计/架构”? 在 < a href = “ https://stackoverflow. com/questions/268231/How-to-learn-good-software-design-Architecture/2293489 # 2293489”> https://stackoverflow.com/questions/268231/How-to-learn-good-software-design-architecture/2293489#2293489

UML 肯定是有帮助的,就像 junit 是必不可少的一样。这完全取决于你如何推销你的想法。您的程序在没有 UML 的情况下也能正常工作,就像它在没有单元测试的情况下也能正常工作一样。话虽如此,但是你应该创建和你的代码相连的 UML,也就是说,当你更新 UML 图的时候,它会更新你的代码,或者当你更新你的代码的时候,它会自动生成 UML。不要只是为了做而做。

虽然这个讨论很久没有进行过了,但我还有几点——在我看来非常重要——要补充。

漏洞代码是一回事。如果任其向下游漂移,设计错误确实会使 非常膨胀和丑陋。然而,UML 是自我验证的。我的意思是,通过允许您在多个、数学上封闭的和相互检查的维度中探索模型,它产生了健壮的设计。

UML 还有另一个重要的方面: 它直接“谈论”我们最强大的能力,即可视化能力。例如,如果 ITIL V3(本质上非常简单)是以 UML 图的形式传达的,那么它可能已经在几十个 A3折页上发布了。相反,它出版了几部真正的圣经比例的大部头,产生了整个行业,惊人的成本和广泛的紧张性休克。

不,不是的。代码是最好的沟通方式。其他的一切都是为那些进入错误行业并决定改变它以适应他们的大脑的人准备的。

接口远远优于类图。用例图将用户需求组合成一个表单,这个表单将摧毁用户需求,并告诉您如何设计产品。数据流图和 ER 图使创建数据库的过程复杂化。有时候,您可能想要绘制图表来表达您的观点,但是没有理由要求它们必须是 UML 图表或者遵循任何标准,除非其他人能够理解它们。

归根结底,这些都是大型的、无用的、官僚主义的“软件”公司的文档形式,这些公司生产的糟糕产品充斥着 XML。如果他们完成记录的话。事实上,大多数员工并不关心他们的工作,他们只是在等待上级的死亡,这样他们就可以得到晋升。