我们正在使用CPD工具进行代码重复检测。 CPD工具包括空格和注释。您能告诉我们如何避免空格,评论以便能够提出正确的双重情况吗? 假设我们有4行重复代码和4行注释,那么它返回8行而不是4行。
答案 0 :(得分:0)
哪种特定(复制粘贴检测器)CPD工具?有很多。
CPD如何检测重复项取决于它所比较的原始实体。 (我已经建立了克隆探测器)。
有些只在源线上运行;这些漂亮 很多人无法用编程语言来表达空白和评论 那个你认为你给了这个工具。对它来说,你的代码只是原始文本。 这些工具也不能发现“代码块A与代码B重复 定期更改(例如,参数)“这是你真正想知道的。 (我认为 这种CPD给出了可怕的答案,因此你的问题,但他们有 他们在所有事情上工作的优势。)
有些人会使用语言令牌,因为他们碰巧知道这些语言。 这些工具往往非常适合忽略空白。自从他们 知道评论是某些类型的代币,它们通常可以忽略评论, 用某种命令行开关也是如此。 (因此,“哪个CPD工具?”)。 但他们不懂语言结构,因而认为是序列
} {
是所有其他此类序列的克隆。坦率地说,这是一个愚蠢的克隆。 其次,这种基于令牌的检测器只能检测参数(位置 克隆系统地变化的地方)一 令牌宽,通常只替换标识符或常量 通过另一个常量或标识符。 这仍然是面向生产线的CPD工具在可用性方面的一大进步。
很少有人使用语言结构,例如,使用语言的语法 控制匹配(我碰巧做其中一个,CloneDR,看看我的生物)。 这些不会成为基于令牌的CPD工具的错误,所以你会变得更好 检测到的克隆此外,它们可以检测由...组成的参数 (结构化的)令牌序列,例如,当表达式被替换时 一个标识符等恕我直言(哎呀,意见!)这些提供了更好的检测 克隆(这就是我构建CloneDR的原因)。