跟踪方法"膨胀"随着时间的推移nDepend

时间:2017-05-16 22:43:31

标签: c# powershell ndepend

我们正在考虑使用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行的方法,那么这个目标不是打破构建,而是如果有人编辑现有方法太大并且没有改进它(或使其变得更糟),则打破构建。但是,无论我添加多少代码,其中m.WasChanged()部分规则都不会被触发。如果我发表评论,它会提醒我有很多方法超过10行,但我只想知道最近更改过的方法。

我使用规则错了吗?或者我的powershell错误地使用了 / AnalysisResultToCompareWith 参数?

1 个答案:

答案 0 :(得分:1)

规则组代码嗅觉回归中有默认规则,例如Avoid making complex methods even more complex,这些规则与您要实现的目标非常接近。您可以从他们的源代码中获得灵感。

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

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

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

ICompareContext引用两个代码库为较新版本和旧版本创建快照。在此上下文中,OlderVersion()扩展方法实际上从doc:

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