MaintainJ 是一种反向工程工具,它能够为 Java 代码库生成运行时序列图和类图,最近它发布了3.2 版本,在其中多项功能得到了增强。MaintainJ 基于Eclipse 构建,因此能够在所有基于Eclipse 平台构建的IDE 上运行。
InfoQ 与 MaintainJ 的 Choudary Kothapalli 做了一次小型的问答式采访,对这个新版本提出了一些问题:
InfoQ: 在 v3.2 中实现的主要新特性有哪些?
- 显示调用上下文(call context): 在序列图中,当鼠标在调用(call)上悬停的时候,就会弹出提示框,显示出调用上下文——调用方法的参数和返回值。而在“属性视图”中会显示更详细的内容,以及被调用对象的状态。
- 显示运行时 SQL——不管你使用的是哪种 JDBC 框架,MaintainJ 都能够捕获到发送到数据库实际运行的 SQL 语句以及其中的参数。这些数据库调用会显示在序列图中,并且还会显示每次数据库访问的响应时间。
- 支持多 JVM(multi-JVM)的应用程序——用户可以跟踪运行在多个 JVM 上的应用程序,并且能够在单独的序列图中看到端到端的调用流程。例如,当应用程序调用运行在不同 JVM 上的 web 服务时,这个跨 JVM 的调用流程就会显示在同一幅序列图中。在这幅图中,我们会看到,每个 JVM 上的调用都以不同的颜色显示。
- 增强的大纲视图——序列图的“大纲视图”会显示出用例中的所有类和调用。在新版本中该功能得到了增强,从而能够一次选中并删除多个包、类或者调用。并且新版本还在序列图中添加了一个选项,可以把所有 getter 和 setter 方法筛选掉。
- JSP 调用——在用例中对 JSP 文件的调用也会显示在序列图中。如果一个 JSP 文件中包含了多个其他 JSP 文件,那么对内部 JSP 的运行时调用(runtime call)也会显示。
我们使用 Alfresco 来演示上述特性,它是一个内容管理系统,其中带有 8000 个 Java 类和 600 个 XML 配置文件。Alfresco 运行在 Tomcat 和 MySQL 服务器上,使用了 Spring、Hibernate 以及很多其它 Java 框架。你可以查看该应用程序的演示视频(3.5 分钟)。
InfoQ: 据你所见,人们使用 MaintainJ 一般的流程是什么样的?
主要有两种情况会使用 MaintainJ。
1. 理解和调试应用程序
MaintainJ 会为单一的用例生成序列图和类图。序列图会显示出该用例具体的运行时类(runtime classes),以及包括 SQL 调用在内的所有做出的调用。开发者可以使用生成的图快速了解用例,并找到问题的根源。
让我举例说明:
我们的一位客户在一个 Swing 应用程序上使用 MaintainJ,其中带有大量事件驱动逻辑,仅仅通过阅读源代码很难理解那些逻辑。
我们的很多客户都在 J2EE 应用程序上使用 MaintainJ。在 J2EE 应用程序中,业务逻辑经常会分布在 Java 类、XML 文件、门户以及规则引擎配置文件中。在这样的应用程序中,想要理解特定用例的运行时交互(runtime interactions),往往需要好几天的时间。使用 MaintainJ 我们就可以大大减少分析应用程序的时间,并减少调试和改善这种复杂应用程序所需要做出的工作。
2. 编写 Java 应用程序文档
让我举例说明:
在一家大型的美国银行中,企业要求 Java 团队对缺少文档的遗留应用程序进行改善。这个团队使用 MaintainJ 为所有用例生成了序列图和类图,然后利用这些图来对应用程序进行改善。
一家 IT 服务公司接受了为美国政府维护 Java 应用程序的工作。在每次发布之后,这家公司都需要负责提供相应的 UML 文档。他们并没有手动绘制序列图和类图,而是成功地使用 MaintainJ 生成了这些图。
InfoQ: MaintainJ 未来的路线图是怎样的? 你对其未来的发展期望如何?
在回答这个问题之前,让我们先谈谈 MaintainJ 背后的产品哲学。软件成本中的 90% 都花费在维护工作上,而 50% 的维护成本都花费在理解代码上。软件维护一般包括修正缺陷和对应用程序做出改善。
修正缺陷一般会包括三个步骤。
1) 找到存在缺陷的源代码
2) 修正缺陷
3) 把修正后的文件安全地放回到生产环境中。这个步骤包括分析该变更对应用程序其他部分的影响,并需要执行恰当的回归测试。在对应用程序做出改善以添加新特性的时候,包含的步骤也非常类似。
通常,与寻找导致缺陷的源代码和安全地把修正放回到生产环境相比,第二步即修正缺陷所要做的工作要少得多。
MaintainJ 的目标是要在第一步和第三步为开发者提供帮助——找到存在缺陷的源代码以及执行恰当的影响分析。当前的版本解决的是第一步的问题——找到导致缺陷的源代码。
后续计划
在十月份我们会发布下一个版本,其中会解决第三步的问题——影响分析。MaintainJ 当前会在基于文件的数据库中为不同的用例分别存储运行时调用的跟踪信息。这些信息会用于执行影响分析,并识别出回归测试的案例。 接下来的版本计划会在 2012 年 3 月份发布,它可以在浏览器中显示序列图。针对应用程序中不同用例的调用跟踪文件(call trace files)会统一存储在中央数据库中。开发者、测试人员和经理都可以通过用例名来搜索这个数据库,并在浏览器中查看相关的序列图。他们也可以执行影响分析,从而找到所有会受到修改类或者数据库操作影响的用例。
InfoQ: 用户可以选择什么样的许可来使用 MaintainJ 呢?
1. 免费评估许可和支持
我们提供了 21 天的评估许可,并在期间提供免费的支持。我们希望用户能够事先试用 MaintainJ,从而意识到它是如何把调试和编写文档的工作从几天减少到几分钟的。
我们还提供两种商业许可。这些许可不会过期,可以在将来的版本中继续使用。
2. 锁定节点的许可(Node locked license)
该许可的价格是 100 美元,只能固定在一台计算机上使用。
3. 浮动许可(Floating license)
这个许可适用于企业中的 Java 团队。5 个浮动许可的价格是 1000 美元。
评论