模块独立性的度量

从两个方面来度量模块之间的独立性,这两个概念是模块的耦合度和模块的内聚度

耦合度

耦合度分为: 独立耦合 , 数据耦合 , 控制耦合 , 公共耦合 和 内容耦合

独立耦合

指两个模块之间彼此完全独立,没有直接联系,他们之间的联系仅仅在于他们同属于一个软件系统或共有一个上层模块,这是耦合程度最低的一种(系统中不可能所有的模块都属于这种关系)

数据耦合

数据耦合指两个模块彼此交换数据,如: 一个模块的输出数据是另一个模块的输入数据,或者一个模块带参数调用另一个模块,下层模块又返回参数,在一个系统中,这种耦合是不可避免的,数据耦合的联系程度也较低,这种耦合是不可避免的

控制耦合

在调用过程中,若两个模块间传递的不是数据而是控制参数,则模块间的关系为控制耦合,控制耦合不是一种必须存在的耦合
当被调用模块收到控制信息作为输入参数时,说明该模块内部存在多个并列的逻辑路径,即有多个功能,控制变量从多个功能中选择所要执行的部分,控制耦合是可以完全避免的

  • 找出模块调用时所用的一个或多个控制变量
  • 在被调模块中根据控制变量找出所有的流程
  • 将每一个流程分解为一个独立的模块
  • 将原被调模块中的流程选择部分移到上层模块,变为调用判断

公共耦合

公共耦合又称为公共环境耦合或者数据区耦合,如果多个模块对同一个数据区进行存取操作,则它们之间的关系就是公共耦合,公共耦合最弱的一种是:两个模块共享一个数据变量,一个模块只向其中写数据,另一个模块只从其中读数据
注意的是: 公共耦合很强的时候,关系会变得错综负责,难以控制,系统的可靠性下降,可理解性,可维护性变差

内容耦合

内容耦合是耦合程序最高的一种形式,若一个模块直接访问另一个模块的内部代码或数据,即出现内容耦合,内容耦合会严重破坏模块的独立性和系统的结构化,代码相互纠缠,运行错综复杂,应尽量避免
内容耦合往往变现为以下几种形式:

  • 一个模块访问另一个模块的内部代码或数据
  • 一个模块不通过正常入口而转到另一个模块的内部(如使用goto语句或者jmp指令直接进入另一个模块的内部)
  • 两个模块有一部分代码重叠
  • 一个模块有多个入口(这意味着一个模块有多种功能)
    模块划分时,尽量使用书数据耦合,少用控制耦合(转成数据耦合),限制公共耦合的范围,完全不用内容耦合

内聚度

内聚度是模块内部各成分(语句或者语句段)之间的联系,模块内部各成分联系越紧,其内聚度越大,模块独立性越强,系统越易理解和维护,良好的内聚度的模块应能较好的满足信息局部化的原则,功能完整单一模块的高内聚必然能导致模块的低耦合度,理想情况是,一个模块只使用局部数据变量,完成一个功能
由弱到强的顺序,内聚读可分为7类:

偶然内聚

块中的各个任务(通过语句或指令来实现的)之间没有什么有意义的联系,他们之所以能构成一个模块完全是偶然的原因
偶然内聚的模块有很多缺点:由于模块内没有实质性的联系,很可能在某种情况下一个调用模块需要对它修改而别的模块不需要,这时就很难处理,同时这种模块的含义也不易理解,甚至难以为他去一个何时的名字,偶然内聚的模块也难于测试,空间允许下,不应该使用偶然内聚

逻辑内聚

一个模块完成的任务在逻辑上属于相同或相似的一类(例如,用一个模块产生各种类型的输出)
如: 模块A,B,C的功能相似但不相同,如果把他们合并成一个模块ABC,则这个模块就为逻辑内聚,因为他们是由于逻辑上相似而发生联系的,逻辑联系是一种较弱的联系,当X,Y,Z调用合成的ABC模块时,需要判别执行不同功能的哪一部分
逻辑耦合存在的问题

  • 修改困难,调用模块中有一个要对其改动,还要考虑到其他调用模块
  • 模块内需要增加开关,判断是谁调用
  • 实际上每次调用只执行模块中的一部分,其他部分也被装入了内存,因而效率不高

时间内聚

时间内聚是指一个模块中包含的任务需要在同一时间内执行(如初始化,结束等所需操作)
时间内聚和偶然内聚,逻辑内聚一样,都属于低内聚度类型

过程内聚

如果一个模块内的各个处理元素是相关的,而且必须按固定的次序执行,这种内聚就称为过程内聚,这种内聚往往表现为次序的流程

通信内聚

若一个模块中的各处理元素需引用共同的数据(同一数据项,数据区或文件),则称其元素间的联系为通信内聚,通信内聚的各部分是借助共同使用的数据联系在一起的,故有较好的可理解性,通信内聚和过程内聚属于中内聚度型模块

顺序内聚

若一个模块内的各处理元素关系密切,必须按规定的处理次序执行,则这样的模块为顺序内聚型,在顺序内聚模块内,后执行的语句或语句段往往依赖先执行的语句或语句段,以先执行的部分为条件,由于模块内各处理元素间存在着这种逻辑联系,所以顺序内聚模块的可理解性很强,属于高内聚度型模块

功能耦合

