SonarQube中文网站 > 热门推荐 > SonarQube如何配置重复代码检测阈值 SonarQube重复代码指标与实际结果不符如何核验
教程中心分类
SonarQube如何配置重复代码检测阈值 SonarQube重复代码指标与实际结果不符如何核验
发布时间:2026/10/28 16:29:20

  把重复比例限制改成5%,再次扫描后,重复代码块仍然原样显示;另一个项目比例已经超限,质量门禁却通过了。这两种情况需要查不同设置。SonarQube如何配置重复代码检测阈值,SonarQube重复代码指标与实际结果不符如何核验,应先分清片段识别门槛和质量门禁条件,再对照扫描范围核算指标。

  一、SonarQube如何配置重复代码检测阈值

 

  识别门槛决定哪些片段算重复,门禁阈值决定重复比例达到什么程度会失败。修改门禁不会改变已识别的代码块。以下使用SonarQube Server英文界面名称。

 

  1、设置质量门禁中的重复比例

 

  ①使用具备管理权限的账号进入【Quality Gates】,选择已有自定义门禁;需要另建时点击【Create】,输入名称后创建。

 

  ②编辑重复比例条件,或点击【Add Condition】添加。若界面要求解锁,先点击【Unlock editing】。

 

  ③在【Where?】选择新代码或整体代码,选择重复行比例指标,在【Value】填写百分比数值。例如,要求超过5%失败,应填写5,并核对失败条件方向。

 

  ④进入项目的【Project Settings】→【Quality Gate】,确认项目实际关联的是刚修改的门禁,避免改了其他项目使用的配置。

 

  2、按语言设置片段识别门槛

 

  ①确认源码语言、分析器版本及该语言的检测支持情况,再决定是否调整识别参数。

 

  ②对适用的非Java分析,在扫描配置中设置sonar.cpd..minimumTokens与sonar.cpd..minimumLines,将语言占位符替换为实际语言键;两项共同限定连续重复token数量及跨越行数。

 

  ③按当前版本核对默认值。多数非Java语言采用100个连续重复token和至少10行,COBOL、ABAP的默认行数分别有30行、20行的区别。

 

  ④Java按至少10条连续重复语句识别,不能通过上述通用参数覆盖。调整配置后重新分析,并确认服务端处理完成。

 

  3、设置确有必要的重复检测排除项

 

  ①打开项目的【Project Settings】→【General Settings】→【Analysis Scope】,找到【Duplication Exclusions】,填写需要排除的路径模式并保存。

 

  ②检查流水线是否设置了sonar.cpd.exclusions。CI端同名参数优先于页面配置,不能只看网页填写的内容。

 

  ③重新扫描,核对目标文件是否退出重复检测。仅需排除重复检测时,不要误用会扩大排除范围的sonar.exclusions。

 

  二、SonarQube重复代码指标与实际结果不符如何核验

 

  先选一份具体分析结果,再拿代码核对。分支、提交或新代码范围不一致,手工统计便没有相同的比较基础。

  1、确认比较的是同一范围

 

  ①记录项目、分支或拉取请求、提交标识及分析时间,确认本地代码对应页面中的结果。

 

  ②进入【Measures】查看重复指标,区分整体代码与新代码,避免拿整个仓库的人工统计对比新代码比例。

 

  ③在【Project Settings】→【New Code】检查新代码定义,核对参考分支、前一版本或天数范围;同时查看是否存在分支级设置。

 

  ④检查分析日志中的源码范围、排除文件和识别语言,确认怀疑重复的两份文件都参与了检测。

 

  2、打开重复位置检查匹配依据

 

  ①从重复指标进入文件详情,打开标记的重复块,查看其对应文件及行范围。

 

  ②逐段核对连续片段是否达到当前语言的识别门槛。两段代码功能相似,不代表一定具有足够长的重复token或语句序列。

 

  ③对看起来不同却被匹配的片段,检查差别是否只是缩进或字符串字面量;这类差异在重复检测中可能被忽略。

 

  ④核对重复行、重复块和涉及文件数。它们是不同指标,不能把块数当成重复次数后直接换算行数。

 

  3、用相同分母复算百分比

 

  ①取得duplicated_lines和lines,按“重复行数÷行数×100%”复核整体重复比例,不要直接使用非注释代码行ncloc作为分母。

 

  ②核对新代码时,使用对应的新代码重复行和新代码行数,保持统计范围一致。

 

  ③例如,某次分析的lines为1000、duplicated_lines为80,比例为8%。若手工只数出800行非注释代码,再算成10%,差异就来自分母。

 

  4、检查小改动豁免

 

  ①遇到重复比例超限而门禁通过,打开【Project Settings】→【General Settings】→【General】。

 

  ②在【Quality gate】区域查看【Ignore duplication and coverage on small changes】。启用时,新行数不足20行会忽略相应的新代码重复率及覆盖率条件。

 

  ③确认本轮新行数及门禁条件后,再按团队要求决定是否调整。该选项影响门禁判定,并不表示重复片段没有被检测出来。

 

  三、SonarQube配置修改后如何验证效果

 

  验证时一次只改一类设置。这样可以看出变化来自门禁、识别门槛,还是分析范围。

 

  1、用固定代码对比修改前后结果

 

  ①保留同一提交和扫描配置,先记录重复行、重复块、重复比例及门禁结论。

 

  ②只修改门禁比例后重新检查,预期变化应体现在通过条件,重复块本身不应因此消失。

 

  ③再单独调整适用的识别参数或排除项,重新扫描,核对具体文件中的重复范围是否变化。

 

  2、为差异留下可复查记录

 

  ①保存修改前后的有效参数、分析编号和重复块位置,记录对应的语言分析器版本。

 

  ②若结果仍无法解释,提取能够复现的最小片段,在相同配置下分析;核对是否仍有匹配、哪些行进入统计,再定位到具体检测行为。

  总结

 

  SonarQube如何配置重复代码检测阈值,SonarQube重复代码指标与实际结果不符如何核验,最后应形成团队能够共同使用的判断口径。相同的重复比例,放在不同代码范围和新代码定义下,含义可能不同。保留具体匹配位置及分析配置,后续评审才容易讨论哪些重复值得重构,哪些属于需要说明的例外。希望这些操作能帮助大家查清数字差异,让门禁要求与日常代码检查保持一致。如有SonarQube相关需求,欢迎联系我们咨询。

176 5129 0128