NDepend是否有直接方法通过RFC测量CQL(RFT)?还是我们必须编写CQL查询来对自己使用的类(类型)中的递归计数调用方法进行计数?如果是这样,它看起来如何?与this类似吗?
最佳答案
这确实有可能要归功于神奇的FillIterative()方法。唯一的问题是此代码查询可能需要几秒钟才能运行,并且您可能需要调整查询超时(默认设置为2秒)。请注意,此性能成本是由于RFT定义引起的,它并非来自所用算法的问题。
这是代码:
// <Name>RFT</Name>
from t in Application.Types
where !t.IsInterface && !t.IsEnumeration
let methodsUsedDirectly =
t.TypesUsed
.Where(tUsed => !tUsed.IsThirdParty)
.ChildMethods()
.Where(m => m.IsUsedBy(t))
let methodsUsedIndirectly = methodsUsedDirectly
.FillIterative(
methods => methods.SelectMany(
m => m.MethodsCalled
.Where(mCalled => !mCalled.IsThirdParty))
)
.DefinitionDomain.ToArray()
let rftLoC = methodsUsedIndirectly.Sum(m=>m.NbLinesOfCode)
select new { t,
methodsUsedDirectly,
methodsUsedIndirectly,
rft = methodsUsedIndirectly.Length,
rftLoC }
通过运行此查询,不仅可以获取每种类型的RFT度量,而且还可以获得基于代码行(即响应中方法的LoC之和)的RFT,并且还可以针对每种类型列出所有方法中的回应。
关于c# - 如何在NDepend中测量RFT指标?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22623479/