第3章软件设计_第1页
第3章软件设计_第2页
第3章软件设计_第3页
第3章软件设计_第4页
第3章软件设计_第5页
已阅读5页,还剩188页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、珠海市软件行业协会专家委员会主任珠海市软件行业协会专家委员会主任吉林大学珠海学院计算机系教授吉林大学珠海学院计算机系教授第四章 软件设计3 软件设计是软件开发的核心。是在需求分析和软件设计是软件开发的核心。是在需求分析和设计的基础上进行的。设计的基础上进行的。 本章论述本章论述软件设计的任务及目标、软件设计的概软件设计的任务及目标、软件设计的概念、原理和设计准则、软件设计常用的方法以及多念、原理和设计准则、软件设计常用的方法以及多层层结构设计技术、设计文档和管理文档编写的参考指南、结构设计技术、设计文档和管理文档编写的参考指南、数据库设计方法,数据模型设计案例分析。数据库设计方法,数据模型设计

2、案例分析。第四章 软件设计4软件设计是后续开发步骤及软件维护工作的基础。如软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只能建立一个不稳定的系统结构果没有设计,只能建立一个不稳定的系统结构第四章 软件设计5概要设计说明书概要设计说明书详细设计说明书详细设计说明书软件设计软件设计简单地说,软件设计就是根据需求分析的简单地说,软件设计就是根据需求分析的“做什么做什么(What (What to do?)to do?)”,确定系统应该,确定系统应该“怎么做怎么做”(How to do?)(How to do?)。 需求规格说明书需求规格说明书第四章 软件设计6概要设计:将软件需求转化为软

3、件的系统结构,形成概要设计规格书。详细设计:过程设计和界面设计。形成详细设计规格书。数据设计:包括数据结构、文件和数据库的设计。结构设计:选择合理的体系结构,对系统进行分解和划分。过程设计:通过对结构表示进行细化,得到软件详细的界面、数据结构和程序算法。第四章 软件设计7第四章 软件设计8第四章 软件设计9设计阶段选用合适的设计方法进行系统结构、设计阶段选用合适的设计方法进行系统结构、数据结构、界面表示和实现过程的设计。数据结构、界面表示和实现过程的设计。 第四章 软件设计10第四章 软件设计11制定设计时共同制定设计时共同遵守的标准,以便协调组内各成员的工作。遵守的标准,以便协调组内各成员的

4、工作。 确定设计目标和最合适的设计方法。确定设计目标和最合适的设计方法。 规定编码的信息形式和接口规约规定编码的信息形式和接口规约。 确定命名规范。确定命名规范。 确定构件重用策略。确定构件重用策略。 面向模块(部件或构件)进行设计。面向模块(部件或构件)进行设计。 规定设计文档的规定设计文档的规范规范。 规定代码编写规定代码编写规范。规范。 概要设计方法;概要设计方法; 详细设计和编程方法。详细设计和编程方法。第四章 软件设计12 将系统按功能划分成模块的层次结构将系统按功能划分成模块的层次结构 确定每个模块的功能、与需求相对应确定每个模块的功能、与需求相对应 确定模块间的调用关系确定模块间

5、的调用关系 确定模块间的接口确定模块间的接口 评估模块划分的质量评估模块划分的质量基于基于功能的层次结构功能的层次结构建立系统。建立系统。第四章 软件设计13 确定确定算法算法,评估算法的性能,评估算法的性能 确定模块间的控制方式确定模块间的控制方式 周转时间周转时间 响应时间响应时间 吞吐量吞吐量 精度精度 确定外部信号的接收发送形式确定外部信号的接收发送形式第四章 软件设计14确定确定I/OI/O文件的数据结构文件的数据结构确定算法所必需的逻辑数据结构确定算法所必需的逻辑数据结构确定对逻辑数据结构所操作的程序模块确定对逻辑数据结构所操作的程序模块限制和确定各个数据设计的影响范围限制和确定各

6、个数据设计的影响范围确定接口数据其详细的数据结构和使用规则确定接口数据其详细的数据结构和使用规则目的:保证数据完整性和安全性。目的:保证数据完整性和安全性。数据结构数据结构的的设计)设计)第四章 软件设计15目的:确定数据库的模式、子模式。目的:确定数据库的模式、子模式。概念结构设计:概念结构设计:可以用可以用E-RE-R模型表示,也可以模型表示,也可以用用3NF3NF关系群表示关系群表示 逻辑结构设计:逻辑结构设计:是将概念模型转换成是将概念模型转换成DBMSDBMS支持支持的数据模型。的数据模型。物理结构设计物理结构设计:设计数据模式的一些物理细节,设计数据模式的一些物理细节,选定存储结构

7、和存取方法选定存储结构和存取方法 ,以获得数据库的,以获得数据库的最佳存取效率。最佳存取效率。数据库设计)数据库设计)第四章 软件设计16数据的保护性设计)数据的保护性设计)第四章 软件设计17在软件开发的一开始就应确定软件在软件开发的一开始就应确定软件可靠性和其它质量指标,考虑相应可靠性和其它质量指标,考虑相应措施,确保所做的设计具有良好的措施,确保所做的设计具有良好的质量特性,使软件易于修改和易于质量特性,使软件易于修改和易于维护。维护。(质量设计)(质量设计)第四章 软件设计18 确定软件各模块内的算法和数据结构。确定软件各模块内的算法和数据结构。 选定某种过程的表达形式来描述各种算法。

