系统设计4.1概述4.2任务4.3设计原理4.4模块独立性4.5图形工具4.6面向数据流的设计方法4.7数据库设计4.8小结4.1概述软件设计分为两个阶段:总体设计(又称概要设计)通过仔细分析软件规格说明,适当地对软件进行功能分解,从而把软件划分为模块,并且设计出完成预定功能的模块结构。详细设计详细设计阶段详细地设计每个模块,确定完成每个模块功能所需要的算法和数据结构。4.1概述软件分析映射软件设计4.1概述4.2任务1.制定规范确定设计的目标和优先顺序选定设计方法规定设计文档的编制标准文档体系、详细程度、图形画法、纸张样式编码形式接口约定、命名规则4.2任务2.系统的结构设计划分层次结构确定模块功能确定模块调用关系确定模块的接口评估模块划分的质量、导出模块结构规则4.2任务3.数据结构设计确定输入、输出文件的结构数据库设计4.可靠性设计(质量设计)5.书写文档概要设计说明书、数据库设计说明书、用户手册、初步的测试计划4.2任务6.评审可追溯性确认该设计是否复盖了所有已确定的软件需求,软件每一成份是否可追溯到某一项需求接口确认该软件的内部接口与外部接口是否已经明确定义。模块是否满足高内聚和低耦合的要求。模块作用范围是否在其控制范围之内风险确认该设计在现有技术条件下和预算范围内是否能按时实现4.2任务实用性确认该设计对于需求的解决方案是否实用技术清晰度确认该设计是否以一种易于翻译成代码的形式表达可维护性确认该设计是否考虑了方便未来的维护质量确认该设计是否表现出良好的质量特征4.2任务各种选择方案看是否考虑过其它方案,比较各种选择方案的标准是什么限制评估对该软件的限制是否现实,是否与需求一致其它具体问题对于文档、可测试性、设计过程……等进行评估4.3设计原理模块化抽象逐步求精信息隐藏4.3.1模块化什么是模块?模块是由边界元素限定的相邻的程序元素(例如,数据说明,可执行的语句)的序列,而且有一个总体标识符来代表它。过程、函数、子程序和宏等,都可作为模块。面向对象范型中的对象是模块,对象内的方法也是模块。模块是构成程序的基本构件。4.3.1模块化什么是模块化?就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。图:模块化和软件成本4.3.1模块化五条标准模块可分解性把问题分解为子问题模块可组装性可复用模块可理解性无需参考其他模块,易于构造和修改模块连续性微小修改只导致对个别模块模块保护性异常影响局限在模块内部人类在认识复杂现象的过程中使用的最强有力的思维工具是抽象。人们在实践中认识到,在现实世界中一定事物、状态或过程之间总存在着某些相似的方面(共性)。把这些相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象。或者说抽象就是抽出事物的本质特性而暂时不考虑它们的细节。4.3.2抽象4.3.3逐步求精求精实际上是细化过程。我们从在高抽象级别定义的功能陈述(或信息描述)开始。也就是说,该陈述仅仅概念性地描述了功能或信息,但是并没有提供功能的内部工作情况或信息的内部结构。求精要求设计者细化原始陈述,随着每个后续求精(细化)步骤的完成而提供越来越多的细节。4.3.4信息隐藏设计和确定模块时,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。模块内部的数据与过程,应该对不需要了解这些数据与过程的模块隐藏起来。只有那些为了完成软件的总体功能而必需在模块间交换的信息,才允许在模块间进行传递。4.4模块独立性模块独立性概括了把软件划分为模块时要遵守的准则,也是判断模块构造是否合理的标准。模块的独立性可以由两个定性标准度量:耦合用于衡量不同模块彼此间互相依赖(连接)的紧密程度;内聚用于衡量一个模块内部各个元素间彼此结合的紧密程度。4.4.1耦合耦合是对一个软件结构内不同模块之间互联程度的度量。耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。在软件设计中应该追求模块间尽可能松散耦合的系统。4.4.1耦合耦合的七种类型1.非直接耦合2.数据耦合3.特征耦合4.控制耦合5.外部耦合6.公共耦合7.内容耦合4.4.1耦合1、非直接耦合(NondirectCoupling)如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。这种耦合的模块独立性最强。4.4.1耦合2、数据耦合(DataCoupling)如果一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的,则称这种耦合为数据耦合。4.4.1耦合3、标记耦合(StampCoupling)如果一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。4.4.1耦合4、控制耦合(ControlCoupling)如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。4.4.1耦合5、外部耦合(ExternalCoupling)一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。6、公共耦合(CommonCoupling)若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。4.4.1耦合公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种情况。松散公共耦合和紧密公共耦合。4.4.1耦合7、内容耦合(ContentCoupling)如果发生下列情形,两个模块之间就发生了内容耦合:一个模块直接访问另一个模块的内部数据;一个模块不通过正常入口转到另一模块内部;两个模块有一部分程序代码重迭(只可能出现在汇编语言中);一个模块有多个入口。4.4.1耦合耦合性应采取下述设计原则:尽量使用数据耦合,少用控制耦合,限制公共环境耦合的范围,完全不用内容耦合。4.4.2内聚七种内聚:1.偶然内聚2.逻辑内聚3.时间内聚4.过程内聚5.通信内聚6.顺序内聚7.功能内聚信息内聚4.4.2内聚1、偶然内聚(CoincidentalCohesion)又称巧合内聚当模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为偶然内聚模块。它是内聚程度最低的模块。4.4.2内聚2、逻辑内聚(LogicalCohesion)这种模块把逻辑相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。例如一个模块读取各种不同类型外设的输入。4.4.2内聚3、时间内聚(ClassicalCohesion)时间内聚又称为经典内聚,或瞬时内聚(TemporalCohesion)。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。问题:一般在某个系统中什么模块会是时间内聚的?答案:程序的初始化模块和终止模块。4.4.2内聚4、过程内聚(ProceduralCohesion)如果一个模块内部的处理成分是相关的,而且这些处理必须以特定的次序执行,则称为过程内聚。使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。问题:请大家举个生活中必须遵照特定次序的例子?答案:排队买饭(队列,要求先进先出)。4.4.2内聚5、通信内聚(CommunicationCohesion)如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。A打印报告1打印报告2打印B存入打印C修改删除打印报告2其他定义:如果一个模块的所有成分都操作同一数据集或生成同一数据集。4.4.2内聚4.4.2内聚6、顺序内聚(SequenceCohesion)这种模块要求各个成分顺序执行,并且通常上一个输出是下一个输入。读入编辑A数据累加打印B结果4.4.2内聚信息内聚(InformationalCohesion)模块多个功能在同一数据结构上操作,每一项功能有一个唯一的入口点。由于这个模块的所有功能都是基于同一个数据结构(符号表),因此它是一个信息内聚的模块。4.4.2内聚7、功能内聚(FunctionalCohesion)一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。4.4.2内聚内聚度设计内聚原则:设计时应力争做到高内聚,并且能够辨认出低内聚的模块,并采取措施进行修改,以提高模块的内聚程度、降低模块间的耦合程度,从而获得较高的模块独立性。4.5图形工具层次图HIPO图结构图4.5.1层次图也称H图是在总体设计阶段最常使用的图形工具之一,它常用于描绘软件的层次结构。层次图中的每个方框代表一个模块,方框间的连线表示模块间的调用关系。4.5.2HIPO图由H图和IPO图两部分组成4.5.3结构图4.5.3结构图结构图中的每个方框代表一个模块,框内注明模块的名字或主要功能;方框之间的箭头(或直线)表示模块间的调用关系。在结构图中通常还用带注释的箭头表示模块调用过程中模块之间传递的信息。注释箭头尾部是空心圆表示传递的是数据。注释箭头尾部是实心圆则表示传递的是控制信息。4.5.3结构图大学职业介绍系统4.5.3结构图模块模块用矩形框表示,并用模块的名字标记它。4.5.3结构图模块的调用关系和接口模块之间用单向箭头联结,箭头从调用模块指向被调用模块,表示调用模块调用了被调用模块。4.5.3结构图条件调用循环调用4.5.3结构图4.6面向数据流的设计方法目标是给出设计软件结构的一个系统化的途径。面向数据流的设计方法定义了一些不同的“映射”,利用这些映射可以把数据流图变换成软件结构。通常所说的结构化设计方法,也就是基于数据流的设计方法。4.6.1概念面向数据流的设计方法把数据流映射成软件结构,数据流的类型决定了映射的方法。数据流有两种类型:变换流事务流图:变换流54图:事务流图:混合型整体?中间?2020/3/25目标系统的DFDSC图---StructuredChart该图常用来表示系统的软件结构。利用它可以清楚地表达软件结构中模块间的层次调用关系和模块之间的联系。SD目标系统的SC2020/3/25ASC图中的主要内容1、模块--在SC图中用矩形框表示,并用名字来标记它--模块调用关系2、模块的调用关系和接口B被调用模块调用模块A(查询学生)B(查找学生记录)数据信号控制信号学号查找成功信号--模块间接口的表示2020/3/25产生最佳解得到好的输入计算最佳解输出结果读输入编辑输入好输入好输入解解原始输入原始输入编辑结果结果格式化显示结果解格式化的解SC图的一般格式2020/3/251、在系统结构图中的模块一、典型的系统结构形式原子模块:在系统结构图中通常是指不能再分割的底层模块完全因子分解系统如果一个软件系统,它的全部实际加工(即数据计算或处理)都是由底层的原子模块来完成,而其它所有非原子模块仅仅执行控制或协调功能。2020/3/25传入模块AA传入模块从下属模块取得数据,进行某些处理,再将其结果传给上级模块。在此,将它传送的数据流称为逻辑输入数据流。在系统结构图中有四种类型的模块:逻辑输入数据流成绩处理2020/3/25传出模块从上级模块获得数据,进行某些处理,再将其结果传给下属模块。在此,将它传送的数据流称为逻辑输出数据流。传出模块DD逻辑输出数据流成绩处理2020/3/25变换模块也叫加工模块。它是从上级模块获得数据,进行特定的处理,将其转换为其他形式,再传回上级模块它所加工的数据流叫做变换数据流。变换模块CB变换数据流审查并开发票发票2020/3/25协调模块对所有下属模块进行协调和管理的模块。在一个好的系统结构图中,协