我正在分析一些遗留代码。它大约是 80.000 行旧的 plsql 代码。乍一看,源中有相当多的重复需要删除。而不是做差异手册并查看每个文件,必须有一些工具/命令行配置来检测重复的源代码行。
我的目标是对源代码重写的最小大小以及该程序中捕获了多少实际知识做出有根据的猜测。我编写了一些基本的静态代码分析器来查找每个文件中的控制语句 IF ELSE FOR 等和函数的数量。但是重复的代码仍然需要从我的统计中删除。
我正在分析一些遗留代码。它大约是 80.000 行旧的 plsql 代码。乍一看,源中有相当多的重复需要删除。而不是做差异手册并查看每个文件,必须有一些工具/命令行配置来检测重复的源代码行。
我的目标是对源代码重写的最小大小以及该程序中捕获了多少实际知识做出有根据的猜测。我编写了一些基本的静态代码分析器来查找每个文件中的控制语句 IF ELSE FOR 等和函数的数量。但是重复的代码仍然需要从我的统计中删除。
你看过Simian - Similarity Analyzer吗?(刚刚检查过,它不再免费,但可以使用 15 天用于评估目的。)
Simian(相似性分析器)识别 Java、C#、C、C++、COBOL、Ruby、JSP、ASP、HTML、XML、Visual Basic、Groovy 源代码甚至纯文本文件中的重复。事实上,simian 可以用于任何人类可读的文件,例如 ini 文件、部署描述符,应有尽有。
我已经在实践中使用过它,并且效果很好。
Sonar具有重复检测功能并声称支持 PL/SQL,尽管我从未为此使用过它。
您需要乞求/借用/窃取/编写一个 plsql 解析器并比较生成的抽象语法树。以您拥有的代码库的大小,这可能是值得的。完成后,解析器还有其他用途。