8、选定某种过程的表达形式来描述各种算法。 进行详细设计的评审进行详细设计的评审在详细设计过程中,需要完成的工作是:在详细设计过程中,需要完成的工作是:第四章 软件设计19 概要设计规格说明书概要设计规格说明书 数据库设计数据库设计规格规格说明书说明书 详细设计详细设计规格规格说明书说明书 用户使用手册用户使用手册 测试计划与测试标准测试计划与测试标准第四章 软件设计20 可追溯性:可追溯性:需求复盖需求复盖确认确认 接口:接口:内部接口与外部接口定义的确认。内部接口与外部接口定义的确认。 风险:风险:确认技术条件、预算范围。确认技术条件、预算范围。 实用性:实用性:确认对于需求的实用性。确认对于

9、需求的实用性。 技术清晰度:技术清晰度:确认代码的可实现性确认代码的可实现性 可维护性:可维护性:确认可维护性确认可维护性 质量:质量:确认质量特征确认质量特征 各种选择方案:各种选择方案:选择方案的标准选择方案的标准 限制:限制:评估限制的现实性,与需求的一致性评估限制的现实性,与需求的一致性 其它具体问题:其它具体问题:对文档、可测试性、设计过程等进行评估对文档、可测试性、设计过程等进行评估第四章 软件设计21 节省开发费用、节省开发费用、 降低资源消耗、降低资源消耗、 缩短开发时间、缩短开发时间、 能够赢得较高的生产效率、能够赢得较高的生产效率、 较高的可靠性、较高的可靠性、 可维护性的

10、方案。可维护性的方案。软件设计的最终目标:软件设计的最终目标:取得最佳方案取得最佳方案第四章 软件设计223 3、软件、软件设计文档设计文档 概要设计规格书概要设计规格书详细设计规格书详细设计规格书数据库设计规格书数据库设计规格书用户操作手册用户操作手册测试计划与标准测试计划与标准第四章 软件设计23概要设计说明书要点概要设计说明书要点 软件软件体系结构和系统结构设计体系结构和系统结构设计模块(部件)功能分配模块(部件)功能分配数据结构设计数据结构设计接口设计接口设计检查列表检查列表第四章 软件设计24 主要设计思想与方法主要设计思想与方法 模块实现过程设计模块实现过程设计 接口实现过程设计接

11、口实现过程设计 主要算法和数据结构说明主要算法和数据结构说明 界面设计界面设计 检查列表检查列表第四章 软件设计25概要设计说明书评审记录表概要设计说明书评审记录表详细设计说明书评审记录表详细设计说明书评审记录表突出设计书评审中不符合项的跟踪记录。突出设计书评审中不符合项的跟踪记录。不符合项主要是在系统功能、性能、接口的设不符合项主要是在系统功能、性能、接口的设计上存在的遗漏或缺陷。计上存在的遗漏或缺陷。只有不符合项为零时,评审才能通过。只有不符合项为零时,评审才能通过。因此,评审可能进行多次。因此,评审可能进行多次。意见指出不符合项、强项和弱项。意见指出不符合项、强项和弱项。评审结论就是通过

12、或不通过。评审结论就是通过或不通过。记录表要点:记录表要点:第四章 软件设计26第四章 软件设计27软件过程集中考虑每个模块各自的处软件过程集中考虑每个模块各自的处理细节。过程必须提供一个精确的处理规格说明,理细节。过程必须提供一个精确的处理规格说明,包括事件顺序,精确的判定位置、重复的操作,包括事件顺序,精确的判定位置、重复的操作,以及数据组织和结构等以及数据组织和结构等 。描述一个模块的实现,描述一个模块的实现,必须包括所有从属于该模块的所有模块的引用,必须包括所有从属于该模块的所有模块的引用,而从属于该模块的所有模块是通过结构体现的。而从属于该模块的所有模块是通过结构体现的。 第四章 软

13、件设计28 数据词典 数 据 流 图 实实 体 关 系 图 状态转换图 加 工 控 制 规 规 格 格 说 说 明 明 数 据 对 象 描 述 过程设计 接口设计 体系结构设计 数据设计 用数据、功能和行为模型表示的软件需求,采用某种设计方用数据、功能和行为模型表示的软件需求,采用某种设计方法进行数据设计、体系结构设计、接口设计和过程设计。法进行数据设计、体系结构设计、接口设计和过程设计。 第四章 软件设计29 数据设计将实体数据设计将实体关系图中描述的对象和关系,以及数关系图中描述的对象和关系,以及数据词典中描述的详细数据内容转化为数据结构的定义。据词典中描述的详细数据内容转化为数据结构的定

14、义。体系结构设计定义软件系统各主要成份之间的关系。体系结构设计定义软件系统各主要成份之间的关系。接口设计根据数据流图定义软件内部各成份之间、软件接口设计根据数据流图定义软件内部各成份之间、软件与其它协同系统之间及软件与用户之间的交互机制。与其它协同系统之间及软件与用户之间的交互机制。过程设计则是把结构成份转换成软件的过程性描述。过程设计则是把结构成份转换成软件的过程性描述。 软件设计是开发阶段中最重要的步骤,它是软件开发过软件设计是开发阶段中最重要的步骤,它是软件开发过程中质量得以保证的关键步骤。程中质量得以保证的关键步骤。 第四章 软件设计30设计必须实现分析模型中描述的所有显式需求,必设计

15、必须实现分析模型中描述的所有显式需求,必须满足用户希望的所有隐式需求。须满足用户希望的所有隐式需求。设计必须是可读、可理解的,使得将来易于编程、设计必须是可读、可理解的,使得将来易于编程、易于测试、易于维护。易于测试、易于维护。设计应从实现角度出发,给出与数据、功能、行为设计应从实现角度出发,给出与数据、功能、行为相关的软件全貌。相关的软件全貌。第四章 软件设计31设计出来的结构应是分层结构,从而建立软件成份之间的控制。设计出来的结构应是分层结构,从而建立软件成份之间的控制。设计应当模块化,从逻辑上将软件划分为完成特定功能或子功能的设计应当模块化,从逻辑上将软件划分为完成特定功能或子功能的构件

