【问题标题】:Tracking method "bloat" over time with nDepend使用 nDepend 随时间跟踪方法“膨胀”
【发布时间】:2017-05-16 22:43:30
【问题描述】:

我们正在考虑使用 nDepend 来开始跟踪我们的一些技术债务,尤其是在难以维护的方法和圈复杂度方面。

我相信这可能是通过获取基线报告,然后运行新的分析来提供增量。下面是我整理的一个非常基本的 Powershell,它可以做到这一点。

$nDepend = "C:\_DEVELOPMENT\nDepend\NDepend.Console.exe"
$targetFile = "C:\_DEVELOPMENT\AssemblyToTest\CodeChallenge.Domain.ndproj"
$projectFolder = Split-Path -Path $targetFile
$outputFolder = "nDepend.Reports"

$previous = ""
Clear-Host

# See if we already have a .ndar file in the output folder, if we do back it up so we can do a comparison
if (Test-Path $projectFolder\$outputFolder\*.ndar)
{
    Write-Output "Backing up previous NDAR report"
    Copy-Item $projectFolder\$outputFolder\*.ndar $projectFolder\previous.ndar
    $previous = ".\previous.ndar"
}

#The output path appears to be relative to the .ndproj file
& $nDepend $targetFile /Silent /OutDir .\$outputFolder /AnalysisResultToCompareWith .\previous.ndar

这是我在 nDepend 中配置的规则:-

failif count > 1 bobs
from  m in Methods
where m.NbLinesOfCode > 10
where m.WasChanged()
select new { m, m.NbLinesOfCode }

这样做的目的不是在我们有超过 10 行的方法时破坏构建,而是在有人编辑一个太大且没有改进它的现有方法(或使其变得更糟)时破坏构建。但是,无论我添加多少代码,规则的 where m.WasChanged() 部分都不会被触发。如果我将其注释掉,它会提醒我有很多超过 10 行的方法,但我只想知道最近更改的方法。

我是否使用错误的规则?或者我的 powershell 可能错误地使用了 /AnalysisResultToCompareWith 参数?

【问题讨论】:

    标签: c# powershell ndepend


    【解决方案1】:

    在规则组Code Smells Regression中有像Avoid making complex methods even more complex这样的默认规则,它们与您想要实现的目标很接近。您可以从他们的源代码中获得灵感。

    关键是检索用...改变的方法

     m.IsPresentInBothBuilds() && 
     m.CodeWasChanged() &&
    

    然后通过访问m.OlderVersion() 比较自基线以来的指标演变。

    ICompareContext 引用两个代码库快照新版本和旧版本。在这种情况下,OlderVersion() 扩展方法返回实际上调用了来自文档的ICompareContext.OlderVersion(codeElement)

    • 返回旧版本的 codeElement 对象。
    • 如果codeElement 已经是旧版本,则返回codeElement 对象。
    • 如果codeElement已添加且没有对应的旧版本,则返回null
    • 此方法具有恒定的时间复杂度。

    【讨论】:

    • 谢谢帕特里克!我们将尝试添加 m.CodeWasChanged() 您能否详细说明一下 m.OlderVersion() 的用途...我最后没有完全关注您。
    • 已更新,希望对您有所帮助:)
    猜你喜欢
    • 2018-02-06
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 2019-07-06
    相关资源
    最近更新 更多