5

我继承了一个相当大的项目,有数万行,但以前的开发人员只将它们打包成 6 个文件(OMG!)...

因此,为了便于阅读,我想自动将所有类拆分为它们自己的 cpp/h 文件。

有没有任何工具能够做到这一点?

4

3 回答 3

1

为了重构您的 C++ 代码库,您需要一个可以解析 C++、保留头文件、但也遵循 #includes 并处理它们的工具。你必须为每对依赖项构建一个“a-depends-on-b”映射,然后你必须对它们进行聚类。最后,您必须能够根据集群重新生成源代码。

而且您希望在一个完整的代码库上执行此操作,而不仅仅是一个编译单元。

这是一个很难找到的工具:-} 我认为您不会现成的找到它。

我们的 DMS Software Reengineering Toolkit 有很多这样的功能。它是一个通用的程序分析和转换系统,具有完整的 C++ 前端,并具有可控的预处理器,因此它可以根据需要扩展/不扩展#includes。它可以捕获 a-depends-on-b 关系(我们已经在一个包含 2600 万行代码的 C 系统上完成了这项工作),并且它具有经过验证的对预处理器条件进行符号推理的能力;有可能捕获“a-depends-on-b if”。

有了这些信息,您就需要聚类。我认为要做到这一点,您需要某种通用聚类算法和一些用户输入来覆盖它(“我坚持,不要管这个#include 文件,这两个显然不相关的东西会放在一起”)。然后可以使用 DMS 的程序转换部分来机械地拆分代码并将文件包含到分组的、依赖的声明中。

DMS 是一个复杂的工具;毕竟,它必须处理像 C++ 这样令人讨厌的事情。将其配置为完成上述任务并非易事,但我认为它在技术范围内。

但是,这些都不能帮助您解决当前的问题,即获取一个工具来帮助您解决今天的问题。

于 2012-12-17T21:56:40.740 回答
0

我很确定没有工具可以自动完成这项任务。这仍然是一个活跃的研究领域。例如,请参阅“ Towards Automating Class-Splitting Using Betweenness Clustering ”。我知道有几个 Java 工具可以提供一些帮助(JDeodorantext-c),但这些工具并不是全自动的。我不知道任何 C++ 工具。

于 2012-12-17T20:47:10.680 回答
-5

你没有说你正在使用什么编辑器或平台,所以不清楚为什么大文件是一个问题。

我的猜测是这是你的解决方案:

  • 获得可以处理大文件的更好的编辑器。

一个好的编辑器应该能够通过名称找到一个类,拥有一个类浏览器,它使您能够跳转到任何类、成员、函数或任何其他定义的定义,通过右键单击或键盘查找任何符号的用途快捷方式,通常会使您轻松找到自己的方式,以至于文件的大小无关紧要。

另一方面,也许你有一个好的编辑器,只需要学习如何在其中做这些事情。

于 2012-12-17T10:48:07.783 回答