`
darkma
  • 浏览: 526286 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类

内聚与藕合的关系

阅读更多

首先我们引出内聚与耦合的两个概念.

内聚(Cohesion)是一个模块内部各成分之间相关联程度的度量。

耦合(Coupling)是模块之间依赖程度的度量。

内聚和耦合是密切相关的,与其它模块存在强耦合的模块通常意味着弱内聚,而强内聚的模块通常意味着与其它模块之间存在弱耦合。

模块设计追求高内聚,低耦合。

 

内聚按强度从低到高有以下几种类型:

(1)偶然内聚。如果一个模块的各成分之间毫无关系,则称为偶然内聚。
(2)逻辑内聚。几个逻辑上相关的功能被放在同一模块中,则称为逻辑内聚。如一个模块读取各种不同类型外设的输入。尽管逻辑内聚比偶然内聚合理一些,但逻辑内聚的模块各成分在功能上并无关系,即使局部功能的修改有时也会影响全局,因此这类模块的修改也比较困难。
(3)时间内聚。如果一个模块完成的功能必须在同一时间内执行(如系统初始化),但这些功能只是因为时间因素关联在一起,则称为时间内聚。
(4)过程内聚。如果一个模块内部的处理成分是相关的,而且这些处理必须以特定的次序执行,则称为过程内聚。
(5)通信内聚。如果一个模块的所有成分都操作同一数据集或生成同一数据集,则称为通信内聚。
(6)顺序内聚。如果一个模块的各个成分和同一个功能密切相关,而且一个成分的输出作为另一个成分的输入,则称为顺序内聚。
(7)功能内聚。模块的所有成分对于完成单一的功能都是必须的,则称为功能内聚

 

耦合的强度依赖于以下几个因素:

(1)一个模块对另一个模块的调用;
(2)一个模块向另一个模块传递的数据量;
(3)一个模块施加到另一个模块的控制的多少;
(4)模块之间接口的复杂程度。


耦合按从强到弱的顺序可分为以下几种类型:

(1)内容耦合。当一个模块直接修改或操作另一个模块的数据,或者直接转入另一个模块时,就发生了内容耦合。此时,被修改的模块完全依赖于修改它的模块。
(2)公共耦合。两个以上的模块共同引用一个全局数据项就称为公共耦合。
(3)控制耦合。一个模块在界面上传递一个信号(如开关值、标志量等)控制另一个模块,接收信号的模块的动作根据信号值进行调整,称为控制耦合。
(4)标记耦合。模块间通过参数传递复杂的内部数据结构,称为标记耦合。此数据结构的变化将使相关的模块发生变化。
(5)数据耦合。模块间通过参数传递基本类型的数据,称为数据耦合。
(6)非直接耦合。模块间没有信息传

 

然后我们通过测试的角度来看一下这两个度量在测试中的意义:

高内聚的模块,互相之间依赖性比较少,某个模块一但出现问题的时候,能把错误控制在一个模块内.不会因为一个模块出了问题,而影响了其他功能模块.保证了其他功能的完整性,不会影响用户的其他操作,能让给用户带来的麻烦降低到最低限度.程序员也能快速的定位出问题所在的模块,进行问题修改.模块之间没有太多的牵连,更便于程序员的问题修改.在问题修改后,也不会给其他功能模块带来太多的影响.测试人员在做单元或集成测试的时候,能够更容易把里面的程序模块之间的逻辑理清楚,能设计出高覆盖率的用例把程序代码后模块接口都能完全覆盖测试到.也能让测试人员在做回归测试时,降低一定的风险.

 

耦合性高的模块,相互之间依赖性比较多,模块与模块之间的关系也比较复杂.就容易出现,一个程序模块出现了问题,导致其他功能模块都不能正常运行.而且由于关系的复杂性,给程序员定位及修改问题带来一定的不便.也影响了用户的所有操作,给用户带来更大损失.而且由于模块之间的复杂关系,即便程序员修改了一个问题后,也不能保证不会带来更多的缺陷.给测试人员做单元和集成测试带来了太多的不便.需要花大量的时间去理清内部的逻辑.在这样的情况下,可能也会给测试工作带来遗漏的地方,留下隐患.测试人员也要花更多的时间进行回归测试,来保证系统程序符合规定要求了.无形中给项目带来了更多的风险.

 

原文引自:http://www.51testing.com/?26649/action_viewspace_itemid_1122.html

评论

相关推荐

    强内聚松耦合与测试的关系

    ### 强内聚与松耦合与测试的关系 #### 提升单元测试效率 强内聚的模块通常拥有清晰的功能边界,这使得编写单元测试变得更为简单有效。因为模块功能单一,测试用例可以专注于验证该模块的特定行为,而不必关心其他...

    android高内聚低耦合任务事件总线框架

    在Android开发中,高内聚低耦合是一个重要的设计原则,它能提升代码的质量和可维护性。"android高内聚低耦合任务事件总线框架"是指利用事件总线(Event Bus)模式来实现应用组件间的通信,同时遵循高内聚和低耦合的...

    图解高内聚与低耦合.docx

    ### 图解高内聚与低耦合 #### 模块的概念 模块是在软件工程中用于组织和管理代码的一种方式,其基本思想是从逻辑上将系统分解成更小、更易于管理的部分。通过这种方式,可以将复杂的系统问题拆解成一系列相对简单的...

    耦合内聚.doc

    耦合与内聚是软件设计中的两个重要概念,它们直接影响到软件的质量、可维护性和可扩展性。耦合描述的是系统中不同模块之间的相互依赖程度,而内聚则衡量一个模块内部元素之间的关联强度和单一性。以下是关于耦合和内...

    软件开发中的问题:什么是高内聚、低耦合?

    ### 软件开发中的问题:什么是高内聚、低耦合? 在软件工程领域,模块化设计是一种常见的策略,旨在提高代码的可维护性和可重用性。在这个过程中,“高内聚、低耦合”成为了衡量模块设计优劣的重要标准之一。下面将...

    论文:高内聚低耦合软件架构的构建_程春蕊

    《高内聚低耦合软件架构的构建》这篇论文深入探讨了软件工程中的核心设计理念——高内聚与低耦合,这是构建高质量、可维护、易于扩展的软件系统的重要原则。高内聚指的是模块内部元素之间的紧密关联,而低耦合则意味...

    (优化2)android高内聚低耦合任务事件总线框架

    在Android开发中,高内聚低耦合是一个重要的设计原则,它能提升代码的质量和可维护性。"(优化2)android高内聚低耦合任务事件总线框架"这个标题暗示了我们要讨论的是如何利用事件总线来优化任务处理,以实现更好的...

    耦合内聚.zip

    在软件工程领域,耦合和内聚是衡量模块质量的两个关键指标,它们对系统设计的可维护性、可扩展性和可读性有着深远影响。本文将深入探讨这两个概念,并结合"耦合内聚.zip"中的文档内容进行详细阐述。 首先,耦合...

    高内聚低耦合原则_动力节点Java学院整理

    高内聚就是指要高度的聚集和关联,类与类之间的关系要简单、明了,不要有很强的关系。 高内聚低耦合原则是软件设计和编码质量评价的一个重要标准。降低耦合度可以减少模块间的影响,防止对某一模块修改所引起的“牵...

    模块独立思维导图-耦合、内聚的种类

    ### 模块独立思维导图-耦合、内聚的种类 #### 一、概述 在软件工程领域中,为了确保软件系统具有良好的可维护性和可扩展性,开发者需要重视模块设计的质量。其中,模块独立性是衡量软件设计好坏的重要标准之一。...

    高内聚低耦合法则实例解析

    每个对象都会与其他对象发生耦合关系,我们就说这两个对象之间有耦合关系,我们就说这两个对象有朋友关系,耦合发生的方式有很多,依赖,关联,组合,聚合等等。其中,我们称出现成员变量,方法参数,方法返回值的类...

    22丨理论八:如何用迪米特法则(LOD)实现“高内聚、松耦合”? 1

    "高内聚、松耦合"是软件设计中的核心理念,旨在提高代码的可读性和可维护性。高内聚指的是将相关性强的功能聚合在一个模块、类或函数中,使得这些功能紧密联系,减少不必要的相互干扰。这样做的好处是当需要修改某个...

    软件工程_高耦和、低内聚

    ### 软件工程中的高耦合与低内聚 在软件工程领域,"高耦合、低内聚"是一个非常重要的概念。该概念强调了软件设计时各个组成部分之间的关系和交互方式。为了更好地理解这一概念,我们首先需要了解一些基本的定义。 ...

    如何在struts+spring+hibernate的框架下构建低耦合高内聚的软件

    这个框架组合常被称为SSH(Struts-Spring-Hibernate)架构,用于构建高度模块化、低耦合、高内聚的Web应用程序。 Struts 是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,主要用于处理用户请求和...

    耦合和单例模式的理解

    在软件工程领域中,**高内聚**与**低耦合**是衡量系统设计质量的重要标准。高内聚指的是一个模块内部的功能高度相关,即模块内的各个部分紧密地协同工作以完成特定任务。低耦合则意味着各个模块之间的依赖关系较弱,...

    论文研究-面向对象软件中类内聚度度量分析与研究.pdf

    然而,耦合度和内聚度是两个不同的概念,耦合度关注的是类与类之间的依赖关系,而内聚度关注的是类内部的关联性。 根据论文描述,研究者们在现有度量方法的基础上,提出了一个新的内聚度度量方法,名为MCCM2(C)。...

    Move-Class-Refactoring-Tool:本文凭论文的目的是开发一种用于量化封装级内聚和耦合的方法,以便提出解决方案以提高面向对象系统的设计质量

    该文凭论文的目的是开发一种用于量化封装级内聚和耦合的方法,以便提出解决方案以提高面向对象系统的设计质量。... 它接受一个软件程序作为输入,对类和包之间的关系进行结构分析,并计算内聚和耦合度量。 然后,

    软件工程第四章.doc

    良好的软件设计应该尽量降低耦合度,提高内聚度,使得模块间的关系更清晰,每个模块的职责更明确,从而提升软件的整体质量。在实际开发中,应尽量避免内容耦合,优先考虑数据耦合和功能内聚,以达到更好的模块化设计...

Global site tag (gtag.js) - Google Analytics