[英]How to measure RFT metric in NDepend?
这确实有可能要归功于神奇的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,并且还可以针对每种类型列出所有反应中的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.