16、。构件。设计应当既包含数据抽象,也包含过程抽象。设计应当既包含数据抽象,也包含过程抽象。设计应当建立具有具有独立功能特征的模块。设计应当建立具有具有独立功能特征的模块。设计应当建立能够降低模块与外部环境之间复杂连接的接口。设计应当建立能够降低模块与外部环境之间复杂连接的接口。设计应能根据软件需求分析获取的信息,建立可驱动可重复的方法。设计应能根据软件需求分析获取的信息,建立可驱动可重复的方法。第四章 软件设计32该划分过程从需求分析确立的目标系统的模型出发,对该划分过程从需求分析确立的目标系统的模型出发,对整个问题进行分割,使每个部分用一个或几个软件成份整个问题进行分割,使每个部分用一个或几个

17、软件成份加以解决。加以解决。第四章 软件设计33如果模块是相互独立的如果模块是相互独立的,模块越小,每个模块,模块越小,每个模块花费的工作量越低;模花费的工作量越低;模块数增加时,模块间的块数增加时,模块间的联系也随之增加,把这联系也随之增加,把这些模块联接起来的工作些模块联接起来的工作量也随之增加。因此,量也随之增加。因此,要设计成要设计成M个模块,个模块, 使使得总的开发成本达到最得总的开发成本达到最小。小。 第四章 软件设计34整个整个结构只有一个顶层模块,结构只有一个顶层模块,而对于任何一个下层模而对于任何一个下层模块,只有一个上级模块,块,只有一个上级模块,而且同一层模块之间不而且同

18、一层模块之间不发生联系发生联系。任意任意两个模块间都可以有双两个模块间都可以有双向的关系。由于模块间向的关系。由于模块间不存在上下的关系,任不存在上下的关系,任何两个模块都是平等的,何两个模块都是平等的,因此分不出层次来。因此分不出层次来。 第四章 软件设计35第四章 软件设计36软件系统的模块化是指整个软件被划分成若干软件系统的模块化是指整个软件被划分成若干单独命名和可编址的部分,称之为模块。这些单独命名和可编址的部分,称之为模块。这些模块可以被组装起来以满足整个问题的需求。模块可以被组装起来以满足整个问题的需求。把问题子问题的分解与软件开发中的系统把问题子问题的分解与软件开发中的系统子系统

19、或系统模块对应起来,就能够把一个子系统或系统模块对应起来,就能够把一个大而复杂的软件系统划分成易于理解的比较单大而复杂的软件系统划分成易于理解的比较单纯的模块结构。纯的模块结构。第四章 软件设计37“模块模块”,又称,又称“组件组件”。一般有四个基本属性。一般有四个基本属性功能:功能:描述该模块做什么?描述该模块做什么?逻辑:逻辑:描述模块内部怎么做?描述模块内部怎么做?状态:状态:模块使用时的环境和条件。模块使用时的环境和条件。接口:接口:指模块的输入与输出。指模块的输入与输出。第四章 软件设计38 外部特性:外部特性:模块的模块名、参数表模块的模块名、参数表( (含输入参含输入参数和输出参

20、数数和输出参数) )。 内部特性:内部特性:完成其功能的程序代码和仅供该模完成其功能的程序代码和仅供该模块内部使用的数据块内部使用的数据第四章 软件设计39用层次的方式构造和分析复杂系统。用层次的方式构造和分析复杂系统。帮助开发人员把精力集中在与当前开发帮助开发人员把精力集中在与当前开发阶段最相关的那些问题上。阶段最相关的那些问题上。如果一个模块内包含的信息如果一个模块内包含的信息(过程和数据过程和数据) 不允许外部的模块访问的话,其它模块不能对其访不允许外部的模块访问的话,其它模块不能对其访问。问。把一些关系密切的软件元素物理地放得彼把一些关系密切的软件元素物理地放得彼此靠近。此靠近。第四章

21、 软件设计40TOP菱形:表示模块内有判定功能;菱形:表示模块内有判定功能;阴影:表示模块的作用范围。阴影:表示模块的作用范围。ABCDEFTOPABCDEFTOPABCDEF第四章 软件设计41传入模块传入模块AA传出模块传出模块DD变换模块变换模块BC协调模块协调模块XXYY第四章 软件设计42软件系统中每个模块只涉及软件要求的具体的子软件系统中每个模块只涉及软件要求的具体的子功能功能, , 和其它的模块的接口是简单的。和其它的模块的接口是简单的。一个模块只具有单一的功能且与其它模块没有太一个模块只具有单一的功能且与其它模块没有太多的联系多的联系, , 则称此模块具有模块独立性。则称此模块

22、具有模块独立性。模块的独立性是软件质量的关键。具有独立模块模块的独立性是软件质量的关键。具有独立模块的软件容易开发,这是由于能够对软件的功能加的软件容易开发,这是由于能够对软件的功能加以分割,而相互接口不复杂,可有一组人员同时以分割,而相互接口不复杂,可有一组人员同时开发,由于模块相互独立,在各自设计和修改代开发,由于模块相互独立,在各自设计和修改代码时所引起的二次影响不大,错误传播少。码时所引起的二次影响不大,错误传播少。 第四章 软件设计43耦合:耦合:各模块之间的互相连接的紧密程度。各模块之间的互相连接的紧密程度。模块之间模块之间的连接越紧密,联系越多,耦合性就越高,而其独立的连接越紧密