功能耦合是内聚度最高的一种模块类型,如果模块仅完成一个单一的功能,且该模块的所有部分是实现这一功能所必需的,没有多余的语句,则该模块为功能内聚型,功能内聚模块的结构紧凑,界面清晰,易于理解和维护,因而可靠性强,又由于其功能单一,故复用率高,所以他是模块划分时应追求的一种模块类型
在模块设计时力争做到高内聚,并且能够辨别出低内聚的模块,加以修改使用提高内聚度并降低模块之间的耦合度

  • 设计功能单一的模块
  • 控制使用全局数据
  • 模块间尽量传递数据型变量
    构件(模块)设计的最终目的是将数据模型,架构模型,界面模型变为可以操作的软件,构件设计的详细程度可以根据项目的具体情况而定,在概要设计的时候,可以根据具体要求对各个模块进行详细设计,如果某项目开发过程中不存在详细设计过程,则可以将构件设计得尽可能详细,这样概要设计和详细设计合为一个过程

模块独立性的度量(耦合度和内聚度)相关推荐

  1. 不同耦合度和内聚度的介绍

    耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度.进入或访问一个模块的点以及通过接口的数据. 模块内聚度用于衡量模块内部各成分之间彼此结合的紧密程度. 在软件设计时,追 ...

  2. C语言度的概念,c语言中耦合度、内聚度、复杂度、数据传输特性相关含义

    满意答案 asthough 2013.09.09 采纳率:55%    等级:11 已帮助:6457人 尽可能的独立. 处理一个模块时,不应该依赖另一个模块的内部工作. 内聚原则是指,在一个给定的模块 ...

  3. 耦合性、内聚度的介绍

    软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.划分模块的一个准则就是高内聚低耦合. 一.耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量.耦合的强弱取决与模块间接口的复杂性 ...

  4. 模块独立性与高内聚低耦合

    模块独立程度的度量标准 1)耦合 不同模块之间的互联程度的度量 2)内聚 模块内部彼此结合的紧密程度的度量 模块耦合度越高模块独立性越低 模块内聚度越高模块独立性越高 高内聚,低偶合 耦合性也称块间联 ...

  5. 编程心法 之 内聚度和耦合度是什么

    内聚度 Cohesion 耦合度 Coupling "Coupling" describes the relationships between modules, and &quo ...

  6. 【中级软考】【耦合、内聚】模块独立性衡量之内聚的七种类型(偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚)

    模块间的耦合和模块的内聚是度量模块独立性的两个准则.内聚是模块功能强度的度量,即模块内部各个元素彼此结合的紧密程度.一个模块内部各元素之间的紧密程度越高,则其内聚性越高,模块独立性越好.模块内聚类型主 ...

  7. 软件设计原则:内聚、耦合有哪几种类型?内聚度、耦合度如何比较?

    文章目录 前言 一.何为内聚? 1.1.7 种内聚类型及其描述 二.何为耦合? 2.1.7 种耦合类型及其描述 总结 前言 高内聚.低耦合是我们在软件设计过程中必须遵循的一个重要原则,在整个软件工程中 ...

  8. 衡量模块独立性的两个定性标准

    衡量模块独立性的两个定性标准 - 耦合: - 内聚 内聚和耦合 模块的独立程度可以由两个定性标准衡量,这两个标准分别是内聚和耦合. 耦合衡量不同模块彼此间互相依赖(连接)的紧密程度:内聚衡量一个模块内 ...

  9. 软件工程之模块独立性

    什么是模块?     在程序设计中,为完成某一功能所需的一段程序或子程序:或指能由编译程序.装配程序等处理的独立程序单位:或指大型软件系统的一部分. 什么是模块独立性?     模块独立性是指模块内部 ...

最新文章

  1. SQL Server 2012 安全新特性:包含数据库
  2. 关于 Delphi 中流的使用(6) 用流读写结构化文件
  3. 函数式编程语言python-Python自动化开发 - 函数式编程
  4. 计蒜客 - Distance on the tree(LCA+主席树)
  5. TensorFlow 1.0正式发布
  6. 电子计算机的大脑核心是什么,戴君惕《人脑与电脑》初中说明文阅读题及答案...
  7. 【深入JavaScript】3.JavaScript继承的实现总结
  8. Notepad++技巧
  9. 商务英语老师给的6个建议
  10. 计算机单招语文试题,2019年高职单招语文模拟试题
  11. 【Elasticsearch】es Timelion是Kibana中时间序列的可视化工具
  12. C# Struct的内存布局
  13. idea 报错 java: 无效的源发行版: 11
  14. 5G 来了,需要更换 SIM 卡吗?
  15. 加个ing是什么意思_用quot;ing形式quot; 统称 动名词 和 现在分词 可以吗
  16. Python – numpy.linspace()
  17. 数据结构与算法python—6.链表及python实现
  18. Cox模型中的变量选择(1)---自适应Lasso方法
  19. 【项目实战】Airbnb爱彼迎-数据分析与建模
  20. 麦克风有突突突的杂音

热门文章

  1. 投掷硬币(概率dp)
  2. 吴恩达推荐好文:中国人工智能的崛起
  3. 7-4 有理数加法 (15 分)
  4. 空气质量指数美国标准和中国标准差别
  5. module ‘tensorflow‘ has no attribute xxx tensorflow版本问题类导致API函数的报错
  6. 常用转接IC,转接芯片整理汇总
  7. 打造私域流量,外卖小程序是最好的选择
  8. 流密码的语义安全性与PRG的安全性
  9. 【转】我的第一次和最后一次 Hackathon 经历
  10. oracle memory_error,ORA-27102: out of memory Linux-x86_64 Error: 12: Cannot allocate memory