如何避免代码重复CPD工具中的空白和注释



我们正在使用CPD工具进行代码重复检测。CPD工具包括空白和注释。你能告诉我们如何避免空白和评论,这样才能出现正确的口是心非的情况吗?假设我们有4行重复代码和4行注释,那么它将返回8行而不是4行。

哪种特定的(复制粘贴检测器)CPD工具?有很多。

CPD如何检测重复项取决于它所比较的基元实体。(我制造了克隆探测器)。

有些只在源线路上运行;这些漂亮的太多无法将空白和注释与编程语言区分开来你认为你给了这个工具。对它来说,您的代码只是原始文本。这些工具也无法发现"代码块A与代码B重复定期更改(例如参数)",这是您真正想要知道的。(我想这种CPD给出了糟糕的答案,这就是你的问题,但他们他们什么都能做的优势)。

有些人对他们碰巧知道的语言的语言标记进行操作。这些工具往往非常擅长忽略空白。因为他们知道评论是某些类型的令牌,它们通常可以忽略评论,还有一些命令行开关。(因此,"哪种CPD工具?")。但他们不理解语言结构,因此认为序列

}   {

是其他所有此类序列的克隆。坦率地说,那是个愚蠢的克隆人。其次,这种基于令牌的检测器只能检测参数(位置克隆系统地变化)令牌范围,通常仅替换标识符或常量通过另一个常量或标识符。尽管如此,与面向行的CPD工具相比,这是可用性的一大进步。

一些非常少的操作语言结构,例如,使用语言的语法控制匹配(我碰巧做了一个,CloneDR,见我的简历)。这些不会犯基于代币的CPD工具的错误,所以你会变得更好检测到的克隆此外,它们可以检测由以下组成的参数(结构化的)记号序列,例如当一个表达式被替换时标识符等。IMHO(哦,意见!)这些提供了更好的检测克隆(这就是我构建CloneDR的原因)。

最新更新