51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 26153|回复: 22
打印 上一主题 下一主题

[原创] 什么是高内聚和低耦合?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-4-10 09:48:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
接触软件测试,也同时接触一些“高深”词汇,比如高内聚,低耦合等,那么什么是高内聚,什么又是低耦合呢?请哪位大虾解释一下,因为还不怎么明白呢。有资料提供的话更好,先谢过。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-4-10 10:12:05 | 只看该作者
我不太清楚这两个概念,但是根据我个人的理解:
高内聚也许是说一个模块应该具备足够多的功能
低耦合就是说一个模块应该尽可能少的与其他模块有功能上的交互,这样既利于系统的维护也利于测试~
以上是个人理解,希望有人指正错误之处~
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2007-4-10 10:20:16 | 只看该作者
概念请看软件工程这本书
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2007-4-11 09:22:55 | 只看该作者
耦合是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块之间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。
内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。,简单地说,理想内聚的模块只作一件事情。
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2007-4-11 10:06:27 | 只看该作者
高内聚,低耦合在软件工程里有,主要是说模快之间和模块内部之间的关系紧密程度
高内聚就是提高模快内部的关联程度,低耦合当然就是降低模快之间的关联程度
耦合性比较高的话,模块代码不易分离,是不好的编程模式
内聚是越高越好,内聚个人认为是只是实现一个功能,不是很多的功能
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2007-4-11 12:43:51 | 只看该作者
同意楼上,是的,"低内聚高藕合"可以说是编程的一种原则或规范,主要也就是减少模块
间的依赖性,使得程序的可重用性,移植性大大增强
至于解释楼上说的很详细
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2007-4-11 12:56:53 | 只看该作者
耦合性是程序结构中各个模块之间相互关联的度量,取决于各个模块之间接口的复杂程度、调用模块方式以及哪些信息通过接口;
一个内聚程度高的模块应当只完成软件过程中的一个单一的任务,而不与程序的其它部分过程发生联系,(在理想情况下)一个内聚性高的模块应当只做一件事;
内聚性和耦合性是相互关联的。在程序结构中各模块的内聚程度越高,模块间的耦合程度就越低。
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2007-4-11 13:39:18 | 只看该作者
这是软件工程中的概念 。高内聚、低耦合的模块是设计时追求的目标。
我的理解是:
高内聚:类与类之间的关系而定。高,意思是它们间的关系要简单明了,不要有很复杂的关系。不然运行起来就有可能会出问题。一个类的运行影响到其他的类。

低偶合:类内部的方法而言。把程序的功能尽量分散,别在一个类里只写一个或很好的方法,因为那样会给你的调试等带来很多问题。出了错你都不知道在什么地方。
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2007-4-12 20:14:11 | 只看该作者
内聚:一个模块内各个元素彼此结合的紧密程度

耦合:一个软件结构内不同模块之间互连程度的度量

对于低耦合,我粗浅的理解是:

一个完整的系统,模块与模块之间,尽可能的使其独立存在。

也就是说,让每个模块,尽可能的独立完成某个特定的子功能。

模块与模块之间的接口,尽量的少而简单。

如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。

这样有利于修改和组合。

对于低耦合,我粗浅的理解是:

在一个模块内,让每个元素之间都尽可能的紧密相连。

也就是充分利用每一个元素的功能,各施所能,以最终实现某个功能。

如果某个元素与该模块的关系比较疏松的话,可能该模块的结构还不够完善,或者是该元素是多余的。

但是,这个也只是针对大部分程序来说的,有特例,如:
对于JAVA语言又是一个特例,就是高耦合,低内聚
回复 支持 反对