23、,联系越多,耦合性就越高,而其独立性就越弱。性就越弱。内聚:内聚:模块内各功能元素彼此结合的紧密程度。模块内各功能元素彼此结合的紧密程度。一个一个模块内部各个元素之间的联系越紧密,则它的内聚性模块内部各个元素之间的联系越紧密,则它的内聚性就越高,相对地,它与其它模块之间的耦合性就会减就越高,相对地,它与其它模块之间的耦合性就会减低,而模块独立性就越强。低,而模块独立性就越强。增强模块独立性的方法是尽量做到增强模块独立性的方法是尽量做到高内聚、低耦合。高内聚、低耦合。第四章 软件设计44通常模块之间总是相通常模块之间总是相互关联的,因为完全独立的模块是无法构成系统的。关键互关联的,因为完全独立的

24、模块是无法构成系统的。关键是连接的程度和复杂度。我们用耦合度衡量连接的强度,是连接的程度和复杂度。我们用耦合度衡量连接的强度,模块间连接很强叫模块间连接很强叫“紧耦合紧耦合”,而模块间的连接弱叫,而模块间的连接弱叫“松松耦合耦合”。显然,我们的目标是努力实现。显然,我们的目标是努力实现“松耦合松耦合”系统。系统。耦合度耦合度第四章 软件设计45耦合度耦合度描述了模块间的连接程度,是一个抽象的描述了模块间的连接程度,是一个抽象的概念,但它能用一个可操作的概念来描述,即程概念,但它能用一个可操作的概念来描述,即程序员在编码、调试和修改一个模块时,需要考虑序员在编码、调试和修改一个模块时,需要考虑另

25、外一个模块的概率。如果两个模块是紧耦合的,另外一个模块的概率。如果两个模块是紧耦合的,那么他修改一个模块,需要修改另外一个模块的那么他修改一个模块,需要修改另外一个模块的概率就高。显然整个系统的开发费用及系统的复概率就高。显然整个系统的开发费用及系统的复杂性与模块间的耦合度有直接的关系。杂性与模块间的耦合度有直接的关系。第四章 软件设计46两两个模块之间个模块之间,它们之,它们之间的联系完全是通过主模块的控制和间的联系完全是通过主模块的控制和调用来实现的调用来实现的。非。非直接耦合的模块独直接耦合的模块独立性最强。立性最强。一个模块访问另一个模块时,彼此之一个模块访问另一个模块时,彼此之间是通

26、过间是通过 ( (不是控制参不是控制参数、公共数据结构或外部变量数、公共数据结构或外部变量) ) 来交来交换输入、输出信息的。换输入、输出信息的。第四章 软件设计47如果一个模块通过传送如果一个模块通过传送,明显,明显地控制选择另一模块的功能,地控制选择另一模块的功能,就是控制耦合。就是控制耦合。一组模块通过参数表传递记录信息,就是标记耦合。这一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。个记录是某一数据结构的子结构,而不是简单变量。一组模块都访问一组模块都访问而不是同一全局数据结构,而不是同一全局数据结构,而且不是通过参数表传递该全而且不是通过

27、参数表传递该全局变量的信息,则称之为外部局变量的信息,则称之为外部耦合耦合。第四章 软件设计48若一组模块都访问若一组模块都访问环境,则它们之间环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。数据结构、共享的通信区、内存的公共覆盖区等。公共耦合的复杂程度随耦合模块的个数增加而显著增公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有加。若只是两模块间有公共数据环境,则公共耦合有两种情况。松散公共耦合和紧密公共耦合两种情况。松散公共耦合和紧密公共耦合。第

28、四章 软件设计49模块之间发生了下列情形,则称为内容耦合模块之间发生了下列情形,则称为内容耦合一个模块直接访问另一个模块的内部数据一个模块直接访问另一个模块的内部数据; ;一个模块不通过正常入口转到另一模块内部一个模块不通过正常入口转到另一模块内部; ;两个模块有一部分程序代码重迭两个模块有一部分程序代码重迭( (只可能出现只可能出现在汇编语言中在汇编语言中););一个模块有多个入口。一个模块有多个入口。第四章 软件设计50 连接方式的类型。连接方式的类型。 接口的复杂性。接口的复杂性。 传送的信息流类型。传送的信息流类型。 耦合的时间。耦合的时间。第四章 软件设计51耦合度由低到高分别是:耦

29、合度由低到高分别是:独立性最强,一个模块通过模块名调独立性最强,一个模块通过模块名调用另一模块,彼此之间的关系非常明确;用另一模块,彼此之间的关系非常明确;可以直接引用其他模块的数据或控制可以直接引用其他模块的数据或控制指令耦合度最强,一个模块出错,错误有可能来自其它模指令耦合度最强,一个模块出错,错误有可能来自其它模块。尤其是控制直接引用,因为:接口不明显;程序难以块。尤其是控制直接引用,因为:接口不明显;程序难以理解,难以编写,也难以纠错、改错,所以通常将该种联理解,难以编写,也难以纠错、改错,所以通常将该种联系称为病态联系,应避免。系称为病态联系,应避免。第四章 软件设计52当几个模块在

30、一个公共数据区上工作时当几个模块在一个公共数据区上工作时, ,一个一个模块的改变模块的改变, ,可能造成另一些模块的错误。可能造成另一些模块的错误。如果有如果有M M个模块个模块, ,共享共享N N个数据的公共区个数据的公共区, ,可能产可能产生生M M* *(M-1)(M-1)* *N N联系。联系。修改一处,就要考虑很多模块。若将公共数据修改一处,就要考虑很多模块。若将公共数据区分割,就有可能大大减少耦合度。区分割,就有可能大大减少耦合度。接口间传递的信息数量以及穿越接口次数和类型决接口间传递的信息数量以及穿越接口次数和类型决定了接口的复杂性。例如:定了接口的复杂性。例如:第四章 软件设计

