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/

10-11 02:32