你如何保持UML图最新?

opt*_*lic 5 java uml

我来自物理背景,而不是计算机科学背景,从未在大学课程/组件图等任何课程,我从未发现需要在工作中使用它们.

我不明白的主要问题是,如果代码仍在开发或维护,您如何更新它们?

什么阻止我重构几个方法或类并使类图过时?

您是否必须不断手动更新图表?

我已经看到了从代码中生成UML的工具,这些工具可以让它保持最新我想但是从我看到的情况来看,自动生成的图表似乎不够用.

是否可能在开始时创建项目的UML,然后将其保留在文档文件夹中,并逐渐变得越来越过时?

kiw*_*ron 7

我在一个规模适中的政府机构工作,所以我们的大多数主要项目属于"企业Java"类别.这对我们有用:

  • 架构师使用UML图对我们的公司数据模型的任何更改和扩展进行建模.通常会有一个概念模型类图,加上一些序列图,说明系统的各个部分将如何相互作用,可能还有几个组件图.
  • 我们与业务分析师,DBA和主要开发人员进行了一次演练.这种想法是挑战新模型,并就变化达成一致(在这些会议上有很多"强有力"的讨论).拥有优秀的架构师,变化微乎其微.
  • 高级开发人员创建一个技术规范,通常包括基于体系结构模型的物理数据库ER图.从物理模型中,我们自动生成数据库创建脚本.
  • DBA升级创建脚本(例如,添加表空间和索引空间信息)并创建/扩展数据库.
  • 代码被写入.开发人员可以创建自己的迷你类层次结构(例如,POJO来携带数据).我们不打算在UML中对这些进行建模,因为代码应该是自我记录的,并且随着代码的发展,变化是不可避免的.
  • 在开发阶段经常会发生变化,特别是在使用敏捷方法的情况下.如果这些影响企业数据模型,那么UML和ER图将会更新.
  • 在项目结束时,文档会更新以反映"已建立"状态.

回到你的问题的要点,我不是自动UML < - >代码生成的坚定信徒.通常,有些数据是UML图(注释,关系基数,序列图等)的个人数据,这些数据没有出现在代码中或者很难提取.相反,代码包含不一定在逻辑UML模型中显示的东西(例如行为方法工作逻辑,数据结构和缓存).那么整个问题就是如何将逻辑模型类层次结构映射到数据库表...

总结一下,我建议:

  • 预先设计正确.对逻辑模型的更改既昂贵又难以实现.
  • 使用建模工具,该工具将支持来自同一数据源的所有工件.也就是说,最初的UML逻辑模型,数据库ER图和数据库创建SQL DDL.我们使用Enterprise Architect,但是还有很多其他工具可以做到这一点.
  • 使用UML来模拟"大图"并忘记它来描述详细的编码.一个好的经验法则是,如果对模型的任何更改不仅影响您的团队,则需要UML.(例如,新的数据库字段可能需要更改数据库,更改Web服务,更改GUI以及更改大型机批处理过程.UML可以用多个团队可以的方式定义数据更改了解)


lau*_*une 2

虽然这不是一个通常在 SO 上回答的问题,但以下是我所看到和听到的:

项目的软件开发计划必须定义如何进行设计,以及如果使用 UML,则必须如何对软件进行更新。该计划可以定义 UML 是“一次性”的 - 因此在第一个设计进入代码后它确实被遗忘了。OTOH,严格的后续规则和随后的检查可能需要并保证 UML 设计在错误修复(如果需要)或更广泛的更改期间得到更新。(通常情况下,您甚至可能还必须返回需求并在那里进行更新。)

一种完全不同的方法是从 UML 生成代码 - 这样您就永远不会更改代码。考虑到 UML 的表达能力与 Java 或 C++ 等语言提供的内容和方式来实现各种图的语义之间的潜在差异,无论这是否有效,我都非常希望能用比数据更可靠的数据来回答这个问题。推销员的推销。