序列图逆向工程
Posted
技术标签:
【中文标题】序列图逆向工程【英文标题】:Sequence Diagram Reverse Engineering 【发布时间】:2010-09-10 08:53:27 【问题描述】:我正在寻找一种工具,可以将 Java 逆向工程为序列图,但还提供过滤掉对某些库的调用的能力。
例如,Netbeans IDE 在这方面做得非常出色,但它包括对 String 或 Integer 的所有调用,这会使图表混乱到无法使用的程度。
非常感谢任何帮助!!!!!!!
【问题讨论】:
您使用了太多标签,以至于您没有明确要从哪种语言进行逆向工程!爪哇? 【参考方案1】:我认为jtracert 是您正在寻找的。它从正在运行的 Java 程序生成序列图。此外,由于它的输出是图表的文本描述(采用几种流行的 SD 工具的格式),您可以使用 grep 仅过滤您感兴趣的类。
【讨论】:
从该项目的网站上,jTracert 已停止使用以支持 jSonde jsonde.com 上没有真实内容 任何从源文件生成序列图的工具?而不是运行代码?【参考方案2】:我相信解决您的问题的完美工具是 Diver:逆向工程的动态交互式视图。它提供静态和动态序列图,并希望从您的问题中解决您的所有要求。
它是一个 Eclipse 插件,让你:
轻松跟踪您的 Java 程序 可视化程序的运行时功能 过滤您的痕迹以使其更紧凑 根据运行时发生的情况过滤您的 IDE 查看源代码编辑器中运行的代码在Github 上还有一个project web site
完全披露:我是 Diver 的当前项目负责人
【讨论】:
你们在那儿做了一些很棒的工作!非常强大但仍然可用的工具,网站上有一些很棒的教程视频。即使对于许多付费工具,您也没有得到任何解释它是如何工作的。有了这个,你可以在几分钟后做一些很棒的事情。我肯定会在我未来的项目中使用它! 不幸的是,它在 Win 7 上存在问题。 嗯,AFAIK,我们可以从跟踪生成序列图,但我们无法保存该图或从 Diver 以任何方式导出它。这是真的吗?或者有什么办法可以得到那个图表? Diver 不支持 JUnit。【参考方案3】:试试MaintainJ。 MaintainJ 在运行时为用例生成序列图。它提供multiple ways to filter out unwanted calls。是的,过滤掉不需要的调用是序列图生成工具中最重要的功能。此外,MaintainJ 提供了一个简洁的界面来探索图表并在一个用例或跨用例中搜索调用。
查看demo video 以获得快速概览。
顺便说一句,我是MaintainJ 的作者。
【讨论】:
【参考方案4】:JTracert 现已停产。到位,他们推荐http://www.jsonde.com/
【讨论】:
【参考方案5】:我有一个工具可以完全满足您的要求。看看吧
http://sourceforge.net/projects/javacalltracer/
除了作为Java的逆向工程工具外,它还非常轻量级。您可以从您的 java 程序中控制您想要记录的内容。
【讨论】:
【参考方案6】:来自Sparx 的企业架构师声称能够对 Java 代码进行逆向工程,包括生成序列图 - 请参阅 user guide 的这一部分
它看起来可以记录一个调试会话,然后你从中生成序列图
我没有尝试过(虽然使用 EA 作为建模工具)所以 ymmv!
提供 30 天免费评估下载
【讨论】:
我需要与 C# 类似的东西(Sparx 也支持)。像 Sparx 那样与调试器集成是非常优雅和有用的。一个限制是它只记录一个执行线程。我们的应用程序非常多线程,因此限制使它无法真正捕捉正在发生的事情。希望能找到一些类似的多线程记录器。【参考方案7】:看看http://www.maintainj.com
它不知道它是否可以过滤库调用,但它有一个合理的图形前端,并且似乎可以跟踪非常大的应用程序。
【讨论】:
【参考方案8】:MaintainJ 是一个非常棒的工具,最近我开始在我的应用程序中使用 MaintainJ,它让我在整个使用过程中更加舒适,以了解基于 Maintainj 序列和 UML 图的系统。
我相信对于上述问题,MaintainJ 会给出更好的主意。 谢谢, 克里希纳MM
【讨论】:
【参考方案9】:我刚刚开始使用 Sparx Systems Enterprise Architect 中的序列图记录功能。它适用于 C#。您可以按类和方法创建过滤器。我实际上是在尝试找出是否可以过滤掉整个包裹。有一个用于自动排除外部模块(如 .NET Framework)的复选框,有助于整理。 YMMV for Java,但我认为他们对 Java 的支持(和文档)通常比 .NET 更好(更多示例)。
【讨论】:
【参考方案10】:Heatlamp (http://www.jmolly.com/heatlamp/) 正是为此目的而设计的。
它从运行的 Java 代码生成交互式(和可打印)图表。您可以指定过滤器来描述要跟踪的类、包和方法。您还可以在图表呈现后搜索、过滤和折叠调用,以进一步减少序列图。
免责声明:我是 Heatlamp 的作者。
【讨论】:
【参考方案11】:这看起来是一个非常好的工具: http://www.architexa.com/learn-more/sequence-diagrams
但它看起来只免费一年,然后每年 250 美元。无赖。
我发现 ModelGoon 插件很有帮助。它有点受限,因为您选择一个方法作为序列图的起点,并且它只显示该方法进行的调用(因此要更深入,您需要生成另一个图表。)
http://www.modelgoon.org/?page_id=53
【讨论】:
【参考方案12】:JIVE (www.cse.buffalo.edu/jive) 将从 Java 程序的执行中构造一个序列图。它具有排除过滤器功能,允许您排除属于指定类或包的对象。 JIVE 可以为多线程 Java 程序执行绘制序列图。它还具有在用户指导下在水平和垂直维度上压缩大型图表的能力。
【讨论】:
【参考方案13】:这是 Asgeir 答案的补充内容。这是我找到的链接。
http://www.java2s.com/Code/Jar/s/sequence.htm
从命令行运行...“java -jar sequence.jar”...这是一个带有 GUI 的 Java 应用程序。
帮助部分说: SEQUENCE 是一个用于生成 UML 序列图的程序。与大多数类似的程序相比,您实际上并没有绘制图表。相反,您可以为要绘制图表的方法调用编写文本描述,然后自动计算和绘制布局。
所以这个工具不会对任何东西进行逆向工程,但是如果您想从头开始快速绘制图表,我可以看到它可能会有所帮助。看起来它是在 2002 年构建的,我认为现在可能有更好的工具。
这里有另一个类似的工具: http://sdedit.sourceforge.net/example/index.html
【讨论】:
以上是关于序列图逆向工程的主要内容,如果未能解决你的问题,请参考以下文章