4 软件工程——总体设计

打印 上一主题 下一主题

主题 809|帖子 809|积分 2431

一、设计过程

1.两个重要阶段



  • 体系设计阶段:确定体系的具体实现方案
  • 结构设计阶段:确定软件结构
2.九个步骤



  • 假想供选择的方案
  • 选取公道的方案
  • 推荐最佳方案
  • 功能分解
  • 设计软件结构
  • 设计数据库
  • 制定测试计划
  • 誊写文档
  • 检察和复审

二、设计原理

1.模块化

        模块化是由边界元素限定的相邻步伐元素的序列,而且有一个实体标识符代表着它。
        模块化就是把步伐分别成独立定名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体。
2.抽象

        把相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象。 抽象就是抽出职务的本质特性而暂时不思量它们的细节
3.渐渐求精

        为了能集中精力办理重要问题而尽量推迟对问题细节的思量。
        渐渐求精可以看座是一项把一个时期内必须办理的种种问题按优先级排序的技能。
4.信息隐藏和局部化

        把一些关系密切的软件元素物理地放得彼此靠近。在模块中使用局部数据元素是局部化的一个例子,显得局部化有助于实现信息隐藏。
5.模块独立

        开发具有独建功能而且和其他模块之间没以后过多的相互作用的模块,就可以做到模块独立。换句话说,希望如许设计软件结构,使得每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单。为什么说模块的独立性很重要呢?


  • 有效的模块化的软件比较轻易开发出来
  • 独立的模块比较轻易测试和维护
(1)耦合

        耦合是对一个软件结构内模块之间互连水平的度量。耦合度越高,模块之间的依赖关系越精密,体系的机动性和可维护性越差。理想的设计是尽量减少耦合,使得模块之间相对独立。
        排序(低到高):
                非直接耦合<数据耦合<标志耦合<控制耦合<外部耦合<公共耦合<内部耦合
        尽量使用数据耦合,少用控制耦合和特征耦合,限制公共情况耦合的范围,完全不用内容耦合。
1.1 非直接耦合



  • 定义:模块之间存在间接依赖,即一个模块通过其他模块或中介进行交互,而不是直接依赖于另一个模块的内部实现。
  • 特点:通过引入中介或抽象层减少模块间的直接依赖,提高模块的独立性。
  • 示例:模块A通过接口或服务与模块B进行交互,而不是直接调用模块B的内部方法。
1.2 数据耦合(低耦合)



  • 定义:两模块彼此通过参数交换数据信息,模块之间没有控制依赖。
  • 特点:数据耦合度最低,模块间通过数据交换而不影响彼此的实现,能有效减少模块间的依赖关系。
  • 示例:模块A将一个数据对象传递给模块B,模块B仅使用数据,不控制模块A的活动。
1.3 控制耦合(中等耦合)



  • 定义:传递的信息中带有控制信息,控制信息用来控制模块内部的活动。
  • 特点:模块之间存在控制依赖,即模块通过参数来控制其他模块的活动,耦合度中等。
  • 示例:模块A传递一个控制标志(如布尔值)给模块B,来决定模块B执行差别的操作。
1.4 公共情况耦合



  • 定义:两个或多个模块共享相同的全局数据(通常是全局变量、常量、配置文件等)。
  • 特点:公共情况耦合度较高,由于多个模块共享同一全局数据,可能会导致数据污染或意外的依赖关系。
  • 示例:模块A和模块B共享一个全局变量 counter,任何一个模块对它的修改都会影响到另一个模块。
1.5 内容耦合(最高耦合)



  • 定义:一个模块直接访问另一个模块的内部数据或实现细节,乃至直接修改另一个模块的代码。
  • 特点:内容耦合是耦合度最高的类型,模块之间高度依赖,修改一个模块的内部实现可能会影响到多个模块。
  • 示例:模块A直接修改模块B的内部数据或访问模块B的私有字段和方法。