使用道具 举报

  • TA的每日心情
    慵懒
    2019-4-10 17:57
  • 签到天数: 35 天

    连续签到: 1 天

    [LV.5]测试团长

    10#
    发表于 2007-4-15 20:40:56 | 只看该作者
    内聚和耦合,包含了横向和纵向的关系。功能内聚和数据耦合,是我们需要达成的目标。
    横向的内聚和耦合,通常体现在系统的各个模块、类之间的关系,而纵向的耦合,体现在系统的各个层次之间的关系。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
    发表于 2007-12-28 12:09:01 | 只看该作者
    学习了!!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2007-12-28 12:11:26 | 只看该作者
    说的都很详细啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2007-12-28 14:31:10 | 只看该作者
    [转]  这是判断设计好坏的标准,主要是面向OO的设计,主要是看类的内聚性是否高,偶合度是否低。
    高内聚:类与类之间的关系而定,高,意思是他们之间的关系要简单,明了,不要有很强的关系,不然,运行起来就会出问题。一个类的运行影响到其他的类。

    低偶合:类内部的方法而言。把程序的功能尽量分散,别在一个类里只写一个或很好的方法,因为那样会给你的调试等带来很多问题。出了错你都不知道在什么地方。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2020-8-11 08:18
  • 签到天数: 114 天

    连续签到: 1 天

    [LV.6]测试旅长

    14#
    发表于 2007-12-28 15:11:22 | 只看该作者
    我记得我那会儿的教材上说的都是
    块间联系小
    块内联系大

    为啥现在都换成这种高深的词汇了。。。-_-
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
    发表于 2007-12-28 18:16:19 | 只看该作者
    一个函数实现一个独立的功能,这就是高内聚。

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

    即使是最初级的程序员,在常常的被教导中,他也了解了这句口号的含义:我们的程序要模块化,模块要完成明确的一组关联的服务功能,要求它的各部分是相关的、有机组合起来是完整体(外部程序来看黑盒子),模块的内部各成分之间相关联程度要尽可能高(高内聚);而模块与模块之间又要求是可分拆的、少依赖的(低耦合)。就是俗话说的:该干嘛干吗去!降低各模块的之间的联系,减少“牵一发而动全身”的几率,提高开发效率,降低升级维护成本,也便于进行单元测试,提高软件质量。

        转帖转帖,懒得打字了,唉
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
    发表于 2007-12-28 18:25:03 | 只看该作者

    再转一篇吧

    耦合是指模块之间联系的紧密程度。耦合度越高则模块的独立性越差。按耦合度从低到高依次有7种耦合方式。
    非直接耦合(独立运行)
    数据耦合(用参数表传递简单数据)
    标记耦合(传递数据结构或者一部分)
    控制耦合(传递的信息包括控制模块的信息)
    外部耦合(模块与软件之外的环境有关)
    公共耦合(多个模块引用同一全局的数据区)
    内容耦合(访问内部数据,代码重叠或者多个入口)

    内聚是指模块内部各元素之间联系的紧密程度内聚度越低模块的独立性越差。按内聚度从低到高依次有7种内聚种类。
    偶然内聚(模块完成的多个任务,任务之间的关系松散)
    逻辑内聚(模块完成逻辑相关的一组任务)
    瞬时内聚(模块的所有任务必须在同一时间间隔内执行)
    过程内聚(模块的处理元素相关而且按照特定的次序执行)
    通信内聚(模块的所有元素集中在一个数据结构区域上)
    顺序内聚(模块的处理元素相关,必须顺序执行)
    功能内聚(模块完成单一的功能,各个部分协调工作,而且不可缺少)
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17#
    发表于 2009-3-7 23:48:14 | 只看该作者

    学习了

    支持
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18#
    发表于 2009-7-24 14:43:05 | 只看该作者
    学习了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
    发表于 2009-8-4 16:00:17 | 只看该作者
    学习了,顶一下!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20#
    发表于 2009-12-27 12:54:41 | 只看该作者
    上面有位朋友的理解跟我差不多,
    他说:一个函数实现一个独立的功能,这就是高内聚
    我再补充一下:多个函数实现各自功能,这就是低耦合。
    我的理解:
    为什么要把“高内聚,低耦合”这六个字连着读,实际上他们所阐述的原理是一样的,想表达的目的是一致的、也是有联系的。
    一个类内一个函数因为高内聚,它实现了一个独立的功能,那么这个函数与同一类的其它函数就实现了低耦合,这就是上面说的他们是目的是一致的。为什么只说低耦合,而不是零耦合呢,因为程序本身在最低层同一个类里的两个函数还是有千丝万缕的联系。就好比我们经常说的一句话,没有最好只有更好是同一个道理(这是题外话)。
    总结来说:高内聚就像上面朋友说的是指特定一个功能可以独立存在,一般是指一个函数实现一个功能,低耦合是指函数与函数之间不要存在相互依赖关系,这个关系越少越好。
    当然类与类之间也存在这种关系。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-28 04:31 , Processed in 0.077557 second(s), 29 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表