31、53当一个模块修改另一个模块的代码时当一个模块修改另一个模块的代码时, ,对修改者来说对修改者来说, ,修改的代码是当作数据来处理的修改的代码是当作数据来处理的, ,而对被修改的模块来说,则可能是对而对被修改的模块来说,则可能是对“控制控制”的的改变,这种情况最难处理,耦合度最高。改变,这种情况最难处理,耦合度最高。一个模块直接转移到另一模块的某点上,一个模块直接转移到另一模块的某点上,就影响了两个模块的控制。由于很难找到这种转就影响了两个模块的控制。由于很难找到这种转移地址,通常可以通过传递参数来传递控制。这移地址,通常可以通过传递参数来传递控制。这种耦合度也很高。种耦合度也很高。第四章 软

32、件设计54类型类型选择是控制型参数,决定了模块选择是控制型参数,决定了模块B B是取阴历日期还是取阴历日期还是取阳历日期,消除开关信息,将模块分解,每个模块是取阳历日期,消除开关信息,将模块分解,每个模块有明确的功能,成为数据耦合有明确的功能,成为数据耦合。A取阴历日期取阴历日期或或取阳历日期取阳历日期类型选择类型选择日期日期取阴历取阴历取阳历取阳历阴历日期阴历日期阳历日期阳历日期第四章 软件设计55耦合的时间有以下几种情况:耦合的时间有以下几种情况: 编写程序时(程序员编写一行语句时);编写程序时(程序员编写一行语句时);模块编译或汇编时;模块编译或汇编时;程序模块连接时;程序模块连接时;系

33、统运行时。系统运行时。参数确定的越晚,就越容易修改,越灵活。参数确定的越晚,就越容易修改,越灵活。第四章 软件设计56 耦合度是评价程序质量的重要指标,耦合度越小,耦合度是评价程序质量的重要指标,耦合度越小,则每个模块越容易独立地被理解、编写和修改,同时每则每个模块越容易独立地被理解、编写和修改,同时每个模块的错误越不容易扩散蔓延到其他模块。个模块的错误越不容易扩散蔓延到其他模块。 对需要了解的内容,隐含的改为明显的,便于理解;对需要了解的内容,隐含的改为明显的,便于理解; 连接的方式尽量标准化,避免直接引用;连接的方式尽量标准化,避免直接引用; 减少公共区,将公共区划分为若干个逻辑子区;减少

34、公共区,将公共区划分为若干个逻辑子区; 输入输出应局限在少量模块,不要分散在全系统;输入输出应局限在少量模块,不要分散在全系统;第四章 软件设计57 c 模块中各个部分都是完成某一具体模块中各个部分都是完成某一具体功能必不可少功能必不可少的组的组成部分,或者说该模块中所有部分都是为了完成一项成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割。则称该具体功能而协同工作,紧密联系,不可分割。则称该模块为功能内聚模块。模块为功能内聚模块。第四章 软件设计58模块中模块中上操作,每一项功能上操作,每一项功能有一个唯一的入口点。模块根据不同的要求,确定执行有一个唯一的入

35、口点。模块根据不同的要求,确定执行哪一个功能。模块内所有功能都基于同一个数据结构。哪一个功能。模块内所有功能都基于同一个数据结构。信息内聚模块可以看成是多个功能内聚模块的组合,并信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的隐蔽。即把某个数据结构、资源或设备隐且达到信息的隐蔽。即把某个数据结构、资源或设备隐蔽在一个模块内,不为别的模块所知晓。蔽在一个模块内,不为别的模块所知晓。第四章 软件设计59如果一个模块内各功能部分都如果一个模块内各功能部分都,或产生了或产生了,则称之为通信内聚模块。,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。通常,通信内聚模块是通过数

36、据流图来定义的。第四章 软件设计60使用流程图做为工具设计程序时,把流程图中的某一使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,把部分划出组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、计算部分分成三个流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。模块,这三个模块都是过程内聚模块。时间内聚又称为经典内聚。这种模块大多为多功能时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常模块,但模块的各个功能的执行与时间有关,通常要求要求例如初始例如初始化模块和终止模块。化

37、模块和终止模块。第四章 软件设计61 模块内各处理单元模块内各处理单元相关,按特定次序执相关,按特定次序执行,采用数据流图时行,采用数据流图时往往会出现此种内聚。往往会出现此种内聚。 如图:读入的数如图:读入的数据供编辑单元处理,据供编辑单元处理,读入和编辑这两个处读入和编辑这两个处理单元在一个过程中理单元在一个过程中相关。相关。读入读入编辑编辑数据数据第四章 软件设计62逻辑内聚把逻辑内聚把几种几种每次被调用时,由每次被调用时,由传送给模块的判定参数来确定传送给模块的判定参数来确定该模块应执行哪一种功能该模块应执行哪一种功能。当模块内当模块内,或者即使有联系,这种联系也或者即使有联系,这种联

38、系也很松散,则称这种模块为巧合很松散,则称这种模块为巧合内聚模块,它是内聚程度最低内聚模块,它是内聚程度最低的模块。的模块。巧合内聚巧合内聚实例实例第四章 软件设计63 T MOV A TO B READ Card file MOV C TO DPQRS 此例中此例中A、B、C、D、T之间各不相之间各不相干,只因为干,只因为P、Q、R、S都要用到它们,都要用到它们,为了节省一些存储空间,将它们放在一为了节省一些存储空间,将它们放在一个模块中。个模块中。问题:这种模块不易取名,模块含义不问题:这种模块不易取名,模块含义不易理解,难以测试,不易修改。当易理解,难以测试,不易修改。当P、Q有不同要求

