2017-04-26 92 views
1

在5.5之前的Sonarqube版本中,有可能改變計算技術債務的方式以考慮複雜性,但5.5之後我看不到改變它。你刪除了這個配置嗎?技術債務公式沒有考慮到複雜性

恕我直言,在一個複雜的代碼中修復的成本比在一個簡單的代碼中要困難得多。這裏是一個post,你可以在這裏看到並比較兩個類似的項目,這些項目的規模基於相似的技術債務,但基於複雜性的技術債務卻截然不同。此外,覆蓋範圍正在影響這一措施;我認爲當你有足夠的測試和覆蓋範圍來確保你不會破壞任何東西時,修改代碼會更容易。

在sonarqube文檔,也就是用於計算技術債務比的公式爲:

Remediation cost/(Cost to develop 1 line of code * Number of lines of code) 

但補救費用是每個規則配置的固定時間量,是不是?所以它獨立於代碼中可以找到的複雜性。

這裏是一個圖片,你可以看到這是如何在5.1.2版本來完成: Technical debt with complexity

有什麼辦法來配置,在LTS或6.x版本,在技術債務,以使像以前的版本一樣考慮到複雜性?

如果不是,那是在你的路線圖嗎?你有沒有提到複雜性或覆蓋範圍不會影響補救成本?

在此先感謝。

注:認知複雜性的新概念似乎非常有趣,我們再次談論複雜性,這將是一個很好的候選人。但是我還沒有看到在Sonarqube 6.3.1中看到它,有可能嗎?

回答

1

SonarQube 5.6引入了SonarQube質量模型,它由Bug,Vulnerabilities和Code Smells組成。對於Code Smells而言,技術債務被認爲是重要的指標。對於錯誤和漏洞,它是最嚴重的。

在採用這種新的質量模型時,基於複雜性計算技術債務的能力確實已經下降,並且沒有計劃恢復它。與此同時,「技術債務」不再包含補救Bug和Vulnerabilities的時間;它只是Code Smells。

+0

工作感謝您的回答, –

+0

感謝您的回答,這意味着爲複雜性創建單獨的質量大門將是強制性的。你說技術債務/不再包含時間,但它隨着時間的推移而出現,並在「修復成本」和「開發1行代碼的成本」公式中以時間表示。那我們怎麼解釋呢? –

+0

技術債務仍然是一個時間衡量標準,但它不再反映項目中的問題 –

1

由於G.Ann答案解釋說它不適用於SonarQube,在.NET代碼上,您仍然可以使用NDepend工具。

隨着NDepend的a code rule is a C# LINQ query,它可以嵌入一個公式來估算補救成本,也是一個公式來估算每年的利息(沒有解決問題每年的成本,換句話說,其業務影響)。這個問題的嚴重性是從每年的利息估計通過閾值

例如,如果你想有一個編碼規則,警告有關不能很好的測試覆蓋了複雜的方法,它提供定製和現實的債務估計和年利率估計,規則可以像:

// <Name>Complex method must be covered by tests</Name> 
warnif count > 0 
from m in Application.Methods 
where m.PercentageCoverage < 80 && 
     m.CyclomaticComplexity > 10select new { 
    m, 
    m.PercentageCoverage, 
    m.CyclomaticComplexity, 
    m.NbLinesOfCodeNotCovered, 
    Debt = (10 + 3*(m.CyclomaticComplexity -10) + 4*m.NbLinesOfCodeNotCovered) 
      .ToMinutes().ToDebt(), 
    AnnualInterest = (20 + 2*(m.CyclomaticComplexity) + 6*m.NbLinesOfCodeNotCovered) 
        .ToMinutes().ToAnnualInterest() 
} 

這裏我們選擇簡單的線性公式,但它幾乎可以是任何配方,它只是被專門針對要查詢的代碼質量的代碼模型跑了C#查詢。

在Visual Studio中它的結果編輯的規則看起來像,而這些問題和估計可以導入SonarQube系統:

NDepend custom formulas to estimate tech-debt

聲明:我NDepend的