寻找重复的源代码

5

我正在分析一些遗留代码,涉及it技术。这是大约80,000行旧的plsql代码。初步看,源代码中存在相当多的重复,需要删除。不要手动进行差异比较并查看每个文件,而是可以使用某些工具/命令行配置来检测源代码中的重复行。

我的目标是对源代码进行重写的最小尺寸和实际捕获的知识量进行合理猜测。我编写了一个基本的静态代码分析器,以找到每个文件中的控制语句IF ELSE FOR等和函数数量。但是,仍需要从我的统计数据中删除重复的代码。


可能是重复问题:http://stackoverflow.com/questions/546487/tools-to-identify-code-duplications - Anderson Green
4个回答

3
你看过Simian - 相似度分析器吗?(我刚刚检查了一下,它不再免费,但可用于为期15天的评估。)
Simian(相似性分析器)可以识别Java、C#、C、C++、COBOL、Ruby、JSP、ASP、HTML、XML、Visual Basic、Groovy源代码甚至纯文本文件中的重复内容。实际上,simian可以用于任何人类可读的文件,如ini文件、部署描述符等。
我已经在实践中使用过它,它确实很有效。

这是我遇到的最好、最易于使用的工具。更改块大小的选项非常不错。-threshold=8 - Stephan

0

0

Sonar具有重复检测功能,并声称支持PL/SQL,尽管我从未用过它来进行此类操作。


1
似乎是Sonar的商业插件。价格大约为3200欧元。http://www.sonarsource.com/products/plugins/languages/plsql/ - EhmKah a.k.a. Michael Krauße
另一个关于sq的问题是,为了缩小焦点,需要定义大量的设置文件,这需要相当长的时间。它不像拖放一些文件然后快速分析。 - Aryan Firouzian

0

你需要去寻找/借用/窃取/编写一个PLSQL解析器,并比较生成的抽象语法树。考虑到你所拥有的代码库的规模,这可能是值得的。完成后,解析器还可以用于其他用途。


我找到了一个antlr plsql语法,经过一些小修补后可以使用。现在我从源代码中得到了AST树,但是我仍然不知道如何使用这个antlr工具从中获取指标。 - Stephan
我的理论是重复的代码应该解析为几乎相同的AST。至于度量标准,您可以计算指定类型的节点数(例如语句、过程定义)。 - Larry Coleman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接