软件工程 - 软件设计

第四章 软件设计工程

  1. 软件设计包含两类主要活动:
    (1) 软件架构设计(又称顶层设计、概要设计):描述软件的顶层架构和组织,划分不同的组件。
    (2) 软件详细设计(又称组件设计、过程设计):详细描述各组件,以便能够编码实现。设计分为两个部分:概要设计和详细设计。其中概要设计又包括三个部分,分别为:体系结构设计、接口设计和数据设计。详细设计包括组件设计。
  2. 创新设计不属于软件设计,它实际上是属于需求分析和需求规格定义的一部分。
  3. 模块的划分不是越多越好。模块越多,单个模块复杂度会降低,但接口会变多。当模块数目增加时,每个模块的规模将减小,开发单个模块的成本确实减少了;但是,随着模块数目增加,模块之间关系的复杂程度也会增加,设计模块间接口所需要的工作量也将增加。模块个数和软件成本之间的关系是一个 U 型曲线:
    在这里插入图片描述
  4. 设计应遵守的指导原则:
    (1) 设计应该是一种架构。
    (2) 设计应该是模块化的,即软件应在逻辑上划分为多个模块或子系统。
    (3) 设计应该包含数据、体系结构、接口和组件各个方面。
    (4) 应该设计出系统所用的数据结构。
    (5) 应该设计出具有独立功能特性的各组件。
    (6) 应该设计出各组件与外部环境连接的各接口,以减少连接的复杂性。
  5. 设计应该是模块化的,换言之软件应该在逻辑上划分为多个逻辑和子系统。
  6. 结构化设计的基本思想是把系统设计成由相对独立,功能单一(因为要内聚性强)的模块组成的层次结构。
  7. 衡量模块独立的两个标准:
    (1) 内聚:一个模块内部各个元素之间的结合越紧密,其内聚性就越高。
    (2) 耦合:模块之间的连接越紧密,耦合性就越高,而模块的独立性就越弱。
    独立性比较强的模块应该是高内聚,低耦合的模块
  8. 一般模块之间可能的耦合方式有七种类型:
    在这里插入图片描述
  • 非直接耦合:两个模块之间没有直接关系,即它们中的任何一个都不依赖于另一个而能独立工作。
  • 数据耦合:两个模块之间仅通过模块参数交换信息,且交换的信息全部为简单数据。
  • 标记耦合:两个模块之间通过参数表传递一个数据结构的一部分(如某一数据结构的子结构)。
  • 控制耦合:一个模块传送给另一个模块的参数中包含了控制信息,该控制信息用于控制接收模块中的执行逻辑。
  • 外部耦合:指模块间通过软件之外的环境联结(如 I/O 将模块耦合到特定的设备、格式、通信协议上)。
  • 公共耦合:一组模块都访问同一个公共数据环境。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。
  • 内容耦合:一个模块对另一模块中的内容(包括数据和程序段)进行了直接的引用甚至修改,或通过非正常入口进入到另一模块内部,或一个模块具有多个入口,或
    两个模块共享一部分代码。

一般模块的内聚分为七种类型:在这里插入图片描述

  • 巧合内聚:一个模块由多个完成不同任务的语句段组成,各语句段之间的联系十分松散或根本没有任何联系。
  • 逻辑内聚:模块是把几种功能组合在一起,每次调用时,由传递给模块的判定参数来确定该模块应执行哪一种功能。
  • 时间内聚:一个模块包含了需要在同一时间段中执行的多个任务。如初始化模块和终止模块。
  • 过程内聚:一个模块中的各个部分相关,并且必须按特定的次序执行。
  • 通信内聚:一个模块中的各个部分使用同一个输入数据或产生同一个输出数据。
  • 顺序内聚:一个模块中的各个部分都与同一个功能密切相关,并且必须按照先后顺序执行(通常前一个部分的输出数据就是后一个部分的输入数据)。
  • 功能内聚:一个模块中各个组成部分构成一个整体并共同完成一个单一的功能。
  1. 顺序内聚的例子:假设有一个按给出的生日计算雇员年龄、退休时间的子程序,如果它是利用所计算的年龄来确定雇员将要退休的时间(即:生日—>年龄—>退休时间),那么它就具有顺序内聚性。而如果它是分别计算年龄和退休时间的,只是使用相同生日数据(即: 生日—>年龄、生日—>退休时间),那它就只具有通信内聚性。

  2. 内容耦合:一个模块对另一模块中的内容(包括数据和程序段)进行了直接的引用甚至修
    改,或通过非正常入口进入到另一模块内部,或一个模块具有多个入口,或两个模块共享一部分代码。内容耦合是所有耦合关系中耦合程度最高的,会使因模块间的联系过于紧密而对后期的开发和维护工作带来很大的麻烦。背

  3. 程序结构的深度、宽度、扇入数、扇出数。
    在这里插入图片描述
    程序结构的深度:程序结构的层次数称为结构的深度。
    程序结构的宽度:层次结构中同一层模块的最大模块个数称为结构的宽度。
    模块的扇入和扇出:扇出表示一个模块直接调用(或控制)的其它模块数目。扇入则定义为调用(或控制)一个给定模块的模块个数。多扇出意味着需要控制和协调许多下属模块。而多扇入的模块通常是公用模块。

  4. 模块的扇入数大好不好?在什么情况下好?什么情况下不好?
    模块的扇出数过大,将使得结构图的宽度过大。宽度越大,结构图越复杂。模块的扇出数过小(例如总是 1)也不好,因为这样将使得结构图的深度大大增加,不但增加了模块接口的复杂性,也增加了调用和返回的时间开销,降低了效率。
    好的软件模块结构设计:上层扇出数比较高,中层扇出数较少,底层公用模块的扇入数较高。

  5. 重构的定义:重构是不改变代码(设计)现有功能的基础上对其内部结构进行修改的过程。

  6. 用户界面设计由一系列的分析开始,包括:
    用户特点分析:应用从具体业务和技术资料收集而来的各种信息,定义各种最终用户的属性和配置信息。
    用户任务分析:使用结构化设计方法或面向对象方法定义用户任务和相关操作。
    应用场景分析:确定用户操作接口的呈现方式约束和布局风格约束。

  7. 在结构化设计方法中,接口设计包括内部接口和外部接口,外部接口又可分为:
    (1) 软件和硬件设备、其他软件之间的接口。
    (2) 软件与用户之间的接口。

  8. 信息隐藏原则:模块定义和设计应当保证模块内的信息(包括过程和数据)不可以被不需要这些信息的其他模块访问。信息隐藏原则有利于提高模块的内聚性。

  9. 向对象架构、层次架构。 体系结构的另一种分类方法:单主机结构、分布式结构(其中的客户机/服务器体系结构又 包含 C/S 结构、B/S 结构)。背

  10. 什么是结构化的程序?(结构化程序的定义)
    如果一个程序的代码块仅仅通过顺序、选择和循环这三种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。

  11. 流程图的主要缺点:
    (1) 程序流程图从本质上来说不是逐步求精的好工具,它容易使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构。
    (2) 程序流程图中用箭头代表控制流,程序员可以不顾结构程序设计的精神,随意转移控制,而使程序结构过于混乱。
    (3) 程序流程图在表示数据结构方面存在不足。

  12. PAD 图。在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值