(2)内聚

        内聚是衡量一个模块内部各个部分之间精密水平的度量。内聚度越高,模块内部的元素协同工作,功能越专一,体系的可维护性和可理解性越强。
         排序(低到高):
        偶然内聚<逻辑内聚<时间内聚<过程内聚<通信内聚<顺序内聚<功能内聚
        尽量寻求高内聚,确保模块的功能明白且专一。
2.1 功能内聚(Functional Cohesion)



  • 定义:功能内聚是指模块内部的全部元素都精密地协作以完成同一个功能或使命。
  • 特点:功能内聚性最强,模块的每个部分都朝着一个明白的目的协作,符合单一职责原则。
  • 示例:一个处置惩罚用户注册的模块,全部代码都围绕着处置惩罚用户注册的具体使命展开。
2.2 顺序内聚(Sequential Cohesion)



  • 定义:顺序内聚是指模块内部的各个部分按顺序执行,每个部分的输出是下一个部分的输入。
  • 特点:操作有序,前一个操作的结果是下一个操作的输入。
  • 示例:数据处置惩罚模块,先进行数据格式化,再进行数据分析,最后输出结果。
2.3 通信内聚(Communicational Cohesion)



  • 定义:通信内聚是指模块内部的各个部分共同操作同一组数据。
  • 特点:虽然模块内部的操作功能差别,但它们都操作相同的数据。
  • 示例:一个模块内的数据处置惩罚操作,操作相同的数据集(比方,同一个用户对象的多个属性)。
2.4 过程内聚(Procedural Cohesion)



  • 定义:过程内聚是指模块内的各个部分执行的使命虽然差别,但执行顺序上的相关性较强,必须按特定的顺序来执行这些使命。
  • 特点:模块内的操作是为了完成一个大使命的几个步骤。
  • 示例:一个模块负责验证输入数据、读取数据库、格式化输出等使命,这些使命在流程上有先后顺序。
2.5 时间内聚(Temporal Cohesion)



  • 定义:时间内聚是指模块内的各个部分需要在同一时间点执行,但这些操作的功能没有直接关系。
  • 特点:模块内的各部分功能差别,但它们在时间上被安排为同时执行。
  • 示例:一个体系初始化模块,在体系启动时执行多个初始化使命,如加载配置文件、初始化连接池等。
2.6 逻辑内聚(Logical Cohesion)



  • 定义:逻辑内聚是指模块内的各个部分负责处置惩罚同一类使命,但每个使命执行的功能差别。
  • 特点:模块内的操作虽然属于同一类别,但功能差别,通常通过一些条件判定来决定具体执行哪一部分使命。
  • 示例:一个模块根据差别的用户哀求类型(如:打印、计算、存储)执行差别的功能。
2.7 偶然内聚(Coincidental Cohesion)



  • 定义:偶然内聚是指模块内的各个部分没有共同目的,它们的功能完全不相关,只是偶然地被放在同一个模块中。
  • 特点:内聚性最差,模块内的各个部分之间没有任何联系,模块功能不明白。
  • 示例:一个模块同时处置惩罚输入、输出、日志记录和网络通信等使命,它们之间没有任何相关性。

三、启发规则


  • 改进软件结构提高模块独立性
  • 模块规模应该适中
  • 深度、宽度、扇入和扇出都应适当
  • 模块的作用域应该在控制域之内
  • 力争降低模块接口的复杂水平
  • 设计单入口单出口的模块
  • 模块功能应该可以猜测 

四、面向数据流的设计方法

1.变换流

        有明显的输入输出。
        根据基本体系模型,信息通常以“外部天下”的情势进入软件体系,经过处置惩罚以后再以“外部天下”的情势离开体系。
2.事件流

        数据沿输入通路到达一个处置惩罚,这个处置惩罚根据输入数据的类型在若干动作系列中选出一个来执行。这类数据流应该划为一类特别的数据流,称为事件流。
        有事件中心:


  • 吸收输入数据(输入数据又称为事件)
  • 分析每个事件以确定它的类型
  • 根据事件类型选取一条活动通路


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

东湖之滨

金牌会员
这个人很懒什么都没写!

标签云

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