39、(如有不同要求(如P要求要求MOVE A TO B)时时 T的修改会很复杂。因为它们本来互的修改会很复杂。因为它们本来互不相关,所以变动的可能性很大。不相关,所以变动的可能性很大。 当存储空间不是很紧张时,应尽量避当存储空间不是很紧张时,应尽量避免巧合性内聚。免巧合性内聚。第四章 软件设计64 划分模块时,尽量做到划分模块时,尽量做到高内聚、低耦合,保持模块相对独立性。高内聚、低耦合,保持模块相对独立性。模块划分的准则:模块划分的准则:“将相关的各部分放在一起,无关的东西不要将相关的各部分放在一起,无关的东西不要放在一起。放在一起。” ” 模块的模块的大小要适中大小要适中。 模块的模块的接口要

40、简单、清晰、含义明确接口要简单、清晰、含义明确。便于理解,易于实现、易便于理解,易于实现、易于测试和维护。于测试和维护。 一个一个模块的作用范围应在其控制范围之内模块的作用范围应在其控制范围之内。且判定所在的模块,。且判定所在的模块,应与受其影响的模块在层次上尽量靠近。应与受其影响的模块在层次上尽量靠近。 软件结构的软件结构的深度、宽度、扇入、扇出应适当深度、宽度、扇入、扇出应适当。 力求设计力求设计单入口和单出口单入口和单出口的模块。避免的模块。避免“病态连接病态连接”,以防止内,以防止内容耦合。容耦合。 设计功能可预测模块的划分,应设计功能可预测模块的划分,应防止功能过分局限防止功能过分局

41、限。 第四章 软件设计65第四章 软件设计66面向数据流的(面向数据流的(结构化)结构化)设计方法。设计方法。结构化设计包括一组概念、标准和指导思想。其目结构化设计包括一组概念、标准和指导思想。其目的是降低软件开发费用及维护费用,有利于修正软的是降低软件开发费用及维护费用,有利于修正软件及实现新的软件需求。其最大好处是极大地增加件及实现新的软件需求。其最大好处是极大地增加了软件复用能力。了软件复用能力。结构化设计的目标:将软件设计为功能单一的模块,结构化设计的目标:将软件设计为功能单一的模块,建立系统的模块结构图。它的主要表示方法是一种建立系统的模块结构图。它的主要表示方法是一种分层次的结构图

42、。分层次的结构图。第四章 软件设计67认为一个程序、一组程序或一个系统,无非认为一个程序、一组程序或一个系统,无非是由一组功能操作来构成的,并进而吸取了是由一组功能操作来构成的,并进而吸取了结构化分析的结构化分析的“黑盒子黑盒子”的概念。的概念。软件设计者首先必须无视程序、模块或过程软件设计者首先必须无视程序、模块或过程的内部情况,而只对它们之间的关系进行分的内部情况,而只对它们之间的关系进行分析。将系统看作是,逻辑功能的抽象集合析。将系统看作是,逻辑功能的抽象集合功能模块的集合。这样软件设计者能够有功能模块的集合。这样软件设计者能够有最大的自由度设计系统结构。最大的自由度设计系统结构。第四章

43、 软件设计68减少设计复杂性。将大化小,使复杂问题简单化。减少设计复杂性。将大化小,使复杂问题简单化。结构独立。将程序划分成多个相对独立的模块。结构独立。将程序划分成多个相对独立的模块。模块模块功能单一化功能单一化,可使软件设计获得最大的益处。,可使软件设计获得最大的益处。便于软件的修改。便于软件的修改。易于开发和维护。易于开发和维护。加强了代码的可重用性加强了代码的可重用性。第四章 软件设计69 结构化设计方法通过一种图形工具结构化设计方法通过一种图形工具结构图,进结构图,进行软件结构设计。行软件结构设计。 结构图是精确表达程序结构的图形表示方法。它作结构图是精确表达程序结构的图形表示方法。

44、它作为软件文档的一部分,清楚地反映出程序中模块之为软件文档的一部分,清楚地反映出程序中模块之间的层次调用关系和联系。它不仅严格地定义了各间的层次调用关系和联系。它不仅严格地定义了各个模块的名字、功能和接口,而且还集中地反映了个模块的名字、功能和接口,而且还集中地反映了设计思想。设计思想。第四章 软件设计70模块:方框表示,并用名字标识该模块。模块:方框表示,并用名字标识该模块。模块的控制关系:用单向箭头或直线连接模模块的控制关系:用单向箭头或直线连接模块间的控制关系。块间的控制关系。模块间的信息传递:用带注释的短箭头表示模块间的信息传递:用带注释的短箭头表示模块间传递的信息。通常箭头尾部带空心

45、圆,模块间传递的信息。通常箭头尾部带空心圆,表示传递的是数据,箭头尾部带实心圆,表表示传递的是数据,箭头尾部带实心圆,表示传递的是控制信息。示传递的是控制信息。两个附加符号:弧形线表示循环调用,菱形两个附加符号:弧形线表示循环调用,菱形表示选择调用。表示选择调用。第四章 软件设计71深度深度表示控制的层数。表示控制的层数。宽度宽度表示控制的总分布。表示控制的总分布。扇出扇出某一模块直接控制的模块数目的度量。某一模块直接控制的模块数目的度量。扇入扇入指出有多少个模块直接控制一个给定的模块。指出有多少个模块直接控制一个给定的模块。 如果一模块控制另一个模块便称前者如果一模块控制另一个模块便称前者“

46、统帅统帅”后者;后者;反之,称后者反之,称后者“从属从属”于前者。于前者。 第四章 软件设计72同一名字的模块在结构图中仅出现一次。同一名字的模块在结构图中仅出现一次。调用关系只能从上到下。调用关系只能从上到下。结构图的调用次序是从左到右。有时为了减少连结构图的调用次序是从左到右。有时为了减少连线的交叉,适当地调整同一层模块的左右位置,线的交叉,适当地调整同一层模块的左右位置,以保持结构图的清晰。以保持结构图的清晰。第四章 软件设计73查询成绩查询成绩学生记录学生记录学号查询标志记录地址ABCMT1T3T2模块间的控制关模块间的控制关系及信息传递系及信息传递模块间选择调用模块间选择调用模块间循

47、环调用模块间循环调用第四章 软件设计74 SDSD方法是以数据流图为基础设计系统方法是以数据流图为基础设计系统的模块结构。不同类型的数据流图设计的模块结构。不同类型的数据流图设计的过程以及所导出的初始的软件结构不的过程以及所导出的初始的软件结构不同。不管系统的数据流图如何庞大和复同。不管系统的数据流图如何庞大和复杂,一般均可分为变换型、事务型和变杂,一般均可分为变换型、事务型和变换换/ /事务混合型。事务混合型。第四章 软件设计75精化精化DFDDFD。确定确定DFDDFD类型,逻辑输入、逻辑输出的界限,映射出变换类型,逻辑输入、逻辑输出的界限,映射出变换结构的顶层和第一层;如果为事务型,确定

48、事务中心和结构的顶层和第一层;如果为事务型,确定事务中心和加工路径,映射出事务结构的顶层和第一层。加工路径,映射出事务结构的顶层和第一层。分解上层模块,设计中下层模块结构。分解上层模块,设计中下层模块结构。根据优化准则对软件结构求精。根据优化准则对软件结构求精。描述模块功能、接口及全局数据结构。描述模块功能、接口及全局数据结构。复查,如有错转向复查,如有错转向2 2、修改完善,否则进入详细设计。、修改完善,否则进入详细设计。第四章 软件设计76 变换型的数据流图是一个线性结构,变换型的数据流图是一个线性结构,由输入、变换和输出三部分组成。信息由输入、变换和输出三部分组成。信息沿输入通路进入系统

49、,同时由外部形式沿输入通路进入系统,同时由外部形式变换成内部形式。进入系统的信息通过变换成内部形式。进入系统的信息通过变换中心,经加工处理以后再沿输出通变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。路变换成外部形式离开软件系统。 第四章 软件设计77物理输入物理输入物理输出物理输出输入流输入流变换中心变换中心输出流输出流逻辑输出逻辑输出逻辑输入逻辑输入第四章 软件设计78第四章 软件设计79从物理从物理I/OI/O端开始,沿(逆)数据流方向向系端开始,沿(逆)数据流方向向系统中心寻找,直到有这样的数据流,它不能统中心寻找,直到有这样的数据流,它不能再被看作是系统的再被看作是系

50、统的I/OI/O时,则它的前一数据流时,则它的前一数据流就是系统的逻辑就是系统的逻辑I/OI/O。介于逻辑输入和逻辑输。介于逻辑输入和逻辑输出间的加工就是中心。出间的加工就是中心。通常几股通常几股数据流的汇合处数据流的汇合处就是系统的加工中心。就是系统的加工中心。也可用以下方法确定加工中心:也可用以下方法确定加工中心:第四章 软件设计80A物理输入物理输入BCD物理输出物理输出G变换中心变换中心逻辑输出逻辑输出逻辑输入逻辑输入f1f2f3EFHf4f5f6f7f8f9f10f11第四章 软件设计81顶层顶层就是主模块的位置,其功能是完成对就是主模块的位置,其功能是完成对所有模块的控制,其名称就

51、是系统名称;所有模块的控制,其名称就是系统名称;第一层一般至少有输入、变换、输出三种第一层一般至少有输入、变换、输出三种功能模块。功能模块。第四章 软件设计82输入模块下属模块的设计:输入模块下属模块的设计:为每个输入模块设计两为每个输入模块设计两个下属模块,一个接受数据,一个将数据转换成调个下属模块,一个接受数据,一个将数据转换成调用模块所需的信息。用类似的方法一直分解下去,用模块所需的信息。用类似的方法一直分解下去,直至物理输入端。直至物理输入端。 输出模块下属模块的设计:输出模块下属模块的设计:为每个输出模块设计两为每个输出模块设计两个下属模块,一个将数据转换成下属模块所需的信个下属模块

52、,一个将数据转换成下属模块所需的信息,一个发送数据。用类似的方法一直分解下去,息,一个发送数据。用类似的方法一直分解下去,直至物理输出端。直至物理输出端。变换模块下属模块的设计:变换模块下属模块的设计:根据变换中心的组成情根据变换中心的组成情况,按照模块独立性原则,为每个基本加工建立一况,按照模块独立性原则,为每个基本加工建立一个功能模块。个功能模块。第四章 软件设计83根据设计优化准则对结构细化和改进,根据设计优化准则对结构细化和改进,对模块进行合并和调整,为每个物理输对模块进行合并和调整,为每个物理输入和物理输出设计专门模块,以体现系入和物理输出设计专门模块,以体现系统的外部接口。统的外部

53、接口。第四章 软件设计84第四章 软件设计85步骤步骤1 1:复审基本系统模型(:复审基本系统模型(0 0层数据流图和支持信息)。评估系统规格说层数据流图和支持信息)。评估系统规格说明和软件需求规格说明。明和软件需求规格说明。步骤步骤2 2:复审和细化软件的数据流图。重画数据流图时,:复审和细化软件的数据流图。重画数据流图时, 可以从物理输入可以从物理输入到物理输出,或者相反到物理输出,或者相反. . 还可以从顶层加工框开始,逐层向下。还可以从顶层加工框开始,逐层向下。步骤步骤3 3:确定数据流图中含有变换流特征还是含有事务流特征。通常,系:确定数据流图中含有变换流特征还是含有事务流特征。通常

54、,系统的信息流总能表示为变换型,但其中也可能遇到明显的事务流统的信息流总能表示为变换型,但其中也可能遇到明显的事务流特征,这时可采用变换型为主,在局部范围采用事务型的设计方特征,这时可采用变换型为主,在局部范围采用事务型的设计方法。法。步骤步骤4 4:区分输入流、输出流和中心变换部分,即标明流的边界。不同的:区分输入流、输出流和中心变换部分,即标明流的边界。不同的设计人员可能选择不同的流边界,这将导致不同的系统结构图。设计人员可能选择不同的流边界,这将导致不同的系统结构图。第四章 软件设计86步骤步骤5 5:进行一级:进行一级“因子化因子化”分解,设计顶层和第一层模块。分解,设计顶层和第一层模

55、块。步骤步骤6 6:进行二级:进行二级“因子化因子化”分解,设计中、下层模块。这一步工作是分解,设计中、下层模块。这一步工作是自顶向下,逐层细化,为每一个输入模块、输出模块、变换模自顶向下,逐层细化,为每一个输入模块、输出模块、变换模块设计它们的从属模块。块设计它们的从属模块。步骤步骤7 7:利用一些启发式原则来改进系统的初始结构图,直到得到符合:利用一些启发式原则来改进系统的初始结构图,直到得到符合要求的结构图为止。要求的结构图为止。第四章 软件设计87 模块功能的完善化。一个完整的功能模块,不仅应能完成指定的模块功能的完善化。一个完整的功能模块,不仅应能完成指定的功能,而且还应当能够告诉使

56、用者完成任务的状态,以及不能完功能,而且还应当能够告诉使用者完成任务的状态,以及不能完成的原因。成的原因。 消除重复功能,改善软件结构。在系统的初始结构图得出之后,消除重复功能,改善软件结构。在系统的初始结构图得出之后,应当审查分析这个结构图。如果发现几个模块的功能有相似之处,应当审查分析这个结构图。如果发现几个模块的功能有相似之处,可以加以改进。可以加以改进。 模块的作用范围应在控制范围之内。模块的控制范围包括它本身模块的作用范围应在控制范围之内。模块的控制范围包括它本身及其所有的从属模块。模块的作用范围是指模块内一个判定的作及其所有的从属模块。模块的作用范围是指模块内一个判定的作用范围,凡

57、是受这个判定影响的所有模块都属于这个判定的作用用范围,凡是受这个判定影响的所有模块都属于这个判定的作用范围。如果一个判定的作用范围包含在这个判定所在模块的控制范围。如果一个判定的作用范围包含在这个判定所在模块的控制范围之内,则这种结构是简单的,否则,它的结构是不简单的。范围之内,则这种结构是简单的,否则,它的结构是不简单的。第四章 软件设计88 尽可能减少高扇出结构,经验证明,一个设计得很好的软件模块尽可能减少高扇出结构,经验证明,一个设计得很好的软件模块结构,通常上层扇出比较高,中层扇出较少,底层扇入到有高扇结构,通常上层扇出比较高,中层扇出较少,底层扇入到有高扇入的公用模块中。入的公用模块

58、中。 避免或减少使用病态联接。应限制使用如下三种病态联接:直接避免或减少使用病态联接。应限制使用如下三种病态联接:直接病态联接(内容耦合)、公共数据域病态联接(公共耦合)和通病态联接(内容耦合)、公共数据域病态联接(公共耦合)和通过通信模块联接。过通信模块联接。 模块的大小要适中。限制模块的大小是减少复杂性的手段之一,模块的大小要适中。限制模块的大小是减少复杂性的手段之一,因而要求把模块的大小限制在一定的范围之内。通常规定其语句因而要求把模块的大小限制在一定的范围之内。通常规定其语句行数在行数在5050100100左右,最多不超过左右,最多不超过500500行。行。 设计功能可预测的模块,但要

59、避免过分受限制的模块。设计功能可预测的模块,但要避免过分受限制的模块。 软件包应满足设计约束和可移植性。软件包应满足设计约束和可移植性。第四章 软件设计89 事务型的数据流图中,数据沿输入通路到达一个事务型的数据流图中,数据沿输入通路到达一个处理,这个处理将输入分为许多相互平行的加工路径,处理,这个处理将输入分为许多相互平行的加工路径,并根据输入数据的类型,选择某一加工路径。其中并根据输入数据的类型,选择某一加工路径。其中C C为为事务处理中心,其任务是输入数据事务处理中心,其任务是输入数据( (输入数据又称为事输入数据又称为事务务) )、分析每个事务以确定它的类型、根据事务类型选、分析每个事

60、务以确定它的类型、根据事务类型选取一条活动通路。取一条活动通路。 第四章 软件设计90C加工路径加工路径输入流输入流事务处理中心事务处理中心第四章 软件设计91 确定确定DFDDFD中的事物中心和加工路径中的事物中心和加工路径 设计结构顶层和一层设计结构顶层和一层事务结构事务结构 设计中、下层模块并优化设计中、下层模块并优化第四章 软件设计92通常当通常当DFDDFD中的某个加工具有明显中的某个加工具有明显的将一个输入数据流分解成多个发的将一个输入数据流分解成多个发散的输出数据流时,该加工就是系散的输出数据流时,该加工就是系统的事务中心,从事务中心辐射出统的事务中心,从事务中心辐射出去的数据流

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论