评估 Java 程序的 MOOD 因素17 Mar 2025 | 6 分钟阅读 应用程序质量对于软件系统的开发至关重要,尤其是大型系统。高质量的软件可以降低软件维护成本,并提高软件的可重用性。 为了更定量、客观地衡量软件质量,软件度量(MOOD)似乎是一种强大有效的方法,可以为面向对象应用程序评定等级。因此,在本节中,我们将讨论用于评估面向对象应用程序的 mood 因素。 ![]() MOOD 代表 面向对象设计的度量 (Matrices for Object Oriented Design)。它描述了面向对象应用程序或程序的特征。它用于评估 Java 程序的等级。MOOD 因素包括以下六个软件质量指标或度量:
信息隐藏因子MHF 和 AHF 是封装机制支持的信息隐藏概念使用情况的度量。应使用信息隐藏来:
方法隐藏因子 (MHF)可以使用以下数学公式计算 MHF: ![]() 其中, Mh(Ci) = 类 Ci 中隐藏的方法数 Md(Ci) = Mv(Ci) + Mh(Ci):类 Ci 中定义的方法数 Mv(Ci):类 Ci 中可见的方法数 TC:类的总数 可见方法度量类的功能。提高类的整体功能会降低 MHF。为了实现此功能,必须采用自顶向下的方法。这意味着类实现必须是一个逐步分解的过程,这样我们就可以在隐藏方法中添加越来越多的细节,从而提高 MHF。 非常低的 MHF 值表示实现了不够抽象的方法。相反,高的 MHF 值表示功能很少。因此,MHF 值应介于 2、3 和 4 之间。 属性隐藏因子 (AHF)可以使用以下数学公式计算 AHF: ![]() 其中, Ah(Ci) = 类 Ci 中隐藏的属性数 Ad(Ci) = Av(Ci) + Ah(Ci):类 Ci 中定义的属性数 Av(Ci):类 Ci 中可见的属性数 TC:类的总数 AHF 是封装机制支持的信息隐藏概念使用情况的度量。信息隐藏允许通过将复杂组件视为“黑盒”来处理复杂性。应尽可能多地使用 AHF。理想情况下,所有属性都应隐藏,只通过相应的类方法进行访问。非常低的 AHF 值应引起设计者的注意。通常,随着 AHF 的增加,程序的复杂性会降低 2、3 和 4。 继承因子MIF 和 AIF 都是继承的度量。继承是一种表达类之间相似性的机制,它允许通过重用来表示泛化和特化关系,以及简化继承类的定义 [2,3,4,5]。 方法继承因子 (MIF)可以使用以下数学公式计算 MIF: ![]() 其中, Mi:继承的方法数 Ma(Ci) = Md(Ci) + Mi(Ci):类 Ci 中定义的属性数 Md(Ci):定义的方法数 TC:类的总数 乍一看,我们可能会认为继承应该被广泛使用。然而,多个继承关系构成的有向无环图(继承层次结构树),其深度和宽度会迅速导致可理解性和可测试性下降 [1,2,3,4]。 属性继承因子 (AIF)可以使用以下数学公式计算 AIF: ![]() 其中, Ah(Ci) = 类 Ci 中隐藏的属性数 Ad(Ci) = Av(Ci) + Ah(Ci):类 Ci 中定义的属性数 Av(Ci):类 Ci 中可见的属性数 TC:类的总数 耦合因子 (COF)它度量类之间的耦合。 可以使用以下数学公式计算 COF: ![]() 其中, is_client(Cc,Cs) =| 1 如果 (Cc⇒Cs)^(Cc≠Cs),否则为 0 TC:表示类的总数。 客户端-供应商关系,表示为 Cc ⇒ Cs,意味着 Cc(客户端类)至少包含一个非继承的对类 Cs(供应商类)的特征(方法或属性)的引用。COF 的分子表示实际的耦合数量,这些耦合不应归因于继承 2、3、4 和 6。 理想情况下,类应该与尽可能少的其他类通信,并交换尽可能少的信息。耦合关系会增加复杂性、减少封装和潜在重用,并限制可理解性和可维护性。此外,软件系统中的耦合对软件质量有很强的负面影响,因此在设计阶段应将其降至最低。然而,对于给定的应用程序,类必须协作以提供某种功能。因此,COF 预计会有下限 2、3 和 4。 多态因子 (POF)多态意味着具有多种形式的能力。在面向对象系统中,多态允许给定操作的实现依赖于“包含”该操作的对象 2、3、4 和 6。 ![]() 其中, Mo(Ci):类 Ci 中重写的方法数 Mn(Ci):类 Ci 中新增的方法数 DC(Ci):类 Ci 的后代数量(派生类) TC:类的总数 POF 的分子表示实际可能的多态情况数量。发送到类 Ci 的给定消息可以绑定到命名的方法实现(在统计上或动态地),该实现可能具有与该相同方法在其(Ci 后代中)被重写的次数相同的形状 2、3、4。 多态源于继承。将一个公共消息调用绑定(通常在运行时)到同一层次结构中的多个类之一,被认为可以减少复杂性并允许在不产生副作用的情况下改进类层次结构。另一方面,通过跟踪控制流来调试这样的层次结构,这个多态性会使工作变得更难。因此,多态性应该被限制在某个范围内 2、3、4。 MOOD 因素的评估授予面向对象程序的等级取决于以下基于实验的表格。
最终等级的计算步骤如下: 步骤 1:对所有指标执行以下操作: 如果指标值在指定范围内,则 等级 = 100% 否则,如果指标值在容差范围内,则 60%≤等级 通过插值计算。 否则,如果指标超出容差范围,则 等级 < 60% 通过插值公式计算,系统应引起程序员对问题的注意。 ![]() 其中, GRADE [i]:指标 i 的等级。 W[i]:分配给指标以反映其重要性的权重值。 n:因素的数量,n=6。 ![]() 其中, 最终等级:表示评估的面向对象程序的最终等级 [0:100]。 TW:表示可以通过以下公式计算的总权重 ![]() 其中, n:指标总数,n=6。 W(Fi):指标 i 的权重。 每个指标的等级从 0% 到 100% 不等。为每个指标分配权重以反映其重要性。六个指标的分类显示在下表中。此表根据报告的研究 2、3、4、5 和 6 生成。
让我们考虑以下设计模式并使用 MOOD 因素评估它们的等级。 ![]() 让我们评估上述设计模式的等级。
基于以上评估,我们推荐以下内容:
我们观察到每个 MOOD 因素都与面向对象模型的基本结构机制相关。正是这些机制为设计者提供了一些建议。 每个 MOOD 因素的区间已经根据实验结果进行了修改,以适应 Java 程序的评估。权重因子反映了每个特征的重要性。 |
java.text.RuleBasedCollator 类有一个 hashCode() 函数。此 Collator 对象的哈希码可以使用 RuleBasedCollator 类获取。语法:public abstract int hashCode() 参数:此方法不接受任何参数。返回值:此方法返回整数格式的哈希码值。示例...
阅读 2 分钟
图案因其美学吸引力以及它们为我们的可见世界带来的秩序感而一直吸引着人类。尤其是方形图案,它们简单而优雅,并且可以在 Java 中相对轻松地创建。在本节中,我们将深入...
阅读 4 分钟
? 在 Java 中,菱形问题与多重继承有关。有时也称为致命菱形问题或致命的死亡菱形。这样的挑战之一是“菱形问题”,它出现在多重继承的上下文中。在本节中,我们将...
5 分钟阅读
换页符是转义序列字符之一,用 "\f" 表示。它是一种旧的策略,用于显示分页符。示例 // Java 程序用于换页 Import java.io.*; class HelloWorld { public static void main(String[] args) { ...
阅读 4 分钟
?在保护 Java 包时,了解 cacerts 和 Keystore 的原理至关重要。它们是 Java 安全基础设施的两个基本组成部分,在确保 Java 程序数据的机密性和完整性方面发挥着主要作用。在本节中,我们将...
阅读 4 分钟
在数学和计算机科学领域的许多应用程序和方法中,直线都很重要。在给定的 2D 坐标集中找到尽可能多的点可以构成一条直线是一个典型的问题。这个问题应用包括机器学习、计算机...
5 分钟阅读
在软件开发中,处理日期是一项常见任务,通常涉及处理各种日期格式。在 Java 中,由于世界各地使用的约定和模式不同,检测给定日期字符串的格式可能具有挑战性。然而,Java 提供了几个强大的...
阅读 6 分钟
当我们要从方法中返回两个值时,Pairs 非常有用。例如,如果我们有一个计算数字平方根的方法,并且我们想打印数字及其平方根,我们可以使用 Pair...
阅读9分钟
在 Java 中,数组要么没有元素,要么所有元素都为 null,这种情况称为空数组。可以使用 Java 中的 new 关键字来声明一个空数组。空数组或没有元素的数组是……
阅读 3 分钟
在 Java 中,compareToIgnoreCase() 方法属于 String 类,该类属于 java.lang 包。它用于通过忽略大小写差异来比较任何两个字符串。该方法使用每个字符的 Unicode 值进行字符串比较……
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India