Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有任何工具可以检测代码中的架构和设计模式?_Java_Eclipse_Design Patterns_Architecture - Fatal编程技术网

Java 是否有任何工具可以检测代码中的架构和设计模式?

Java 是否有任何工具可以检测代码中的架构和设计模式?,java,eclipse,design-patterns,architecture,Java,Eclipse,Design Patterns,Architecture,我们的团队正在对一个几乎不存在文档的应用程序进行逆向工程。我们想要检测是否有架构或设计模式的使用。您可能知道这个应用程序很大,所以手动查看对我们来说毫无意义 这个应用程序是用Java编写的,我们使用Eclipse作为IDE,所以它可能是Eclipse的插件 我们已经找到了一些工具,比如“设计模式检测相似性评分”,但效果不是很好 那么,这样的工具确实存在吗?如果你有应用程序的源代码,你很可能是在重新设计它,而不是反向工程。(后者意味着从机器码或字节码中恢复某种更高级的代码) 无论如何,你想了解应用

我们的团队正在对一个几乎不存在文档的应用程序进行逆向工程。我们想要检测是否有架构或设计模式的使用。您可能知道这个应用程序很大,所以手动查看对我们来说毫无意义

这个应用程序是用Java编写的,我们使用Eclipse作为IDE,所以它可能是Eclipse的插件

我们已经找到了一些工具,比如“设计模式检测相似性评分”,但效果不是很好


那么,这样的工具确实存在吗?

如果你有应用程序的源代码,你很可能是在重新设计它,而不是反向工程。(后者意味着从机器码或字节码中恢复某种更高级的代码)

无论如何,你想了解应用程序,也就是说,在你的头脑中建立一个应用程序的心智模型。恐怕自动工具在这方面帮不了什么忙。在代码中获得假定模式的列表有什么用?它能帮助您更好地理解代码的实际功能和原因吗?特别是考虑到模式在遗留代码中被误用的可能性很高:-(


最后,你还是需要认真阅读代码。但这里有一个方法,希望能帮助你完成接管遗留应用程序的艰巨任务。

我不相信有这种工具存在,因为那会非常复杂。另一种方法可能是生成类似UML图的东西。这应该会对代码进行抽象这可以帮助您识别设计模式。

您是否尝试过在代码库上运行javadoc?这会让您了解代码的结构(或缺乏结构)。如果您真幸运,注释中可能会提到设计模式

还有很多其他工具可以用来发现类层次结构——ClassCycle、Macker、JDepend等


我认为自动检测设计模式是相当困难的,因为设计模式有很大的变化空间。

我怀疑是否有工具可以检测代码中的模式或设计

可以极大地帮助反向工程的努力,当它最终出来

最近,我发现使用代码覆盖工具来确定在启动特定用户/系统操作时调用代码的哪些部分非常有用。这不是工具的设计目的,但我越来越发现它比其他方法更有效。(如果有需要,可以在此处发布详细信息的链接)


下一个最好的方法是使用MaintainJ等工具跟踪代码执行以及各种其他方法,我已经尝试过了所有这些方法,覆盖率是我的选择。

您到底想做什么?我会寻找依赖性的数量,有很多硬依赖性可能表明您的应用程序没有松散耦合,因此没有充分利用模式(虽然松耦合可能在没有设计模式的情况下实现:-)。我不认为UML在这方面非常有用。问题是,UML反向工程工具会在图表上显示所有细节,掩盖真正重要的细节。第一句话(“我不相信这种工具的存在,因为那将是相当复杂的。”),我认为这是真的。我说的不是“黑客”式的逆向工程,我说的是“软件工程”逆向工程,即从代码中提取知识,是再工程之前的步骤。请参阅教科书“面向对象的再工程模式”,图1.1 p.9.((我不知道你为什么有这么多选票。你没有回答这个问题。)佩特说的是逆向工程。问问任何有多年编程经验的开发人员。或者参考这篇维基百科文章:。除此之外,链接的答案很好。读一下。@elbaid,我试图帮助你解决真正的问题(即重新设计遗留应用程序)我并没有直接回答你的具体问题。我也试图解释原因。但如果你真的想要一个直接的答案,我的答案是“可能不会。”;-)@elbaid,关于逆向工程,有更严格和更广泛的解释。你是对的,在更广泛的意义上,“逆向工程是分析主题系统的过程,以在更高的抽象层次上创建系统的表示”。然而,请注意,这是一个更学术的定义,在开发人员圈子中并不广为人知。@jgauffin:在维基百科中,它说:“应用于软件的术语反向工程对不同的人意味着不同的事情[…]”,因此,也许下次我应该给出一个模棱两可的词的定义:)我想补充一点,MaintainJ捕获了一个用例中调用的确切类和运行时SQL语句。为了更好地理解代码,您还需要什么?MaintainJ是最佳模特产品奖入围者。查看概述演示,了解如何使用MaintainJ-