我来自物理背景,而不是计算机科学背景,从未在大学课程/组件图等任何课程,我从未发现需要在工作中使用它们。
我不明白的主要问题是,如果代码仍在开发或维护中,您如何更新它们?
e.g。是什么阻止我重构几个方法或类并使类图过时?
您是否必须不断手动更新图表?
我已经看到了从代码中生成UML的工具,这些工具可以使它保持最新,我想,但从我看到的情况来看,自动生成的图表看起来不够用。
项目的UML是否可能在开始时创建,然后留在文档文件夹中并逐渐变得越来越过时?
答案 0 :(得分:7)
我在一家规模适中的政府机构工作,所以我们的大部分重大项目都属于企业Java"类别。这对我们有用:
回到问题的要点,我不是自动化UML的忠实信徒< - >代码生成。通常,有些数据是UML图(注释,关系基数,序列图等)的个人数据,这些数据没有出现在代码中或者很难提取。相反,代码包含不一定在逻辑UML模型中显示的东西(例如行为方法工作逻辑,数据结构和缓存)。然后是整个问题,即如何将逻辑模型类层次结构映射到数据库表...
总结一下,我建议:
答案 1 :(得分:2)
虽然这不是通常在SO上回答的问题,但这是我所见所闻:
项目的软件开发计划必须定义设计的完成方式,如果使用UML,则必须如何更新软件。该计划可以定义UML是“一次性” - 因此在第一次设计进入代码后确实被遗忘了。 OTOH,严格的后续规则和随后的检查可能要求并保证在错误修复(如果需要)或更广泛的更改期间更新UML设计。 (通常情况下,您甚至可能需要回到要求并在那里进行更新。)
一种完全不同的方法是从UML生成代码 - 这样你永远不会改变代码。无论这是否有效,考虑到UML的表现力与Java或C ++等语言为实现各种图表的语义提供的内容和方式之间的潜在差异,我非常希望能够回答更可靠的数据而不是推销员的推销。
答案 2 :(得分:0)
至于我的经验,类UML图几乎没用。通用代码经常更改,因此使用UML图会增加太多负担。
可能的例外是:
答案 3 :(得分:0)
这取决于您的选择,您对团队和利益相关方的一致意见,您的优先级,您的流程和可交付工件的内容以及成本和支付对象。
到目前为止,还没有生产就绪的工具或机器可以完全自动地保持UML文档的最新状态,尽管许多文件很接近,例如, Graphviz + Doxygen to generate UML class diagrams 并且许多人使这项任务更容易,例如Sparx Systems's Enterprise Architect或Rapid Quality Systems's Code Rocket
与任何其他流程一样,UML文档创建/维护是process,需要进行定义,实施,管理和优化(与管理您已经知道的物理实验所需的方式相同)
在Agile Modeling - Effective Practices for Modeling and Documentation
有一个专门讨论这个主题的网站