我们正在考虑使用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 参数?
答案 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
。