【问题标题】:Duplicate code is not detected未检测到重复代码
【发布时间】:2018-05-11 08:14:25
【问题描述】:

我将 Sonarqube 与 VSTS 一起使用。但是由于某种原因,如果两种方法相同,只会报告重复代码(即消息被添加到 PR)。但是假设这些方法几乎相同:

public void A(int a) {
    if(a == 0)
        return;
    // code from B
}

public void B(int a) {
    // some code
}

那么它就不会被报告。 是否可以让 SonarQube 为这种类型的代码重复添加 cmets?

【问题讨论】:

    标签: c# sonarqube continuous-integration azure-devops pull-request


    【解决方案1】:

    我不知道这是否可能,但这里有两个原因可能是一个坏主意:

    1. 对于一段“重复”代码有多小没有明显的界限 可。如果相同的三行代码出现在许多不同的地方 地点,您真的要标记吗?
    2. 与第一个相关:查找没有“锚”(例如封闭块)的重复代码在计算上非常昂贵,尤其是在该部分可以是任意长度的情况下。重复检查必须从每一行开始,并检查许多大小的“块”,看看它们是否在其他地方重复。这比目前所做的工作量要多几个数量级。

    【讨论】:

    • AFAIK,默认情况下,SonarQube 需要至少 10 个 LoC 才能将块标记为重复。
    • 如果我进入 SonarQube 门户,它将显示包括上述内容在内的重复项。但它不会在 PR 中报告它们。
    • @artur 啊,我明白了。在那种情况下,我不知道该尝试什么。抱歉,我帮不上忙。
    猜你喜欢
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多