HIS 指标 "calling"
HIS-Metric "calling"
我不明白为什么会这样metric/rule:
A function should not be called from more than 5 different functions.
All calls within the same function are counted as 1. The rule is
limited to translation unit scope.
在我看来这完全是直观的,因为这与代码重用和将代码拆分为常用函数而不是重复代码的方法相矛盾。
谁能解释一下原理?
首先要说的是,基于度量的质量方法本质上有点主观和近似。遵循度量方法交付高质量代码没有绝对的方法。
软件复杂性需要考虑两个因素。一个是内部复杂性,由每个函数内的决策复杂性(最好的例子是圈复杂度度量)和容器内函数之间的依赖复杂性(翻译单元或 Class)表示。另一个是接口复杂性,测量协作和分层组件或 classes 之间的依赖程度,包括循环依赖。在 C/C++ 世界中,这是跨多个 TU 的。用 Structure101 术语来说,复杂性的内部形式称为“脂肪”,外部形式称为“缠结”。
回到你的问题,这个 Hersteller Initiative Software ‘CALLING’ 指标针对的是内部复杂性(脂肪)。他们的论点似乎是,如果您对单个函数有 5 个以上的引用点,则该 C++ class 或 C 实现文件中的实现逻辑可能太多,因此可能需要分解成单独的模块或组件。这似乎是对软件设计和结构的一种特别狭隘的看法,例外列表可能与这种判断可能适用的领域一样长。
我不明白为什么会这样metric/rule:
A function should not be called from more than 5 different functions. All calls within the same function are counted as 1. The rule is limited to translation unit scope.
在我看来这完全是直观的,因为这与代码重用和将代码拆分为常用函数而不是重复代码的方法相矛盾。
谁能解释一下原理?
首先要说的是,基于度量的质量方法本质上有点主观和近似。遵循度量方法交付高质量代码没有绝对的方法。
软件复杂性需要考虑两个因素。一个是内部复杂性,由每个函数内的决策复杂性(最好的例子是圈复杂度度量)和容器内函数之间的依赖复杂性(翻译单元或 Class)表示。另一个是接口复杂性,测量协作和分层组件或 classes 之间的依赖程度,包括循环依赖。在 C/C++ 世界中,这是跨多个 TU 的。用 Structure101 术语来说,复杂性的内部形式称为“脂肪”,外部形式称为“缠结”。
回到你的问题,这个 Hersteller Initiative Software ‘CALLING’ 指标针对的是内部复杂性(脂肪)。他们的论点似乎是,如果您对单个函数有 5 个以上的引用点,则该 C++ class 或 C 实现文件中的实现逻辑可能太多,因此可能需要分解成单独的模块或组件。这似乎是对软件设计和结构的一种特别狭隘的看法,例外列表可能与这种判断可能适用的领域一样长。